import { assertStringIncludes } from "@std/assert"; import { describe, it as test } from "@std/testing/bdd"; const TEST_WORKFLOW_PATH = ".github/workflows/test.yml"; const readWorkflow = (): Promise => Deno.readTextFile(TEST_WORKFLOW_PATH); /** The `on:` block, which ends at the next top-level key. */ const triggers = (workflow: string): string => { const start = workflow.indexOf("\non:\n"); if (start < 0) throw new Error(`${TEST_WORKFLOW_PATH} declares no triggers`); const body = workflow.slice(start + 1); const end = body.search(/\n[a-z]/); return end < 0 ? body : body.slice(0, end); }; describe("Test workflow triggers", () => { test("does not run the suite twice on a merge queue branch", async () => { // A queue branch arrives as a push, so without this the suite runs once // for `push` and again for `merge_group`. A stalled duplicate once timed // the queue out an hour after the real run had passed. assertStringIncludes( triggers(await readWorkflow()), 'branches-ignore: [main, "gh-readonly-queue/**"]', ); }); test("still reports on a merge queue branch", async () => { // `checks`, `specs`, and `test` are required status checks on `main` // (ruleset 21611101, required as of issue #2295). Once checks are // required, a queue branch with no `merge_group` run reports nothing, // and the queue waits for a check that never arrives. assertStringIncludes(triggers(await readWorkflow()), "merge_group:"); }); test("still runs on every branch a person pushes", async () => { assertStringIncludes(triggers(await readWorkflow()), "push:"); }); });