37 lines · 1.1 KB
import { expect, mock, test } from "bun:test";

mock.module("cloudflare:workers", () => ({
  env: {},
  waitUntil: () => undefined,
  WorkflowEntrypoint: class {},
  DurableObject: class {},
  WorkerEntrypoint: class {},
}));

const { actionsWantingGithubToken } = await import("./github-token-notice");
const { parseWorkflow } = await import("./spec");

test("finds third-party actions that pass a GitHub token in with:, not built-ins or run steps", () => {
  const parsed = parseWorkflow(`on: push
jobs:
  lint:
    steps:
      - uses: actions/checkout@v4
        with:
          token: \${{ secrets.GITHUB_TOKEN }}
      - uses: JohnnyMorganz/stylua-action@v4
        with:
          token: \${{ secrets.GITHUB_TOKEN }}
      - uses: rhysd/action-setup-vim@v1
        with:
          token: \${{ github.token }}
      - uses: lunarmodules/luacheck@v1
      - run: echo \${{ secrets.GITHUB_TOKEN }}
`);
  if (!parsed.ok) throw new Error(parsed.error);
  expect(actionsWantingGithubToken(parsed.spec)).toEqual([
    "JohnnyMorganz/stylua-action@v4",
    "rhysd/action-setup-vim@v1",
  ]);
});