mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-16 03:42:21 +03:00
`main` has been red since b342c1a361 on the vitest and integration gates:
✖ tests/unit/autoCombo/provider-family-combos.test.ts > auto/<family>
✖ chat pipeline applies Codex OAuth fingerprint and priority tier inside combos
Both call resetStorage() from beforeEach, which does an fs.rmSync(TEST_DATA_DIR,
{recursive: true, force: true}) with no retry, and intermittently loses the race
with a not-yet-released SQLite handle (ENOTEMPTY).
release/v3.8.51 fixed this in #11968 with a mechanical codemod adding
maxRetries/retryDelay to every recursive rm/rmSync/rmdirSync under tests/, but
that PR landed only on the release branch. Because main only receives work at
the release squash, it stayed broken for the whole cycle — and repo-wide gates
then turn every open PR into main red on checks unrelated to their diff.
This is the --base main twin: re-runs the same codemod that already shipped on
the release branch (scripts/ad-hoc/codemod-rm-maxretries.mjs), so the two
branches converge on identical test-teardown semantics. Test-only; no product
logic is touched.
The remaining three failures reported on #12133 (unit full suite exceeding its
4800s ceiling, package-artifact exceeding 1200s, and the boot-smoke that is
skipped as a consequence) are runner-contention timeouts, not code defects —
validate-release-green.mjs runs those heavy gates concurrently on one shared
hosted runner. There is no fix to port for those.
87 lines
3.7 KiB
TypeScript
87 lines
3.7 KiB
TypeScript
import { test } from "node:test";
|
||
import assert from "node:assert/strict";
|
||
import fs from "node:fs";
|
||
import os from "node:os";
|
||
import path from "node:path";
|
||
import * as prebuildPlan from "../../scripts/build/electronRebuildPlan.mjs";
|
||
|
||
const {
|
||
SQLITE_PREBUILD_ARCHS,
|
||
SQLITE_PREBUILD_PLATFORMS,
|
||
isSqlitePrebuildSupported,
|
||
sqlitePrebuildFileName,
|
||
} = prebuildPlan;
|
||
|
||
// Since better-sqlite3 v13 (issue #10321 Stage 6) the Electron packaging no
|
||
// longer compiles the addon from source against the Electron headers: v13
|
||
// ships Node-API prebuilds for every packaged platform, and Node-API addons
|
||
// are ABI-independent (verified under electron 43 / NODE_MODULE_VERSION 148).
|
||
// These tests pin the prebuild selection logic that replaced the historical
|
||
// `npx node-gyp rebuild` spawn plan (whose win32 .cmd/shell quirk broke the
|
||
// v3.8.47 tag build — that entire code path is now gone).
|
||
|
||
test("prebuild file name mirrors better-sqlite3 lib/binding.js selection", () => {
|
||
assert.equal(sqlitePrebuildFileName("darwin", "arm64"), "darwin-arm64.node");
|
||
assert.equal(sqlitePrebuildFileName("darwin", "x64"), "darwin-x64.node");
|
||
assert.equal(sqlitePrebuildFileName("win32", "x64"), "win32-x64.node");
|
||
assert.equal(sqlitePrebuildFileName("win32", "arm64"), "win32-arm64.node");
|
||
});
|
||
|
||
test("linux resolves to the musl prebuild when glibcVersionRuntime is absent", () => {
|
||
// glibc build (GitHub ubuntu runner): header carries the runtime glibc version
|
||
assert.equal(
|
||
sqlitePrebuildFileName("linux", "x64", { glibcVersionRuntime: "2.39" }),
|
||
"linux-x64.node"
|
||
);
|
||
// musl build (Alpine): no glibcVersionRuntime -> linuxmusl prebuild
|
||
assert.equal(sqlitePrebuildFileName("linux", "x64", {}), "linuxmusl-x64.node");
|
||
assert.equal(sqlitePrebuildFileName("linux", "arm64", undefined), "linuxmusl-arm64.node");
|
||
});
|
||
|
||
test("prebuild support covers exactly the packaged platform/arch matrix", () => {
|
||
for (const platform of ["darwin", "linux", "win32"]) {
|
||
for (const arch of ["x64", "arm64"]) {
|
||
assert.equal(isSqlitePrebuildSupported(platform, arch), true);
|
||
}
|
||
}
|
||
assert.equal(isSqlitePrebuildSupported("freebsd", "x64"), false);
|
||
assert.equal(isSqlitePrebuildSupported("darwin", "ia32"), false);
|
||
});
|
||
|
||
test("packaged platform matrix matches the shipped prebuild inventory", () => {
|
||
// better-sqlite3 v13 prebuilds/: darwin/linux/linuxmusl/win32 × x64/arm64.
|
||
// The build fails fast when the prebuild for the CURRENT platform is missing,
|
||
// so this matrix must stay in sync with the npm tarball contents.
|
||
assert.deepEqual(SQLITE_PREBUILD_PLATFORMS, ["darwin", "linux", "linuxmusl", "win32"]);
|
||
assert.deepEqual(SQLITE_PREBUILD_ARCHS, ["x64", "arm64"]);
|
||
});
|
||
|
||
test("prebuild verification fails fast when the selected binary is missing", () => {
|
||
const assertSqlitePrebuildExists = (
|
||
prebuildPlan as typeof prebuildPlan & {
|
||
assertSqlitePrebuildExists?: (
|
||
moduleDir: string,
|
||
platform: string,
|
||
arch: string,
|
||
reportHeader?: { glibcVersionRuntime?: string | null }
|
||
) => string | null;
|
||
}
|
||
).assertSqlitePrebuildExists;
|
||
assert.equal(typeof assertSqlitePrebuildExists, "function");
|
||
|
||
const moduleDir = fs.mkdtempSync(path.join(os.tmpdir(), "sqlite-prebuild-"));
|
||
try {
|
||
assert.throws(
|
||
() => assertSqlitePrebuildExists?.(moduleDir, "darwin", "arm64"),
|
||
/better-sqlite3 prebuild missing for darwin-arm64/
|
||
);
|
||
|
||
const expected = path.join(moduleDir, "prebuilds", "darwin-arm64.node");
|
||
fs.mkdirSync(path.dirname(expected), { recursive: true });
|
||
fs.writeFileSync(expected, "napi");
|
||
assert.equal(assertSqlitePrebuildExists?.(moduleDir, "darwin", "arm64"), expected);
|
||
} finally {
|
||
fs.rmSync(moduleDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 });
|
||
}
|
||
});
|