diff --git a/package.json b/package.json index ca2eee59..f516e39e 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "lint": "turbo run lint", "test": "turbo run test", "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "bump-version": "npx tsx scripts/bump-version.ts", "publish-all": "pnpm --filter \"./packages/**\" -r publish --tag next", "publish-preview": "pnpm --filter \"./packages/**\" -r publish --tag next --force --registry https://preview.registry.zenstack.dev/", "unpublish-preview": "pnpm --filter \"./packages/**\" -r --shell-mode exec -- npm unpublish -f --registry https://preview.registry.zenstack.dev/ \"\\$PNPM_PACKAGE_NAME\"" @@ -20,13 +21,15 @@ "@eslint/js": "^9.29.0", "@types/node": "^20.17.24", "eslint": "~9.29.0", + "glob": "^11.0.2", "prettier": "^3.5.3", "tsup": "^8.5.0", "tsx": "^4.20.3", "turbo": "^2.5.4", "typescript": "catalog:", "typescript-eslint": "^8.34.1", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "yaml": "^2.8.0" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/packages/language/src/generated/ast.ts b/packages/language/src/generated/ast.ts index d569e114..114aad4f 100644 --- a/packages/language/src/generated/ast.ts +++ b/packages/language/src/generated/ast.ts @@ -1,5 +1,5 @@ /****************************************************************************** - * This file was generated by langium-cli 3.3.0. + * This file was generated by langium-cli 3.3.1. * DO NOT EDIT MANUALLY! ******************************************************************************/ diff --git a/packages/language/src/generated/grammar.ts b/packages/language/src/generated/grammar.ts index 0e9791bd..14b17a35 100644 --- a/packages/language/src/generated/grammar.ts +++ b/packages/language/src/generated/grammar.ts @@ -1,5 +1,5 @@ /****************************************************************************** - * This file was generated by langium-cli 3.3.0. + * This file was generated by langium-cli 3.3.1. * DO NOT EDIT MANUALLY! ******************************************************************************/ diff --git a/packages/language/src/generated/module.ts b/packages/language/src/generated/module.ts index 8018df27..95f3f94d 100644 --- a/packages/language/src/generated/module.ts +++ b/packages/language/src/generated/module.ts @@ -1,5 +1,5 @@ /****************************************************************************** - * This file was generated by langium-cli 3.3.0. + * This file was generated by langium-cli 3.3.1. * DO NOT EDIT MANUALLY! ******************************************************************************/ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8eed846c..45d2ff35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,12 +38,15 @@ importers: eslint: specifier: ~9.29.0 version: 9.29.0(jiti@2.4.2) + glob: + specifier: ^11.0.2 + version: 11.0.2 prettier: specifier: ^3.5.3 version: 3.5.3 tsup: specifier: ^8.5.0 - version: 8.5.0(@swc/core@1.12.5)(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3) + version: 8.5.0(@swc/core@1.12.5)(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) tsx: specifier: ^4.20.3 version: 4.20.3 @@ -58,7 +61,10 @@ importers: version: 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3) + version: 3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0) + yaml: + specifier: ^2.8.0 + version: 2.8.0 packages/cli: dependencies: @@ -1510,10 +1516,6 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -2516,6 +2518,11 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3106,13 +3113,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3))': + '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3) + vite: 6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -3552,11 +3559,6 @@ snapshots: flatted@3.3.3: {} - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -3622,7 +3624,7 @@ snapshots: glob@11.0.2: dependencies: - foreground-child: 3.3.0 + foreground-child: 3.3.1 jackspeak: 4.1.0 minimatch: 10.0.1 minipass: 7.1.2 @@ -3810,7 +3812,7 @@ snapshots: minimatch@10.0.1: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimatch@3.1.2: dependencies: @@ -3989,13 +3991,14 @@ snapshots: pluralize@8.0.0: {} - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.4.2 postcss: 8.5.6 tsx: 4.20.3 + yaml: 2.8.0 postcss@8.5.6: dependencies: @@ -4283,7 +4286,7 @@ snapshots: ts-pattern@5.7.1: {} - tsup@8.5.0(@swc/core@1.12.5)(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3): + tsup@8.5.0(@swc/core@1.12.5)(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 @@ -4294,7 +4297,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0) resolve-from: 5.0.0 rollup: 4.44.0 source-map: 0.8.0-beta.0 @@ -4389,13 +4392,13 @@ snapshots: uuid@11.0.5: {} - vite-node@3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3): + vite-node@3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3) + vite: 6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -4410,7 +4413,7 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3): + vite@6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -4423,12 +4426,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.4.2 tsx: 4.20.3 + yaml: 2.8.0 - vitest@3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3): + vitest@3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -4446,8 +4450,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3) - vite-node: 3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3) + vite: 6.3.5(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@20.17.24)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.24 @@ -4527,6 +4531,8 @@ snapshots: xtend@4.0.2: {} + yaml@2.8.0: {} + yocto-queue@0.1.0: {} zod@3.25.67: {} diff --git a/scripts/bump-version.ts b/scripts/bump-version.ts new file mode 100644 index 00000000..717072e9 --- /dev/null +++ b/scripts/bump-version.ts @@ -0,0 +1,43 @@ +import * as fs from 'node:fs'; +import { glob } from 'glob'; +import * as path from 'node:path'; +import * as yaml from 'yaml'; + +function getWorkspacePackageJsonFiles(workspaceFile: string): string[] { + const workspaceYaml = fs.readFileSync(workspaceFile, 'utf8'); + const workspace = yaml.parse(workspaceYaml) as { packages?: string[] }; + if (!workspace.packages) throw new Error('No "packages" key found in pnpm-workspace.yaml'); + const rootDir = path.dirname(workspaceFile); + const files = new Set(); + for (const pattern of workspace.packages) { + const matches = glob.sync(path.join(pattern, 'package.json'), { + cwd: rootDir, + absolute: true, + }); + matches.forEach((f) => files.add(f)); + } + return Array.from(files); +} + +function incrementVersion(version: string): string { + const parts = version.split('.'); + const last = parts.length - 1; + const lastNum = parseInt(parts[last], 10); + if (isNaN(lastNum)) throw new Error(`Invalid version: ${version}`); + parts[last] = (lastNum + 1).toString(); + return parts.join('.'); +} + +const workspaceFile = path.resolve(__dirname, '../pnpm-workspace.yaml'); +const packageFiles = getWorkspacePackageJsonFiles(workspaceFile); + +for (const file of packageFiles) { + const content = fs.readFileSync(file, 'utf8'); + const pkg = JSON.parse(content) as { version?: string }; + if (pkg.version) { + const oldVersion = pkg.version; + pkg.version = incrementVersion(pkg.version); + fs.writeFileSync(file, JSON.stringify(pkg, null, 2) + '\n'); + console.log(`Updated ${file}: ${oldVersion} -> ${pkg.version}`); + } +}