chore: add local artifact cleanup script
This commit is contained in:
parent
ceb8a1f8cb
commit
499fceb689
@ -73,6 +73,7 @@ pnpm check:logs
|
|||||||
pnpm check:brand
|
pnpm check:brand
|
||||||
pnpm check:artifacts
|
pnpm check:artifacts
|
||||||
pnpm check:quality
|
pnpm check:quality
|
||||||
|
pnpm clean:artifacts
|
||||||
pnpm exec tsc --noEmit --pretty false
|
pnpm exec tsc --noEmit --pretty false
|
||||||
pnpm test
|
pnpm test
|
||||||
pnpm db:migrate
|
pnpm db:migrate
|
||||||
|
|||||||
@ -11,6 +11,7 @@ pnpm check:brand
|
|||||||
pnpm exec tsc --noEmit --pretty false
|
pnpm exec tsc --noEmit --pretty false
|
||||||
git diff --check
|
git diff --check
|
||||||
pnpm check:artifacts
|
pnpm check:artifacts
|
||||||
|
pnpm clean:artifacts
|
||||||
```
|
```
|
||||||
|
|
||||||
等价的一键质量门禁:
|
等价的一键质量门禁:
|
||||||
@ -21,6 +22,8 @@ pnpm check:quality
|
|||||||
|
|
||||||
其中 `pnpm check:artifacts` 会检查 `.DS_Store`、swap 文件、`.env.local`、`.claude/`、migration backup 和 `tsconfig.tsbuildinfo` 等本地污染物是否被 Git 追踪。
|
其中 `pnpm check:artifacts` 会检查 `.DS_Store`、swap 文件、`.env.local`、`.claude/`、migration backup 和 `tsconfig.tsbuildinfo` 等本地污染物是否被 Git 追踪。
|
||||||
|
|
||||||
|
`pnpm clean:artifacts` 会清理当前工作区常见本地垃圾文件,例如 `.DS_Store`、swap 文件和 `tsconfig.tsbuildinfo`。它会跳过 `.git`、`node_modules`、`.next`、`.pnpm-store`、`.venv` 等重目录,适合在提交或打包前手动执行。
|
||||||
|
|
||||||
## CI
|
## CI
|
||||||
|
|
||||||
`.github/workflows/lint.yml` 是基础质量门禁,运行 `pnpm check:quality`,负责 lint、日志治理、公开交付面品牌治理、类型检查、diff hygiene 和 tracked 污染物检查。
|
`.github/workflows/lint.yml` 是基础质量门禁,运行 `pnpm check:quality`,负责 lint、日志治理、公开交付面品牌治理、类型检查、diff hygiene 和 tracked 污染物检查。
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
"check:artifacts": "node scripts/check-tracked-artifacts.mjs",
|
"check:artifacts": "node scripts/check-tracked-artifacts.mjs",
|
||||||
"check:brand": "node scripts/check-brand-hygiene.mjs",
|
"check:brand": "node scripts/check-brand-hygiene.mjs",
|
||||||
"check:quality": "pnpm lint && pnpm check:logs && pnpm check:brand && pnpm exec tsc --noEmit --pretty false && git diff --check && pnpm check:artifacts",
|
"check:quality": "pnpm lint && pnpm check:logs && pnpm check:brand && pnpm exec tsc --noEmit --pretty false && git diff --check && pnpm check:artifacts",
|
||||||
|
"clean:artifacts": "node scripts/clean-local-artifacts.mjs",
|
||||||
"smoke:routes": "node scripts/smoke-routes.mjs",
|
"smoke:routes": "node scripts/smoke-routes.mjs",
|
||||||
"format": "pnpm exec ultracite fix",
|
"format": "pnpm exec ultracite fix",
|
||||||
"db:generate": "drizzle-kit generate",
|
"db:generate": "drizzle-kit generate",
|
||||||
|
|||||||
52
scripts/clean-local-artifacts.mjs
Normal file
52
scripts/clean-local-artifacts.mjs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
import { readdirSync, rmSync } from "node:fs";
|
||||||
|
import { join, relative } from "node:path";
|
||||||
|
|
||||||
|
const root = process.cwd();
|
||||||
|
const skippedDirectories = new Set([
|
||||||
|
".git",
|
||||||
|
".next",
|
||||||
|
".pnpm-store",
|
||||||
|
".turbo",
|
||||||
|
".venv",
|
||||||
|
"node_modules",
|
||||||
|
"playwright-report",
|
||||||
|
"test-results",
|
||||||
|
]);
|
||||||
|
|
||||||
|
const shouldRemove = (name) =>
|
||||||
|
name === ".DS_Store" || name === "tsconfig.tsbuildinfo" || name.endsWith(".swp");
|
||||||
|
|
||||||
|
const removed = [];
|
||||||
|
|
||||||
|
function walk(directory) {
|
||||||
|
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
||||||
|
const path = join(directory, entry.name);
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
if (skippedDirectories.has(entry.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
walk(path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shouldRemove(entry.name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rmSync(path, { force: true });
|
||||||
|
removed.push(relative(root, path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
walk(root);
|
||||||
|
|
||||||
|
if (removed.length === 0) {
|
||||||
|
console.log("No local artifacts found.");
|
||||||
|
} else {
|
||||||
|
console.log(`Removed ${removed.length} local artifact${removed.length === 1 ? "" : "s"}:`);
|
||||||
|
for (const file of removed) {
|
||||||
|
console.log(`- ${file}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user