@rs-x/cli 2.0.0-next.2 → 2.0.0-next.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/bin/rsx.cjs +1373 -334
- package/package.json +5 -1
- package/{rs-x-vscode-extension-2.0.0-next.2.vsix → rs-x-vscode-extension-2.0.0-next.20.vsix} +0 -0
- package/scripts/prepare-local-rsx-packages.sh +20 -0
- package/scripts/verify-rsx-cli-mutations.sh +258 -0
- package/scripts/verify-rsx-projects.sh +134 -0
- package/scripts/verify-rsx-setup.sh +186 -0
- package/templates/angular-demo/README.md +115 -0
- package/templates/angular-demo/src/app/app.component.css +97 -0
- package/templates/angular-demo/src/app/app.component.html +58 -0
- package/templates/angular-demo/src/app/app.component.ts +52 -0
- package/templates/angular-demo/src/app/virtual-table/row-data.ts +35 -0
- package/templates/angular-demo/src/app/virtual-table/row-model.ts +45 -0
- package/templates/angular-demo/src/app/virtual-table/virtual-table-data.service.ts +136 -0
- package/templates/angular-demo/src/app/virtual-table/virtual-table-model.ts +224 -0
- package/templates/angular-demo/src/app/virtual-table/virtual-table.component.css +174 -0
- package/templates/angular-demo/src/app/virtual-table/virtual-table.component.html +50 -0
- package/templates/angular-demo/src/app/virtual-table/virtual-table.component.ts +83 -0
- package/templates/angular-demo/src/index.html +11 -0
- package/templates/angular-demo/src/main.ts +16 -0
- package/templates/angular-demo/src/styles.css +261 -0
- package/templates/next-demo/README.md +26 -0
- package/templates/next-demo/app/globals.css +431 -0
- package/templates/next-demo/app/layout.tsx +22 -0
- package/templates/next-demo/app/page.tsx +5 -0
- package/templates/next-demo/components/demo-app.tsx +114 -0
- package/templates/next-demo/components/virtual-table-row.tsx +40 -0
- package/templates/next-demo/components/virtual-table-shell.tsx +86 -0
- package/templates/next-demo/hooks/use-virtual-table-controller.ts +26 -0
- package/templates/next-demo/hooks/use-virtual-table-viewport.ts +41 -0
- package/templates/next-demo/lib/row-data.ts +35 -0
- package/templates/next-demo/lib/row-model.ts +45 -0
- package/templates/next-demo/lib/rsx-bootstrap.ts +46 -0
- package/templates/next-demo/lib/virtual-table-controller.ts +259 -0
- package/templates/next-demo/lib/virtual-table-data.service.ts +132 -0
- package/templates/react-demo/README.md +113 -0
- package/templates/react-demo/index.html +12 -0
- package/templates/react-demo/src/app/app.tsx +87 -0
- package/templates/react-demo/src/app/hooks/use-virtual-table-controller.ts +24 -0
- package/templates/react-demo/src/app/hooks/use-virtual-table-viewport.ts +39 -0
- package/templates/react-demo/src/app/virtual-table/row-data.ts +35 -0
- package/templates/react-demo/src/app/virtual-table/row-model.ts +45 -0
- package/templates/react-demo/src/app/virtual-table/virtual-table-controller.ts +259 -0
- package/templates/react-demo/src/app/virtual-table/virtual-table-data.service.ts +132 -0
- package/templates/react-demo/src/app/virtual-table/virtual-table-row.tsx +38 -0
- package/templates/react-demo/src/app/virtual-table/virtual-table-shell.tsx +84 -0
- package/templates/react-demo/src/main.tsx +24 -0
- package/templates/react-demo/src/rsx-bootstrap.ts +48 -0
- package/templates/react-demo/src/styles.css +422 -0
- package/templates/react-demo/tsconfig.json +17 -0
- package/templates/react-demo/vite.config.ts +6 -0
- package/templates/vue-demo/README.md +27 -0
- package/templates/vue-demo/src/App.vue +89 -0
- package/templates/vue-demo/src/components/VirtualTableRow.vue +33 -0
- package/templates/vue-demo/src/components/VirtualTableShell.vue +71 -0
- package/templates/vue-demo/src/composables/use-virtual-table-controller.ts +33 -0
- package/templates/vue-demo/src/composables/use-virtual-table-viewport.ts +40 -0
- package/templates/vue-demo/src/env.d.ts +10 -0
- package/templates/vue-demo/src/lib/row-data.ts +35 -0
- package/templates/vue-demo/src/lib/row-model.ts +45 -0
- package/templates/vue-demo/src/lib/rsx-bootstrap.ts +46 -0
- package/templates/vue-demo/src/lib/virtual-table-controller.ts +259 -0
- package/templates/vue-demo/src/lib/virtual-table-data.service.ts +132 -0
- package/templates/vue-demo/src/main.ts +13 -0
- package/templates/vue-demo/src/style.css +440 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rs-x/cli",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.20",
|
|
4
4
|
"description": "CLI for installing RS-X compiler tooling and VS Code integration",
|
|
5
5
|
"bin": {
|
|
6
6
|
"rsx": "./bin/rsx.cjs"
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"files": [
|
|
9
9
|
"bin",
|
|
10
10
|
"scripts",
|
|
11
|
+
"templates",
|
|
11
12
|
"*.vsix",
|
|
12
13
|
"README.md"
|
|
13
14
|
],
|
|
@@ -35,6 +36,9 @@
|
|
|
35
36
|
],
|
|
36
37
|
"scripts": {
|
|
37
38
|
"build": "node -e \"console.log('No build step required for @rs-x/cli')\"",
|
|
39
|
+
"verify:cli-mutations": "zsh ./scripts/verify-rsx-cli-mutations.sh",
|
|
40
|
+
"verify:project-smoke": "zsh ./scripts/verify-rsx-projects.sh",
|
|
41
|
+
"verify:setup-smoke": "zsh ./scripts/verify-rsx-setup.sh",
|
|
38
42
|
"postinstall": "node ./scripts/postinstall.cjs"
|
|
39
43
|
}
|
|
40
44
|
}
|
package/{rs-x-vscode-extension-2.0.0-next.2.vsix → rs-x-vscode-extension-2.0.0-next.20.vsix}
RENAMED
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/bin/zsh
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
script_dir="${0:A:h}"
|
|
6
|
+
package_root="${script_dir:h}"
|
|
7
|
+
repo_root="${package_root:h}"
|
|
8
|
+
|
|
9
|
+
cd "$repo_root"
|
|
10
|
+
|
|
11
|
+
echo "Preparing local RS-X packages from $repo_root"
|
|
12
|
+
|
|
13
|
+
pnpm --filter @rs-x/core run build
|
|
14
|
+
pnpm --filter @rs-x/state-manager run build
|
|
15
|
+
pnpm --filter @rs-x/expression-parser run build
|
|
16
|
+
pnpm --filter @rs-x/compiler run build
|
|
17
|
+
pnpm --filter @rs-x/typescript-plugin run build
|
|
18
|
+
pnpm --filter @rs-x/react run build
|
|
19
|
+
pnpm --filter @rs-x/vue run build
|
|
20
|
+
pnpm run build:angular
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/bin/zsh
|
|
2
|
+
|
|
3
|
+
set -u
|
|
4
|
+
|
|
5
|
+
unset INIT_CWD
|
|
6
|
+
unset npm_package_json
|
|
7
|
+
unset npm_package_name
|
|
8
|
+
unset npm_package_version
|
|
9
|
+
unset npm_lifecycle_event
|
|
10
|
+
unset npm_lifecycle_script
|
|
11
|
+
unset npm_config_local_prefix
|
|
12
|
+
unset npm_prefix
|
|
13
|
+
unset npm_execpath
|
|
14
|
+
unset npm_command
|
|
15
|
+
unset npm_config_node_linker
|
|
16
|
+
unset NPM_CONFIG_NODE_LINKER
|
|
17
|
+
export CI=true
|
|
18
|
+
|
|
19
|
+
script_dir="${0:A:h}"
|
|
20
|
+
package_root="${script_dir:h}"
|
|
21
|
+
rsx_cmd=(node "$package_root/bin/rsx.cjs")
|
|
22
|
+
default_base_dir="$package_root/.tests/rsx-cli-mutation-smoke"
|
|
23
|
+
|
|
24
|
+
base_dir="${RSX_MUTATION_VERIFY_DIR:-$default_base_dir}"
|
|
25
|
+
pm="${RSX_PM:-npm}"
|
|
26
|
+
tag_flag="${RSX_TAG_FLAG:---next}"
|
|
27
|
+
skip_vscode_flag="${RSX_SKIP_VSCODE_FLAG:---skip-vscode}"
|
|
28
|
+
project_smoke_dir="${RSX_PROJECT_VERIFY_DIR:-$base_dir/project-smoke}"
|
|
29
|
+
setup_smoke_dir="${RSX_SETUP_VERIFY_DIR:-$base_dir/setup-smoke}"
|
|
30
|
+
|
|
31
|
+
typeset -a summary_lines
|
|
32
|
+
overall_status=0
|
|
33
|
+
|
|
34
|
+
run_in_log() {
|
|
35
|
+
local log_file="$1"
|
|
36
|
+
shift
|
|
37
|
+
|
|
38
|
+
"$@" < /dev/null >"$log_file" 2>&1
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
run_in_dir_log() {
|
|
42
|
+
local project_dir="$1"
|
|
43
|
+
local log_file="$2"
|
|
44
|
+
shift 2
|
|
45
|
+
|
|
46
|
+
(
|
|
47
|
+
cd "$project_dir" || exit 1
|
|
48
|
+
"$@" < /dev/null
|
|
49
|
+
) >"$log_file" 2>&1
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
run_in_dir_with_input_log() {
|
|
53
|
+
local project_dir="$1"
|
|
54
|
+
local log_file="$2"
|
|
55
|
+
local input_text="$3"
|
|
56
|
+
shift 3
|
|
57
|
+
|
|
58
|
+
(
|
|
59
|
+
cd "$project_dir" || exit 1
|
|
60
|
+
printf '%s' "$input_text" | "$@"
|
|
61
|
+
) >"$log_file" 2>&1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
print_log_tail() {
|
|
65
|
+
local log_file="$1"
|
|
66
|
+
|
|
67
|
+
printf ' log: %s\n' "$log_file"
|
|
68
|
+
printf ' last lines:\n'
|
|
69
|
+
tail -n 20 "$log_file" | sed 's/^/ /'
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
run_step() {
|
|
73
|
+
local label="$1"
|
|
74
|
+
local step_name="$2"
|
|
75
|
+
local log_file="$3"
|
|
76
|
+
shift 3
|
|
77
|
+
|
|
78
|
+
printf '%s: %s...\n' "$label" "$step_name"
|
|
79
|
+
if ! run_in_log "$log_file" "$@"; then
|
|
80
|
+
printf '%s: %s failed.\n' "$label" "$step_name"
|
|
81
|
+
print_log_tail "$log_file"
|
|
82
|
+
return 1
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
return 0
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
run_step_in_dir() {
|
|
89
|
+
local label="$1"
|
|
90
|
+
local step_name="$2"
|
|
91
|
+
local project_dir="$3"
|
|
92
|
+
local log_file="$4"
|
|
93
|
+
shift 4
|
|
94
|
+
|
|
95
|
+
printf '%s: %s...\n' "$label" "$step_name"
|
|
96
|
+
if ! run_in_dir_log "$project_dir" "$log_file" "$@"; then
|
|
97
|
+
printf '%s: %s failed.\n' "$label" "$step_name"
|
|
98
|
+
print_log_tail "$log_file"
|
|
99
|
+
return 1
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
return 0
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
run_step_in_dir_with_input() {
|
|
106
|
+
local label="$1"
|
|
107
|
+
local step_name="$2"
|
|
108
|
+
local project_dir="$3"
|
|
109
|
+
local log_file="$4"
|
|
110
|
+
local input_text="$5"
|
|
111
|
+
shift 5
|
|
112
|
+
|
|
113
|
+
printf '%s: %s...\n' "$label" "$step_name"
|
|
114
|
+
if ! run_in_dir_with_input_log "$project_dir" "$log_file" "$input_text" "$@"; then
|
|
115
|
+
printf '%s: %s failed.\n' "$label" "$step_name"
|
|
116
|
+
print_log_tail "$log_file"
|
|
117
|
+
return 1
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
return 0
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
create_generic_project() {
|
|
124
|
+
local project_dir="$1"
|
|
125
|
+
|
|
126
|
+
rm -rf "$project_dir"
|
|
127
|
+
mkdir -p "$project_dir/src"
|
|
128
|
+
|
|
129
|
+
cat >"$project_dir/package.json" <<'EOF'
|
|
130
|
+
{
|
|
131
|
+
"name": "rsx-generic-init-verify",
|
|
132
|
+
"private": true,
|
|
133
|
+
"type": "module",
|
|
134
|
+
"scripts": {
|
|
135
|
+
"build": "node ../dist/main.js"
|
|
136
|
+
},
|
|
137
|
+
"devDependencies": {
|
|
138
|
+
"typescript": "^5.9.3"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
EOF
|
|
142
|
+
|
|
143
|
+
cat >"$project_dir/tsconfig.json" <<'EOF'
|
|
144
|
+
{
|
|
145
|
+
"compilerOptions": {
|
|
146
|
+
"target": "ES2022",
|
|
147
|
+
"module": "ESNext",
|
|
148
|
+
"moduleResolution": "Bundler",
|
|
149
|
+
"strict": true,
|
|
150
|
+
"skipLibCheck": true,
|
|
151
|
+
"outDir": "dist"
|
|
152
|
+
},
|
|
153
|
+
"include": [
|
|
154
|
+
"src/**/*.ts"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
EOF
|
|
158
|
+
|
|
159
|
+
cat >"$project_dir/src/main.ts" <<'EOF'
|
|
160
|
+
export async function main(): Promise<void> {
|
|
161
|
+
console.log('rsx generic init smoke test');
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
main();
|
|
165
|
+
EOF
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
rm -rf "$base_dir"
|
|
169
|
+
mkdir -p "$base_dir"
|
|
170
|
+
|
|
171
|
+
printf 'Using workspace: %s\n' "$base_dir"
|
|
172
|
+
printf 'Using package manager: %s\n' "$pm"
|
|
173
|
+
printf 'Using tag flag: %s\n' "$tag_flag"
|
|
174
|
+
|
|
175
|
+
install_dir="$base_dir/install-compiler-verify"
|
|
176
|
+
generic_dir="$base_dir/init-add-verify"
|
|
177
|
+
|
|
178
|
+
printf '\n== install-compiler ==\n'
|
|
179
|
+
rm -rf "$install_dir"
|
|
180
|
+
mkdir -p "$install_dir"
|
|
181
|
+
cat >"$install_dir/package.json" <<'EOF'
|
|
182
|
+
{
|
|
183
|
+
"name": "rsx-install-compiler-verify",
|
|
184
|
+
"private": true
|
|
185
|
+
}
|
|
186
|
+
EOF
|
|
187
|
+
|
|
188
|
+
if ! run_step_in_dir "install-compiler" "command" "$install_dir" "$base_dir/install-compiler.log" \
|
|
189
|
+
"${rsx_cmd[@]}" install compiler --pm "$pm" "$tag_flag"
|
|
190
|
+
then
|
|
191
|
+
summary_lines+=("install-compiler: failed")
|
|
192
|
+
overall_status=1
|
|
193
|
+
else
|
|
194
|
+
if rg -q '"@rs-x/compiler"|"@rs-x/typescript-plugin"' "$install_dir/package.json"; then
|
|
195
|
+
summary_lines+=("install-compiler: pass")
|
|
196
|
+
else
|
|
197
|
+
printf 'install-compiler: package.json missing expected deps.\n'
|
|
198
|
+
summary_lines+=("install-compiler: verify failed")
|
|
199
|
+
overall_status=1
|
|
200
|
+
fi
|
|
201
|
+
fi
|
|
202
|
+
|
|
203
|
+
printf '\n== init-and-add ==\n'
|
|
204
|
+
create_generic_project "$generic_dir"
|
|
205
|
+
|
|
206
|
+
if ! run_step_in_dir "init-and-add" "npm install" "$generic_dir" "$base_dir/init-install.log" "$pm" install; then
|
|
207
|
+
summary_lines+=("init-and-add: npm install failed")
|
|
208
|
+
overall_status=1
|
|
209
|
+
else
|
|
210
|
+
if ! run_step_in_dir "init-and-add" "rsx init" "$generic_dir" "$base_dir/init.log" \
|
|
211
|
+
"${rsx_cmd[@]}" init --pm "$pm" "$tag_flag" "$skip_vscode_flag" --entry src/main.ts
|
|
212
|
+
then
|
|
213
|
+
summary_lines+=("init-and-add: init failed")
|
|
214
|
+
overall_status=1
|
|
215
|
+
elif ! run_step_in_dir_with_input "init-and-add" "rsx add" "$generic_dir" "$base_dir/add.log" \
|
|
216
|
+
$'sampleExpression\n\nsrc/expressions\nn\n' \
|
|
217
|
+
"${rsx_cmd[@]}" add
|
|
218
|
+
then
|
|
219
|
+
summary_lines+=("init-and-add: add failed")
|
|
220
|
+
overall_status=1
|
|
221
|
+
elif ! run_step_in_dir "init-and-add" "rsx typecheck" "$generic_dir" "$base_dir/typecheck.log" \
|
|
222
|
+
"${rsx_cmd[@]}" typecheck --project tsconfig.json
|
|
223
|
+
then
|
|
224
|
+
summary_lines+=("init-and-add: typecheck failed")
|
|
225
|
+
overall_status=1
|
|
226
|
+
else
|
|
227
|
+
summary_lines+=("init-and-add: pass")
|
|
228
|
+
fi
|
|
229
|
+
fi
|
|
230
|
+
|
|
231
|
+
printf '\n== project ==\n'
|
|
232
|
+
if ! run_step "project" "smoke" "$base_dir/project-smoke.log" \
|
|
233
|
+
env RSX_PROJECT_VERIFY_DIR="$project_smoke_dir" RSX_PM="$pm" RSX_TAG_FLAG="$tag_flag" RSX_SKIP_VSCODE_FLAG="$skip_vscode_flag" \
|
|
234
|
+
zsh "$script_dir/verify-rsx-projects.sh"
|
|
235
|
+
then
|
|
236
|
+
summary_lines+=("project: failed")
|
|
237
|
+
overall_status=1
|
|
238
|
+
else
|
|
239
|
+
summary_lines+=("project: pass")
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
printf '\n== setup ==\n'
|
|
243
|
+
if ! run_step "setup" "smoke" "$base_dir/setup-smoke.log" \
|
|
244
|
+
env RSX_SETUP_VERIFY_DIR="$setup_smoke_dir" RSX_PM="$pm" RSX_TAG_FLAG="$tag_flag" RSX_SKIP_VSCODE_FLAG="$skip_vscode_flag" \
|
|
245
|
+
zsh "$script_dir/verify-rsx-setup.sh"
|
|
246
|
+
then
|
|
247
|
+
summary_lines+=("setup: failed")
|
|
248
|
+
overall_status=1
|
|
249
|
+
else
|
|
250
|
+
summary_lines+=("setup: pass")
|
|
251
|
+
fi
|
|
252
|
+
|
|
253
|
+
printf '\nSummary\n'
|
|
254
|
+
for line in "${summary_lines[@]}"; do
|
|
255
|
+
printf ' %s\n' "$line"
|
|
256
|
+
done
|
|
257
|
+
|
|
258
|
+
exit "$overall_status"
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/bin/zsh
|
|
2
|
+
|
|
3
|
+
set -u
|
|
4
|
+
|
|
5
|
+
unset INIT_CWD
|
|
6
|
+
unset npm_package_json
|
|
7
|
+
unset npm_package_name
|
|
8
|
+
unset npm_package_version
|
|
9
|
+
unset npm_lifecycle_event
|
|
10
|
+
unset npm_lifecycle_script
|
|
11
|
+
unset npm_config_local_prefix
|
|
12
|
+
unset npm_prefix
|
|
13
|
+
unset npm_execpath
|
|
14
|
+
unset npm_command
|
|
15
|
+
unset npm_config_node_linker
|
|
16
|
+
unset NPM_CONFIG_NODE_LINKER
|
|
17
|
+
export CI=true
|
|
18
|
+
|
|
19
|
+
script_dir="${0:A:h}"
|
|
20
|
+
package_root="${script_dir:h}"
|
|
21
|
+
rsx_cmd=(node "$package_root/bin/rsx.cjs")
|
|
22
|
+
default_base_dir="$package_root/.tests/rsx-project-smoke"
|
|
23
|
+
prebuild_script="$script_dir/prepare-local-rsx-packages.sh"
|
|
24
|
+
|
|
25
|
+
base_dir="${RSX_PROJECT_VERIFY_DIR:-$default_base_dir}"
|
|
26
|
+
work_base_dir="${RSX_PROJECT_WORK_DIR:-$base_dir/workspace}"
|
|
27
|
+
pm="${RSX_PM:-npm}"
|
|
28
|
+
tag_flag="${RSX_TAG_FLAG:---next}"
|
|
29
|
+
skip_vscode_flag="${RSX_SKIP_VSCODE_FLAG:---skip-vscode}"
|
|
30
|
+
|
|
31
|
+
frameworks=(
|
|
32
|
+
"angular:angular"
|
|
33
|
+
"react:react"
|
|
34
|
+
"vue:vuejs"
|
|
35
|
+
"next:nextjs"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
typeset -a summary_lines
|
|
39
|
+
overall_status=0
|
|
40
|
+
|
|
41
|
+
run_in_log() {
|
|
42
|
+
local log_file="$1"
|
|
43
|
+
shift
|
|
44
|
+
|
|
45
|
+
"$@" < /dev/null >"$log_file" 2>&1
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
run_in_dir_log() {
|
|
49
|
+
local project_dir="$1"
|
|
50
|
+
local log_file="$2"
|
|
51
|
+
shift 2
|
|
52
|
+
|
|
53
|
+
(
|
|
54
|
+
cd "$project_dir" || exit 1
|
|
55
|
+
"$@" < /dev/null
|
|
56
|
+
) >"$log_file" 2>&1
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
print_log_tail() {
|
|
60
|
+
local log_file="$1"
|
|
61
|
+
|
|
62
|
+
printf ' log: %s\n' "$log_file"
|
|
63
|
+
printf ' last lines:\n'
|
|
64
|
+
tail -n 20 "$log_file" | sed 's/^/ /'
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
rm -rf "$base_dir"
|
|
68
|
+
mkdir -p "$base_dir"
|
|
69
|
+
mkdir -p "$work_base_dir"
|
|
70
|
+
cat > "$work_base_dir/package.json" <<'EOF'
|
|
71
|
+
{
|
|
72
|
+
"name": "rsx-project-smoke-workspace",
|
|
73
|
+
"private": true
|
|
74
|
+
}
|
|
75
|
+
EOF
|
|
76
|
+
: > "$work_base_dir/.npmrc"
|
|
77
|
+
|
|
78
|
+
printf 'Using workspace: %s\n' "$base_dir"
|
|
79
|
+
printf 'Using project dir: %s\n' "$work_base_dir"
|
|
80
|
+
printf 'Using package manager: %s\n' "$pm"
|
|
81
|
+
printf 'Using tag flag: %s\n' "$tag_flag"
|
|
82
|
+
|
|
83
|
+
printf 'Preparing local RS-X packages...\n'
|
|
84
|
+
if ! run_in_log "$base_dir/prepare-packages.log" zsh "$prebuild_script"; then
|
|
85
|
+
printf 'Preparation failed.\n'
|
|
86
|
+
print_log_tail "$base_dir/prepare-packages.log"
|
|
87
|
+
exit 1
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
cd "$work_base_dir" || exit 1
|
|
91
|
+
|
|
92
|
+
for entry in "${frameworks[@]}"; do
|
|
93
|
+
display_name="${entry%%:*}"
|
|
94
|
+
template_name="${entry##*:}"
|
|
95
|
+
project_dir="$work_base_dir/rsx-project-${display_name}-verify"
|
|
96
|
+
scaffold_log="$base_dir/${display_name}-scaffold.log"
|
|
97
|
+
build_log="$base_dir/${display_name}-build.log"
|
|
98
|
+
|
|
99
|
+
rm -rf "$project_dir"
|
|
100
|
+
|
|
101
|
+
printf '\n== %s ==\n' "$display_name"
|
|
102
|
+
printf 'Scaffolding %s...\n' "$project_dir"
|
|
103
|
+
|
|
104
|
+
if ! run_in_log \
|
|
105
|
+
"$scaffold_log" \
|
|
106
|
+
"${rsx_cmd[@]}" project "$template_name" --name "$(basename "$project_dir")" --project-parent-dir "$work_base_dir" --pm "$pm" "$tag_flag" "$skip_vscode_flag"
|
|
107
|
+
then
|
|
108
|
+
printf 'Scaffold failed.\n'
|
|
109
|
+
print_log_tail "$scaffold_log"
|
|
110
|
+
summary_lines+=("$display_name: scaffold failed")
|
|
111
|
+
overall_status=1
|
|
112
|
+
continue
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
printf 'Building %s...\n' "$project_dir"
|
|
116
|
+
if ! run_in_dir_log "$project_dir" "$build_log" "$pm" run build
|
|
117
|
+
then
|
|
118
|
+
printf 'Build failed.\n'
|
|
119
|
+
print_log_tail "$build_log"
|
|
120
|
+
summary_lines+=("$display_name: build failed")
|
|
121
|
+
overall_status=1
|
|
122
|
+
continue
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
printf 'Build passed.\n'
|
|
126
|
+
summary_lines+=("$display_name: pass")
|
|
127
|
+
done
|
|
128
|
+
|
|
129
|
+
printf '\nSummary\n'
|
|
130
|
+
for line in "${summary_lines[@]}"; do
|
|
131
|
+
printf ' %s\n' "$line"
|
|
132
|
+
done
|
|
133
|
+
|
|
134
|
+
exit "$overall_status"
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#!/bin/zsh
|
|
2
|
+
|
|
3
|
+
set -u
|
|
4
|
+
|
|
5
|
+
unset INIT_CWD
|
|
6
|
+
unset npm_package_json
|
|
7
|
+
unset npm_package_name
|
|
8
|
+
unset npm_package_version
|
|
9
|
+
unset npm_lifecycle_event
|
|
10
|
+
unset npm_lifecycle_script
|
|
11
|
+
unset npm_config_local_prefix
|
|
12
|
+
unset npm_prefix
|
|
13
|
+
unset npm_execpath
|
|
14
|
+
unset npm_command
|
|
15
|
+
unset npm_config_node_linker
|
|
16
|
+
unset NPM_CONFIG_NODE_LINKER
|
|
17
|
+
export CI=true
|
|
18
|
+
|
|
19
|
+
script_dir="${0:A:h}"
|
|
20
|
+
package_root="${script_dir:h}"
|
|
21
|
+
rsx_cmd=(node "$package_root/bin/rsx.cjs")
|
|
22
|
+
default_base_dir="$package_root/.tests/rsx-setup-smoke"
|
|
23
|
+
prebuild_script="$script_dir/prepare-local-rsx-packages.sh"
|
|
24
|
+
|
|
25
|
+
base_dir="${RSX_SETUP_VERIFY_DIR:-$default_base_dir}"
|
|
26
|
+
work_base_dir="${RSX_SETUP_WORK_DIR:-$base_dir/workspace}"
|
|
27
|
+
pm="${RSX_PM:-npm}"
|
|
28
|
+
tag_flag="${RSX_TAG_FLAG:---next}"
|
|
29
|
+
skip_vscode_flag="${RSX_SKIP_VSCODE_FLAG:---skip-vscode}"
|
|
30
|
+
|
|
31
|
+
typeset -a summary_lines
|
|
32
|
+
overall_status=0
|
|
33
|
+
|
|
34
|
+
run_in_log() {
|
|
35
|
+
local log_file="$1"
|
|
36
|
+
shift
|
|
37
|
+
|
|
38
|
+
"$@" < /dev/null >"$log_file" 2>&1
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
run_in_dir_log() {
|
|
42
|
+
local project_dir="$1"
|
|
43
|
+
local log_file="$2"
|
|
44
|
+
shift 2
|
|
45
|
+
|
|
46
|
+
(
|
|
47
|
+
cd "$project_dir" || exit 1
|
|
48
|
+
"$@" < /dev/null
|
|
49
|
+
) >"$log_file" 2>&1
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
print_log_tail() {
|
|
53
|
+
local log_file="$1"
|
|
54
|
+
|
|
55
|
+
printf ' log: %s\n' "$log_file"
|
|
56
|
+
printf ' last lines:\n'
|
|
57
|
+
tail -n 20 "$log_file" | sed 's/^/ /'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
run_step() {
|
|
61
|
+
local framework="$1"
|
|
62
|
+
local step_name="$2"
|
|
63
|
+
local log_file="$3"
|
|
64
|
+
shift 3
|
|
65
|
+
|
|
66
|
+
printf '%s: %s...\n' "$framework" "$step_name"
|
|
67
|
+
if ! run_in_log "$log_file" "$@"; then
|
|
68
|
+
printf '%s: %s failed.\n' "$framework" "$step_name"
|
|
69
|
+
print_log_tail "$log_file"
|
|
70
|
+
return 1
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
return 0
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
run_step_in_dir() {
|
|
77
|
+
local framework="$1"
|
|
78
|
+
local step_name="$2"
|
|
79
|
+
local project_dir="$3"
|
|
80
|
+
local log_file="$4"
|
|
81
|
+
shift 4
|
|
82
|
+
|
|
83
|
+
printf '%s: %s...\n' "$framework" "$step_name"
|
|
84
|
+
if ! run_in_dir_log "$project_dir" "$log_file" "$@"; then
|
|
85
|
+
printf '%s: %s failed.\n' "$framework" "$step_name"
|
|
86
|
+
print_log_tail "$log_file"
|
|
87
|
+
return 1
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
return 0
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
rm -rf "$base_dir"
|
|
94
|
+
mkdir -p "$base_dir"
|
|
95
|
+
mkdir -p "$work_base_dir"
|
|
96
|
+
cat > "$work_base_dir/package.json" <<'EOF'
|
|
97
|
+
{
|
|
98
|
+
"name": "rsx-setup-smoke-workspace",
|
|
99
|
+
"private": true
|
|
100
|
+
}
|
|
101
|
+
EOF
|
|
102
|
+
: > "$work_base_dir/.npmrc"
|
|
103
|
+
|
|
104
|
+
printf 'Using workspace: %s\n' "$base_dir"
|
|
105
|
+
printf 'Using project dir: %s\n' "$work_base_dir"
|
|
106
|
+
printf 'Using package manager: %s\n' "$pm"
|
|
107
|
+
printf 'Using tag flag: %s\n' "$tag_flag"
|
|
108
|
+
|
|
109
|
+
printf 'Preparing local RS-X packages...\n'
|
|
110
|
+
if ! run_in_log "$base_dir/prepare-packages.log" zsh "$prebuild_script"; then
|
|
111
|
+
printf 'Preparation failed.\n'
|
|
112
|
+
print_log_tail "$base_dir/prepare-packages.log"
|
|
113
|
+
exit 1
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
verify_framework() {
|
|
117
|
+
local framework="$1"
|
|
118
|
+
local project_name="rsx-setup-${framework}-verify"
|
|
119
|
+
local project_dir="$work_base_dir/$project_name"
|
|
120
|
+
local project_arg="./$project_name"
|
|
121
|
+
local scaffold_log="$base_dir/${framework}-scaffold.log"
|
|
122
|
+
local install_log="$base_dir/${framework}-install.log"
|
|
123
|
+
local setup_log="$base_dir/${framework}-setup.log"
|
|
124
|
+
local build_log="$base_dir/${framework}-build.log"
|
|
125
|
+
|
|
126
|
+
rm -rf "$project_dir"
|
|
127
|
+
|
|
128
|
+
printf '\n== %s ==\n' "$framework"
|
|
129
|
+
|
|
130
|
+
case "$framework" in
|
|
131
|
+
angular)
|
|
132
|
+
run_step_in_dir "$framework" "scaffold" "$work_base_dir" "$scaffold_log" \
|
|
133
|
+
npx @angular/cli@latest new "$project_name" --directory "$project_arg" --style css --routing --skip-git --skip-install --defaults \
|
|
134
|
+
|| { summary_lines+=("$framework: scaffold failed"); overall_status=1; return; }
|
|
135
|
+
run_step_in_dir "$framework" "install" "$project_dir" "$install_log" "$pm" install \
|
|
136
|
+
|| { summary_lines+=("$framework: install failed"); overall_status=1; return; }
|
|
137
|
+
;;
|
|
138
|
+
react)
|
|
139
|
+
run_step_in_dir "$framework" "scaffold" "$work_base_dir" "$scaffold_log" \
|
|
140
|
+
npx create-vite@latest "$project_arg" --no-interactive --template react-ts \
|
|
141
|
+
|| { summary_lines+=("$framework: scaffold failed"); overall_status=1; return; }
|
|
142
|
+
run_step_in_dir "$framework" "install" "$project_dir" "$install_log" "$pm" install \
|
|
143
|
+
|| { summary_lines+=("$framework: install failed"); overall_status=1; return; }
|
|
144
|
+
;;
|
|
145
|
+
vue)
|
|
146
|
+
run_step_in_dir "$framework" "scaffold" "$work_base_dir" "$scaffold_log" \
|
|
147
|
+
npx create-vite@latest "$project_arg" --no-interactive --template vue-ts \
|
|
148
|
+
|| { summary_lines+=("$framework: scaffold failed"); overall_status=1; return; }
|
|
149
|
+
run_step_in_dir "$framework" "install" "$project_dir" "$install_log" "$pm" install \
|
|
150
|
+
|| { summary_lines+=("$framework: install failed"); overall_status=1; return; }
|
|
151
|
+
;;
|
|
152
|
+
next)
|
|
153
|
+
run_step_in_dir "$framework" "scaffold" "$work_base_dir" "$scaffold_log" \
|
|
154
|
+
npx create-next-app@latest "$project_arg" --ts --app --empty --use-npm --yes --disable-git \
|
|
155
|
+
|| { summary_lines+=("$framework: scaffold failed"); overall_status=1; return; }
|
|
156
|
+
;;
|
|
157
|
+
*)
|
|
158
|
+
printf 'Unknown framework: %s\n' "$framework"
|
|
159
|
+
summary_lines+=("$framework: unsupported")
|
|
160
|
+
overall_status=1
|
|
161
|
+
return
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
164
|
+
|
|
165
|
+
run_step_in_dir "$framework" "rsx setup" "$project_dir" "$setup_log" "${rsx_cmd[@]}" setup --pm "$pm" "$tag_flag" "$skip_vscode_flag" \
|
|
166
|
+
|| { summary_lines+=("$framework: rsx setup failed"); overall_status=1; return; }
|
|
167
|
+
|
|
168
|
+
run_step_in_dir "$framework" "build" "$project_dir" "$build_log" "$pm" run build \
|
|
169
|
+
|| { summary_lines+=("$framework: build failed"); overall_status=1; return; }
|
|
170
|
+
|
|
171
|
+
printf '%s: build passed.\n' "$framework"
|
|
172
|
+
summary_lines+=("$framework: pass")
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
cd "$base_dir" || exit 1
|
|
176
|
+
verify_framework angular
|
|
177
|
+
verify_framework react
|
|
178
|
+
verify_framework vue
|
|
179
|
+
verify_framework next
|
|
180
|
+
|
|
181
|
+
printf '\nSummary\n'
|
|
182
|
+
for line in "${summary_lines[@]}"; do
|
|
183
|
+
printf ' %s\n' "$line"
|
|
184
|
+
done
|
|
185
|
+
|
|
186
|
+
exit "$overall_status"
|