jestjs/jest GitHub Actions scorecardPublic GitHub Actions data, last 30 days. Updated .
Data sourced from public GitHub. GitSpider is not affiliated with or endorsed by this repository's owners. Request removal.
Biggest wins first, each with the exact config fix.
Publish Any CommitPushing to a branch and opening a PR triggers two runs. Pick one (usually `pull_request`) and exclude branch pushes for non-default branches.
on:
push:
branches: [main]
pull_request:Close stale issues and PRsAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueCheck ChangelogNo job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15Check ChangelogRuns on every push/PR with no `paths:` filter, so docs-only changes still trigger full CI. Add a `paths:` filter if that's common.
on:
pull_request:
paths:
- 'src/**'
- 'package.json'Close stale issues and PRsNo job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15Close stale issues and PRsThe schedule fires at minute :00, GitHub's peak window, where scheduled runs get delayed or skipped. Shift to any other minute for the same cadence with less contention.
on:
schedule:
- cron: '20 * * * *' # was '0 * * * *' — any non-:00 minute avoids the herdClose stale issues and PRsThe schedule has no repository guard, so forks that enable Actions inherit the cron and burn their own minutes. Gate the job with `if: github.repository == 'owner/repo'`.
jobs:
nightly:
if: github.repository == 'owner/repo'
runs-on: ubuntu-latestNode Nightly CINo job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15Node Nightly CImacOS bills ~10x and Windows ~2x a Linux minute. The cost estimate above assumes Linux, so your real spend is higher. Move any job that doesn't need them to `ubuntu-latest`.
jobs:
build:
runs-on: ubuntu-latest # ~10x cheaper than macos-latestNode Nightly CIThe schedule fires at minute :00, GitHub's peak window, where scheduled runs get delayed or skipped. Shift to any other minute for the same cadence with less contention.
on:
schedule:
- cron: '31 12 * * *' # was '0 12 * * *' — any non-:00 minute avoids the herdNode Nightly CIThe schedule has no repository guard, so forks that enable Actions inherit the cron and burn their own minutes. Gate the job with `if: github.repository == 'owner/repo'`.
jobs:
nightly:
if: github.repository == 'owner/repo'
runs-on: ubuntu-latestNode CINo job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15Node CIRuns on every push/PR with no `paths:` filter, so docs-only changes still trigger full CI. Add a `paths:` filter if that's common.
on:
pull_request:
paths:
- 'src/**'
- 'package.json'Node CImacOS bills ~10x and Windows ~2x a Linux minute. The cost estimate above assumes Linux, so your real spend is higher. Move any job that doesn't need them to `ubuntu-latest`.
jobs:
build:
runs-on: ubuntu-latest # ~10x cheaper than macos-latestNode CISystem packages install from the network on every run with no cache. Cache them (cache-apt-pkgs-action) or check whether the runner image already has the tool.
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: <your packages>
version: 1.0Node CITests run under an auto-retry wrapper, so each retry re-bills the same minutes and masks the flaky tests it papers over. Track, fix or quarantine the flakes, then drop the wrapper.
Publish Any CommitNo job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15Publish Any CommitRuns on every push/PR with no `paths:` filter, so docs-only changes still trigger full CI. Add a `paths:` filter if that's common.
on:
pull_request:
paths:
- 'src/**'
- 'package.json'Publish Any CommitThis looks like a deploy/release workflow with `cancel-in-progress: true`, which cancels queued runs too, so a queued deploy is silently dropped when a newer run arrives. Use a group-only `concurrency:` block on deploys.
concurrency:
group: ${{ github.workflow }}
# queued deploys run in order; none are droppedRequire ChangelogNo job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15# Workflow runs on both push and pull_request (applies to: Publish Any Commit)
on:
push:
branches: [main]
pull_request:
# No concurrency control (applies to: Close stale issues and PRs)
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# No job timeout (applies to: Check Changelog, Close stale issues and PRs, Node Nightly CI, Node CI, Publish Any Commit, Require Changelog)
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15
# No path filters on triggers (applies to: Check Changelog, Node CI, Publish Any Commit)
on:
pull_request:
paths:
- 'src/**'
- 'package.json'
# Scheduled at the top of the hour (applies to: Close stale issues and PRs)
on:
schedule:
- cron: '20 * * * *' # was '0 * * * *' — any non-:00 minute avoids the herd
# Scheduled workflow runs in forks (applies to: Close stale issues and PRs, Node Nightly CI)
jobs:
nightly:
if: github.repository == 'owner/repo'
runs-on: ubuntu-latest
# Premium runners (macOS / Windows) (applies to: Node Nightly CI, Node CI)
jobs:
build:
runs-on: ubuntu-latest # ~10x cheaper than macos-latest
# Scheduled at the top of the hour (applies to: Node Nightly CI)
on:
schedule:
- cron: '31 12 * * *' # was '0 12 * * *' — any non-:00 minute avoids the herd
# System packages reinstalled every run (applies to: Node CI)
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: <your packages>
version: 1.0
# cancel-in-progress on a deploy workflow (applies to: Publish Any Commit)
concurrency:
group: ${{ github.workflow }}
# queued deploys run in order; none are droppedEach snippet is representative. Merge into the named workflow files rather than pasting wholesale.
This scorecard is a one-time snapshot. Install the free GitHub App to track this repo continuously: new regressions caught as they land, trends over time, on your public and private repos. Team adds the offending commit on the PR + Slack alerts.
Install & monitor this repo →💬 On Team, this same analysis posts automatically to every PR: the regression, and the exact commit that caused it, right where your team already looks. See plans →
Not ready to install? Get this report by email. No spam, unsubscribe anytime.