mirror of
https://github.com/VibedByKaKi/t3-code-android-nightly.git
synced 2026-10-09 03:41:17 +02:00
135 lines
5.3 KiB
TypeScript
135 lines
5.3 KiB
TypeScript
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
import { assert, it } from "@effect/vitest";
|
|
import * as Config from "effect/Config";
|
|
import * as ConfigProvider from "effect/ConfigProvider";
|
|
import * as Effect from "effect/Effect";
|
|
import * as FileSystem from "effect/FileSystem";
|
|
import * as Path from "effect/Path";
|
|
import * as PlatformError from "effect/PlatformError";
|
|
|
|
import {
|
|
readDesktopBaseVersion,
|
|
resolveNightlyBaseVersion,
|
|
resolveNightlyReleaseMetadata,
|
|
resolveNightlyTargetVersion,
|
|
writeNightlyReleaseOutput,
|
|
} from "./resolve-nightly-release.ts";
|
|
|
|
it("strips prerelease and build metadata when deriving the nightly base version", () => {
|
|
assert.equal(resolveNightlyBaseVersion("0.0.17"), "0.0.17");
|
|
assert.equal(resolveNightlyBaseVersion("9.9.9-smoke.0"), "9.9.9");
|
|
assert.equal(resolveNightlyBaseVersion("1.2.3-beta.4+build.9"), "1.2.3");
|
|
});
|
|
|
|
it.effect("bumps the patch version before deriving nightly prerelease versions", () =>
|
|
Effect.gen(function* () {
|
|
assert.equal(yield* resolveNightlyTargetVersion("0.0.17"), "0.0.18");
|
|
assert.equal(yield* resolveNightlyTargetVersion("9.9.9-smoke.0"), "9.9.10");
|
|
assert.equal(yield* resolveNightlyTargetVersion("1.2.3-beta.4+build.9"), "1.2.4");
|
|
}),
|
|
);
|
|
|
|
it.effect("reports the invalid desktop package version", () =>
|
|
Effect.gen(function* () {
|
|
const error = yield* resolveNightlyTargetVersion("nightly").pipe(Effect.flip);
|
|
|
|
assert.equal(error._tag, "InvalidDesktopPackageVersionError");
|
|
assert.equal(error.version, "nightly");
|
|
assert.equal(error.message, "Invalid desktop package version 'nightly'.");
|
|
}),
|
|
);
|
|
|
|
it("derives nightly metadata including the short commit sha in the release name", () => {
|
|
assert.deepStrictEqual(
|
|
resolveNightlyReleaseMetadata("9.9.10", "20260413", 321, "abcdef1234567890"),
|
|
{
|
|
baseVersion: "9.9.10",
|
|
version: "9.9.10-nightly.20260413.321",
|
|
tag: "v9.9.10-nightly.20260413.321",
|
|
name: "T3 Code Nightly 9.9.10-nightly.20260413.321 (abcdef123456)",
|
|
shortSha: "abcdef123456",
|
|
},
|
|
);
|
|
});
|
|
|
|
it("derives preview metadata under its own prerelease identifier", () => {
|
|
assert.deepStrictEqual(
|
|
resolveNightlyReleaseMetadata("9.9.10", "20260413", 321, "abcdef1234567890", "preview"),
|
|
{
|
|
baseVersion: "9.9.10",
|
|
version: "9.9.10-preview.20260413.321",
|
|
tag: "v9.9.10-preview.20260413.321",
|
|
name: "T3 Code Preview (maintainer test build, do not install) 9.9.10-preview.20260413.321 (abcdef123456)",
|
|
shortSha: "abcdef123456",
|
|
},
|
|
);
|
|
});
|
|
|
|
it.effect("preserves the GITHUB_OUTPUT configuration cause", () => {
|
|
const metadata = resolveNightlyReleaseMetadata("1.2.4", "20260620", 42, "abcdef1234567890");
|
|
const configCause = new ConfigProvider.SourceError({ message: "environment unavailable" });
|
|
|
|
return Effect.gen(function* () {
|
|
const configError = yield* writeNightlyReleaseOutput(metadata, true).pipe(
|
|
Effect.provideService(FileSystem.FileSystem, FileSystem.makeNoop({})),
|
|
Effect.provideService(
|
|
ConfigProvider.ConfigProvider,
|
|
ConfigProvider.make(() => Effect.fail(configCause)),
|
|
),
|
|
Effect.flip,
|
|
);
|
|
|
|
if (configError._tag !== "NightlyReleaseGitHubOutputConfigError") {
|
|
return assert.fail(`Unexpected error: ${configError._tag}`);
|
|
}
|
|
assert.instanceOf(configError.cause, Config.ConfigError);
|
|
assert.strictEqual(configError.cause.cause, configCause);
|
|
assert.notInclude(configError.message, configCause.message);
|
|
});
|
|
});
|
|
|
|
it.layer(NodeServices.layer)("readDesktopBaseVersion", (it) => {
|
|
it.effect("preserves desktop package read context and its platform cause", () =>
|
|
Effect.gen(function* () {
|
|
const fs = yield* FileSystem.FileSystem;
|
|
const path = yield* Path.Path;
|
|
const rootDir = yield* fs.makeTempDirectoryScoped({
|
|
prefix: "resolve-nightly-release-read-",
|
|
});
|
|
const packageJsonPath = path.join(rootDir, "apps/desktop/package.json");
|
|
|
|
const error = yield* readDesktopBaseVersion(rootDir).pipe(Effect.flip);
|
|
|
|
if (error._tag !== "NightlyReleaseDesktopPackageError") {
|
|
return assert.fail(`Unexpected error: ${error._tag}`);
|
|
}
|
|
assert.equal(error.operation, "read");
|
|
assert.equal(error.packageJsonPath, packageJsonPath);
|
|
assert.instanceOf(error.cause, PlatformError.PlatformError);
|
|
assert.notInclude(error.message, String((error.cause as Error).message));
|
|
}),
|
|
);
|
|
|
|
it.effect("preserves desktop package decode context and its schema cause", () =>
|
|
Effect.gen(function* () {
|
|
const fs = yield* FileSystem.FileSystem;
|
|
const path = yield* Path.Path;
|
|
const rootDir = yield* fs.makeTempDirectoryScoped({
|
|
prefix: "resolve-nightly-release-decode-",
|
|
});
|
|
const packageJsonPath = path.join(rootDir, "apps/desktop/package.json");
|
|
yield* fs.makeDirectory(path.dirname(packageJsonPath), { recursive: true });
|
|
yield* fs.writeFileString(packageJsonPath, "{");
|
|
|
|
const error = yield* readDesktopBaseVersion(rootDir).pipe(Effect.flip);
|
|
|
|
if (error._tag !== "NightlyReleaseDesktopPackageError") {
|
|
return assert.fail(`Unexpected error: ${error._tag}`);
|
|
}
|
|
assert.equal(error.operation, "decode");
|
|
assert.equal(error.packageJsonPath, packageJsonPath);
|
|
assert.ok(error.cause !== undefined);
|
|
assert.notInclude(error.message, String((error.cause as Error).message));
|
|
}),
|
|
);
|
|
});
|