ReviewOS

also looking at this

craft-native/craft

fix(build): select the core Zig project explicitly

#383
Merged chris wants to merge codex/zig-core-build-root into main
4 files +44 -2

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

scripts/zig.test.tsmodified+3-1
Changes to scripts/zig.test.ts
@@ -80,7 +80,9 @@ test('fails early for absent executables, invalid lock versions, and invalid com
8080test('forwards arguments, core working directory, package version and compiler exit status', () => {
8181 const f = fixture()
8282 expect(runZig(f.root, ['--core', '--versioned', 'build', '-Doptimize=ReleaseSafe', '-Dfoo=a b'], f.env)).toBe(23)
83 expect(JSON.parse(readFileSync(f.env.ZIG_TEST_LOG, 'utf8'))).toEqual({ cwd: join(f.root, 'packages/zig'), args: ['build', '-Doptimize=ReleaseSafe', '-Dfoo=a b', '-Dversion=1.2.3'] })
83 expect(JSON.parse(readFileSync(f.env.ZIG_TEST_LOG, 'utf8'))).toEqual({ cwd: join(f.root, 'packages/zig'), args: ['build', '--build-file', join(f.root, 'packages/zig/build.zig'), '-Doptimize=ReleaseSafe', '-Dfoo=a b', '-Dversion=1.2.3'] })
84 expect(runZig(f.root, ['--core', 'fmt', 'src/'], f.env)).toBe(23)
85 expect(JSON.parse(readFileSync(f.env.ZIG_TEST_LOG, 'utf8'))).toEqual({ cwd: join(f.root, 'packages/zig'), args: ['fmt', 'src/'] })
8486 expect(runZig(f.root, ['fmt', 'src/'], f.env)).toBe(23)
8587 expect(JSON.parse(readFileSync(f.env.ZIG_TEST_LOG, 'utf8'))).toEqual({ cwd: f.root, args: ['fmt', 'src/'] })
8688})
scripts/zig.tsmodified+8-1
Changes to scripts/zig.ts
@@ -59,10 +59,17 @@ export function runZig(root: string, args: string[], env: NodeJS.ProcessEnv = pr
5959 const { version } = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'))
6060 command.push(`-Dversion=${version}`)
6161 }
62 if (core && command[0] === 'build') {
63 // Select the core project explicitly. A monorepo has another build.zig
64 // at its root; compiler build discovery must not select that wrapper.
65 command.splice(1, 0, '--build-file', join(root, 'packages/zig/build.zig'))
66 }
6267 const zig = resolveZig(root, env)
68 const cwd = core ? join(root, 'packages/zig') : root
6369 console.error(`Zig ${zig.version}: ${zig.path}${zig.overridden ? ' (explicit unpinned override)' : ''}`)
70 console.error(`Zig project directory: ${cwd}`)
6471 const result = Bun.spawnSync([zig.path, ...command], {
65 cwd: core ? join(root, 'packages/zig') : root,
72 cwd,
6673 env,
6774 stdin: 'inherit',
6875 stdout: 'inherit',