fix: tests depended on ambient CONTEXT7_API_KEY, broke in CI
\`lh doctor\`'s context7 check is a required, env-only check by design (ADR: never inferred, never persisted). Tests that shell out to \`lh\` or \`scripts/onboard.mjs\` inherited whatever CONTEXT7_API_KEY the developer's shell happened to export, so \`doctor passes once the repo is initialised\` and the onboard-script e2e test only ever passed on machines with a real key set — never verified in a clean environment until this CI run (no secret configured, correctly). Fixed by injecting an obviously-fake fixture key (TEST_ENV in helpers.mjs, exported and reused by onboard.test.mjs) into every subprocess these tests spawn, so behaviour no longer depends on the ambient shell. Verified locally with \`env -u CONTEXT7_API_KEY\` to reproduce the CI environment exactly: 58/58 pass either way now. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
+9
-1
@@ -9,6 +9,14 @@ export const CLI = join(ROOT, 'src', 'cli.mjs');
|
||||
|
||||
const created = [];
|
||||
|
||||
/**
|
||||
* `lh doctor`/`lh init` treat CONTEXT7_API_KEY as a required, env-only value
|
||||
* (never persisted, never inferred). Tests must not depend on whatever the
|
||||
* developer's shell happens to export — inject an obviously-fake fixture so
|
||||
* behaviour is identical locally and in CI, without ever touching a real key.
|
||||
*/
|
||||
export const TEST_ENV = { ...process.env, CONTEXT7_API_KEY: process.env.CONTEXT7_API_KEY ?? 'fixture-not-a-real-key' };
|
||||
|
||||
export function tempRepo(files = {}) {
|
||||
const dir = mkdtempSync(join(tmpdir(), 'lh-test-'));
|
||||
created.push(dir);
|
||||
@@ -41,7 +49,7 @@ export function commitAll(dir, msg) {
|
||||
export function lh(dir, args) {
|
||||
try {
|
||||
const stdout = execFileSync(process.execPath, [CLI, ...args], {
|
||||
cwd: dir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'],
|
||||
cwd: dir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], env: TEST_ENV,
|
||||
});
|
||||
return { code: 0, stdout, stderr: '' };
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user