mirror of
https://github.com/awalsh128/cache-apt-pkgs-action.git
synced 2026-11-14 13:56:35 +00:00
Every job in a run uploaded capa_artifacts-<run id>, so only the first upload succeeded. Add the run attempt, job and step IDs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
117 lines
3.7 KiB
TypeScript
117 lines
3.7 KiB
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { Artifacts, Instruments } from "../src/instrumentation.ts";
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
|
|
describe("instrumentation", () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
vi.unstubAllEnvs();
|
|
});
|
|
|
|
const ARTIFACT_FILENAMES = [
|
|
"capa_app.log",
|
|
"capa_exec.log",
|
|
"cache_key.json",
|
|
"manifest_main.json",
|
|
"manifest_all.json",
|
|
];
|
|
|
|
describe("Artifacts", () => {
|
|
it("constructor initializes properties correctly", () => {
|
|
const dir = "/path/to/artifacts";
|
|
const debug = true;
|
|
const runId = "test-run-id";
|
|
|
|
const artifacts = new Artifacts(dir, ARTIFACT_FILENAMES, debug, runId);
|
|
expect(artifacts).toEqual({
|
|
dir: dir,
|
|
artifactFilenames: ARTIFACT_FILENAMES,
|
|
debug: debug,
|
|
runId: runId,
|
|
});
|
|
});
|
|
|
|
it("constructor generates a random runId when not provided", () => {
|
|
const dir = "/path/to/artifacts";
|
|
const debug = false;
|
|
// GitHub Actions sets this, so clear it to test the fallback.
|
|
vi.stubEnv("GITHUB_RUN_ID", undefined);
|
|
|
|
const artifacts = new Artifacts(dir, ARTIFACT_FILENAMES, debug);
|
|
expect(artifacts.runId).toMatch(/^ghrunid-notfound-/);
|
|
});
|
|
|
|
it("name in a workflow step includes attempt, job and step", () => {
|
|
vi.stubEnv("GITHUB_RUN_ATTEMPT", "2");
|
|
vi.stubEnv("GITHUB_JOB", "list_versions");
|
|
vi.stubEnv("GITHUB_ACTION", "execute");
|
|
|
|
const artifacts = new Artifacts("/dir", ARTIFACT_FILENAMES, false, "123");
|
|
|
|
expect(artifacts.name).toBe(
|
|
"capa_artifacts-123-2-list_versions-execute",
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("Instruments", () => {
|
|
const CACHE_DIRNAME = "cache-apt-pkgs";
|
|
|
|
it("constructor cache dir missing creates it under home with the logs", async () => {
|
|
const home = fs.mkdtempSync(path.join(os.tmpdir(), "instruments-test-"));
|
|
vi.stubEnv("HOME", home);
|
|
const expectedDir = path.join(home, CACHE_DIRNAME);
|
|
|
|
const instruments = new Instruments(CACHE_DIRNAME, false);
|
|
instruments.appLogger.info("app message");
|
|
await new Promise((resolve) => instruments.appLogger.end(resolve));
|
|
|
|
expect(instruments.cacheDirPath).toBe(expectedDir);
|
|
expect(instruments.artifacts.dir).toBe(expectedDir);
|
|
await vi.waitFor(() =>
|
|
expect(
|
|
fs.readFileSync(path.join(expectedDir, "capa_app.log"), "utf8"),
|
|
).toContain("app message"),
|
|
);
|
|
fs.rmSync(home, { recursive: true, force: true });
|
|
});
|
|
});
|
|
|
|
// describe("Instruments", () => {
|
|
// it("constructor initializes properties correctly", () => {
|
|
// const cacheDir = "/path/to/cache";
|
|
// const debug = true;
|
|
// const artifacts = new Artifacts(
|
|
// "/path/to/cache",
|
|
// ARTIFACT_FILENAMES,
|
|
// debug,
|
|
// );
|
|
|
|
// const instruments = new Instruments(cacheDir, debug, artifacts);
|
|
// expect(instruments).toEqual({
|
|
// cacheDir: cacheDir,
|
|
// debug: debug,
|
|
// artifacts: artifacts,
|
|
// appLogger: expect.toBeTypeOf("object"),
|
|
// execLogger: expect.toBeTypeOf("object"),
|
|
// });
|
|
// });
|
|
|
|
// it("constructor initializes artifacts when not provided", () => {
|
|
// const cacheDir = "/path/to/cache";
|
|
// const debug = false;
|
|
|
|
// const instruments = new Instruments(cacheDir, debug);
|
|
// expect(instruments).toEqual({
|
|
// cacheDir: cacheDir,
|
|
// debug: debug,
|
|
// artifacts: expect.toBeTypeOf("object"),
|
|
// appLogger: expect.toBeTypeOf("object"),
|
|
// execLogger: expect.toBeTypeOf("object"),
|
|
// });
|
|
// });
|
|
// });
|
|
});
|