gregberns/harmonik 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.
CIFails or times out on nearly all recent runs, burning minutes to produce only red, and an always-red workflow usually gets ignored. Fix it, or disable the trigger until it's ready.
Nightly RaceFails or times out on nearly all recent runs, burning minutes to produce only red, and an always-red workflow usually gets ignored. Fix it, or disable the trigger until it's ready.
CIAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueNightly RaceAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueScenarioAdd a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: trueCINo 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: 15CIRuns 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'CIThe cache restores only on an exact key match, so any lockfile change means a full cold download. Add a `restore-keys:` prefix line for partial restores.
key: deps-${{ runner.os }}-${{ hashFiles('**/<lockfile>') }}
restore-keys: |
deps-${{ runner.os }}-CIcheckout fetches the entire git history every run (`fetch-depth: 0`) and nothing in the workflow appears to read it. Remove the line; the default shallow clone is much faster on big repos. Keep it if a step genuinely needs history.
- uses: actions/checkout@v4
# fetch-depth: 0 removed — default shallow clone is enough hereNightly RaceNo 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: 15Nightly RaceThe cache restores only on an exact key match, so any lockfile change means a full cold download. Add a `restore-keys:` prefix line for partial restores.
key: deps-${{ runner.os }}-${{ hashFiles('**/<lockfile>') }}
restore-keys: |
deps-${{ runner.os }}-Nightly RaceThe 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: '41 3 * * *' # was '0 3 * * *' — any non-:00 minute avoids the herdNightly RaceThe 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-latestNightly Racecheckout fetches the entire git history every run (`fetch-depth: 0`) and nothing in the workflow appears to read it. Remove the line; the default shallow clone is much faster on big repos. Keep it if a step genuinely needs history.
- uses: actions/checkout@v4
# fetch-depth: 0 removed — default shallow clone is enough hereScenarioRuns 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'ScenarioThe 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: '8 4 * * *' # was '0 4 * * *' — any non-:00 minute avoids the herdScenarioThe 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-latest# No concurrency control (applies to: CI, Nightly Race, Scenario)
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# No job timeout (applies to: CI, Nightly Race)
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15
# No path filters on triggers (applies to: CI, Scenario)
on:
pull_request:
paths:
- 'src/**'
- 'package.json'
# Cache without restore-keys (applies to: CI, Nightly Race)
key: deps-${{ runner.os }}-${{ hashFiles('**/<lockfile>') }}
restore-keys: |
deps-${{ runner.os }}-
# Full-history clone (fetch-depth: 0) (applies to: CI, Nightly Race)
- uses: actions/checkout@v4
# fetch-depth: 0 removed — default shallow clone is enough here
# Scheduled at the top of the hour (applies to: Nightly Race)
on:
schedule:
- cron: '41 3 * * *' # was '0 3 * * *' — any non-:00 minute avoids the herd
# Scheduled workflow runs in forks (applies to: Nightly Race, Scenario)
jobs:
nightly:
if: github.repository == 'owner/repo'
runs-on: ubuntu-latest
# Scheduled at the top of the hour (applies to: Scenario)
on:
schedule:
- cron: '8 4 * * *' # was '0 4 * * *' — 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, 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.