源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import path from "node:path";
|
||||
|
||||
import { buildDesktopReleaseLatest } from "../../apps/desktop/scripts/build-release-latest.mjs";
|
||||
|
||||
test("desktop release latest metadata exposes CloudFront URLs for every asset", async () => {
|
||||
const dir = await mkdtemp(path.join(tmpdir(), "desktop-release-latest-"));
|
||||
try {
|
||||
await writeFile(path.join(dir, "Tutti-1.2.3-mac-arm64.dmg"), "arm");
|
||||
await writeFile(path.join(dir, "Tutti-1.2.3-mac-universal.dmg"), "uni");
|
||||
await writeFile(path.join(dir, "Tutti-1.2.3-mac-x64.dmg"), "x64");
|
||||
await writeFile(path.join(dir, "Tutti-1.2.3-win-x64.exe"), "win");
|
||||
await writeFile(path.join(dir, "latest.json"), "{}");
|
||||
|
||||
const latest = await buildDesktopReleaseLatest({
|
||||
assetDirPath: dir,
|
||||
gitSha: "537327a1",
|
||||
releaseAssetBaseUrl:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/",
|
||||
releaseTag: "v1.2.3",
|
||||
releaseNotesUrl: "https://github.com/tutti-os/tutti/releases/tag/v1.2.3",
|
||||
releasedAt: "2026-07-04T12:00:00.000Z",
|
||||
sourceRef: "main"
|
||||
});
|
||||
|
||||
assert.equal(latest.schemaVersion, "tutti.desktop.release.latest.v1");
|
||||
assert.equal(latest.tag, "v1.2.3");
|
||||
assert.equal(latest.version, "1.2.3");
|
||||
assert.equal(latest.channel, "stable");
|
||||
assert.equal(latest.prerelease, false);
|
||||
assert.equal(latest.releasedAt, "2026-07-04T12:00:00.000Z");
|
||||
assert.equal(latest.gitSha, "537327a1");
|
||||
assert.equal(latest.sourceRef, "main");
|
||||
assert.equal("releaseNotesUrl" in latest, false);
|
||||
assert.equal(
|
||||
latest.baseUrl,
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets"
|
||||
);
|
||||
assert.deepEqual(
|
||||
latest.assets.map((asset) => asset.name),
|
||||
[
|
||||
"Tutti-1.2.3-mac-arm64.dmg",
|
||||
"Tutti-1.2.3-mac-universal.dmg",
|
||||
"Tutti-1.2.3-mac-x64.dmg",
|
||||
"Tutti-1.2.3-win-x64.exe"
|
||||
]
|
||||
);
|
||||
assert.deepEqual(
|
||||
latest.assets.map((asset) => ({
|
||||
arch: asset.arch,
|
||||
format: asset.format,
|
||||
platform: asset.platform
|
||||
})),
|
||||
[
|
||||
{ arch: "arm64", format: "dmg", platform: "macos" },
|
||||
{ arch: "universal", format: "dmg", platform: "macos" },
|
||||
{ arch: "x64", format: "dmg", platform: "macos" },
|
||||
{ arch: "x64", format: "exe", platform: "windows" }
|
||||
]
|
||||
);
|
||||
assert.deepEqual(
|
||||
latest.assets.map((asset) => asset.url),
|
||||
[
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/v1.2.3/Tutti-1.2.3-mac-arm64.dmg",
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/v1.2.3/Tutti-1.2.3-mac-universal.dmg",
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/v1.2.3/Tutti-1.2.3-mac-x64.dmg",
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/v1.2.3/Tutti-1.2.3-win-x64.exe"
|
||||
]
|
||||
);
|
||||
assert.deepEqual(latest.preferredDownloads, {
|
||||
macosUniversalDmg:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/v1.2.3/Tutti-1.2.3-mac-universal.dmg",
|
||||
windowsX64Exe:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/v1.2.3/Tutti-1.2.3-win-x64.exe"
|
||||
});
|
||||
assert.ok(latest.assets.every((asset) => !("cdnUrl" in asset)));
|
||||
assert.equal(latest.downloads, undefined);
|
||||
} finally {
|
||||
await rm(dir, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("desktop release latest metadata rejects prerelease tags", async () => {
|
||||
const dir = await mkdtemp(path.join(tmpdir(), "desktop-release-latest-"));
|
||||
try {
|
||||
await writeFile(
|
||||
path.join(dir, "Tutti-1.2.3-rc.1-mac-universal.dmg"),
|
||||
"uni"
|
||||
);
|
||||
|
||||
await assert.rejects(
|
||||
() =>
|
||||
buildDesktopReleaseLatest({
|
||||
assetDirPath: dir,
|
||||
releaseAssetBaseUrl:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/",
|
||||
releaseTag: "v1.2.3-rc.1"
|
||||
}),
|
||||
/latest metadata can only be built for stable releases/
|
||||
);
|
||||
} finally {
|
||||
await rm(dir, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("desktop release latest metadata supports rc channel tags", async () => {
|
||||
const dir = await mkdtemp(path.join(tmpdir(), "desktop-release-latest-"));
|
||||
try {
|
||||
await writeFile(
|
||||
path.join(dir, "Tutti-1.2.3-rc.1-mac-universal.dmg"),
|
||||
"uni"
|
||||
);
|
||||
await writeFile(path.join(dir, "Tutti-1.2.3-rc.1-win-x64.exe"), "win");
|
||||
|
||||
const latest = await buildDesktopReleaseLatest({
|
||||
assetDirPath: dir,
|
||||
channel: "rc",
|
||||
releaseAssetBaseUrl:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/",
|
||||
releaseTag: "v1.2.3-rc.1"
|
||||
});
|
||||
|
||||
assert.equal(latest.channel, "rc");
|
||||
assert.equal(latest.prerelease, true);
|
||||
assert.equal(latest.version, "1.2.3-rc.1");
|
||||
assert.equal(
|
||||
latest.preferredDownloads.macosUniversalDmg?.includes("v1.2.3-rc.1"),
|
||||
true
|
||||
);
|
||||
assert.equal(
|
||||
latest.preferredDownloads.windowsX64Exe?.includes(
|
||||
"Tutti-1.2.3-rc.1-win-x64.exe"
|
||||
),
|
||||
true
|
||||
);
|
||||
} finally {
|
||||
await rm(dir, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("desktop release latest metadata rejects beta tags", async () => {
|
||||
const dir = await mkdtemp(path.join(tmpdir(), "desktop-release-latest-"));
|
||||
try {
|
||||
await writeFile(
|
||||
path.join(dir, "Tutti-1.2.3-beta.1-mac-universal.dmg"),
|
||||
"uni"
|
||||
);
|
||||
|
||||
await assert.rejects(
|
||||
() =>
|
||||
buildDesktopReleaseLatest({
|
||||
assetDirPath: dir,
|
||||
releaseAssetBaseUrl:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/",
|
||||
releaseTag: "v1.2.3-beta.1"
|
||||
}),
|
||||
/latest metadata can only be built for stable releases/
|
||||
);
|
||||
} finally {
|
||||
await rm(dir, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
test("desktop release latest metadata supports beta channel tags", async () => {
|
||||
const dir = await mkdtemp(path.join(tmpdir(), "desktop-release-latest-"));
|
||||
try {
|
||||
await writeFile(
|
||||
path.join(dir, "Tutti-1.2.3-beta.1-mac-universal.dmg"),
|
||||
"uni"
|
||||
);
|
||||
|
||||
const latest = await buildDesktopReleaseLatest({
|
||||
assetDirPath: dir,
|
||||
channel: "beta",
|
||||
releaseAssetBaseUrl:
|
||||
"https://d111111abcdef8.cloudfront.net/desktop-release-assets/",
|
||||
releaseTag: "v1.2.3-beta.1"
|
||||
});
|
||||
|
||||
assert.equal(latest.channel, "beta");
|
||||
assert.equal(latest.prerelease, true);
|
||||
assert.equal(latest.version, "1.2.3-beta.1");
|
||||
assert.equal(
|
||||
latest.preferredDownloads.macosUniversalDmg?.includes("v1.2.3-beta.1"),
|
||||
true
|
||||
);
|
||||
} finally {
|
||||
await rm(dir, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user