-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbake
executable file
·257 lines (215 loc) · 13.1 KB
/
bake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
#!/usr/bin/env bash
# On Mac OS, readlink -f doesn't work, so use._real_path get the real path of the file
#_real_path() { [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}" ; }
#_ROOT_BAKE_PATH="$(_real_path "${BASH_SOURCE[0]}")"
#_ROOT_DIR="$(dirname "$_ROOT_BAKE_PATH")"
_ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
_ROOT_BAKE_PATH="${_ROOT_DIR}/bake"
# 进入脚本所在目录,这样上下文就是本项目了
cd "$_ROOT_DIR" || exit 200
# include common script
source "packages/you_bake/bake.bash"
declare -A _pkgs=(
["root"]="$_ROOT_DIR"
["bake"]="$_ROOT_DIR/packages/you_bake"
["you_dart"]="$_ROOT_DIR/packages/you_dart"
["you_flutter"]="$_ROOT_DIR/packages/you_flutter"
["you_cli"]="$_ROOT_DIR/packages/you_cli"
["learn_dart"]="$_ROOT_DIR/notes/learn_dart"
["flutter_web"]="$_ROOT_DIR/notes/flutter_web"
["qwik"]="$_ROOT_DIR/notes/qwik"
["shell"]="$_ROOT_DIR/notes/shell"
)
####################################################
# app entry script & _root cmd
####################################################
bake.cmd --cmd ls --desc "<mono> mono project manage: ./bake pkgs <ls|run>"
bake.cmd --cmd run --desc "<mono> run cmd on all pkg,Usage: ./bake pkgs run [any cmd]"
bake.cmd --cmd root --desc "$( cat <<-EOF
___ _ _ _ _ _ _
| __|| | _ _ | |_ | |_ ___ _ _ | \| | ___ | |_ ___
| _| | || || || _|| _|/ -_)| '_| | . |/ _ \| _|/ -_)
|_| |_| \_._| \__| \__|\___||_| |_|\_|\___/ \__|\___|
https://github.com/chen56/you/flutter_web
PWD: $PWD
Usage:
./bake [cmd] [opts] [args...]
Examples:
./bake # same as './bake -h'
./bake -h # show all commands help
./bake -h --debug # show all commands help , include internal function
./bake flutter dev # == cd notes/flutter_web && flutter run --device-id macos
./bake test # test all projects
./bake build # defalut build == flutter build web --web-renderer html
./bake preview # defalut preview == start server at web build
./bake test # test all projects
./bake pkgs ls # show all mono project
./bake pkgs run pwd # run "pwd" on all mono project dir
./bake pkgs run flutter pub get # run "flutter pub get" on all mono project dir
EOF
)"
##########################################
# 公共函数区,初始化语句和变量只放脚本头尾
##########################################
__is_cmd() {
command -v "$1" >/dev/null 2>&1
}
# 在所有项目上运行某命令
# Usage: __run_all <sub cmd>
# Example: __run_all clean
# run => note.clean
# mate.clean
# flutter_web.clean
# ...
__run_all() {
local subcmd="$1"
if [[ "$subcmd" == "" ]] ; then
echo "缺subcmd参数 Usage:__run_all <sub cmd>";
return 100;
fi
for pkg in "${!_pkgs[@]}"; do
if __is_cmd "$pkg.$subcmd" ; then "$pkg.$subcmd" ; fi
done
}
# 先cd到项目目录,再print上下文信息,最后执行
# Usage: __run <pkg> <some cmd>
# Example: __run flutter_web pwd
__run() {
local pkg=${1:?required project arg,Usage: __run <pkg>}
shift
local cmd="${1}"
# [[ "$cmd" != "" ]] # 如果有cmd,去掉第1个cmd,剩余的是它的参数,如果没有,就类似于在控制台上打了个会车一样任他去吧
# 进入工作目录
local workdir="${_pkgs[$pkg]}"
pushd "$workdir" > /dev/null || { echo "pushd failure"; exit 200; }
local caller_line;
caller_line=$(caller 0 | awk '{print $1}')
if ! __is_cmd "$cmd" ; then
echo "$_ROOT_BAKE_PATH:$caller_line ⚪️ ▶︎${FUNCNAME[1]}() ▶︎【$PWD$ $*】"
else
echo "$_ROOT_BAKE_PATH:$caller_line 🔵 ▶︎${FUNCNAME[1]}() ▶︎【$PWD$ $*】"
"$@"
fi
# 退出工作目录,不弄脏环境,不需要打印popd执行结果
popd > /dev/null || { echo "popd failure"; exit 200; }
}
##########################################
# app cmd script
# 应用的命令脚本
##########################################
pkgs() { for pkg in ${!_pkgs[*]} ; do echo "$pkg:${_pkgs[$pkg]}"; done; }
run() { for pkg in ${!_pkgs[*]} ; do __run "$pkg" "$@" ; done }
install() { __run_all install; }
get() { __run_all install; }
build() { __run_all build; }
upgrade() { __run_all upgrade; }
clean() { __run_all clean; }
test() { __run_all test; }
gen() { __run_all gen.all; }
publish() { __run_all publish; }
dart_fix() { run dart fix $@; }
# 根项目,主要是bin/辅助工具等
root.run() { __run root "$@"; }
bake.run() { __run bake "$@"; }
bake.test() { __run bake ./test.bash test; }
_you_dart_internal.run() { __run _you_dart_internal "$@"; }
_you_dart_internal.install() { __run _you_dart_internal flutter pub get; }
_you_dart_internal.clean() { __run _you_dart_internal flutter clean; rm -rf build; }
_you_dart_internal.upgrade() { __run _you_dart_internal flutter pub outdated ;
__run _you_dart_internal flutter pub upgrade --major-versions ; }
_you_dart_internal.test() { __run _you_dart_internal flutter test; }
_you_dart_internal.publish() { __run _you_dart_internal flutter pub publish; }
you_dart.run() { __run you_dart "$@"; }
you_dart.install() { __run you_dart flutter pub get; }
you_dart.clean() { __run you_dart flutter clean; rm -rf build; }
you_dart.upgrade() { __run you_dart flutter pub outdated ;
__run you_dart flutter pub upgrade --major-versions; }
you_dart.test() { __run you_dart flutter test; }
you_dart.publish() { __run you_dart flutter pub publish; }
you_flutter.run() { __run you_flutter "$@"; }
you_flutter.install() { __run you_flutter flutter pub get; }
you_flutter.clean() { __run you_flutter flutter clean; rm -rf build; }
you_flutter.upgrade() { __run you_flutter flutter pub outdated ;
__run you_flutter flutter pub upgrade --major-versions; }
you_flutter.test() { __run you_flutter flutter test; }
you_flutter.publish() { __run you_flutter flutter pub publish; }
you_cli.run() { __run you_cli "$@"; }
you_cli.test() { __run you_cli dart test; }
you_cli.install() { __run you_cli flutter pub get; }
you_cli.clean() { __run you_cli flutter clean; rm -rf build; }
you_cli.upgrade() { __run you_cli flutter pub outdated ;
__run you_cli flutter pub upgrade --major-versions; }
you_cli.publish() { __run you_cli flutter pub publish; }
learn_dart.run() { __run learn_dart "$@"; }
learn_dart.install() { __run learn_dart dart pub get ; }
learn_dart.clean() { __run learn_dart rm -rf
__run learn_dart rm -rf .dart_tool; }
learn_dart.upgrade() { __run learn_dart flutter pub outdated ;
__run learn_dart dart pub upgrade --major-versions; }
learn_dart.study() { __run learn_dart dart test; }
# skwasm无法运行
# http-server 不支持base href设置,所以单独build,并设置base-href为"/",而github-pages的base-href必须是repository名
# npx http-server ./flutter_web/build/web --port 8000
# flutter pub global activate dhttpd
# run p.flutter_web dhttpd --path ./build/web --port 8080 '--headers=Cross-Origin-Embedder-Policy=credentialless;Cross-Origin-Opener-Policy=same-origin'
# install:
# - flutter pub global activate dhttpd
# - deno
flutter_web.run() { __run flutter_web "$@" ; }
flutter_web.install() { __run flutter_web flutter pub get ; }
flutter_web.clean() { __run flutter_web flutter clean;
rm -rf build; }
flutter_web.upgrade() { __run flutter_web flutter pub outdated ;
__run flutter_web flutter pub upgrade --major-versions; }
flutter_web.gen.all() { __run root dart run packages/you_cli/bin/cli.dart gen all --dir notes/flutter_web/ ; }
flutter_web.gen.assets() { __run root dart run packages/you_cli/bin/cli.dart gen assets --dir notes/flutter_web/ ; }
flutter_web.gen.routes() { __run root dart run packages/you_cli/bin/cli.dart gen routes --dir notes/flutter_web/ ; }
flutter_web.dev() { flutter_web.dev_html ; }
flutter_web.build() { flutter_web.build_html ; }
flutter_web.preview() { flutter_web.build_html;
flutter_web.server_deno; }
flutter_web.dev_html() { __run flutter_web flutter run --web-port 8888 --web-renderer html --device-id chrome "$@"; }
flutter_web.dev_macos() { __run flutter_web flutter run --device-id macos "$@"; }
flutter_web.build_html() { __run flutter_web flutter build web --release --tree-shake-icons --web-renderer html --source-maps --output build/web/you/flutter_web --base-href "/you/flutter_web/" --no-web-resources-cdn "$@" ; }
flutter_web.build_web_skwasm() { __run flutter_web flutter build web --release --tree-shake-icons --web-renderer skwasm --source-maps --output build/web/you/flutter_web --base-href "/you/flutter_web/" --no-web-resources-cdn "$@" ; }
flutter_web.build_web_canvaskit() { __run flutter_web flutter build web --release --tree-shake-icons --web-renderer canvaskit --source-maps --output build/web/you/flutter_web --base-href "/you/flutter_web/" --no-web-resources-cdn "$@" ; }
flutter_web.build_wasm() { __run flutter_web flutter build web --release --tree-shake-icons --wasm --source-maps --output build/web/you/flutter_web --base-href "/you/flutter_web/" --no-web-resources-cdn "$@" ; }
flutter_web.build_macos() { __run flutter_web flutter build macos --release --tree-shake-icons "$@"; }
flutter_web.server_dhttpd() { echo "http://localhost:8080/you/flutter_web";
__run flutter_web dhttpd --path ./build/web --port 8080 '--headers=Cross-Origin-Embedder-Policy=credentialless;Cross-Origin-Opener-Policy=same-origin'; }
flutter_web.server_deno() { echo "http://localhost:8080/you/flutter_web";
__run flutter_web deno run --allow-env --allow-read --allow-sys --allow-net npm:http-server ./build/web --port 8080 -g --brotli; }
# github 发布时使用,参考[.github/workflows/*.yaml]
docker.build() { __run root docker build --progress plain --build-arg test=on --tag chen56/you:latest . ;
__run root mkdir -p build;
__run root sh -c "docker run --rm --workdir /usr/share/nginx/html/ chen56/you tar cf - ./ | ( cd build; tar xf -)"; }
docker.preview() { __run root echo "note preview http://localhost:8888/you/flutter_web";
__run root docker run --rm --name you -p 8888:80 -u root:root chen56/you; }
docker.debug() { __run root docker run -v "$PWD:/home/flutter/you" --workdir /home/flutter/you --rm -it fischerscode/flutter:3.19.0 bash ; }
docker.exec() { __run root docker exec -it --workdir /usr/share/nginx/html/you/ you bash ; }
docker.push() { __run root docker image push chen56/you:latest ; }
info() {
echo "PWD : $PWD"
echo "_ROOT_DIR : $_ROOT_DIR"
echo
echo "## pkgs"
ls
echo
}
temp(){
# 指定需要遍历的目录,例如当前目录可以使用 "."
directory="notes/flutter_web/lib"
# 遍历目录中的所有note.dart文件
for file in $(find 'notes/flutter_web/lib' -type f -name 'note.json') ; do
# echo "xxx $file"
# # 检查文件是否存在
if [ -f "$file" ]; then
# 构建新的文件名,即将note.dart替换为page.dart
new_file="${file//note.json/page.json}"
# 执行重命名操作
git mv "$file" "$new_file"
echo "mv $file to $new_file"
fi
done
}
bake.go "$@"