122 lines · 4.9 KB · TypeScript
RawDownload
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.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));    }),  );});