Replace fkirc/skip-duplicate-actions with a reusable skip-on-paths workflow
@rtibbles ya está trabajando en esto.
Desde el 12/6/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
❌ 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.
- Lenguaje dominante
- JavaScript
- Estrellas
- 1
- Forks
- 7
- Merge medio
- 12 min
- PR fusionados (30 d)
- 1
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de learningequality/.github
-
github_actions
Dificultad 5/5 Más de una semana Aptitud para principiantes 55/100
learningequality/.github#95 ·
-
learningequality/.github#67 · 1 comentario · 1 asignado ·
Todos los issues de learningequality/.github
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
palladius/rails8-app-on-gcp#145 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
dotenvx/dotenv-vscode#139 ·
-
test-change-proposal
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
web-platform-tests/interop#1455 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
corsairdev/corsair#1764 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100