Skip to content

Commit 8c4308f

Browse files
authored
Fix scaffolded-crs config for built customQuestions (#846)
2 parents 5662d0b + bdb9988 commit 8c4308f

File tree

16 files changed

+154
-45
lines changed

16 files changed

+154
-45
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: Check Scaffolded Vite Config Sync
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- 'packages/standalone-ui/vite.config.ts'
7+
push:
8+
paths:
9+
- 'packages/standalone-ui/vite.config.ts'
10+
11+
jobs:
12+
check-vite-config-sync:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
with:
19+
fetch-depth: 0
20+
21+
- name: Check for standalone-ui vite.config.ts changes
22+
id: check_changes
23+
run: |
24+
# Check if standalone-ui/vite.config.ts was modified
25+
if git diff --name-only HEAD~1..HEAD | grep -q "packages/standalone-ui/vite.config.ts"; then
26+
echo "standalone_ui_modified=true" >> $GITHUB_OUTPUT
27+
else
28+
echo "standalone_ui_modified=false" >> $GITHUB_OUTPUT
29+
fi
30+
31+
# Check if template.ts was also modified in this PR/push
32+
if git diff --name-only HEAD~1..HEAD | grep -q "packages/cli/src/utils/template.ts"; then
33+
echo "template_modified=true" >> $GITHUB_OUTPUT
34+
else
35+
echo "template_modified=false" >> $GITHUB_OUTPUT
36+
fi
37+
38+
- name: Display sync documentation and fail
39+
if: steps.check_changes.outputs.standalone_ui_modified == 'true'
40+
run: |
41+
echo "🚨 VITE CONFIG SYNC REQUIRED 🚨"
42+
echo ""
43+
echo "==============================================="
44+
echo "CHANGES DETECTED TO packages/standalone-ui/vite.config.ts"
45+
echo "==============================================="
46+
echo ""
47+
echo "📋 REQUIRED ACTION:"
48+
echo "Any changes to the library build configuration in standalone-ui"
49+
echo "must be manually synchronized to packages/cli/src/utils/template.ts"
50+
echo ""
51+
echo "🎯 SPECIFIC SECTIONS TO SYNC:"
52+
echo "- rollupOptions.external array"
53+
echo "- rollupOptions.output.globals object"
54+
echo "- Comments explaining bundling strategy"
55+
echo ""
56+
echo "🔍 WHY THIS MATTERS:"
57+
echo "- standalone-ui builds questions.mjs for monorepo development"
58+
echo "- template.ts generates vite.config.ts for scaffolded projects"
59+
echo "- Both must produce identical questions.mjs output"
60+
echo "- Config drift causes 'bare specifier' import errors in studio mode"
61+
echo ""
62+
echo "==============================================="
63+
echo "CURRENT CHANGES IN THIS PR/PUSH"
64+
echo "==============================================="
65+
echo ""
66+
echo "📄 Changes to standalone-ui/vite.config.ts:"
67+
git diff HEAD~1..HEAD -- packages/standalone-ui/vite.config.ts || echo "No diff available"
68+
echo ""
69+
70+
if [ "${{ steps.check_changes.outputs.template_modified }}" == "true" ]; then
71+
echo "✅ Changes detected to template.ts (good!):"
72+
git diff HEAD~1..HEAD -- packages/cli/src/utils/template.ts || echo "No diff available"
73+
else
74+
echo "❌ NO changes detected to packages/cli/src/utils/template.ts"
75+
echo ""
76+
echo "🔧 TO FIX:"
77+
echo "1. Review the standalone-ui vite.config.ts changes above"
78+
echo "2. Apply equivalent changes to packages/cli/src/utils/template.ts"
79+
echo "3. Focus on the library build rollupOptions section (lines ~200-230)"
80+
echo "4. Ensure external array and globals object match exactly"
81+
echo "5. Update comments to match bundling strategy"
82+
echo "6. Commit and push the template.ts changes"
83+
fi
84+
echo ""
85+
echo "==============================================="
86+
echo "REFERENCE LOCATIONS"
87+
echo "==============================================="
88+
echo ""
89+
echo "📁 Source of truth:"
90+
echo " packages/standalone-ui/vite.config.ts (lines ~56-80)"
91+
echo ""
92+
echo "📁 Template to update:"
93+
echo " packages/cli/src/utils/template.ts (lines ~200-230)"
94+
echo " Look for the rollupOptions section in createViteConfig()"
95+
echo ""
96+
echo "📚 Context:"
97+
echo " This sync requirement exists because scaffolded projects cannot"
98+
echo " use the monorepo's vite.config.base.js due to path dependencies."
99+
echo ""
100+
echo "🚨 THIS CHECK WILL ALWAYS FAIL TO FORCE MANUAL REVIEW 🚨"
101+
exit 1

packages/cli/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"type": "module",
88
"description": "CLI scaffolding tool for vue-skuilder projects",
99
"bin": {
@@ -19,7 +19,7 @@
1919
},
2020
"scripts": {
2121
"build": "rm -rf dist && tsc && npm run embed:studio-ui-src && npm run embed:templates && npm run embed:standalone-ui",
22-
"embed:studio-ui-src": "mkdir -p dist/studio-ui-src && cp -r ../studio-ui/src/* dist/studio-ui-src/ && cp ../studio-ui/package.json dist/studio-ui-src/ && cp ../studio-ui/vite.config.ts dist/studio-ui-src/ && cp ../studio-ui/tsconfig.json dist/studio-ui-src/ && cp ../studio-ui/index.html dist/studio-ui-src/ && cp ../../vite.config.base.js dist/studio-ui-src/ && sed -i 's|../../vite.config.base.js|./vite.config.base.js|' dist/studio-ui-src/vite.config.ts && sed -i 's|resolve(__dirname, \\.\\., \\.\\.)|resolve(__dirname)|' dist/studio-ui-src/vite.config.ts && sed -i 's|/src/main.ts|./main.ts|' dist/studio-ui-src/index.html",
22+
"embed:studio-ui-src": "mkdir -p dist/studio-ui-src && cp -r ../studio-ui/src/* dist/studio-ui-src/ && cp ../studio-ui/package.json dist/studio-ui-src/ && cp ../studio-ui/vite.config.ts dist/studio-ui-src/ && cp ../studio-ui/tsconfig.json dist/studio-ui-src/ && cp ../studio-ui/index.html dist/studio-ui-src/ && sed -i 's|resolve(__dirname, \\.\\., \\.\\.)|resolve(__dirname)|' dist/studio-ui-src/vite.config.ts && sed -i 's|/src/main.ts|./main.ts|' dist/studio-ui-src/index.html",
2323
"embed:templates": "mkdir -p dist/templates && cp -r templates/.skuilder dist/templates/",
2424
"embed:standalone-ui": "mkdir -p dist/standalone-ui-template && cp -r ../standalone-ui/src dist/standalone-ui-template/ && cp ../standalone-ui/package.json dist/standalone-ui-template/ && cp ../standalone-ui/tsconfig.json dist/standalone-ui-template/ && cp ../standalone-ui/vite.config.ts dist/standalone-ui-template/ && cp ../standalone-ui/index.html dist/standalone-ui-template/ && (cp ../standalone-ui/.gitignore dist/standalone-ui-template/ 2>/dev/null || true)",
2525
"dev": "tsc --watch",

packages/cli/src/commands/studio.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -835,9 +835,9 @@ async function buildDefaultStudioUI(buildPath: string): Promise<string> {
835835
const studioPackageJsonPath = path.join(buildPath, 'package.json');
836836
await transformPackageJsonForStudioBuild(studioPackageJsonPath);
837837

838-
// Fix Vite config to use npm packages instead of monorepo paths
839-
console.log(chalk.gray(` Updating Vite configuration for standalone build...`));
840-
await fixViteConfigForStandaloneBuild(buildPath);
838+
// Fix Vite config to use npm packages and resolve custom questions imports
839+
console.log(chalk.gray(` Updating Vite configuration for studio build...`));
840+
await createStudioViteConfig(buildPath);
841841

842842
// Run Vite build process
843843
console.log(chalk.gray(` Running Vite build process...`));
@@ -1035,9 +1035,9 @@ async function buildStudioUIWithCustomQuestions(
10351035
const studioPackageJsonPath = path.join(buildPath, 'package.json');
10361036
await transformPackageJsonForStudioBuild(studioPackageJsonPath);
10371037

1038-
// Step 2.5: Fix Vite config to use npm packages instead of monorepo paths
1039-
console.log(chalk.gray(` Updating Vite configuration for standalone build...`));
1040-
await fixViteConfigForStandaloneBuild(buildPath);
1038+
// Step 2.5: Fix Vite config to use npm packages and resolve custom questions imports
1039+
console.log(chalk.gray(` Updating Vite configuration for studio build...`));
1040+
await createStudioViteConfig(buildPath);
10411041

10421042
// Step 3: Install custom questions package
10431043
console.log(
@@ -1258,19 +1258,19 @@ async function runViteBuild(buildPath: string): Promise<void> {
12581258
}
12591259

12601260
/**
1261-
* Fix Vite configuration to work in standalone build environment
1261+
* Create Vite configuration for studio-ui build environment
12621262
*/
1263-
async function fixViteConfigForStandaloneBuild(buildPath: string): Promise<void> {
1263+
async function createStudioViteConfig(buildPath: string): Promise<void> {
12641264
const viteConfigPath = path.join(buildPath, 'vite.config.ts');
12651265

12661266
if (!fs.existsSync(viteConfigPath)) {
12671267
console.log(chalk.yellow(` Warning: vite.config.ts not found at ${viteConfigPath}`));
12681268
return;
12691269
}
12701270

1271-
// Create a clean standalone vite config for external projects
1272-
// Relies on standard npm package resolution instead of monorepo paths
1273-
const standaloneViteConfig = `import { defineConfig } from 'vite';
1271+
// Create a clean studio vite config for studio-ui environment
1272+
// Includes aliases to resolve custom questions imports
1273+
const studioViteConfig = `import { defineConfig } from 'vite';
12741274
import vue from '@vitejs/plugin-vue';
12751275
12761276
export default defineConfig({
@@ -1296,6 +1296,14 @@ export default defineConfig({
12961296
},
12971297
resolve: {
12981298
extensions: ['.js', '.ts', '.json', '.vue'],
1299+
alias: {
1300+
// Resolve @vue-skuilder packages to npm packages for custom questions import
1301+
'@vue-skuilder/common': '@vue-skuilder/common',
1302+
'@vue-skuilder/courseware': '@vue-skuilder/courseware',
1303+
'@vue-skuilder/db': '@vue-skuilder/db',
1304+
'@vue-skuilder/common-ui': '@vue-skuilder/common-ui',
1305+
'@vue-skuilder/edit-ui': '@vue-skuilder/edit-ui'
1306+
},
12991307
dedupe: [
13001308
'vue',
13011309
'vuetify',
@@ -1310,8 +1318,8 @@ export default defineConfig({
13101318
}
13111319
});`;
13121320

1313-
fs.writeFileSync(viteConfigPath, standaloneViteConfig);
1314-
console.log(chalk.gray(` Vite config replaced with standalone version`));
1321+
fs.writeFileSync(viteConfigPath, studioViteConfig);
1322+
console.log(chalk.gray(` Vite config replaced with studio version`));
13151323
}
13161324

13171325
/**

packages/cli/src/utils/template.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -200,27 +200,22 @@ export default defineConfig({
200200
},
201201
rollupOptions: {
202202
// External packages that shouldn't be bundled in library mode
203+
// For studio integration, we bundle vue-skuilder packages to avoid npm resolution issues
203204
external: [
204-
'vue',
205-
'vue-router',
206-
'vuetify',
207-
'pinia',
208-
'@vue-skuilder/common',
209-
'@vue-skuilder/common-ui',
210-
'@vue-skuilder/courseware',
211-
'@vue-skuilder/db',
205+
// Bundle everything for studio integration - no externals
212206
],
213207
output: {
214208
// Global variables for UMD build
215209
globals: {
216-
'vue': 'Vue',
210+
vue: 'Vue',
217211
'vue-router': 'VueRouter',
218-
'vuetify': 'Vuetify',
219-
'pinia': 'Pinia',
220-
'@vue-skuilder/common': 'VueSkuilderCommon',
221-
'@vue-skuilder/common-ui': 'VueSkuilderCommonUI',
222-
'@vue-skuilder/courseware': 'VueSkuilderCourseWare',
223-
'@vue-skuilder/db': 'VueSkuilderDB',
212+
vuetify: 'Vuetify',
213+
pinia: 'Pinia',
214+
// Remove globals for bundled packages
215+
// '@vue-skuilder/common': 'VueSkuilderCommon',
216+
// '@vue-skuilder/common-ui': 'VueSkuilderCommonUI',
217+
// '@vue-skuilder/courseware': 'VueSkuilderCourseWare',
218+
// '@vue-skuilder/db': 'VueSkuilderDB',
224219
},
225220
exports: 'named',
226221
// Preserve CSS in the output bundle
@@ -421,6 +416,7 @@ node_modules/
421416
# Production builds
422417
/dist
423418
/build
419+
/dist-lib
424420
425421
# Local env files
426422
.env

packages/client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"license": "MIT",
88
"main": "dist/index.js",
99
"module": "dist/index.esm.js",

packages/common-ui/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"main": "./dist/common-ui.umd.js",
88
"module": "./dist/common-ui.es.js",
99
"types": "./dist/index.d.ts",

packages/common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"type": "module",
88
"main": "dist/index.js",
99
"module": "dist/index.mjs",

packages/courseware/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"type": "module",
88
"main": "./dist/index.cjs.js",
99
"module": "./dist/index.mjs",

packages/db/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"description": "Database layer for vue-skuilder",
88
"main": "dist/index.js",
99
"module": "dist/index.mjs",

packages/edit-ui/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publishConfig": {
44
"access": "public"
55
},
6-
"version": "0.1.11-15",
6+
"version": "0.1.11-18",
77
"main": "./dist/edit-ui.umd.js",
88
"module": "./dist/edit-ui.es.js",
99
"types": "./dist/index.d.ts",

0 commit comments

Comments
 (0)