Homebrew/brew 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.
DockerAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueDocumentationAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueCodeQLAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueLicensesAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueCommit StyleAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueCIRuns 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'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-latestDockerNo 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: 15Docker`upload-artifact` has no `retention-days`, so artifacts keep up to 90 days (storage cost). Set e.g. `retention-days: 7`.
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
retention-days: 7DockerRuns 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'Update SPDX license dataNo 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: 15Update SPDX license dataThe 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: '10 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herdUpdate Sorbet filesNo 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: 15Update Sorbet filesmacOS 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-latestUpdate Sorbet filesThe 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: '13 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herdCodeQLNo 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: 15CodeQLRuns 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'Update sponsors, maintainers, manpage and completionsNo 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: 15Update sponsors, maintainers, manpage and completionsThe 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: '47 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herdDocumentationRuns 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'Autogenerated files checkNo 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: 15ActionlintNo 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: 15Actionlint`upload-artifact` has no `retention-days`, so artifacts keep up to 90 days (storage cost). Set e.g. `retention-days: 7`.
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
retention-days: 7ActionlintRuns 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'ActionlintSystem 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.0Update SBOM schemaNo 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: 15Update SBOM schemaThe 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: '55 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herdCheck pull requestsNo 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: 15Manage stale issues and pull requestsNo 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: 15Manage stale issues and pull requestsThe 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: '54 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herdCommit StyleNo 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: 15Commit StyleRuns 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'# No concurrency control (applies to: Docker, Documentation, CodeQL, Licenses, Commit Style)
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# No path filters on triggers (applies to: CI, Docker, CodeQL, Documentation, Actionlint, Commit Style)
on:
pull_request:
paths:
- 'src/**'
- 'package.json'
# Premium runners (macOS / Windows) (applies to: CI, Update Sorbet files)
jobs:
build:
runs-on: ubuntu-latest # ~10x cheaper than macos-latest
# No job timeout (applies to: Docker, Update SPDX license data, Update Sorbet files, CodeQL, Update sponsors, maintainers, manpage and completions, Autogenerated files check, Actionlint, Update SBOM schema, Check pull requests, Manage stale issues and pull requests, Commit Style)
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15
# Artifacts at default retention (applies to: Docker, Actionlint)
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
retention-days: 7
# Scheduled at the top of the hour (applies to: Update SPDX license data)
on:
schedule:
- cron: '10 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herd
# Scheduled at the top of the hour (applies to: Update Sorbet files)
on:
schedule:
- cron: '13 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herd
# Scheduled at the top of the hour (applies to: Update sponsors, maintainers, manpage and completions)
on:
schedule:
- cron: '47 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herd
# System packages reinstalled every run (applies to: Actionlint)
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: <your packages>
version: 1.0
# Scheduled at the top of the hour (applies to: Update SBOM schema)
on:
schedule:
- cron: '55 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herd
# Scheduled at the top of the hour (applies to: Manage stale issues and pull requests)
on:
schedule:
- cron: '54 0 * * *' # was '0 0 * * *' — any non-:00 minute avoids the herdEach 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, every PR gets an automatic comment when its CI run fails or runs slow, right where your team already looks. See plans →
Not ready to install? Get this report by email. No spam, unsubscribe anytime.