diff --git a/content/actions/concepts/runners/github-hosted-runners.md b/content/actions/concepts/runners/github-hosted-runners.md index e02647bfcd12..9e8bdb31434b 100644 --- a/content/actions/concepts/runners/github-hosted-runners.md +++ b/content/actions/concepts/runners/github-hosted-runners.md @@ -91,7 +91,7 @@ Custom images let you start with a {% data variables.product.github %}-provided Custom images can include repository code, container images, binaries, certificates, and other dependencies to create a consistent build environment across workflows. This helps you gain control over your supply chain. They help reduce setup time, improve build performance, and strengthen security by reducing the surface attack vector on your images. Administrators can also apply policies to manage image versions, retention, and age to meet organizational security and compliance requirements. -Custom images can only be used with larger runners and are billed at the same per-minute rates as those runners. Storage for custom images is billed and metered through {% data variables.product.prodname_actions %} storage. For more information about billing, see [AUTOTITLE](/billing/concepts/product-billing/github-actions). +Custom images can only be used with {% data variables.actions.hosted_runners %}. Jobs that use custom images are billed at the same per-minute rates as those runners. Storage for custom images is billed and metered through {% data variables.product.prodname_actions %} storage. For more information, see [AUTOTITLE](/billing/concepts/product-billing/github-actions#custom-image-storage). To get started with custom images, see [AUTOTITLE](/actions/how-tos/manage-runners/larger-runners/use-custom-images). diff --git a/content/actions/how-tos/manage-runners/larger-runners/use-custom-images.md b/content/actions/how-tos/manage-runners/larger-runners/use-custom-images.md index fbf048584084..a5efcd38a555 100644 --- a/content/actions/how-tos/manage-runners/larger-runners/use-custom-images.md +++ b/content/actions/how-tos/manage-runners/larger-runners/use-custom-images.md @@ -123,6 +123,12 @@ If you specify an older major version in the YAML (for example, version: 1.* whe > [!NOTE] > {% data variables.actions.github_hosted_larger_runner %} creation does not support wildcards in image version selection. +## Billing and storage for custom images + +Jobs that use custom images are billed at the same per-minute rate as the {% data variables.actions.hosted_runner %} that uses the image. Storage for custom images is billed separately through {% data variables.product.prodname_actions %} storage. + +If you rebuild images frequently and retain older versions, your storage usage can grow quickly because each successful workflow job that includes the `snapshot` keyword creates a new image version. For more information, see [AUTOTITLE](/billing/concepts/product-billing/github-actions#custom-image-storage) and [AUTOTITLE](/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#custom-images-retention-policies). + ## Managing custom images You can view detailed information about each image, delete unused images or specific versions, and track image versions over time. diff --git a/content/billing/concepts/product-billing/github-actions.md b/content/billing/concepts/product-billing/github-actions.md index 59450a4cd707..fe001ba83bcf 100644 --- a/content/billing/concepts/product-billing/github-actions.md +++ b/content/billing/concepts/product-billing/github-actions.md @@ -17,8 +17,6 @@ versions: ghec: '*' shortTitle: GitHub Actions contentType: concepts -category: - - Understand product costs --- ## How use of {% data variables.product.prodname_actions %} is measured @@ -75,6 +73,27 @@ Deleting artifacts reduces your current storage and prevents future charges, but Your monthly bill converts GB-Hours to GB-Months by dividing by the hours in the month (usually 720 hours for a 30-day month). +### Custom image storage + +For {% data variables.actions.github_hosted_larger_runners %}, storage for custom images is billed through {% data variables.product.prodname_actions %} storage. + +Custom image storage uses the same hourly accrual model as other {% data variables.product.prodname_actions %} storage. Your bill is based on the amount of image data that is stored over time, measured in GB-Hours. + +Storage usage for custom images depends on: + +* The size of each image version +* The number of image versions that you retain +* How long each version is stored + +Each successful workflow job that includes the `snapshot` keyword creates a new custom image version. Each retained version contributes to your storage usage until the version is deleted or removed by a retention policy. For more information, see [AUTOTITLE](/actions/how-tos/manage-runners/larger-runners/use-custom-images) and [AUTOTITLE](/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#custom-images-retention-policies). + +Custom image storage is based on retained image data over time, not on the number of times that a runner uses or pulls an existing image. + +For example: + +* Storing one 150 GB custom image version for 24 hours uses 3,600 GB-Hours. +* Storing four 150 GB versions of the same image for 24 hours uses 14,400 GB-Hours. + ### Examples of how usage is measured * 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. diff --git a/content/billing/reference/actions-runner-pricing.md b/content/billing/reference/actions-runner-pricing.md index add2d7559684..fee9fc01f91a 100644 --- a/content/billing/reference/actions-runner-pricing.md +++ b/content/billing/reference/actions-runner-pricing.md @@ -9,8 +9,6 @@ versions: contentType: reference redirect_from: - /billing/reference/actions-minute-multipliers -category: - - Understand product costs --- {% data variables.product.github %} rounds the minutes and partial minutes each job uses up to the nearest whole minute. @@ -69,4 +67,6 @@ category: * For {% data variables.actions.hosted_runner %}s, there is no additional cost for configurations that assign public static IP addresses to a {% data variables.actions.hosted_runner %}. For more information on {% data variables.actions.hosted_runner %}s, see [AUTOTITLE](/actions/using-github-hosted-runners/using-larger-runners/about-larger-runners). * Included minutes cannot be used for {% data variables.actions.hosted_runner %}s. * The {% data variables.actions.hosted_runner %}s are not free for public repositories. -* Custom images can only be used with larger runners and are billed at the same per-minute rates as those runners. +{% ifversion fpt or ghec %} +* Custom images can only be used with {% data variables.actions.hosted_runners %}. Jobs that use custom images are billed at the same per-minute rates as those runners, and storage for custom images is billed separately through {% data variables.product.prodname_actions %} storage based on the amount of stored image data over time. For more information, see [AUTOTITLE](/billing/concepts/product-billing/github-actions#custom-image-storage). +{% endif %} diff --git a/content/integrations/how-tos/teams/integrate-github-with-teams.md b/content/integrations/how-tos/teams/integrate-github-with-teams.md index e61c92a71315..3c0ea16c5a50 100644 --- a/content/integrations/how-tos/teams/integrate-github-with-teams.md +++ b/content/integrations/how-tos/teams/integrate-github-with-teams.md @@ -54,15 +54,42 @@ If you use {% data variables.product.prodname_ghe_cloud %} with data residency o ## Installing the {% data variables.product.github %} integration for Teams on {% data variables.product.prodname_ghe_server %} -1. In the management console for your {% data variables.product.prodname_ghe_server %} instance, open "Chat integrations" and enable {% data variables.product.github %} Chat Integration. -1. Select the Microsoft Teams tab and follow the link to register an app in Microsoft Azure. -1. Record the application (client) ID and tenant ID, then create a client secret. -1. Back in the management console, choose **Deploy to Azure** and follow the prompts to provision the Teams bot. -1. Enter the app ID, tenant ID, and client secret in the Teams configuration, then save the settings. -1. Download the generated manifest and upload it to Teams. For more information, see [Upload your app to Teams](https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/deploy-and-publish/apps-upload). -1. Install the app in Teams and run `@GitHub Notifications signin` to connect your {% data variables.product.github %} account. - ->[!NOTE] If your {% data variables.product.prodname_ghe_server %} instance is not reachable from the public internet, provide the proxy URL when configuring the Teams bot in Azure. +To integrate {% data variables.product.prodname_ghe_server %} with Microsoft Teams, you first need to configure the chat integration on your instance and register an app in Microsoft Azure. + +### Register the app and provision the Teams bot + +1. In the {% data variables.enterprise.management_console %} for your {% data variables.product.prodname_ghe_server %} instance, open the **Chat integration** page and select the **Enable {% data variables.product.github %} Chat integration** checkbox. +1. Under "Select chat client", select **Microsoft Teams**, and follow the link to register an app in Microsoft Azure. +1. In Azure, configure the details for your app registration: + * Enter your application registration **Name**. + * Set the supported account types to **Multiple Entra ID tenants** and **Allow all tenants**. +1. Click **Register**. +1. Record the application (client) ID and tenant ID displayed. +1. Under **Certificates & secrets**, create a new client secret. +1. Record the client secret value displayed. +1. Return to the {% data variables.enterprise.management_console %} and **Chat integration** page on your {% data variables.product.prodname_ghe_server %} instance. +1. Click **Deploy to Azure**, and follow the prompts to provision the Teams bot in Microsoft Azure. +1. In Azure, select the **Subscription** and **Resource group** for the Azure bot to be deployed. +1. Enter the application (client) ID and tenant ID you recorded earlier, in the Teams bot configuration. +1. Depending on your network configuration for {% data variables.product.prodname_ghe_server %}: + * If your instance _is reachable_ on the public internet, select the **Append '_msteams' to path** checkbox. + * If your instance _is not reachable_ on the public internet and requires a proxy: + * Ensure the **Append '_msteams' to path** checkbox isn't selected. + * In the **GHES Instance Host Name** field, enter the URL that will forward the traffic to your instance. +1. Click the **Review + create** tab, and then click **Create** to save the settings and begin provisioning the app. +1. Wait for the Teams bot to be provisioned in Azure. + +### Configure {% data variables.product.prodname_ghe_server %} and install the app in Teams + +1. Return to the {% data variables.enterprise.management_console %} and **Chat integration** page on your {% data variables.product.prodname_ghe_server %} instance. +1. Enter the **Microsoft client ID**, **Microsoft client secret**, and **Microsoft tenant ID** using the application details you recorded earlier. +1. Optionally, if your {% data variables.product.prodname_ghe_server %} instance _is not reachable_ on the public internet and requires a proxy, enter the URL that will forward the traffic to your instance in the **Public Endpoint URL** field. +1. Click **Save client settings**. +1. Click **Generate manifest** to download the integration manifest for later use. +1. Click **Save settings** to apply the changes to your instance. +1. Log in to your Teams client, and open the Teams admin center. +1. Go to **Teams apps** > **Manage apps**, and click **Upload** to upload the integration manifest you downloaded in a previous step. For more information, see [Upload your app to Teams](https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/deploy-and-publish/apps-upload#upload-your-app). +1. Install your app in Teams, and run `@GHE signin` to connect your {% data variables.product.github %} account. {% endif %} diff --git a/data/reusables/gated-features/push-protection-for-repos.md b/data/reusables/gated-features/push-protection-for-repos.md deleted file mode 100644 index cab28321b23d..000000000000 --- a/data/reusables/gated-features/push-protection-for-repos.md +++ /dev/null @@ -1,13 +0,0 @@ -Push protection is available for the following repository types: - -{% ifversion fpt %} -* Public repositories on {% data variables.product.prodname_dotcom_the_website %} -* Organization-owned repositories on {% data variables.product.prodname_team %} with [{% data variables.product.prodname_GH_secret_protection %}](/get-started/learning-about-github/about-github-advanced-security) enabled{% endif %} - -{% ifversion ghec %} -* Public repositories on {% data variables.product.prodname_dotcom_the_website %} -* Organization-owned repositories on {% data variables.product.prodname_team %} or {% data variables.product.prodname_ghe_cloud %} with [{% data variables.product.prodname_GH_secret_protection %}](/get-started/learning-about-github/about-github-advanced-security) enabled -* User namespace repositories belonging to {% data variables.product.prodname_emus %}{% endif %} - -{% ifversion ghes %} -* Organization-owned repositories with [{% data variables.product.prodname_GH_secret_protection %}](/get-started/learning-about-github/about-github-advanced-security) enabled{% endif %} diff --git a/data/reusables/secret-scanning/push-protection-delegated-bypass-intro.md b/data/reusables/secret-scanning/push-protection-delegated-bypass-intro.md deleted file mode 100644 index ccbcd395c6ee..000000000000 --- a/data/reusables/secret-scanning/push-protection-delegated-bypass-intro.md +++ /dev/null @@ -1,6 +0,0 @@ -Delegated bypass for push protection lets you: - -* Define contributors who can bypass push protection. -* Adds an approval process for other contributors. - -{% ifversion push-protection-delegated-bypass-file-upload-support %} Delegated bypass applies to files created, edited, and uploaded on {% data variables.product.prodname_dotcom %}.{% endif %}