mirror of
https://github.com/nexu-io/open-design.git
synced 2026-07-08 07:19:17 +08:00
* fix(tools-pack): use junctions for Windows standalone peer deps * fix(desktop): expose IPC during startup * fix(tools-pack): preserve Windows inspect diagnostics * fix(tools-pack): report Windows inspect status errors * fix(packaged): use Electron net fetch for app protocol * fix(packaged): load Windows renderer from web sidecar * fix(desktop): show Windows packaged window during startup * fix(packaged): disable Windows GPU startup * fix(tools-pack): keep Windows core smoke observable * fix(packaged): remove Windows startup probes * fix(tools-pack): trace Windows desktop IPC status * fix(tools-pack): add Windows IPC diagnose loop * fix(release): default beta-s Windows updater feed * chore: clean merged test eof * refactor(release): unify prerelease channel model * chore(release): close prerelease doc escape hatches * refactor(release): converge release channel workflows * fix(release): install toolchain in metadata jobs * fix(release): build release package before contracts * chore(release): bump development version to 0.10.1 * fix(e2e): seed windows packaged smoke runtime config * fix(release): install toolchain for metadata publish * fix(release): materialize betas metadata checkout * chore(release): bump development version to 0.10.2 * fix(release): allow betas metadata cold start from s3 * fix(e2e): support betas packaged update scenarios * fix(release): pass betas channel into packaged smoke * fix(release): set betas channel during self-hosted builds * fix(release): verify counted channel reservations * fix(release): use pnpm cmd for betas windows publish * fix(release): add betas manifest artifact fallback * fix(release): skip beta-s public metadata fetch * fix(release): read beta-s manifests from storage * fix(release): cache beta windows tools-pack builds * fix(release): inline beta mac tools-pack builds * fix(pack): deep sign unsigned mac bundles * docs(pack): document payload-first beta updater validation * fix(release): align preview tools-pack cache flow * fix(release): align prerelease tools-pack cache flow * fix(release): pass github token to prerelease metadata * fix(release): setup pnpm before feishu notify * fix(release): add stable dry-run prepublish flow * fix(release): accept completed prerelease metadata gate * fix(release): require stable release branches * fix(release): converge r2 access checks * fix(updater): use release channel parser for defaults * fix(updater): harden windows payload relaunch * fix(release): converge updater smoke fixture contract * test(e2e): require silent updater fixture output * fix(release): align stable windows smoke build path * fix(ci): include release workspace in validation * fix(ci): repair release validation lanes Generated-By: looper 0.9.10+codex.autoclean (runner=fixer, agent=codex) * fix(ci): restore zero-install Feishu notification Generated-By: looper 0.9.10+codex.autoclean (runner=fixer, agent=codex) --------- Co-authored-by: Looper <looper@noreply.github.com>
73 lines
2.7 KiB
TypeScript
73 lines
2.7 KiB
TypeScript
import { execFile as execFileCallback } from "node:child_process";
|
|
import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
import { createRequire } from "node:module";
|
|
import { tmpdir } from "node:os";
|
|
import { dirname, join, resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { promisify } from "node:util";
|
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
const execFileAsync = promisify(execFileCallback);
|
|
const require = createRequire(import.meta.url);
|
|
const testDir = dirname(fileURLToPath(import.meta.url));
|
|
const workspaceRoot = resolve(testDir, "..", "..", "..");
|
|
const tsxCliPath = require.resolve("tsx/cli");
|
|
|
|
async function writeAsset(root: string, group: string, name: string): Promise<void> {
|
|
const dir = join(root, group);
|
|
await mkdir(dir, { recursive: true });
|
|
await writeFile(join(dir, name), `${name}\n`, "utf8");
|
|
}
|
|
|
|
describe("stable GitHub Release asset plan", () => {
|
|
it("selects only installers/packages and sha files from the full release bundle", async () => {
|
|
const root = await mkdtemp(join(tmpdir(), "od-tools-release-github-assets-"));
|
|
const source = join(root, "source");
|
|
const output = join(root, "github-assets");
|
|
const outputsPath = join(root, "outputs.json");
|
|
const version = "0.10.2";
|
|
|
|
try {
|
|
const allowed = [
|
|
`open-design-${version}-mac-arm64.dmg`,
|
|
`open-design-${version}-mac-arm64.dmg.sha256`,
|
|
`open-design-${version}-mac-x64.dmg`,
|
|
`open-design-${version}-mac-x64.dmg.sha256`,
|
|
`open-design-${version}-win-x64-setup.exe`,
|
|
`open-design-${version}-win-x64-setup.exe.sha256`,
|
|
];
|
|
for (const name of allowed) {
|
|
await writeAsset(source, name.includes("win") ? "win" : name.includes("x64") ? "mac-intel" : "mac", name);
|
|
}
|
|
for (const name of [
|
|
`open-design-${version}-mac-arm64-payload.zip`,
|
|
`open-design-${version}-mac-x64.zip`,
|
|
`open-design-${version}-win-x64-payload.7z`,
|
|
`open-design-${version}-win-x64-portable.zip`,
|
|
"latest.yml",
|
|
"latest-mac.yml",
|
|
]) {
|
|
await writeAsset(source, "extra", name);
|
|
}
|
|
|
|
await execFileAsync(process.execPath, [tsxCliPath, "tools/release/src/index.ts", "prepare-github-assets"], {
|
|
cwd: workspaceRoot,
|
|
env: {
|
|
...process.env,
|
|
RELEASE_CHANNEL: "stable",
|
|
RELEASE_GITHUB_ASSETS_DIR: output,
|
|
RELEASE_GITHUB_ASSETS_SOURCE_DIR: source,
|
|
RELEASE_OUTPUTS_PATH: outputsPath,
|
|
RELEASE_VERSION: version,
|
|
},
|
|
});
|
|
|
|
const outputs = JSON.parse(await readFile(outputsPath, "utf8")) as { assets: string[] };
|
|
expect(outputs.assets).toEqual(allowed);
|
|
} finally {
|
|
await rm(root, { force: true, recursive: true });
|
|
}
|
|
});
|
|
});
|