diff --git a/.changeset/unlucky-eagles-destroy.md b/.changeset/unlucky-eagles-destroy.md new file mode 100644 index 000000000000..74c96a7fe2d9 --- /dev/null +++ b/.changeset/unlucky-eagles-destroy.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +feat: export `VERSION` from `@sveltejs/kit` diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c6e40316e959..4f8c925e23e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,6 +36,7 @@ jobs: with: # This expects you to have a script called release which does a build for your packages and calls changeset publish publish: pnpm release + version: pnpm changeset:version env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/package.json b/package.json index e3c25ea371cb..b229ef5b6411 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "lint": "pnpm -r lint && eslint --cache --cache-location node_modules/.eslintcache 'packages/**/*.js'", "format": "pnpm -r format", "precommit": "pnpm format && pnpm lint", + "changeset:version": "pnpm -r generate:version && git add --all", "release": "changeset publish", "start": "cd sites/kit.svelte.dev && npm run dev" }, diff --git a/packages/kit/package.json b/packages/kit/package.json index 0dd25bbe40c7..5300b94cbc12 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -68,7 +68,8 @@ "test:cross-platform:build": "pnpm test:unit && pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test:cross-platform:build", "test:unit": "vitest --config kit.vitest.config.js run", "postinstall": "node postinstall.js", - "prepublishOnly": "node scripts/generate-dts.js" + "prepublishOnly": "node scripts/generate-dts.js", + "generate:version": "node scripts/generate-version.js" }, "exports": { "./package.json": "./package.json", diff --git a/packages/kit/scripts/generate-version.js b/packages/kit/scripts/generate-version.js new file mode 100644 index 000000000000..ecf715c9a15c --- /dev/null +++ b/packages/kit/scripts/generate-version.js @@ -0,0 +1,8 @@ +import fs from 'node:fs'; + +const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8')); + +fs.writeFileSync( + './src/version.js', + `// generated during release, do not modify\n\n/** @type {string} */\nexport const VERSION = '${pkg.version}';\n` +); diff --git a/packages/kit/src/exports/index.js b/packages/kit/src/exports/index.js index b1d50790c444..63bc183feb33 100644 --- a/packages/kit/src/exports/index.js +++ b/packages/kit/src/exports/index.js @@ -2,6 +2,8 @@ import { HttpError, Redirect, ActionFailure } from '../runtime/control.js'; import { BROWSER, DEV } from 'esm-env'; import { get_route_segments } from '../utils/routing.js'; +export { VERSION } from '../version.js'; + /** * @overload * @param {number} status diff --git a/packages/kit/src/version.js b/packages/kit/src/version.js new file mode 100644 index 000000000000..2b0e210e9821 --- /dev/null +++ b/packages/kit/src/version.js @@ -0,0 +1,4 @@ +// generated during release, do not modify + +/** @type {string} */ +export const VERSION = '1.20.4'; diff --git a/packages/kit/src/version.spec.js b/packages/kit/src/version.spec.js new file mode 100644 index 000000000000..fa44692da9ff --- /dev/null +++ b/packages/kit/src/version.spec.js @@ -0,0 +1,19 @@ +import { fileURLToPath } from 'node:url'; +import { readFileSync } from 'node:fs'; +import { assert, describe, it } from 'vitest'; + +// runs the version generation as a side-effect of importing +import '../scripts/generate-version.js'; + +describe('@sveltejs/kit VERSION', async () => { + it('should be the exact version from package.json'); + const { VERSION } = await import('./version.js'); + const pkg = JSON.parse( + readFileSync(fileURLToPath(new URL('../package.json', import.meta.url)), 'utf-8') + ); + assert.equal( + VERSION, + pkg.version, + 'VERSION export in src/version.js does not equal version in package.json' + ); +});