learningequality / learningequality/.github
Replace fkirc/skip-duplicate-actions with a reusable skip-on-paths workflow
@rtibbles is already working on this.
Since Jun 12, 2026.
- Dominant language
- JavaScript
- Stars
- 1
- Forks
- 7
- PR merge metrics
- No merged PRs in 30d
Description
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Overview
fkirc/skip-duplicate-actions is unmaintained, pinned to @master, and runs on Node 20 — which GitHub force-migrates to Node 24 on 2026-06-16 and removes entirely on 2026-09-16. We use it across many org repos, primarily for its paths_ignore behaviour: skipping a CI run when every changed file matches an ignore glob, while still reporting success so required status checks stay green.
Replace it with a small reusable workflow hosted in this repo (learningequality/.github) that every repo can reference, then migrate all repos off the third-party action.
Complexity: Medium
Target branch: main
Context
GitHub's native paths-ignore trigger filter can't replace the action: when a required status check is filtered out by paths-ignore, it never reports a result, so the PR is blocked from merging indefinitely. This is a long-standing GitHub gap, and it's the specific reason we adopted fkirc/skip-duplicate-actions — the job still runs and reports success on ignorable-only changes, keeping required checks green.
The path-ignore skip can be replicated with a dependency-free git diff: compare the changed files against the ignore globs, and signal "skip" only when every changed file matches. Note that consumers using a shallow checkout (fetch-depth: 1) won't have the base commit available for the diff — the workflow needs to handle fetching the base ref.
The Change
Add a reusable workflow (.github/workflows/skip-on-paths.yml, on: workflow_call) in this repo that consumers call with a single job-level uses: learningequality/.github/.github/workflows/skip-on-paths.yml@main — no checkout of the .github repo required. The workflow checks out the caller's repository, computes the set of changed files for both pull_request and push events, resolves the base ref (fetching it when a shallow checkout means it isn't present), and exposes a should_skip output that is true only when every changed file matches one of the ignore globs. Consuming workflows gate their real jobs on that output via needs, so each job still runs and reports success — keeping required status checks green on ignorable-only changes.
The workflow accepts the ignore globs as a workflow_call input. Reusable-workflow inputs can't be arrays, so the globs come in as a string (e.g. a JSON or newline-delimited list matching today's ["**.po", "**.json"]). All logic lives inline in the workflow file; it must not depend on any third-party action.
Out of Scope
- The other features of
fkirc/skip-duplicate-actions(concurrent-run cancellation, duplicate-commit detection, already-succeeded skipping) are not replicated. Concurrent-run cancellation is already handled by workflow-levelconcurrency:blocks where needed. - No change to which paths each repo ignores — the workflow takes the existing glob list as input; per-repo lists are migrated as-is.
Acceptance Criteria
- A reusable workflow
skip-on-paths.yml(on: workflow_call) exists inlearningequality/.githuband is callable from other repos via a job-leveluses:, with no checkout of the.githubrepo required by the consumer. - The workflow accepts the ignore globs as a string input (e.g.
["**.po", "**.json"]), defaulting to no globs (nothing skipped). - The workflow exposes a
should_skipoutput that is true only when every changed file matches one of the ignore globs, and false when at least one changed file does not. - The skip computation works for both
pull_requestandpushevents. - The workflow resolves and fetches the base ref when the caller used a shallow checkout, so the diff is correct without requiring
fetch-depth: 0. - Gated jobs still run and report success on ignorable-only changes, so required status checks remain green.
- All logic is inline in the workflow file, with no third-party action dependencies.
- Usage is documented (README) with a copy-pasteable example showing how to call the workflow and gate a job on
should_skip. - Every repo currently using
fkirc/skip-duplicate-actionsis migrated to the new workflow, and no reference tofkirc/skip-duplicate-actionsremains across the org.
References
- Node 20 deprecation on GitHub Actions runners: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
fkirc/skip-duplicate-actions: https://github.com/fkirc/skip-duplicate-actions- Reusing workflows: https://docs.github.com/en/actions/sharing-automations/reusing-workflows
AI usage
I used Claude to draft this issue. It investigated the CI linting bottleneck and the fkirc/skip-duplicate-actions deprecation, and drafted each section from our discussion. I made all the scoping decisions (path-ignore-only scope, full rollout, reusable workflow over composite action), and reviewed and confirmed every section before it was filed.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.