diff --git a/.github/scripts/ci-changes.cjs b/.github/scripts/ci-changes.cjs index 0f817be60c35..b47199351c4d 100644 --- a/.github/scripts/ci-changes.cjs +++ b/.github/scripts/ci-changes.cjs @@ -5,11 +5,38 @@ const path = require("node:path"); const root = path.resolve(__dirname, "../.."); +// Workflows no test reads. ci.yml defines the CI jobs, tests read release.yml +// and web-preview.yml, and a workflow missing from this list runs everything. +const INERT_WORKFLOWS = [ + "agent-context-budget", + "deploy-relay", + "desktop-macos-preview", + "desktop-macos-preview-publish", + "issue-labels", + "mobile-android-apk", + "mobile-eas-preview", + "mobile-eas-preview-fork", + "mobile-eas-production", + "mobile-fingerprint-check", + "mobile-fingerprint-label", + "mobile-showcase-screenshots", + "pr-size", + "pr-vouch", + "publish-aur", + "relay-preview", + "relay-preview-cleanup", + "release-desktop", + "stale-needs-more-info", + "thread-transfer-report", + "windows-tests", +]; + const INERT = [ /^docs\//, /^\.(agents|cursor|vscode|devcontainer|macroscope|repos)\//, /^[^/]+\.md$/, /^LICENSE$/, + new RegExp(`^\\.github/workflows/(${INERT_WORKFLOWS.join("|")})\\.yml$`), ]; // Shared test setup and vendored mobile dependencies affect every package. diff --git a/scripts/check-changed.test.ts b/scripts/check-changed.test.ts index b0e0fe01e851..3e22936389c1 100644 --- a/scripts/check-changed.test.ts +++ b/scripts/check-changed.test.ts @@ -46,6 +46,27 @@ describe("check:changed", () => { assert.deepStrictEqual(decide(["docs/user/install.md"], packages, false).affected, []); }); + it("runs no package jobs for workflows that package tests do not read", () => { + const packages = readWorkspace(); + const { affected, outputs } = decide([".github/workflows/pr-size.yml"], packages, false); + assert.deepStrictEqual(affected, []); + assert.isFalse(Object.values(outputs).some((value) => value === true)); + assert.deepStrictEqual( + decide([".github/workflows/pr-size.yml", "apps/web/src/main.tsx"], packages, false).affected, + ["@t3tools/scripts", "@t3tools/web"], + ); + for (const file of [ + ".github/workflows/ci.yml", + ".github/workflows/release.yml", + ".github/workflows/web-preview.yml", + ".github/workflows/new-workflow.yml", + ".github/scripts/ci-changes.cjs", + ".github/actions/ci-changes/action.yml", + ]) { + assert.lengthOf(decide([file], packages, false).affected, packages.length, file); + } + }); + it.effect( "keeps weighted steps within the budget, in order, and serial steps one at a time", () =>