Skip to content

Commit 03b09e9

Browse files
committed
Inject CLI version to dist after building
1 parent 929a3cb commit 03b09e9

8 files changed

Lines changed: 34 additions & 20 deletions

File tree

.github/workflows/main.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ jobs:
7979
run: |
8080
pnpm run dev-test:generate:${{matrix.method}}
8181
git diff --exit-code -- dev-test/
82-
- name: Test CLI version ${{matrix.method}}
83-
run: pnpm run dev-test:test-cli-version:${{matrix.method}}
8482
8583
examples-tests:
8684
name: Examples - Normal

.gitignore

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,3 @@ website/public/_redirects
2121

2222
**/cypress/screenshots
2323
**/cypress/videos
24-
25-
# Generated file for `graphql-codegen --version` to work. See `pnpm prepare-cli-version`.
26-
packages/graphql-codegen-cli/src/_version.ts

dev-test/general/package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
"generate": "pnpm generate:esm",
88
"generate:cjs": "node ../../packages/graphql-codegen-cli/dist/cjs/bin.js --require dotenv/config --config codegen.ts dotenv_config_path=.env",
99
"generate:esm": "node ../../packages/graphql-codegen-cli/dist/esm/bin.js --require dotenv/config --config codegen.ts dotenv_config_path=.env",
10-
"test-cli-version:cjs": "node ../../packages/graphql-codegen-cli/dist/cjs/bin.js --version",
11-
"test-cli-version:esm": "node ../../packages/graphql-codegen-cli/dist/esm/bin.js --version",
1210
"watch": "pnpm watch:esm",
1311
"watch:cjs": "pnpm generate:cjs --watch",
1412
"watch:esm": "pnpm generate:esm --watch"

eslint.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export default [
8383
'dev-test/**',
8484
'website/**',
8585
'examples/**',
86+
'scripts/**',
8687
'**/tests/test-files/**',
8788
'**/tests/test-documents/**',
8889
'**/react-app-env.d.ts',

package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,24 @@
77
"node": ">= 16.0.0"
88
},
99
"scripts": {
10-
"prebuild": "rimraf dist/ .bob/ tsconfig.tsbuildinfo && pnpm prepare-cli-version",
10+
"prebuild": "rimraf dist/ .bob/ tsconfig.tsbuildinfo",
1111
"build": "bob build",
12-
"postbuild": "pnpm fix-bins",
12+
"postbuild": "pnpm fix-bins && pnpm inject-cli-version",
1313
"clean": "rimraf node_modules/",
1414
"dev-test:generate": "pnpm --filter=\"dev-test*\" generate",
1515
"dev-test:generate:cjs": "pnpm --filter=\"dev-test*\" generate:cjs",
1616
"dev-test:generate:esm": "pnpm --filter=\"dev-test*\" generate:esm",
17-
"dev-test:test-cli-version:cjs": "pnpm prepare-cli-version && pnpm --filter=\"dev-test-general\" test-cli-version:cjs",
18-
"dev-test:test-cli-version:esm": "pnpm prepare-cli-version && pnpm --filter=\"dev-test-general\" test-cli-version:esm",
1917
"dev-test:watch": "pnpm --filter=\"dev-test*\" watch",
2018
"dev-test:watch:cjs": "pnpm --filter=\"dev-test*\" watch:cjs",
2119
"dev-test:watch:esm": "pnpm --filter=\"dev-test*\" watch:esm",
2220
"examples:build": "pnpm --filter=\"example-*\" build",
2321
"examples:codegen": "pnpm --filter=\"example-*\" codegen",
2422
"examples:test:end2end": "pnpm --filter=\"example-*\" --workspace-concurrency=1 test:end2end",
2523
"fix-bins": "node scripts/fix-bin.js",
24+
"inject-cli-version": "node scripts/inject-cli-version.mjs",
2625
"postinstall": "husky install",
2726
"lint": "eslint --cache .",
2827
"lint:ci": "eslint --cache --output-file eslint_report.json --format json .",
29-
"prepare-cli-version": "node ./scripts/prepare-cli-version.mjs",
3028
"prettier": "prettier --cache --write --list-different .",
3129
"prettier:check": "prettier --cache --check .",
3230
"rebuild": "bob build --incremental",

packages/graphql-codegen-cli/src/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ import {
1717
Types,
1818
} from '@graphql-codegen/plugin-helpers';
1919
import type { UnnormalizedTypeDefPointer } from '@graphql-tools/load';
20-
import { version } from './_version.js'; // Run `pnpm prepare-cli-version` to initialize this value
2120
import { findAndLoadGraphQLConfig } from './graphql-config.js';
2221
import {
2322
defaultDocumentsLoadOptions,
2423
defaultSchemaLoadOptions,
2524
loadDocuments,
2625
loadSchema,
2726
} from './load.js';
27+
import { version } from './version.js';
2828

2929
const { lstat } = promises;
3030

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const version = '__VERSION__';
Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import * as fs from 'fs';
2-
import packageJson from '../packages/graphql-codegen-cli/package.json' with { type: 'json' };
1+
import * as fs from 'node:fs';
2+
import * as path from 'node:path';
3+
import * as url from 'node:url';
34

45
/**
56
* This script extracts the `@graphql-codegen/cli` version ahead of build and publish time,
@@ -16,8 +17,28 @@ import packageJson from '../packages/graphql-codegen-cli/package.json' with { ty
1617
* 5. Use `nodenext` instead of `esnext` for `module` and `moduleResolution`. Maybe a big change?
1718
* 6. Ship ESM-only. This is a big change.
1819
*/
19-
fs.writeFileSync(
20-
'./packages/graphql-codegen-cli/src/_version.ts',
21-
`export const version = '${packageJson.version}';`,
22-
'utf8',
23-
);
20+
21+
const __dirname = url.fileURLToPath(new url.URL('.', import.meta.url));
22+
23+
const packageJsonFile = path.resolve(__dirname, '../packages/graphql-codegen-cli/package.json');
24+
const versionFiles = [
25+
path.resolve(__dirname, '../packages/graphql-codegen-cli/dist/cjs/version.js'),
26+
path.resolve(__dirname, '../packages/graphql-codegen-cli/dist/esm/version.js'),
27+
];
28+
29+
const packageJson = JSON.parse(fs.readFileSync(packageJsonFile, 'utf8'));
30+
31+
for (const versionFile of versionFiles) {
32+
const versionFileContent = fs.readFileSync(versionFile, 'utf8');
33+
fs.writeFileSync(
34+
versionFile,
35+
versionFileContent.replace('__VERSION__', packageJson.version || 'unknown'),
36+
'utf8',
37+
);
38+
39+
const updatedVersionContent = fs.readFileSync(versionFile, 'utf8');
40+
41+
console.log('***');
42+
console.log(`Updated ${versionFile} content:\n"${updatedVersionContent}"`);
43+
console.log('***');
44+
}

0 commit comments

Comments
 (0)