Skip to content

Commit a3d1fea

Browse files
committed
fix: harden npm package lifecycle and Node support
1 parent f89633a commit a3d1fea

6 files changed

Lines changed: 44 additions & 5 deletions

File tree

.github/workflows/node-ci.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@ permissions:
1010

1111
jobs:
1212
test:
13-
name: ${{ matrix.os }} / node-22
13+
name: ${{ matrix.os }} / node-${{ matrix.node }}
1414
runs-on: ${{ matrix.os }}
1515
strategy:
1616
fail-fast: false
1717
matrix:
1818
os: [ubuntu-latest, macos-latest, windows-latest]
19+
node: ["22"]
20+
include:
21+
- os: ubuntu-latest
22+
node: "24"
1923

2024
steps:
2125
- name: Checkout repository
@@ -26,7 +30,7 @@ jobs:
2630
- name: Set up Node.js
2731
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
2832
with:
29-
node-version: "22"
33+
node-version: ${{ matrix.node }}
3034

3135
- name: Set up Bun
3236
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
@@ -40,6 +44,10 @@ jobs:
4044
- name: Install dependencies
4145
run: pnpm --dir sdk/typescript install --frozen-lockfile
4246

47+
- name: Audit production dependencies
48+
if: matrix.os == 'ubuntu-latest' && matrix.node == '22'
49+
run: pnpm --dir sdk/typescript run audit:prod
50+
4351
- name: Typecheck
4452
run: pnpm --dir sdk/typescript run types
4553

.github/workflows/node-release.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ jobs:
9797
- name: Install dependencies
9898
run: sfw pnpm --dir sdk/typescript install --frozen-lockfile
9999

100+
- name: Audit production dependencies
101+
run: sfw pnpm --dir sdk/typescript run audit:prod
102+
100103
- name: Verify
101104
run: |
102105
pnpm --dir sdk/typescript run types

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
99
## Quick start
1010

11-
Requires Node.js 22 or later, Python 3.10 or later, and access to Codex Security.
11+
Requires Node.js 22.13.0 or later, Python 3.10 or later, and access to Codex Security.
1212

1313
```bash
1414
npm install @openai/codex-security

sdk/typescript/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ npm install @openai/codex-security
1515
npx @openai/codex-security --version
1616
```
1717

18-
The package supports macOS, Linux, and Windows and requires Node.js 22 or
18+
The package supports macOS, Linux, and Windows and requires Node.js 22.13.0 or
1919
later. Scanning and exporting findings also require Python 3.10 or later. If
2020
you use Python 3.10, install the `tomli` package. Select another interpreter
2121
with `--python`, `pythonPath`, or `PYTHON` when needed.

sdk/typescript/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"bugs": "https://github.com/openai/codex-security/issues",
1414
"type": "module",
1515
"engines": {
16-
"node": ">=22"
16+
"node": ">=22.13.0"
1717
},
1818
"packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b",
1919
"main": "./dist/index.js",
@@ -39,13 +39,15 @@
3939
"access": "public"
4040
},
4141
"scripts": {
42+
"audit:prod": "pnpm audit --prod --audit-level high",
4243
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
4344
"build": "pnpm run clean && tsc -p tsconfig.build.json",
4445
"check:package": "node scripts/check-package.mjs",
4546
"format": "prettier --check --ignore-path .gitignore --ignore-path .prettierignore \"**/*.{cjs,mjs,js,ts,json,md}\"",
4647
"generate:models": "node scripts/generate-models.cjs",
4748
"generate:models:check": "node scripts/generate-models.cjs --check",
4849
"lint": "tsc --noEmit",
50+
"prepack": "pnpm run build",
4951
"test": "bun test --timeout 30000 ./tests-ts",
5052
"test:package": "node scripts/smoke-package.mjs",
5153
"types": "pnpm run generate:models:check && tsc --noEmit"

sdk/typescript/tests-ts/skeleton.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,32 @@ function capture(): {
2828
}
2929

3030
describe("TypeScript package skeleton", () => {
31+
test("advertises only compatible Node.js releases", async () => {
32+
const packageJson = JSON.parse(
33+
await readFile(new URL("../package.json", import.meta.url), "utf8"),
34+
);
35+
36+
expect(Bun.semver.satisfies("22.12.0", packageJson.engines.node)).toBe(
37+
false,
38+
);
39+
expect(Bun.semver.satisfies("22.13.0", packageJson.engines.node)).toBe(
40+
true,
41+
);
42+
expect(Bun.semver.satisfies("24.0.0", packageJson.engines.node)).toBe(true);
43+
expect(Bun.semver.satisfies("26.0.0", packageJson.engines.node)).toBe(true);
44+
});
45+
46+
test("builds packages before packing and provides a production audit", async () => {
47+
const packageJson = JSON.parse(
48+
await readFile(new URL("../package.json", import.meta.url), "utf8"),
49+
);
50+
51+
expect(packageJson.scripts.prepack).toBe("pnpm run build");
52+
expect(packageJson.scripts["audit:prod"]).toBe(
53+
"pnpm audit --prod --audit-level high",
54+
);
55+
});
56+
3157
test("exposes canonical finding and hardening fields with public types", () => {
3258
const finding = {} as Finding;
3359
const scan = {} as ScanRecord;

0 commit comments

Comments
 (0)