1
0
mirror of synced 2025-12-19 09:57:42 -05:00

GitHub Actions pricing update (#58952)

This commit is contained in:
Laura Coursen
2025-12-17 14:33:29 -06:00
committed by GitHub
parent e4a63ab0d9
commit dd812b368e
17 changed files with 18 additions and 332 deletions

View File

@@ -1,76 +0,0 @@
# Actions Cost Summary Script
The script can be found here: https://gist.github.com/docs-bot/98cb03ec43b716b1f8e03bcc091d069c.
This script processes GitHub Actions billing data to generate cost summaries by SKU (Stock Keeping Unit).
This script is referenced in the Billing tutorial: content/billing/tutorials/estimate-actions-costs.md
## Purpose
The script analyzes [summarized usage reports](https://docs.github.com/en/billing/reference/billing-reports#summarized-usage-report) from GitHub billing and creates CSV summaries that help you understand:
- Which Actions SKUs are being used
- Total costs per SKU
- Free minutes usage per SKU
Optionally, the script can generate per-organization breakdowns to analyze usage across different organizations.
## Requirements
- Python 3.x (uses only standard library modules)
## Use the script
### Basic usage
Generate a single SKU summary file:
```bash
python3 summarize_actions_costs.py input_file.csv
```
This creates `input_file_sku.csv` containing:
- Each distinct SKU that starts with `actions_`
- Sum of all costs (`net_amount`) for each SKU
- Sum of free minutes used (where `net_amount` is 0) for each SKU
### Per-organization summaries
Generate both the SKU summary and individual files for each organization:
```bash
python3 summarize_actions_costs.py input_file.csv --by-org
```
This creates:
- `input_file_sku.csv` - Overall SKU summary across all organizations
- `input_file.organization_name.csv` - Individual summary for each organization
Each organization file contains the same SKU-level breakdown (costs and free minutes) but filtered to that specific organization's usage.
## Output format
All output CSV files have the following format:
```csv
sku,total_net_amount,free_minutes_quantity
actions_linux,10800.30,248594.00
actions_macos,24424.38,10294.00
...
```
- **sku**: The SKU identifier (only those starting with `actions_`)
- **total_net_amount**: Sum of all costs for this SKU
- **free_minutes_quantity**: Sum of quantity used when no cost was incurred (free tier usage)
## Notes
- The script only processes rows where the `product` is `actions`
- Only SKUs starting with `actions_` are included in the output
- Organization names are sanitized for safe filenames (removes special characters, path separators, and limits length)
- Empty organization names are saved as `unknown`
- The script validates required CSV columns before processing
- Malformed rows are skipped with a warning message
- CSV injection protection is applied to output fields
- Maximum of 1000 organizations when using `--by-org` to prevent resource exhaustion

View File

@@ -18,19 +18,14 @@ topics:
- CD - CD
--- ---
{% data reusables.actions.self-hosted-price-note %}
A self-hosted runner is a system that you deploy and manage to execute jobs from {% data variables.product.prodname_actions %} on {% data variables.product.github %}. A self-hosted runner is a system that you deploy and manage to execute jobs from {% data variables.product.prodname_actions %} on {% data variables.product.github %}.
Self-hosted runners: Self-hosted runners:
{% ifversion fpt or ghec %} {% ifversion fpt or ghec %}
* Give you more control of hardware, operating system, and software tools than {% data variables.product.github %}-hosted runners provide. Be aware that you are responsible for updating the operating system and all other software. * Give you more control of hardware, operating system, and software tools than {% data variables.product.github %}-hosted runners provide. Be aware that you are responsible for updating the operating system and all other software.
* Allow you to use machines and services that your company already maintains and pays to use.{% endif %} {% ifversion actions-cloud-platform-march %} * Allow you to use machines and services that your company already maintains and pays to use.{% endif %}
* Add little to your bill for actions usage because you pay only for using the actions cloud platform. See [AUTOTITLE](/billing/concepts/product-billing/github-actions).{% elsif fpt or ghec %}
* Are currently free to use with {% data variables.product.prodname_actions %}. From {% data variables.actions.self_hosted_runner_charge_date %}, you will see a small per-minute charge for using the actions cloud platform in your bill for actions usage. See [AUTOTITLE](/billing/concepts/product-billing/github-actions).{% endif %} {% ifversion ghes %}
* Are free to use with {% data variables.product.prodname_actions %}, but you are responsible for the cost of maintaining your runner machines. * Are free to use with {% data variables.product.prodname_actions %}, but you are responsible for the cost of maintaining your runner machines.
* Can use cloud services or local machines that you already pay for.{% endif %}
* Let you create custom hardware configurations that meet your needs with processing power or memory to run larger jobs, install software available on your local network. * Let you create custom hardware configurations that meet your needs with processing power or memory to run larger jobs, install software available on your local network.
* Receive automatic updates for the self-hosted runner application only, though you may disable automatic updates of the runner. * Receive automatic updates for the self-hosted runner application only, though you may disable automatic updates of the runner.
* Don't need to have a clean instance for every job execution.{% ifversion ghec or ghes %} * Don't need to have a clean instance for every job execution.{% ifversion ghec or ghes %}

View File

@@ -29,8 +29,6 @@ Before you add a self-hosted runner, you should understand what they are and how
Additionally, you must meet the following requirements: Additionally, you must meet the following requirements:
{% data reusables.actions.self-hosted-runners-prerequisites %} {% data reusables.actions.self-hosted-runners-prerequisites %}
{% data reusables.actions.self-hosted-price-note %}
## Adding a self-hosted runner to a repository ## Adding a self-hosted runner to a repository
You can add self-hosted runners to a single repository. To add a self-hosted runner to a user repository, you must be the repository owner. For an organization repository, {% ifversion custom-org-roles %}you must be an organization owner, have admin access to the repository, or have the “Manage organization runners and runner groups” permission.{% else %}you must be an organization owner or have admin access to the repository.{% endif %} You can add self-hosted runners to a single repository. To add a self-hosted runner to a user repository, you must be the repository owner. For an organization repository, {% ifversion custom-org-roles %}you must be an organization owner, have admin access to the repository, or have the “Manage organization runners and runner groups” permission.{% else %}you must be an organization owner or have admin access to the repository.{% endif %}

View File

@@ -15,8 +15,6 @@ versions:
ghec: '*' ghec: '*'
--- ---
{% data reusables.actions.self-hosted-price-note %}
{% data reusables.actions.enterprise-github-hosted-runners %} {% data reusables.actions.enterprise-github-hosted-runners %}
{% ifversion repository-actions-runners %} {% ifversion repository-actions-runners %}

View File

@@ -18,8 +18,6 @@ versions:
type: overview type: overview
--- ---
{% data reusables.actions.self-hosted-price-note %}
## Requirements for self-hosted runner machines ## Requirements for self-hosted runner machines
You can use a machine as a self-hosted runner as long as it meets these requirements: You can use a machine as a self-hosted runner as long as it meets these requirements:

View File

@@ -27,15 +27,7 @@ You can use policies to control how enterprise members use {% data variables.pro
## Adding runners ## Adding runners
To run {% data variables.product.prodname_actions %} workflows, you need to use runners. {% data reusables.actions.about-runners %} You can use {% data variables.product.github %}-hosted runners or add self-hosted runners. To run {% data variables.product.prodname_actions %} workflows, you need to use runners. {% data reusables.actions.about-runners %} If you use {% data variables.product.company_short %}-hosted runners, you will be billed based on consumption after exhausting the minutes included in your plan, whereas self-hosted runners are free. For more information, see [AUTOTITLE](/billing/managing-billing-for-github-actions/about-billing-for-github-actions).
* **{% data variables.product.github %}-hosted runners:** Available immediately. Your plan includes some free usage of standard runners, after this you pay for processing time and storage.
* **Self-hosted runners:** You need to add and maintain them. {% ifversion actions-cloud-platform-march %}These runners add little to your bill for actions usage because you are charged only for using the {% data variables.product.prodname_actions %} cloud platform. After you have used the free minutes included in your plan, you pay $0.002 USD per minute of processing time.{% elsif fpt or ghec %}Use is currently free. From {% data variables.actions.self_hosted_runner_charge_date %}, you will pay a per-minute fee for using the cloud platform.{% endif %}
For more information:
* [AUTOTITLE](/billing/concepts/product-billing/github-actions)
* [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners)
If you choose self-hosted runners, you can add runners at the enterprise, organization, or repository levels. For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners). If you choose self-hosted runners, you can add runners at the enterprise, organization, or repository levels. For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners).

View File

@@ -23,19 +23,14 @@ shortTitle: GitHub Actions
contentType: concepts contentType: concepts
--- ---
{% data reusables.billing.actions-price-changes %}
## How use of {% data variables.product.prodname_actions %} is measured ## How use of {% data variables.product.prodname_actions %} is measured
{% data variables.product.prodname_actions %} usage is measured and charged according to runner type and repository visibility. {% data variables.product.prodname_actions %} usage is **free** for **self-hosted runners** and for **public repositories** that use standard {% data variables.product.github %}-hosted runners. See [AUTOTITLE](/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories).
* **Standard, {% data variables.product.github %}-hosted runners** For **private repositories**, each {% data variables.product.github %} account receives a quota of free minutes, artifact storage, and cache storage for use with {% data variables.product.github %}-hosted runners, depending on the account's plan. Any usage beyond the included amounts is billed to your account.
* Public repositories: Free to use, see [AUTOTITLE](/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories).
* Private and internal repositories: Free until your plan quota is empty, then billed for minutes and storage use
* **Larger, {% data variables.product.github %}-hosted runners**: Billed for minutes and storage
* **Self-hosted runners on the {% data variables.product.prodname_actions %} cloud platform**: Free until your plan quota is empty, then billed for cloud platform use{% ifversion actions-cloud-platform-march %}<!--Nothing to display-->{% elsif fpt or ghec %} from {% data variables.actions.self_hosted_runner_charge_date %}{% endif %}
Each {% data variables.product.github %} account receives a quota of free minutes, artifact storage, and cache storage for use with {% data variables.product.github %}-hosted runners, depending on the account's plan. Any usage beyond the included amounts is billed to your account. Minutes reset every month, while artifact and cache storage usage do not. * **Minutes:** Your free minutes reset to the full amount at the start of each billing cycle. Minutes usage is charged to the repository owner, not the person who triggered the workflow runs.
* **Storage:** Storage charges accumulate throughout the month based on hourly usage. Your accrued storage charges reset to zero at the start of each billing cycle.
> [!TIP] > [!TIP]
> Anyone with write access to a repository can run actions. Any costs of running the actions are billed to the repository owner. > Anyone with write access to a repository can run actions. Any costs of running the actions are billed to the repository owner.
@@ -84,41 +79,28 @@ Your monthly bill converts GB-Hours to GB-Months by dividing by the hours in the
### Examples of how usage is measured ### Examples of how usage is measured
{% data variables.product.github %}-hosted runners:
* If you run a workflow on a Linux runner and it takes 10 minutes to complete, you'll use 10 minutes of the repository owner's allowance. If the workflow generates a 10 MB artifact, then you'll also use 10 MB of the repository owner's artifact storage allowance. * If you run a workflow on a Linux runner and it takes 10 minutes to complete, you'll use 10 minutes of the repository owner's allowance. If the workflow generates a 10 MB artifact, then you'll also use 10 MB of the repository owner's artifact storage allowance.
* If you run a workflow that normally takes 10 minutes and it fails after 5 minutes because a dependency isn't available, you'll use 5 minutes of the repository owner's allowance. If you fix the problem and re-run the workflow successfully, in total you'll use 15 minutes of the repository owner's allowance. * If you run a workflow that normally takes 10 minutes and it fails after 5 minutes because a dependency isn't available, you'll use 5 minutes of the repository owner's allowance. If you fix the problem and re-run the workflow successfully, in total you'll use 15 minutes of the repository owner's allowance.
* If you run a workflow that generates many log files and a long job summary, these files do not count towards the repository owner's artifact storage allowance. * If you run a workflow that generates many log files and a long job summary, these files do not count towards the repository owner's artifact storage allowance.
* Cache storage usage is measured by the peak usage for each hour. Included usage is 10 GB per repository. For a given hour, if a repository has a peak cache usage of 15 GB, then the repository owner will be charged for the 5 GB of usage above the 10 GB included for that hour. The repository owner will only be charged if the repository cache storage limit has been configured higher than the included usage. * Cache storage usage is measured by the peak usage for each hour. Included usage is 10 GB per repository. For a given hour, if a repository has a peak cache usage of 15 GB, then the repository owner will be charged for the 5 GB of usage above the 10 GB included for that hour. The repository owner will only be charged if the repository cache storage limit has been configured higher than the included usage.
* Additional cache storage is $0.07 per GiB, per month. * Additional cache storage is $0.07 per GiB, per month.
Self-hosted runners:
{% ifversion actions-cloud-platform-march %}
* If you run a workflow on a self-hosted runner and it takes 10 minutes to complete, the repository owner will be billed for 10 minutes use of the {% data variables.product.prodname_actions %} cloud platform.{% elsif fpt or ghec %}
* Currently, all use of self-hosted runners is free.
* From {% data variables.actions.self_hosted_runner_charge_date %}, if you run a workflow on a self-hosted runner and it takes 10 minutes to complete, the repository owner will be billed for 10 minutes use of the {% data variables.product.prodname_actions %} cloud platform.
{% endif %}
## Free use of {% data variables.product.prodname_actions %} ## Free use of {% data variables.product.prodname_actions %}
The following amounts of time for standard {% data variables.product.github %}-hosted runners, artifact storage, and cache storage are included in your {% data variables.product.github %} plan. At the start of each month, the minutes used by the account are reset to zero. The following amounts of time for standard runners, artifact storage, and cache storage are included in your {% data variables.product.github %} plan. At the start of each month, the minutes used by the account are reset to zero.
{% data reusables.billing.actions-included-quotas %} {% data reusables.billing.actions-included-quotas %}
Standard {% data variables.product.github %}-hosted or self-hosted runner usage **on public repositories will remain free**. The use of standard {% data variables.product.github %}-hosted runners is free:
* In public repositories
The use of standard {% data variables.product.github %}-hosted runners is also free:
* For {% data variables.product.prodname_pages %} * For {% data variables.product.prodname_pages %}
* For {% data variables.product.prodname_dependabot %} * For {% data variables.product.prodname_dependabot %}
* For the agentic features ({% data variables.release-phases.public_preview %}) in {% data variables.copilot.copilot_code-review %} * For the agentic features ({% data variables.release-phases.public_preview %}) in {% data variables.copilot.copilot_code-review %}
> [!NOTE] > [!NOTE]
> >
> * **Self-hosted runners:** {% ifversion actions-cloud-platform-march %}Use minutes from your plan until your quota is exhausted. You are then charged for additional processing time used.{% elsif fpt or ghec %}Are free to use until {% data variables.actions.self_hosted_runner_charge_date %}.{% endif %} > * Larger runners are always charged for, even when used by public repositories or when you have quota available from your plan.
> * **Larger runners:** Are always charged for, even when used by public repositories or when you have quota available from your plan. > * The storage amounts shown are **shared** with {% data variables.product.prodname_registry %}. This means your total storage across Actions artifacts, Actions caches, and Packages cannot exceed the included amount for your plan.
> * * The storage amounts shown are **shared** with {% data variables.product.prodname_registry %}. This means your total storage across Actions artifacts, Actions caches, and Packages cannot exceed the included amount for your plan.
## Using more than your included quota ## Using more than your included quota
@@ -130,12 +112,6 @@ You pay for any additional use above your quota using the payment method set up
For {% data variables.product.github %}-hosted runners, storage is billed based on hourly usage of artifacts and caches throughout the month. Minutes are calculated based on the total processing time used by each runner type during the month. For {% data variables.product.github %}-hosted runners, storage is billed based on hourly usage of artifacts and caches throughout the month. Minutes are calculated based on the total processing time used by each runner type during the month.
{% ifversion actions-cloud-platform-march %}
For self-hosted runners, use of the {% data variables.product.prodname_actions %} cloud platform is based on the total processing time used across all workflows during the month.
{% elsif fpt or ghec %}
From {% data variables.actions.self_hosted_runner_charge_date %}, use of the {% data variables.product.prodname_actions %} cloud platform by self-hosted runners will be based on the total processing time used across all workflows during the month.
{% endif %}
* To estimate costs for paid usage, use the {% data variables.product.github %} [pricing calculator](https://github.com/pricing/calculator?feature=actions). * To estimate costs for paid usage, use the {% data variables.product.github %} [pricing calculator](https://github.com/pricing/calculator?feature=actions).
* To view your current costs, see [AUTOTITLE](/billing/managing-billing-for-your-products/viewing-your-product-usage). * To view your current costs, see [AUTOTITLE](/billing/managing-billing-for-your-products/viewing-your-product-usage).
@@ -144,7 +120,7 @@ From {% data variables.actions.self_hosted_runner_charge_date %}, use of the {%
### Baseline minute costs ### Baseline minute costs
Each type of runner hosted by {% data variables.product.github %} has a cost per-minute that is determined by the operating system and processing power.{% ifversion actions-cloud-platform-march %} Self-hosted runners have a flat cost per-minute of $0.002 USD for use of the cloud platform.{% endif %} Each type of runner hosted by {% data variables.product.github %} has a cost per-minute that is determined by the operating system and processing power.
For example, jobs that run on Windows and macOS runners hosted by {% data variables.product.github %} cost more to run than jobs on Linux runners. For example, jobs that run on Windows and macOS runners hosted by {% data variables.product.github %} cost more to run than jobs on Linux runners.
@@ -161,18 +137,7 @@ For example, if your organization uses {% data variables.product.prodname_team %
* 2,000 Windows minutes at $0.016 USD per minute = $32 USD. * 2,000 Windows minutes at $0.016 USD per minute = $32 USD.
>[!TIP] >[!TIP]
> The cost for these runners will reduce from {% data variables.actions.self_hosted_runner_charge_date %}. > The cost for these runners will reduce from January 1, 2026.
### Example minutes cost calculation for self-hosted runners
{% ifversion actions-cloud-platform-march %}
For example, if you use 5,000 minutes of processing time on self-hosted runners this will cost $10 USD for using the {% data variables.product.prodname_actions %} cloud platform.
{% elsif fpt or ghec %}
From **{% data variables.actions.self_hosted_runner_charge_date %}**, regardless of your plan, using 5,000 minutes on self-hosted runners would have a total actions minutes cost of $10 USD for using the {% data variables.product.prodname_actions %} cloud platform.
{% endif %}
Calculation: 5,000 * $0.002 USD per minute = $10 USD
### Example artifact storage cost calculation ### Example artifact storage cost calculation

View File

@@ -1,7 +1,7 @@
--- ---
title: Actions runner pricing title: Actions runner pricing
shortTitle: Actions runner pricing shortTitle: Actions runner pricing
intro: Reference information for calculating the cost of using different types of runners. intro: Reference information for calculating the cost of using different {% data variables.product.github %}-hosted runners.
versions: versions:
fpt: "*" fpt: "*"
ghec: "*" ghec: "*"
@@ -14,24 +14,8 @@ redirect_from:
- /billing/reference/actions-minute-multipliers - /billing/reference/actions-minute-multipliers
--- ---
{% data reusables.billing.actions-price-changes %}
{% data variables.product.github %} rounds the minutes and partial minutes each job uses up to the nearest whole minute. {% data variables.product.github %} rounds the minutes and partial minutes each job uses up to the nearest whole minute.
## Self-hosted runners
{% ifversion actions-cloud-platform-march %}
The cost of using a self-hosted runner on the {% data variables.product.prodname_actions %} cloud platform is $0.002 USD per minute.
{% elsif fpt or ghec %}
From {% data variables.actions.self_hosted_runner_charge_date %}, the cost of using a self-hosted runner on the {% data variables.product.prodname_actions %} cloud platform will be $0.002 USD per minute.
{% endif %}
The cost of using the {% data variables.product.prodname_actions %} cloud platform is included in the per-minute cost of all {% data variables.product.github %}-hosted runners.
## Standard {% data variables.product.github %}-hosted runners
These runners will use minutes included in your quota to run workflows in private and internal repositories until the quota is used up.
{% data reusables.billing.actions-standard-runner-prices %} {% data reusables.billing.actions-standard-runner-prices %}
## x64-powered {% data variables.actions.hosted_runners %} ## x64-powered {% data variables.actions.hosted_runners %}

View File

@@ -1,134 +0,0 @@
---
title: 'Estimating the cost of using GitHub Actions on different types of runners'
intro: 'Analyze the costs and benefits of different CI/CD setups by understanding the relative costs of using {% data variables.product.github %}-hosted and self-hosted runners.'
shortTitle: 'Estimate Actions costs'
versions:
fpt: '*'
ghec: '*'
permissions: 'Users who can see the "Billing & Licensing" and "Insights" pages for an organization or enterprise on {% data variables.product.prodname_dotcom_the_website %} or {% data variables.enterprise.data_residency_site %}'
topics:
- Enterprise
- Billing
- REST
contentType: tutorials
audience:
- driver
---
As your usage of CI/CD grows, optimizing costs becomes increasingly important. With this tutorial, you can assess your current {% data variables.product.prodname_actions %} costs, estimate the impact of upcoming pricing changes, and identify configuration changes that could reduce expenses or improve efficiency. See [2026 pricing changes for {% data variables.product.prodname_actions %}](https://resources.github.com/actions/2026-pricing-changes-for-github-actions) in {% data variables.product.github %} Executive Insights.
## 1. Download past usage of {% data variables.product.prodname_actions %}
You can download a full breakdown of the costs of using {% data variables.product.github %}-hosted runners from the "Usage" view of the "Billing & licensing" tab. {% ifversion actions-cloud-platform-march %}Data for self-hosted runners is included in this report from {% data variables.actions.self_hosted_runner_charge_date %}.
<!-- expires 2026-09-01 -->
For data on self-hosted runners before {% data variables.actions.self_hosted_runner_charge_date %}, see the "Actions Usage Metrics" view of the "Insights" tab.
<!-- end expires 2026-09-01 -->
{% elsif fpt or ghec %}
Usage of self-hosted runners is available on the **Insights** tab of your organization or enterprise. From {% data variables.actions.self_hosted_runner_charge_date %}, this data will also be included in billing usage reports.
{% endif %}
### Generate report for runner usage and costs
{% data reusables.billing.nav-to-org-or-ent %}
{% data reusables.billing.access-org-or-ent-page %}
{% data reusables.billing.display-usage-view %}
1. At the top of the page, click **{% octicon "download" aria-hidden="true" %} Get usage report**.
1. Select a report type of **Summarized** and a time frame of at least three months.
1. Click **Email me the report**.
When the report is ready for you to download, you'll receive a message to your primary email account with a link to download the report. The link will expire after 24 hours.
### Get usage of self-hosted runners
<!-- expires 2026-09-01 -->
{% ifversion actions-cloud-platform-march %}
This step is needed only if you want to download data from before {% data variables.actions.self_hosted_runner_charge_date %}.
{% endif %}
<!-- end expires 2026-09-01 -->
1. Click **{% octicon "graph" aria-hidden="true" %} Insights** tab for your organization or enterprise to display additional insights.
1. In the "Insights" navigation menu, click **{% octicon "play" aria-hidden="true" %} Actions Usage Metrics** to display usage data.
1. At the top of the page, click **Period:Current month** and define a time period of at least three months.
1. In the tabbed table, click **{% octicon "stopwatch" aria-hidden="true" %} Jobs** to show all usage split by job.
1. To show only jobs that run on self-hosted runners, add a filter on runner type:
```text copy
runner_type:self-hosted
```
1. To the right of the filter box, click {% octicon "download" aria-label="Download report" %} to download the data from the table.
## 2. Summarize past usage and costs
You have downloaded one billing report, `summarizedUsageReport`, and possibly one actions usage metrics report for self-hosted runners. You need to further summarize the data from the `summarizedUsageReport` before moving to the next step, for example:
* **Get cost per runner type:** Sum costs for each `sku` for the `actions` product
* **Get usage of minutes included in your plan:** Sum minutes for each `sku` that were included in your plan, that is: `net_amount` of `0`
* Consider splitting the costs and included minutes by organization
For an example Python script that generates this summary information from a `summarizedUsageReport`, see [`summarize_actions_costs.py`](https://gist.github.com/docs-bot/98cb03ec43b716b1f8e03bcc091d069c).
>[!TIP]
> There is no change to the costs of storing artifacts and caches, so you can ignore the `actions_storage` SKU.
## 3. Estimate impact of the cost changes
Using the summaries of the recent costs of {% data variables.product.github %}-hosted runners and the minutes used by self-hosted runners, you can estimate future costs of using {% data variables.product.prodname_actions %}.
### General trend in costs
Assuming that the number of workflows you run and the time they take to complete stays similar, the impact on your future costs will vary according to the types of runners that you currently use:
* **Mostly {% data variables.product.github %}-hosted runners:** You will see lower bills for {% data variables.product.prodname_actions %}.
* **Mostly self-hosted runners:** You will probably see higher bills for actions. It makes sense to re-evaluate your split between self-hosted and {% data variables.product.github %}-hosted runners. You may find that the costs of maintaining your own runners versus using {% data variables.product.github %}-hosted runners are more evenly balanced.
* **A mix of runner types:** You will need to assess how your costs will change with the new charging model and decide whether or not to make any changes to your runner usage.
### Detailed calculations of changes to costs
For each type of runner that you use, you can calculate how much the same usage will cost from January and from March 2026 using data from [AUTOTITLE](/billing/reference/actions-runner-pricing).
To estimate your expected spend more precisely, you can also use the [{% data variables.product.github %} pricing calculator](https://github.com/pricing/calculator?feature=actions).
In this example, the change in costs for standard {% data variables.product.github %}-hosted runners and self-hosted runners is calculated.
| Runner type | Past {% data variables.product.github %} bill | January 1, 2026 onward | March 1, 2026 onward |
|--|--|--|--|
| Linux 2-core (`actions_linux`) | _past cost_ | _past cost_ **\* 0.75** | _past cost_ **\* 0.75** |
| Windows 2-core (`actions_windows`) | _past cost_ | _past cost_ **\* 0.62** | _past cost_ **\* 0.62** |
| macOS 3-core or 4-core (`actions_macos`) | _past cost_ | _past cost_ **\* 0.77** | _past cost_ **\* 0.77** |
| Self-hosted | $0 USD | $0 USD | _Minutes used_ **\* $0.002 USD** |
The multipliers in this table reflect the change in per-minute pricing for standard {% data variables.product.github %}-hosted runners starting January 1, 2026. For self-hosted runners, billing begins on March 1, 2026, based on total minutes used.
## 4. Identify runner changes to explore
When you have estimated the impact of the charging changes on your costs, you may want to update your runner usage.
### Investing the budget freed in more powerful runners
If the billing changes free some of your budget, then you could identify the workflows that take the longest to run and update them to use larger runners hosted by {% data variables.product.github %}.
To identify the longest-running workflows, display the **Insights** tab for your enterprise or organization and display the **Actions performance metrics**. Click **Avg run time** to sort the workflows by run time.
For more information, see [AUTOTITLE](/actions/concepts/runners/larger-runners).
### Migrating workflows from self-hosted to {% data variables.product.github %}-hosted runners
If the total cost of running workflows on self-hosted runners is now similar to the cost of using {% data variables.product.github %}-hosted runners, you may want to simplify your CI/CD platform by migrating from self-hosted runners.
Some considerations:
* Do all the costs of maintaining self-hosted runners come under the same internal budget as billing for actions usage?
* Are we using all the processing time included in our {% data variables.product.github %} plan currently?
* Do any of the self-hosted runners provide specialized environments that would be difficult to replicate on a {% data variables.product.github %}-hosted runner?
> [!TIP]
> You can request that additional tools are added to {% data variables.product.github %}-hosted runners, by raising an issue with the [tool request](https://github.com/actions/runner-images/issues/new?template=tool-request.yml) template.
## Next steps
* [AUTOTITLE](/actions/tutorials/migrate-to-github-runners)

View File

@@ -13,7 +13,8 @@ children:
- /set-up-budgets - /set-up-budgets
- /control-costs-at-scale - /control-costs-at-scale
- /estimate-spending - /estimate-spending
- /estimate-actions-costs
- /gather-insights - /gather-insights
contentType: tutorials contentType: tutorials
redirect_from:
- /billing/tutorials/estimate-actions-costs
--- ---

View File

@@ -21,8 +21,6 @@ You can use policies to control how enterprise members use {% data variables.pro
To run {% data variables.product.prodname_actions %} workflows, you need to use runners. {% data reusables.actions.about-runners %} If you use {% data variables.product.company_short %}-hosted runners, you will be billed based on consumption after exhausting the minutes included in your plan, whereas self-hosted runners are free. For more information, see [AUTOTITLE](/billing/managing-billing-for-github-actions/about-billing-for-github-actions). To run {% data variables.product.prodname_actions %} workflows, you need to use runners. {% data reusables.actions.about-runners %} If you use {% data variables.product.company_short %}-hosted runners, you will be billed based on consumption after exhausting the minutes included in your plan, whereas self-hosted runners are free. For more information, see [AUTOTITLE](/billing/managing-billing-for-github-actions/about-billing-for-github-actions).
For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners).
If you choose self-hosted runners, you can add runners at the enterprise, organization, or repository levels. For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners). If you choose self-hosted runners, you can add runners at the enterprise, organization, or repository levels. For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners).
## Provisioning fine-grained permissions for {% data variables.product.prodname_actions %} ## Provisioning fine-grained permissions for {% data variables.product.prodname_actions %}

View File

@@ -1,10 +0,0 @@
# Reference: #20361
# Documentation for the self-hosted runner billing changes for GitHub Cloud.
# Shipping on {% data variables.actions.self_hosted_runner_charge_date %}
versions:
# fpt: '*'
# ghec: '*'
# This change will never ship to GHES.
# The value below allows tests to pass while hiding the content for fpt and ghec until
# it's ready to ship to GitHub Cloud on {% data variables.actions.self_hosted_runner_charge_date %}.
ghes: '3.21'

View File

@@ -1 +1 @@
{% data variables.product.prodname_actions %} usage is free for public repositories that use standard {% data variables.product.github %}-hosted runners. See [AUTOTITLE](/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories). For private and internal repositories, each {% data variables.product.github %} account receives a quota of free minutes and storage for use with {% data variables.product.github %}-hosted or self-hosted runners. The quota size depends on the account's plan. Any usage beyond the included amounts is billed to your account. {% data variables.product.prodname_actions %} usage is free for standard {% data variables.product.prodname_dotcom %}-hosted runners in public repositories, and for self-hosted runners. See [AUTOTITLE](/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories). For private repositories, each {% data variables.product.prodname_dotcom %} account receives a quota of free minutes and storage for use with {% data variables.product.prodname_dotcom %}-hosted runners, depending on the account's plan. Any usage beyond the included amounts is billed to your account.

View File

@@ -1,8 +0,0 @@
{% ifversion actions-cloud-platform-march %}
<!--Nothing to show-->
{% elsif fpt or ghec %}
> [!NOTE]
> Use of self-hosted runners is currently free. From {% data variables.actions.self_hosted_runner_charge_date %}, repository owners will pay a per-minute fee for using the cloud platform to run workflows on self-hosted runners. See [2026 pricing changes for {% data variables.product.prodname_actions %}](https://resources.github.com/actions/2026-pricing-changes-for-github-actions) in {% data variables.product.github %} Executive Insights.
{% endif %}

View File

@@ -1,13 +0,0 @@
{% ifversion actions-cloud-platform-march %}
<!--Nothing to show-->
{% elsif fpt or ghec %}
> [!NOTE]
> Upcoming changes to {% data variables.product.prodname_actions %} pricing:
>
> * **Self-hosted runners**: You will be charged for using the {% data variables.product.prodname_actions %} cloud platform from **{% data variables.actions.self_hosted_runner_charge_date %}**.
> * **{% data variables.product.github %}-hosted runners**: The charge for using actions minutes in private and internal repositories will include the cost of using the cloud platform from **January 1, 2026**.
>
> See [2026 pricing changes for {% data variables.product.prodname_actions %}](https://resources.github.com/actions/2026-pricing-changes-for-github-actions) in {% data variables.product.github %} Executive Insights.
{% endif %}

View File

@@ -7,5 +7,3 @@ github_hosted_runner: 'GitHub-hosted runner'
github_hosted_runners: 'GitHub-hosted runners' github_hosted_runners: 'GitHub-hosted runners'
github_hosted_larger_runner: 'GitHub-hosted larger runner' github_hosted_larger_runner: 'GitHub-hosted larger runner'
github_hosted_larger_runners: 'GitHub-hosted larger runners' github_hosted_larger_runners: 'GitHub-hosted larger runners'
# Date when the new billing changes for self-hosted runners on GitHub Cloud will ship
self_hosted_runner_charge_date: 'March 1, 2026'

View File

@@ -16,7 +16,7 @@
"moduleResolution": "Bundler", "moduleResolution": "Bundler",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "react-jsx", "jsx": "preserve",
"baseUrl": ".", "baseUrl": ".",
"noEmit": true, "noEmit": true,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,