mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-31 01:37:24 +00:00
2dbfd85506
* ci(linter): add renovate/no-sync-io rule Flags calls to a fixed list of Node.js sync I/O APIs (readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync, statSync, existsSync, copyFileSync, execSync, spawnSync, execFileSync) in tools/** and **/*.spec.ts only; production lib code is not targeted. Set to "warn" instead of "error": the repo has 40 pre-existing violations, exceeding the agreed fix threshold of 30, so violations are left in place for follow-up rather than mass-fixed here. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * ci(linter): enforce renovate/no-sync-io at error Promote the rule from warn to error now that the codebase has been migrated off synchronous I/O in tools/ and spec files. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * refactor(tools): migrate synchronous fs calls to async equivalents Replace *Sync fs calls with their async/promise-based counterparts in tools/ scripts (generate-imports, check runner, utils, cwdchanged hook) now that renovate/no-sync-io is enforced at error there. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test: migrate synchronous fs calls in specs to async equivalents Replace *Sync fs calls (readdirSync, writeFileSync, existsSync, etc.) with their async/promise-based counterparts across affected spec files, making the enclosing it()/module-scope initializers async as needed, to satisfy renovate/no-sync-io now enforced at error. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * ci(linter): replace custom no-sync-io rule with built-in node/no-sync The oxc built-in covers a superset of the custom fixed-name list. Migrate the additionally flagged sites: async glob in test-shards, async execa in prepare-deps, promisified gzip/generateKeyPair in rpm/hex specs, and rename the misleading execSync mock alias (it mocks the async rawExec). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { access } from 'node:fs/promises';
|
|
import { join } from 'node:path';
|
|
import { getRepoRoot } from './utils/git.ts';
|
|
import { provision } from './utils/provision.ts';
|
|
import { CwdChangedHookInput } from './utils/schemas.ts';
|
|
import { readStdin } from './utils/stdin.ts';
|
|
|
|
let parsed: unknown;
|
|
try {
|
|
parsed = JSON.parse(await readStdin());
|
|
} catch (e) {
|
|
console.error(
|
|
`Failed to parse Hook input as JSON. Error: ${JSON.stringify(e)}`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
const result = CwdChangedHookInput.safeParse(parsed);
|
|
if (!result.success) {
|
|
console.error(
|
|
`Failed to validate Hook input against schema. Error: ${JSON.stringify(result.error)}`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
const root = await getRepoRoot(result.data.cwd);
|
|
|
|
async function pathExists(path: string): Promise<boolean> {
|
|
try {
|
|
await access(path);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Only provision a checkout that isn't installed yet (e.g. a fresh worktree).
|
|
// No-op in the already-installed main checkout and on ordinary cd.
|
|
if (!root || (await pathExists(join(root, 'node_modules')))) {
|
|
process.exit(0);
|
|
}
|
|
|
|
await provision(root);
|