What is measured
For each job that ran on a runner whose name starts with runloft-, we take GitHub's started_at and completed_at from the workflow_job webhook. The seconds between them, times the label's per-minute rate divided by 60, is the job's cost.
- Queue time is not billed.
- There is no minimum and no rounding to the minute.
- Failed and cancelled jobs are billed for the seconds they ran.
- A job that never started is not billed.
Free minutes
Every account and organization gets 3,000 Linux minutes per calendar month, reset on the 1st at 00:00 UTC. They are counted in 2 vCPU minutes, so a minute on a 4 vCPU machine uses two, and they are used before credits. Windows and macOS are not covered.
Credits
Usage beyond the free minutes is paid from prepaid credits. Buy them on the Billing page of the dashboard, in whole dollars from $5 to $10,000 at a time; payment is handled by Stripe. Credits do not expire. The ledger on the same page lists every purchase and every day's usage.
A long job can take the balance slightly below zero; it is never stopped halfway. Once the balance is used up, new jobs wait in the queue, marked Out of credits in the dashboard, until you top up.
Spend limits
Set a monthly spend limit in Settings. Once the month's spend reaches it, new jobs are not started until the next month or until you raise the limit. Jobs that are already running finish.
Invoices and tax
Stripe receipts include your billing details. For invoicing, purchase orders or a company tax ID on receipts, email sales@runloft.dev.