How GitHub Actions rounds job minutes, and what short jobs cost
GitHub's pricing reference says it rounds the minutes and partial minutes each job uses up to the nearest whole minute. For long jobs that is noise. For workflows made of many short jobs it can be most of the bill. This page shows the effect with figures from this site's calculator.
The rule
The unit that gets rounded is the job, not the workflow run and not the step. A job that runs for 20 seconds is billed as 1 minute. A job that runs for 3 minutes and 5 seconds is billed as 4 minutes. A workflow with ten jobs is rounded up ten times.
Rounding never adds more than one minute to a job, so what matters is how big that minute is next to the job itself. On a 30-minute job it is a few percent. On a 20-second job, two thirds of the billed minute was never used.
What one rounded-up minute costs
| Standard runner | Any job under one minute is billed |
|---|---|
| Linux 1-core (x64) | $0.002 |
| Linux 2-core (arm64) | $0.005 |
| Linux 2-core (x64) | $0.006 |
| Windows 2-core | $0.01 |
| macOS | $0.062 |
In a private repository these minutes come out of the plan's included minutes first, so short jobs can also be what empties the allowance. In a public repository standard runners are free and rounding costs nothing. On larger runners every minute is billed, and the minimum is the larger runner's rate: $0.042 for a job of any length under a minute on the Linux 16-core x64 runner.
Worked example: ten 20-second jobs or one longer job
A GitHub Team account has a workflow in a private repository with ten small jobs: a linter, a formatter check, a type check and so on. Each takes about 20 seconds on the Linux 2-core runner. The workflow runs 30 times per working day, 22 working days a month.
| Ten jobs of 20 seconds | One job of 3 minutes 20 seconds | |
|---|---|---|
| Jobs per month | 6,600 | 660 |
| Minutes the jobs really run | 2,200 | 2,200 |
| Minutes billed | 6,600 | 2,640 |
| Minutes beyond the 3,000 included | 3,600 | 0 |
| Cost per month | $21.60 | $0.00 |
Both versions do 2,200 minutes of work. Split into ten jobs, each 20-second job is billed as a full minute, the month is billed as 6,600 minutes and costs $21.60 ($259.20 a year). As one job with ten steps, each run is billed as 4 minutes, the month comes to 2,640 minutes and stays inside the plan.
The single job gives up something: its steps run one after another instead of side by side, so each run takes longer to report, and one failing step can hide the ones after it.
Worked example: just over a whole minute
Rounding also bites when jobs sit just above a minute boundary. The same account runs 100 jobs a day on the standard Windows runner, 22 working days, 2,200 jobs a month.
- At an average of exactly 1 minute, 2,200 minutes are billed. That is inside the 3,000 included minutes: $0.00.
- At an average of 1.1 minutes, the jobs run for 2,420 minutes but each is billed as 2 minutes: 4,400 minutes, 1,400 beyond the plan, $14.00 a month.
Six extra seconds per job doubled the billed minutes. The calculator knows only your average job length and rounds that average up, so when your jobs vary a lot in length the real figure can differ in either direction.
Where to look in your own workflows
- Jobs under a minute. Merge those that always run together into one job with several steps.
- Wide matrices of quick jobs. A matrix of 12 combinations that each take 15 seconds is billed as 12 minutes per run.
- Short jobs on expensive runners. A quick check on macOS costs about ten times the same check on Linux; move it if it does not need macOS.
Try both shapes. In the free calculator, enter your jobs per day and average job length as they are now, then again with the short jobs merged, and compare the two bills.