spf13/viper 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.
PR ChecksNo 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: 15CINo 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: 15CIThe matrix expands to many parallel jobs per run, multiplying billable minutes, often more combos than you need. Trim the axes, or use `include:` to list only the combinations that matter.
strategy:
fail-fast: true
matrix:
include:
- { os: ubuntu-latest, node: 20 }
- { os: ubuntu-latest, node: 22 }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-latestClose stale issuesAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueClose stale issuesNo 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 issuesThe 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: '56 3 * * *' # was '0 3 * * *' — any non-:00 minute avoids the herdClose stale issuesThe 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-latestOctoslashNo 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# No job timeout (applies to: PR Checks, CI, Close stale issues, Octoslash)
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15
# Large build matrix (applies to: CI)
strategy:
fail-fast: true
matrix:
include:
- { os: ubuntu-latest, node: 20 }
- { os: ubuntu-latest, node: 22 }
# Premium runners (macOS / Windows) (applies to: CI)
jobs:
build:
runs-on: ubuntu-latest # ~10x cheaper than macos-latest
# No concurrency control (applies to: Close stale issues)
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Scheduled at the top of the hour (applies to: Close stale issues)
on:
schedule:
- cron: '56 3 * * *' # was '0 3 * * *' — any non-:00 minute avoids the herd
# Scheduled workflow runs in forks (applies to: Close stale issues)
jobs:
nightly:
if: github.repository == 'owner/repo'
runs-on: ubuntu-latestEach 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.