diff --git a/assets/images/hosted-runner-mgmt.png b/assets/images/hosted-runner-mgmt.png new file mode 100644 index 000000000000..9b62a8c94410 Binary files /dev/null and b/assets/images/hosted-runner-mgmt.png differ diff --git a/assets/images/hosted-runner.png b/assets/images/hosted-runner.png new file mode 100644 index 000000000000..fa052d51eecc Binary files /dev/null and b/assets/images/hosted-runner.png differ diff --git a/content/actions/hosting-your-own-runners/adding-self-hosted-runners.md b/content/actions/hosting-your-own-runners/adding-self-hosted-runners.md index 33df75d7fe38..6e7678877030 100644 --- a/content/actions/hosting-your-own-runners/adding-self-hosted-runners.md +++ b/content/actions/hosting-your-own-runners/adding-self-hosted-runners.md @@ -71,7 +71,7 @@ You can add self-hosted runners at the organization level, where they can be use {% data reusables.organizations.navigate-to-org %} {% data reusables.organizations.org_settings %} {% data reusables.organizations.settings-sidebar-actions-runners %} -1. Click **New runner**. +{% ifversion actions-hosted-runners %}1. Click **New runner**, then click **New self-hosted runner**.{% else %}1. Click **New runner**.{% endif %} {% data reusables.actions.self-hosted-runner-configure %} {% elsif ghae or ghes < 3.4 %} {% data reusables.organizations.navigate-to-org %} diff --git a/content/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups.md b/content/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups.md index 63a8e542c85b..acf5f2645137 100644 --- a/content/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups.md +++ b/content/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups.md @@ -9,216 +9,65 @@ versions: ghae: '*' ghec: '*' type: tutorial -shortTitle: Manage access to runners +shortTitle: Using runner groups --- {% data reusables.actions.enterprise-beta %} {% data reusables.actions.enterprise-github-hosted-runners %} -## About self-hosted runner groups +## About runner groups -{% ifversion fpt %} -{% note %} - -**Note:** All organizations have a single default self-hosted runner group. Only enterprise accounts and organizations owned by enterprise accounts can create and manage additional self-hosted runner groups. - -{% endnote %} - -Self-hosted runner groups are used to control access to self-hosted runners. Organization admins can configure access policies that control which repositories in an organization have access to the runner group. - -If you use {% data variables.product.prodname_ghe_cloud %}, you can create additional runner groups; enterprise admins can configure access policies that control which organizations in an enterprise have access to the runner group; and organization admins can assign additional granular repository access policies to the enterprise runner group. For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups). -{% endif %} +{% data reusables.actions.about-runner-groups %} {% ifversion fpt %}For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups).{% endif %} {% ifversion ghec or ghes or ghae %} -Self-hosted runner groups are used to control access to self-hosted runners at the organization and enterprise level. Enterprise owners can configure access policies that control which organizations {% ifversion restrict-groups-to-workflows %}and workflows {% endif %}in an enterprise have access to the runner group. Organization owners can configure access policies that control which repositories{% ifversion restrict-groups-to-workflows %} and workflows{% endif %} in an organization have access to the runner group. - -When an enterprise owner grants an organization access to a runner group, organization owners can see the runner group listed in the organization's self-hosted runner settings. The organization owners can then assign additional granular repository{% ifversion restrict-groups-to-workflows %} and workflow{% endif %} access policies to the enterprise runner group. - -When new runners are created, they are automatically assigned to the default group. Runners can only be in one group at a time. You can move runners from the default group to another group. For more information, see "[Moving a self-hosted runner to a group](#moving-a-self-hosted-runner-to-a-group)." ## Creating a self-hosted runner group for an organization -All organizations have a single default self-hosted runner group. Organizations within an enterprise account can create additional self-hosted groups. Organization admins can allow individual repositories access to a runner group. For information about how to create a self-hosted runner group with the REST API, see "[Self-hosted runner groups](/rest/reference/actions#self-hosted-runner-groups)." - -Self-hosted runners are automatically assigned to the default group when created, and can only be members of one group at a time. You can move a runner from the default group to any group you create. - -When creating a group, you must choose a policy that defines which repositories{% ifversion restrict-groups-to-workflows %} and workflows{% endif %} have access to the runner group. - -{% ifversion ghec or ghes > 3.3 or ghae-issue-5091 %} -{% data reusables.organizations.navigate-to-org %} -{% data reusables.organizations.org_settings %} -{% data reusables.organizations.settings-sidebar-actions-runner-groups %} -1. In the "Runner groups" section, click **New runner group**. -1. Enter a name for your runner group. - {% data reusables.actions.runner-group-assign-policy-repo %} - - {% warning %} +{%- ifversion ghec or ghes %} - **Warning**: {% indented_data_reference reusables.actions.self-hosted-runner-security spaces=3 %} +{% data reusables.actions.self-hosted-runner-security-admonition %} - For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories)." +{%- endif %} - {% endwarning %} -{% data reusables.actions.runner-group-assign-policy-workflow %}{%- ifversion restrict-groups-to-workflows %} Organization-owned runner groups cannot access workflows from a different organization in the enterprise; instead, you must create an enterprise-owned runner group.{% endif %} -{% data reusables.actions.self-hosted-runner-create-group %} -{% elsif ghae or ghes < 3.4 %} -{% data reusables.organizations.navigate-to-org %} -{% data reusables.organizations.org_settings %} -{% data reusables.organizations.settings-sidebar-actions-runner-groups %} -1. Under {% ifversion ghes or ghae %}"Runners"{% endif %}, click **Add new**, and then **New group**. - - ![Add runner group](/assets/images/help/settings/actions-org-add-runner-group.png) -1. Enter a name for your runner group, and assign a policy for repository access. - - You can configure a runner group to be accessible to a specific list of repositories, or to all repositories in the organization.{% ifversion ghec or ghes %} By default, only private repositories can access runners in a runner group, but you can override this. This setting can't be overridden if configuring an organization's runner group that was shared by an enterprise.{% endif %} - - {%- ifversion ghes %} - {% warning %} - - **Warning**: - - {% indented_data_reference reusables.actions.self-hosted-runner-security spaces=3 %} - - For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories)." - - {% endwarning %} - {%- endif %} - - ![Add runner group options](/assets/images/help/settings/actions-org-add-runner-group-options.png) -1. Click **Save group** to create the group and apply the policy. -{% endif %} +{% data reusables.actions.creating-a-runner-group-for-an-organization %} ## Creating a self-hosted runner group for an enterprise -Enterprises can add their self-hosted runners to groups for access management. Enterprises can create groups of self-hosted runners that are accessible to specific organizations in the enterprise account{% ifversion restrict-groups-to-workflows %} or to specific workflows{% endif %}. Organization owners can then assign additional granular repository{% ifversion restrict-groups-to-workflows %} or workflow{% endif %} access policies to the enterprise runner groups. For information about how to create a self-hosted runner group with the REST API, see the enterprise endpoints in the [{% data variables.product.prodname_actions %} REST API](/rest/reference/actions#self-hosted-runner-groups). - -Self-hosted runners are automatically assigned to the default group when created, and can only be members of one group at a time. You can assign the runner to a specific group during the registration process, or you can later move the runner from the default group to a custom group. - -When creating a group, you must choose a policy that defines which organizations have access to the runner group. - -{% data reusables.actions.self-hosted-runner-groups-add-to-enterprise-first-steps %} -1. To choose a policy for organization access, select the **Organization access** drop-down, and click a policy. You can configure a runner group to be accessible to a specific list of organizations, or all organizations in the enterprise.{% ifversion ghes %} By default, only private repositories can access runners in a runner group, but you can override this.{% endif %} + {%- ifversion ghec or ghes %} - {%- ifversion ghec or ghes %} - {% warning %} +{% data reusables.actions.self-hosted-runner-security-admonition %} - **Warning**: +{%- endif %} - {% indented_data_reference reusables.actions.self-hosted-runner-security spaces=3 %} - - For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories)." - - {% endwarning %} - {%- endif %} - {%- ifversion ghec or ghes %} - - ![Add runner group options](/assets/images/help/settings/actions-enterprise-account-add-runner-group-options.png) - {%- elsif ghae %} - - ![Add runner group options](/assets/images/help/settings/actions-enterprise-account-add-runner-group-options-ae.png) - {%- endif %} -{% data reusables.actions.runner-group-assign-policy-workflow %} -1. Click **Save group** to create the group and apply the policy. +{% data reusables.actions.creating-a-runner-group-for-an-enterprise %} {% endif %} ## Changing the access policy of a self-hosted runner group -For runner groups in an enterprise, you can change what organizations in the enterprise can access a runner group{% ifversion restrict-groups-to-workflows %} or restrict what workflows a runner group can run{% endif %}. For runner groups in an organization, you can change what repositories in the organization can access a runner group{% ifversion restrict-groups-to-workflows %} or restrict what workflows a runner group can run{% endif %}. - -### Changing what organizations or repositories can access a runner group - -{% ifversion fpt or ghec or ghes > 3.3 or ghae-issue-5091 %} -{% data reusables.actions.self-hosted-runner-groups-navigate-to-repo-org-enterprise %} -{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} -1. For runner groups in an enterprise, under **Organization access**, modify what organizations can access the runner group. For runner groups in an organization, under **Repository access**, modify what repositories can access the runner group. - - {%- ifversion fpt or ghec or ghes %} - {% warning %} - - **Warning**: - - {% indented_data_reference reusables.actions.self-hosted-runner-security spaces=3 %} - - For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories)." - - {% endwarning %} - {%- endif %} -{% elsif ghae or ghes < 3.4 %} -{% data reusables.actions.self-hosted-runner-configure-runner-group-access %} -{% endif %} - -{% ifversion restrict-groups-to-workflows %} -### Changing what workflows can access a runner group -You can configure a self-hosted runner group to run either selected workflows or all workflows. For example, you might use this setting to protect secrets that are stored on self-hosted runners or to standardize deployment workflows by restricting a runner group to run only a specific reusable workflow. This setting cannot be overridden if you are configuring an organization's runner group that was shared by an enterprise. -{% data reusables.actions.self-hosted-runner-groups-navigate-to-repo-org-enterprise %} -{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} -1. Under **Workflow access**, select the dropdown menu and click **Selected workflows**. -1. Click {% octicon "gear" aria-label="the gear icon" %}. -1. Enter a comma separated list of the workflows that can access the runner group. Use the full path, including the repository name and owner. Pin the workflow to a branch, tag, or full SHA. For example: `octo-org/octo-repo/.github/workflows/build.yml@v2, octo-org/octo-repo/.github/workflows/deploy.yml@d6dc6c96df4f32fa27b039f2084f576ed2c5c2a5, monalisa/octo-test/.github/workflows/test.yml@main`. +{%- ifversion fpt or ghec or ghes %} - Only jobs directly defined within the selected workflows will have access to the runner group. - - Organization-owned runner groups cannot access workflows from a different organization in the enterprise; instead, you must create an enterprise-owned runner group. +{% data reusables.actions.self-hosted-runner-security-admonition %} -1. Click **Save**. +{%- endif %} -{% endif %} +{% data reusables.actions.changing-the-access-policy-of-a-runner-group %} ## Changing the name of a runner group -{% ifversion fpt or ghec or ghes > 3.3 or ghae-issue-5091 %} -{% data reusables.actions.self-hosted-runner-groups-navigate-to-repo-org-enterprise %} -{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} -1. Change the runner group name. - -{% elsif ghae or ghes < 3.4 %} -{% data reusables.actions.self-hosted-runner-configure-runner-group %} -1. Change the runner group name. -{% endif %} +{% data reusables.actions.changing-the-name-of-a-runner-group %} {% ifversion ghec or ghes or ghae %} ## Automatically adding a self-hosted runner to a group -You can use the configuration script to automatically add a new self-hosted runner to a group. For example, this command registers a new self-hosted runner and uses the `--runnergroup` parameter to add it to a group named `rg-runnergroup`. - -```sh -./config.sh --url $org_or_enterprise_url --token $token --runnergroup rg-runnergroup -``` - -The command will fail if the runner group doesn't exist: - -``` -Could not find any self-hosted runner group named "rg-runnergroup". -``` +{% data reusables.actions.automatically-adding-a-runner-to-a-group %} ## Moving a self-hosted runner to a group -If you don't specify a runner group during the registration process, your new self-hosted runners are automatically assigned to the default group, and can then be moved to another group. - -{% data reusables.actions.self-hosted-runner-navigate-to-org-enterprise %} -{% ifversion ghec or ghes > 3.3 or ghae-issue-5091 %} -1. In the "Runners" list, click the runner that you want to configure. -2. Select the **Runner group** drop-down. -3. In "Move runner to group", choose a destination group for the runner. -{% elsif ghae or ghes < 3.4 %} -1. In the {% ifversion ghes or ghae %}"Runner groups"{% endif %} section of the settings page, locate the current group of the runner you want to move and expand the list of group members. - ![View runner group members](/assets/images/help/settings/actions-org-runner-group-members.png) -2. Select the checkbox next to the self-hosted runner, and then click **Move to group** to see the available destinations. - ![Runner group member move](/assets/images/help/settings/actions-org-runner-group-member-move.png) -3. To move the runner, click on the destination group. - ![Runner group member move](/assets/images/help/settings/actions-org-runner-group-member-move-destination.png) -{% endif %} +{% data reusables.actions.moving-a-runner-to-a-group %} ## Removing a self-hosted runner group -Self-hosted runners are automatically returned to the default group when their group is removed. +{% data reusables.actions.removing-a-runner-group %} -{% ifversion ghes or ghae or ghec %} -{% data reusables.actions.self-hosted-runner-groups-navigate-to-repo-org-enterprise %} -1. In the list of groups, to the right of the group you want to delete, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}. -2. To remove the group, click **Remove group**. -3. Review the confirmation prompts, and click **Remove this runner group**. - -{% endif %} {% endif %} diff --git a/content/actions/learn-github-actions/understanding-github-actions.md b/content/actions/learn-github-actions/understanding-github-actions.md index 3ac38d19c681..f6e9e9ca751a 100644 --- a/content/actions/learn-github-actions/understanding-github-actions.md +++ b/content/actions/learn-github-actions/understanding-github-actions.md @@ -2,6 +2,7 @@ title: Understanding GitHub Actions shortTitle: Understanding GitHub Actions intro: 'Learn the basics of {% data variables.product.prodname_actions %}, including core concepts and essential terminology.' +miniTocMaxHeadingLevel: 3 redirect_from: - /github/automating-your-workflow-with-github-actions/core-concepts-for-github-actions - /actions/automating-your-workflow-with-github-actions/core-concepts-for-github-actions @@ -82,7 +83,7 @@ For more information, see "[Creating actions](/actions/creating-actions)." ### Runners -{% data reusables.actions.about-runners %} Each runner can run a single job at a time. {% ifversion ghes or ghae %} You must host your own runners for {% data variables.product.product_name %}. {% elsif fpt or ghec %}{% data variables.product.company_short %} provides Ubuntu Linux, Microsoft Windows, and macOS runners to run your workflows; each workflow run executes in a fresh, newly-provisioned virtual machine. If you need a different operating system or require a specific hardware configuration, you can host your own runners.{% endif %} For more information{% ifversion fpt or ghec %} about self-hosted runners{% endif %}, see "[Hosting your own runners](/actions/hosting-your-own-runners)." +{% data reusables.actions.about-runners %} Each runner can run a single job at a time. {% ifversion ghes or ghae %} You must host your own runners for {% data variables.product.product_name %}. {% elsif fpt or ghec %}{% data variables.product.company_short %} provides Ubuntu Linux, Microsoft Windows, and macOS runners to run your workflows; each workflow run executes in a fresh, newly-provisioned virtual machine. {% ifversion actions-hosted-runners %} {% data variables.product.prodname_dotcom %} also offers {% data variables.actions.hosted_runner %}s, which are available in larger configurations. For more information, see "[Using {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/using-larger-runners)." {% endif %}If you need a different operating system or require a specific hardware configuration, you can host your own runners.{% endif %} For more information{% ifversion fpt or ghec %} about self-hosted runners{% endif %}, see "[Hosting your own runners](/actions/hosting-your-own-runners)." {% data reusables.actions.workflow-basic-example-and-explanation %} diff --git a/content/actions/using-github-hosted-runners/about-github-hosted-runners.md b/content/actions/using-github-hosted-runners/about-github-hosted-runners.md index dcfa57bf9be7..62fe7d964cd0 100644 --- a/content/actions/using-github-hosted-runners/about-github-hosted-runners.md +++ b/content/actions/using-github-hosted-runners/about-github-hosted-runners.md @@ -86,6 +86,15 @@ While the job runs, the logs and output can be viewed in the {% data variables.p ## Supported runners and hardware resources +{% ifversion actions-hosted-runners %} + +{% note %} + +**Note**: {% data variables.product.prodname_dotcom %} also offers {% data variables.actions.hosted_runner %}s, which are available in larger configurations. For more information, see "[Using {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/using-larger-runners)." + +{% endnote %} +{% endif %} + Hardware specification for Windows and Linux virtual machines: - 2-core CPU (x86_64) - 7 GB of RAM diff --git a/content/actions/using-github-hosted-runners/controlling-access-to-larger-runners.md b/content/actions/using-github-hosted-runners/controlling-access-to-larger-runners.md new file mode 100644 index 000000000000..6aac71b2345a --- /dev/null +++ b/content/actions/using-github-hosted-runners/controlling-access-to-larger-runners.md @@ -0,0 +1,50 @@ +--- +title: Controlling access to larger runners +intro: You can use policies to limit access to {% data variables.actions.hosted_runner %}s that have been added to an organization or enterprise. +product: '{% data reusables.gated-features.hosted-runners %}' +versions: + feature: 'actions-hosted-runners' +type: tutorial +shortTitle: Controlling access to {% data variables.actions.hosted_runner %}s +--- + +{% data reusables.actions.enterprise-beta %} +{% data reusables.actions.enterprise-github-hosted-runners %} + +## About runner groups + +{% data reusables.actions.about-runner-groups %} {% ifversion fpt %}For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/actions/using-github-hosted-runners/controlling-access-to-larger-runners).{% endif %} + +{% ifversion ghec or ghes or ghae %} + +## Creating a runner group for an organization + +{% data reusables.actions.hosted-runner-security-admonition %} +{% data reusables.actions.creating-a-runner-group-for-an-organization %} + +## Creating a runner group for an enterprise + +{% data reusables.actions.hosted-runner-security-admonition %} +{% data reusables.actions.creating-a-runner-group-for-an-enterprise %} + +{% endif %} + +## Changing the access policy of a runner group + +{% data reusables.actions.hosted-runner-security-admonition %} +{% data reusables.actions.changing-the-access-policy-of-a-runner-group %} + +## Changing the name of a runner group + +{% data reusables.actions.changing-the-name-of-a-runner-group %} + +{% ifversion ghec or ghes or ghae %} +## Moving a runner to a group + +{% data reusables.actions.moving-a-runner-to-a-group %} + +## Removing a runner group + +{% data reusables.actions.removing-a-runner-group %} + +{% endif %} diff --git a/content/actions/using-github-hosted-runners/index.md b/content/actions/using-github-hosted-runners/index.md index 2c05480126cb..89da172b2b9d 100644 --- a/content/actions/using-github-hosted-runners/index.md +++ b/content/actions/using-github-hosted-runners/index.md @@ -7,6 +7,8 @@ versions: ghes: '*' children: - /about-github-hosted-runners + - /using-larger-runners + - /controlling-access-to-larger-runners - /monitoring-your-current-jobs - /customizing-github-hosted-runners - /connecting-to-a-private-network diff --git a/content/actions/using-github-hosted-runners/using-larger-runners.md b/content/actions/using-github-hosted-runners/using-larger-runners.md new file mode 100644 index 000000000000..22ea0079197c --- /dev/null +++ b/content/actions/using-github-hosted-runners/using-larger-runners.md @@ -0,0 +1,135 @@ +--- +title: Using larger runners +intro: '{% data variables.product.prodname_dotcom %} offers larger runners with more RAM and CPU.' +miniTocMaxHeadingLevel: 3 +product: '{% data reusables.gated-features.hosted-runners %}' +versions: + feature: 'actions-hosted-runners' +shortTitle: Using {% data variables.actions.hosted_runner %}s +--- + +## Overview of {% data variables.actions.hosted_runner %}s + +In addition to the [standard {% data variables.product.prodname_dotcom %}-hosted runners](/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources), {% data variables.product.prodname_dotcom %} also offers customers on {% data variables.product.prodname_team %} and {% data variables.product.prodname_ghe_cloud %} plans a range of {% data variables.actions.hosted_runner %}s with more RAM and CPU. These runners are hosted by {% data variables.product.prodname_dotcom %} and have the runner application and other tools preinstalled. + +When you add a {% data variables.actions.hosted_runner %} to an organization, you are defining a type of machine from a selection of available hardware specifications and operating system images. {% data variables.product.prodname_dotcom %} will then create multiple instances of this runner that scale up and down to match the job demands of your organization, based on the autoscaling limits you define. + +## Architectural overview of {% data variables.actions.hosted_runner %}s + +The {% data variables.actions.hosted_runner %}s are managed at the organization level, where they are arranged into groups that can contain multiple instances of the runner. They can also be created at the enterprise level and shared with organizations in the hierarchy. Once you've created a group, you can then add a runner to the group and update your workflows to target the label assigned to the {% data variables.actions.hosted_runner %}. You can also control which repositories are permitted to send jobs to the group for processing. For more information about groups, see "[Controlling access to {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/controlling-access-to-larger-runners)." + +In the following diagram, a class of hosted runner named `ubuntu-20.04-16core` has been defined with customized hardware and operating system configuration. + +![Diagram explaining {% data variables.actions.hosted_runner %}](/assets/images/hosted-runner.png) + +1. Instances of this runner are automatically created and added to a group called `ubuntu-20.04-16core`. +2. The runners have been assigned the label `ubuntu-20.04-16core`. +3. Workflow jobs use the `ubuntu-20.04-16core` label in their `runs-on` key to indicate the type of runner they need to execute the job. +4. {% data variables.product.prodname_actions %} checks the runner group to see if your repository is authorized to send jobs to the runner. +5. The job runs on the next available instance of the `ubuntu-20.04-16core` runner. + +## Autoscaling {% data variables.actions.hosted_runner %}s + +Your {% data variables.actions.hosted_runner %}s can be configured to automatically scale to suit your needs. When jobs are submitted for processing, more machines can be automatically provisioned to run the jobs, until reaching a pre-defined maximum limit. Each machine only handles one job at a time, so these settings effectively determine the number of jobs that can be run concurrently. + +During the runner deployment process, you can configure the _Max_ option, which allows you to control your costs by setting the maximum parallel number of machines that are created in this set. A higher value here can help avoid workflows being blocked due to parallelism. + +## Networking for {% data variables.actions.hosted_runner %}s + +By default, {% data variables.actions.hosted_runner %}s receive a dynamic IP address that changes for each job run. Optionally, {% data variables.product.prodname_ghe_cloud %} customers can configure their {% data variables.actions.hosted_runner %}s to receive a static IP address from {% data variables.product.prodname_dotcom %}'s IP address pool. When enabled, instances of the {% data variables.actions.hosted_runner %} will receive an address from a range that is unique to the runner, allowing you to use this range to configure a firewall allowlist. You can use up to 10 static IP address ranges in total across all your {% data variables.actions.hosted_runner %}s. + +{% note %} + +**Note**: If runners are unused for more than 30 days, their IP address ranges are automatically removed and cannot be recovered. + +{% endnote %} + +## Planning for {% data variables.actions.hosted_runner %}s + +### Create a runner group + +Runner groups are used to collect sets of virtual machines and create a security boundary around them. You can then decide which organizations or repositories are permitted to run jobs on those sets of machines. During the {% data variables.actions.hosted_runner %} deployment process, the runner can be added to an existing group, or otherwise it will join a default group. You can create a group by following the steps in "[Controlling access to {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/controlling-access-to-larger-runners)." + +### Understanding billing + +Compared to standard {% data variables.product.prodname_dotcom %}-hosted runners, {% data variables.actions.hosted_runner %}s are billed differently. For more information, see "[Per-minute rates](/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates)". + +## Adding a {% data variables.actions.hosted_runner %} to an enterprise + +You can add {% data variables.actions.hosted_runner %}s to an enterprise, where they can be assigned to multiple organizations. The organization admins can then control which repositories can use the runners. To add a {% data variables.actions.hosted_runner %} to an enterprise, you must be an enterprise owner. + +{% data reusables.actions.add-hosted-runner-overview %} + +{% data reusables.enterprise-accounts.access-enterprise %} +{% data reusables.enterprise-accounts.policies-tab %} +{% data reusables.enterprise-accounts.actions-tab %} +{% data reusables.enterprise-accounts.actions-runners-tab %} +{% data reusables.actions.add-hosted-runner %} +1. To allow organizations to access your {% data variables.actions.hosted_runner %}s, you specify the list of organizations that can use it. For more information, see "[Managing access to your runners](#managing-access-to-your-runners)." + +## Adding a {% data variables.actions.hosted_runner %} to an organization + +You can add a {% data variables.actions.hosted_runner %} to an organization, where the organization admins can control which repositories can use it. + +{% data reusables.actions.add-hosted-runner-overview %} + +{% data reusables.organizations.navigate-to-org %} +{% data reusables.organizations.org_settings %} +{% data reusables.organizations.settings-sidebar-actions-runners %} +{% data reusables.actions.add-hosted-runner %} +1. To allow repositories to access your {% data variables.actions.hosted_runner %}s, add them to the list of repositories that can use it. For more information, see "[Managing access to your runners](#managing-access-to-your-runners)." + +## Running jobs on your runner + +Once your runner type has been been defined, you can update your workflows to send jobs to the runner instances for processing. In this example, a runner group is populated with Ubuntu 16-core runners, which have been assigned the label `ubuntu-20.04-16core`. If you have a runner matching this label, the `check-bats-version` job then uses the `runs-on` key to target that runner whenever the job is run: + +```yaml +name: learn-github-actions +on: [push] +jobs: + check-bats-version: + runs-on: ubuntu-20.04-16core + steps: + - uses: {% data reusables.actions.action-checkout %} + - uses:{% data reusables.actions.action-setup-node %} + with: + node-version: '14' + - run: npm install -g bats + - run: bats -v +``` + +## Managing access to your runners + +{% note %} + +**Note**: Before your workflows can send jobs to {% data variables.actions.hosted_runner %}s, you must first configure permissions for the runner group. See the following sections for more information. + +{% endnote %} + +Runner groups are used to control which repositories can run jobs on your {% data variables.actions.hosted_runner %}s. You must grant access to the group from each level of the management hierarchy, depending on where you've defined the {% data variables.actions.hosted_runner %}: + +- **Runners at the enterprise level**: Configure the runner group to grant access to all the required organizations. In addition, for each organization, you must configure the group to specify which repositories are allowed access. +- **Runners at the organization level**: Configure the runner group by specifying which repositories are allowed access. + +For example, the following diagram has a runner group named `grp-ubuntu-20.04-16core` at the enterprise level. Before the repository named `octo-repo` can use the runners in the group, you must first configure the group at the enterprise level to allow access from the `octo-org` organization; you must then configure the group at the organization level to allow access from `octo-repo`: + +![Diagram explaining {% data variables.actions.hosted_runner %} groups](/assets/images/hosted-runner-mgmt.png) + +### Allowing repositories to access a runner group + +This procedure demonstrates how to configure group permissions at the enterprise and organization levels: + +{% data reusables.actions.runner-groups-navigate-to-repo-org-enterprise %} +{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} + - For runner groups in an enterprise: under **Organization access**, modify which organizations can access the runner group. + - For runner groups in an organization: under **Repository access**, modify which repositories can access the runner group. + +{% warning %} + +**Warning**: + +{% data reusables.actions.hosted-runner-security %} + +For more information, see "[Controlling access to {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/controlling-access-to-larger-runners)." + +{% endwarning %} diff --git a/content/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-self-hosted-runners-for-your-enterprise.md b/content/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-self-hosted-runners-for-your-enterprise.md index dbc7885a8181..eaf7abed76e3 100644 --- a/content/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-self-hosted-runners-for-your-enterprise.md +++ b/content/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-self-hosted-runners-for-your-enterprise.md @@ -83,7 +83,7 @@ You can create a runner group to manage access to the runner that you added to y {% data variables.product.product_name %} adds all new runners to a group. Runners can be in one group at a time. By default, {% data variables.product.product_name %} adds new runners to the "Default" group. -{% data reusables.actions.self-hosted-runner-groups-add-to-enterprise-first-steps %} +{% data reusables.actions.runner-groups-add-to-enterprise-first-steps %} 1. To choose a policy for organization access, under "Organization access", select the **Organization access** drop-down, and click **Selected organizations**. 1. To the right of the drop-down with the organization access policy, click {% octicon "gear" aria-label="The Gear icon" %}. 1. Select the organizations you'd like to grant access to the runner group. @@ -100,7 +100,7 @@ You can create a runner group to manage access to the runner that you added to y {% endwarning %} {%- endif %} -{% data reusables.actions.self-hosted-runner-create-group %} +{% data reusables.actions.create-runner-group %} {%- ifversion ghec or ghes > 3.3 or ghae-issue-5091 %} 1. Click the "Runners" tab. 1. In the list of runners, click the runner that you deployed in the previous section. diff --git a/content/billing/managing-billing-for-github-actions/about-billing-for-github-actions.md b/content/billing/managing-billing-for-github-actions/about-billing-for-github-actions.md index 5d22caf82502..ffc87c915490 100644 --- a/content/billing/managing-billing-for-github-actions/about-billing-for-github-actions.md +++ b/content/billing/managing-billing-for-github-actions/about-billing-for-github-actions.md @@ -1,6 +1,7 @@ --- title: About billing for GitHub Actions intro: 'If you want to use {% data variables.product.prodname_actions %} beyond the storage or minutes included in your account, you will be billed for additional usage.' +miniTocMaxHeadingLevel: 3 redirect_from: - /github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions - /github/setting-up-and-managing-billing-and-payments-on-github/managing-billing-for-github-actions/about-billing-for-github-actions @@ -27,6 +28,14 @@ Minutes reset every month, while storage usage does not. ### Included storage and minutes +{% ifversion actions-hosted-runners %} +{% note %} + +**Note**: Entitlement minutes cannot be used for Windows and Ubuntu runners over 2-cores. These runners will always be charged for, including in public repos. For more information, see "[Per-minute rates for runners](/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates)." + +{% endnote %} +{% endif %} + |Product | Storage | Minutes (per month)| |------- | ------- | ---------| | {% data variables.product.prodname_free_user %} | 500 MB | 2,000 | @@ -57,15 +66,15 @@ The storage used by a repository is the total storage used by {% data variables. ### Per-minute rates -| Operating system | Per-minute rate (USD) | -|------- | ---------| -| Linux | $0.008 | -| macOS | $0.08 | -| Windows | $0.016 | - -The number of jobs you can run concurrently across all repositories in your user or organization account depends on your GitHub plan. For more information, see "[Usage limits and billing](/actions/reference/usage-limits-billing-and-administration)" for {% data variables.product.prodname_dotcom %}-hosted runners and "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners/#usage-limits)" for self-hosted runner usage limits. +{% data reusables.billing.billing-standard-runners %} +{% ifversion actions-hosted-runners %}{% data reusables.billing.billing-hosted-runners %}{% endif %} -{% data reusables.user-settings.context_switcher %} +- The number of jobs you can run concurrently across all repositories in your user or organization account depends on your GitHub plan. For more information, see "[Usage limits and billing](/actions/reference/usage-limits-billing-and-administration)" for {% data variables.product.prodname_dotcom %}-hosted runners and "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners/#usage-limits)" for self-hosted runner usage limits. +- {% data reusables.user-settings.context_switcher %} +{% ifversion actions-hosted-runners %} +- 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 "[Using {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/using-larger-runners)." +- Entitlement minutes cannot be used for {% data variables.actions.hosted_runner %}s. +{% endif %} ## Calculating minute and storage spending diff --git a/data/features/actions-hosted-runners.yml b/data/features/actions-hosted-runners.yml new file mode 100644 index 000000000000..d7b08dee7465 --- /dev/null +++ b/data/features/actions-hosted-runners.yml @@ -0,0 +1,5 @@ +# Reference: #6458 +# Larger GitHub-hosted runners +versions: + fpt: '*' + ghec: '*' diff --git a/data/graphql/ghae/schema.docs-ghae.graphql b/data/graphql/ghae/schema.docs-ghae.graphql index 57ecfac539a5..21eb506999e9 100644 --- a/data/graphql/ghae/schema.docs-ghae.graphql +++ b/data/graphql/ghae/schema.docs-ghae.graphql @@ -16035,6 +16035,41 @@ type MergeBranchPayload { mergeCommit: Commit } +""" +The possible default commit messages for merges. +""" +enum MergeCommitMessage { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the pull request's body. + """ + PR_BODY + + """ + Default to the pull request's title. + """ + PR_TITLE +} + +""" +The possible default commit titles for merges. +""" +enum MergeCommitTitle { + """ + Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name). + """ + MERGE_MESSAGE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + """ Autogenerated input type of MergePullRequest """ @@ -32457,6 +32492,16 @@ type Repository implements Node & ProjectOwner & RepositoryInfo & Starrable & Su """ mergeCommitAllowed: Boolean! + """ + How the default commit message will be generated when merging a pull request. + """ + mergeCommitMessage: MergeCommitMessage! + + """ + How the default commit title will be generated when merging a pull request. + """ + mergeCommitTitle: MergeCommitTitle! + """ Returns a single milestone from the current repository by number. """ @@ -32888,6 +32933,16 @@ type Repository implements Node & ProjectOwner & RepositoryInfo & Starrable & Su """ squashMergeAllowed: Boolean! + """ + How the default commit message will be generated when squash merging a pull request. + """ + squashMergeCommitMessage: SquashMergeCommitMessage! + + """ + How the default commit title will be generated when squash merging a pull request. + """ + squashMergeCommitTitle: SquashMergeCommitTitle! + """ Whether a squash merge commit can use the pull request title as default. """ @@ -35828,6 +35883,41 @@ type SmimeSignature implements GitSignature { wasSignedByGitHub: Boolean! } +""" +The possible default commit messages for squash merges. +""" +enum SquashMergeCommitMessage { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the branch's commit messages. + """ + COMMIT_MESSAGES + + """ + Default to the pull request's body. + """ + PR_BODY +} + +""" +The possible default commit titles for squash merges. +""" +enum SquashMergeCommitTitle { + """ + Default to the commit's title (if only one commit) or the pull request's title (when more than one commit). + """ + COMMIT_OR_PR_TITLE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + """ Ways in which star connections can be ordered. """ diff --git a/data/graphql/ghec/schema.docs.graphql b/data/graphql/ghec/schema.docs.graphql index 9331ff1fd0a9..240e5bea5b56 100644 --- a/data/graphql/ghec/schema.docs.graphql +++ b/data/graphql/ghec/schema.docs.graphql @@ -18295,6 +18295,41 @@ type MergeBranchPayload { mergeCommit: Commit } +""" +The possible default commit messages for merges. +""" +enum MergeCommitMessage { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the pull request's body. + """ + PR_BODY + + """ + Default to the pull request's title. + """ + PR_TITLE +} + +""" +The possible default commit titles for merges. +""" +enum MergeCommitTitle { + """ + Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name). + """ + MERGE_MESSAGE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + """ Autogenerated input type of MergePullRequest """ @@ -39705,6 +39740,16 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent """ mergeCommitAllowed: Boolean! + """ + How the default commit message will be generated when merging a pull request. + """ + mergeCommitMessage: MergeCommitMessage! + + """ + How the default commit title will be generated when merging a pull request. + """ + mergeCommitTitle: MergeCommitTitle! + """ Returns a single milestone from the current repository by number. """ @@ -40302,6 +40347,16 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent """ squashMergeAllowed: Boolean! + """ + How the default commit message will be generated when squash merging a pull request. + """ + squashMergeCommitMessage: SquashMergeCommitMessage! + + """ + How the default commit title will be generated when squash merging a pull request. + """ + squashMergeCommitTitle: SquashMergeCommitTitle! + """ Whether a squash merge commit can use the pull request title as default. """ @@ -44792,6 +44847,41 @@ enum SponsorshipPrivacy { PUBLIC } +""" +The possible default commit messages for squash merges. +""" +enum SquashMergeCommitMessage { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the branch's commit messages. + """ + COMMIT_MESSAGES + + """ + Default to the pull request's body. + """ + PR_BODY +} + +""" +The possible default commit titles for squash merges. +""" +enum SquashMergeCommitTitle { + """ + Default to the commit's title (if only one commit) or the pull request's title (when more than one commit). + """ + COMMIT_OR_PR_TITLE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + """ Ways in which star connections can be ordered. """ diff --git a/data/graphql/schema.docs.graphql b/data/graphql/schema.docs.graphql index 9331ff1fd0a9..240e5bea5b56 100644 --- a/data/graphql/schema.docs.graphql +++ b/data/graphql/schema.docs.graphql @@ -18295,6 +18295,41 @@ type MergeBranchPayload { mergeCommit: Commit } +""" +The possible default commit messages for merges. +""" +enum MergeCommitMessage { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the pull request's body. + """ + PR_BODY + + """ + Default to the pull request's title. + """ + PR_TITLE +} + +""" +The possible default commit titles for merges. +""" +enum MergeCommitTitle { + """ + Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name). + """ + MERGE_MESSAGE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + """ Autogenerated input type of MergePullRequest """ @@ -39705,6 +39740,16 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent """ mergeCommitAllowed: Boolean! + """ + How the default commit message will be generated when merging a pull request. + """ + mergeCommitMessage: MergeCommitMessage! + + """ + How the default commit title will be generated when merging a pull request. + """ + mergeCommitTitle: MergeCommitTitle! + """ Returns a single milestone from the current repository by number. """ @@ -40302,6 +40347,16 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent """ squashMergeAllowed: Boolean! + """ + How the default commit message will be generated when squash merging a pull request. + """ + squashMergeCommitMessage: SquashMergeCommitMessage! + + """ + How the default commit title will be generated when squash merging a pull request. + """ + squashMergeCommitTitle: SquashMergeCommitTitle! + """ Whether a squash merge commit can use the pull request title as default. """ @@ -44792,6 +44847,41 @@ enum SponsorshipPrivacy { PUBLIC } +""" +The possible default commit messages for squash merges. +""" +enum SquashMergeCommitMessage { + """ + Default to a blank commit message. + """ + BLANK + + """ + Default to the branch's commit messages. + """ + COMMIT_MESSAGES + + """ + Default to the pull request's body. + """ + PR_BODY +} + +""" +The possible default commit titles for squash merges. +""" +enum SquashMergeCommitTitle { + """ + Default to the commit's title (if only one commit) or the pull request's title (when more than one commit). + """ + COMMIT_OR_PR_TITLE + + """ + Default to the pull request's title. + """ + PR_TITLE +} + """ Ways in which star connections can be ordered. """ diff --git a/data/reusables/actions/about-runner-groups.md b/data/reusables/actions/about-runner-groups.md new file mode 100644 index 000000000000..a2d79bdc09f6 --- /dev/null +++ b/data/reusables/actions/about-runner-groups.md @@ -0,0 +1,18 @@ +{% ifversion fpt %} +{% note %} + +**Note:** All organizations have a single default runner group. Only enterprise accounts and organizations owned by enterprise accounts can create and manage additional runner groups. + +{% endnote %} + +Runner groups are used to control access to runners. Organization admins can configure access policies that control which repositories in an organization have access to the runner group. + +If you use {% data variables.product.prodname_ghe_cloud %}, you can create additional runner groups; enterprise admins can configure access policies that control which organizations in an enterprise have access to the runner group; and organization admins can assign additional granular repository access policies to the enterprise runner group. +{% endif -%} +{% ifversion ghec or ghes or ghae %} + +{% data reusables.actions.runner-group-enterprise-overview %} + +When new runners are created, they are automatically assigned to the default group. Runners can only be in one group at a time. You can move runners from the default group to another group. For more information, see "[Moving a runner to a group](#moving-a-runner-to-a-group)." + +{% endif %} \ No newline at end of file diff --git a/data/reusables/actions/actions-billing.md b/data/reusables/actions/actions-billing.md index 249d4b339abf..453bd9ef77d0 100644 --- a/data/reusables/actions/actions-billing.md +++ b/data/reusables/actions/actions-billing.md @@ -1 +1 @@ -{% data variables.product.prodname_actions %} usage is free for both public repositories and self-hosted runners. For private repositories, each {% data variables.product.prodname_dotcom %} account receives a certain amount of free minutes and storage, depending on the product used with the account. Any usage beyond the included amounts is controlled by spending limits. +{% 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. For private repositories, each {% data variables.product.prodname_dotcom %} account receives a certain amount of free minutes and storage for use with {% data variables.product.prodname_dotcom %}-hosted runners, depending on the product used with the account. Any usage beyond the included amounts is controlled by spending limits. diff --git a/data/reusables/actions/add-hosted-runner-overview.md b/data/reusables/actions/add-hosted-runner-overview.md new file mode 100644 index 000000000000..bdd66230ca0a --- /dev/null +++ b/data/reusables/actions/add-hosted-runner-overview.md @@ -0,0 +1,3 @@ +You can choose an operating system and a hardware configuration from the list of available options. When new instances of this runner are deployed through autoscaling, they'll use the same operating system and hardware configuration you've defined here. + +You can also define the labels that identify the runner, which is how your workflows will be able to send jobs to the runners for processing (using `runs-on`). New runners are automatically assigned to the default group, or you can choose which group the runners must join during the runner creation process. In addition, you can modify the runner's group membership after you've registered the runner. For more information, see "[Controlling access to {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/controlling-access-to-larger-runners)." \ No newline at end of file diff --git a/data/reusables/actions/add-hosted-runner.md b/data/reusables/actions/add-hosted-runner.md new file mode 100644 index 000000000000..d533864a2e21 --- /dev/null +++ b/data/reusables/actions/add-hosted-runner.md @@ -0,0 +1,11 @@ +1. Click **New runner**, then click **{% octicon "mark-github" aria-label="New hosted runner" %} New Github-hosted runner**. +1. Complete the required details to configure your new runner: + + - **Name**: Enter a name for your new runner. For easier identification, this should indicate its hardware and operating configuration, such as `ubuntu-20.04-16core`. + - **Runner image**: Choose an operating system from the available options. Once you've selected an operating system, you will be able to choose a specific version. + - **Runner size**: Choose a hardware configuration from the drop-down list of available options. + - **Auto-scaling**: Choose the maximum number of runners that can be active at any time. + - **Runner group**: Choose the group that your runner will be a member of. This group will host multiple instances of your runner, as they scale up and down to suit demand. + - **Networking**: Only for {% data variables.product.prodname_ghe_cloud %}: Choose whether a static IP address range will be assigned to instances of the {% data variables.actions.hosted_runner %}. You can use up to 10 static IP addresses in total. + +1. Click **Create runner**. \ No newline at end of file diff --git a/data/reusables/actions/automatically-adding-a-runner-to-a-group.md b/data/reusables/actions/automatically-adding-a-runner-to-a-group.md new file mode 100644 index 000000000000..c76b2a5efc1c --- /dev/null +++ b/data/reusables/actions/automatically-adding-a-runner-to-a-group.md @@ -0,0 +1,11 @@ +You can use the configuration script to automatically add a new runner to a group. For example, this command registers a new runner and uses the `--runnergroup` parameter to add it to a group named `rg-runnergroup`. + +```sh +./config.sh --url $org_or_enterprise_url --token $token --runnergroup rg-runnergroup +``` + +The command will fail if the runner group doesn't exist: + +``` +Could not find any self-hosted runner group named "rg-runnergroup". +``` \ No newline at end of file diff --git a/data/reusables/actions/changing-the-access-policy-of-a-runner-group.md b/data/reusables/actions/changing-the-access-policy-of-a-runner-group.md new file mode 100644 index 000000000000..f0234d5b88a0 --- /dev/null +++ b/data/reusables/actions/changing-the-access-policy-of-a-runner-group.md @@ -0,0 +1,38 @@ +{% comment %} + +Always include a security admonition above this procedure. This is either one of the following, depending on whether the context is self-hosted runners or larger runners. + +{% data reusables.actions.self-hosted-runner-security-admonition %} +{% data reusables.actions.hosted-runner-security-admonition %} + +{% endcomment %} + +For runner groups in an enterprise, you can change what organizations in the enterprise can access a runner group{% ifversion restrict-groups-to-workflows %} or restrict what workflows a runner group can run{% endif %}. For runner groups in an organization, you can change what repositories in the organization can access a runner group{% ifversion restrict-groups-to-workflows %} or restrict what workflows a runner group can run{% endif %}. + +### Changing what organizations or repositories can access a runner group + +{% ifversion fpt or ghec or ghes > 3.3 or ghae-issue-5091 %} +{% data reusables.actions.runner-groups-navigate-to-repo-org-enterprise %} +{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} +1. For runner groups in an enterprise, under **Organization access**, modify what organizations can access the runner group. For runner groups in an organization, under **Repository access**, modify what repositories can access the runner group. + +{% elsif ghae or ghes < 3.4 %} +{% data reusables.actions.configure-runner-group-access %} +{% endif %} + +{% ifversion restrict-groups-to-workflows %} +### Changing what workflows can access a runner group +You can configure a runner group to run either selected workflows or all workflows. For example, you might use this setting to protect secrets that are stored on runners or to standardize deployment workflows by restricting a runner group to run only a specific reusable workflow. This setting cannot be overridden if you are configuring an organization's runner group that was shared by an enterprise. +{% data reusables.actions.runner-groups-navigate-to-repo-org-enterprise %} +{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} +1. Under **Workflow access**, select the dropdown menu and click **Selected workflows**. +1. Click {% octicon "gear" aria-label="the gear icon" %}. +1. Enter a comma separated list of the workflows that can access the runner group. Use the full path, including the repository name and owner. Pin the workflow to a branch, tag, or full SHA. For example: `octo-org/octo-repo/.github/workflows/build.yml@v2, octo-org/octo-repo/.github/workflows/deploy.yml@d6dc6c96df4f32fa27b039f2084f576ed2c5c2a5, monalisa/octo-test/.github/workflows/test.yml@main`. + + Only jobs directly defined within the selected workflows will have access to the runner group. + + Organization-owned runner groups cannot access workflows from a different organization in the enterprise; instead, you must create an enterprise-owned runner group. + +1. Click **Save**. + +{% endif %} \ No newline at end of file diff --git a/data/reusables/actions/changing-the-name-of-a-runner-group.md b/data/reusables/actions/changing-the-name-of-a-runner-group.md new file mode 100644 index 000000000000..0c97c37769aa --- /dev/null +++ b/data/reusables/actions/changing-the-name-of-a-runner-group.md @@ -0,0 +1,9 @@ +{% ifversion fpt or ghec or ghes > 3.3 or ghae-issue-5091 %} +{% data reusables.actions.runner-groups-navigate-to-repo-org-enterprise %} +{% data reusables.actions.settings-sidebar-actions-runner-groups-selection %} +1. Change the runner group name. + +{% elsif ghae or ghes < 3.4 %} +{% data reusables.actions.configure-runner-group %} +1. Change the runner group name. +{% endif %} \ No newline at end of file diff --git a/data/reusables/actions/self-hosted-runner-configure-runner-group-access.md b/data/reusables/actions/configure-runner-group-access.md similarity index 84% rename from data/reusables/actions/self-hosted-runner-configure-runner-group-access.md rename to data/reusables/actions/configure-runner-group-access.md index 98b6a96c01ba..42999d8e42f6 100644 --- a/data/reusables/actions/self-hosted-runner-configure-runner-group-access.md +++ b/data/reusables/actions/configure-runner-group-access.md @@ -1,4 +1,4 @@ -{% data reusables.actions.self-hosted-runner-configure-runner-group %} +{% data reusables.actions.configure-runner-group %} 1. Modify your policy options. {% ifversion not ghae %} diff --git a/data/reusables/actions/self-hosted-runner-configure-runner-group.md b/data/reusables/actions/configure-runner-group.md similarity index 100% rename from data/reusables/actions/self-hosted-runner-configure-runner-group.md rename to data/reusables/actions/configure-runner-group.md diff --git a/data/reusables/actions/self-hosted-runner-create-group.md b/data/reusables/actions/create-runner-group.md similarity index 100% rename from data/reusables/actions/self-hosted-runner-create-group.md rename to data/reusables/actions/create-runner-group.md diff --git a/data/reusables/actions/creating-a-runner-group-for-an-enterprise.md b/data/reusables/actions/creating-a-runner-group-for-an-enterprise.md new file mode 100644 index 000000000000..e1c66d708e06 --- /dev/null +++ b/data/reusables/actions/creating-a-runner-group-for-an-enterprise.md @@ -0,0 +1,28 @@ +{% comment %} + +Always include a security admonition above this procedure. This is either one of the following, depending on whether the context is self-hosted runners or larger runners. + +{% data reusables.actions.self-hosted-runner-security-admonition %} +{% data reusables.actions.hosted-runner-security-admonition %} + +{% endcomment %} + +Enterprises can add their runners to groups for access management. Enterprises can create groups of runners that are accessible to specific organizations in the enterprise account{% ifversion restrict-groups-to-workflows %} or to specific workflows{% endif %}. Organization owners can then assign additional granular repository{% ifversion restrict-groups-to-workflows %} or workflow{% endif %} access policies to the enterprise runner groups. For information about how to create a runner group with the REST API, see the enterprise endpoints in the [{% data variables.product.prodname_actions %} REST API](/rest/reference/actions#self-hosted-runner-groups). + +Runners are automatically assigned to the default group when created, and can only be members of one group at a time. You can assign the runner to a specific group during the registration process, or you can later move the runner from the default group to a custom group. + +When creating a group, you must choose a policy that defines which organizations have access to the runner group. + +{% data reusables.actions.runner-groups-add-to-enterprise-first-steps %} +1. To choose a policy for organization access, select the **Organization access** drop-down, and click a policy. You can configure a runner group to be accessible to a specific list of organizations, or all organizations in the enterprise.{% ifversion ghes %} By default, only private repositories can access runners in a runner group, but you can override this.{% endif %} + + {%- ifversion ghec or ghes %} + + ![Add runner group options](/assets/images/help/settings/actions-enterprise-account-add-runner-group-options.png) + {%- elsif ghae %} + + ![Add runner group options](/assets/images/help/settings/actions-enterprise-account-add-runner-group-options-ae.png) + {%- endif %} +{% data reusables.actions.runner-group-assign-policy-workflow %} +1. Click **Save group** to create the group and apply the policy. + diff --git a/data/reusables/actions/creating-a-runner-group-for-an-organization.md b/data/reusables/actions/creating-a-runner-group-for-an-organization.md new file mode 100644 index 000000000000..91fa89d19587 --- /dev/null +++ b/data/reusables/actions/creating-a-runner-group-for-an-organization.md @@ -0,0 +1,38 @@ +{% comment %} + +Always include a security admonition above this procedure. This is either one of the following, depending on whether the context is self-hosted runners or larger runners. + +{% data reusables.actions.self-hosted-runner-security-admonition %} +{% data reusables.actions.hosted-runner-security-admonition %} + +{% endcomment %} + +All organizations have a single default runner group. Organizations within an enterprise account can create additional groups. Organization admins can allow individual repositories access to a runner group. For information about how to create a runner group with the REST API, see "[Self-hosted runner groups](/rest/reference/actions#self-hosted-runner-groups)." + +Runners are automatically assigned to the default group when created, and can only be members of one group at a time. You can move a runner from the default group to any group you create. + +When creating a group, you must choose a policy that defines which repositories{% ifversion restrict-groups-to-workflows %} and workflows{% endif %} have access to the runner group. + +{% ifversion ghec or ghes > 3.3 or ghae-issue-5091 %} +{% data reusables.organizations.navigate-to-org %} +{% data reusables.organizations.org_settings %} +{% data reusables.organizations.settings-sidebar-actions-runner-groups %} +1. In the "Runner groups" section, click **New runner group**. +1. Enter a name for your runner group. + {% data reusables.actions.runner-group-assign-policy-repo %} +{% data reusables.actions.runner-group-assign-policy-workflow %}{%- ifversion restrict-groups-to-workflows %} Organization-owned runner groups cannot access workflows from a different organization in the enterprise; instead, you must create an enterprise-owned runner group.{% endif %} +{% data reusables.actions.create-runner-group %} +{% elsif ghae or ghes < 3.4 %} +{% data reusables.organizations.navigate-to-org %} +{% data reusables.organizations.org_settings %} +{% data reusables.organizations.settings-sidebar-actions-runner-groups %} +1. Under {% ifversion ghes or ghae %}"Runners"{% endif %}, click **Add new**, and then **New group**. + + ![Add runner group](/assets/images/help/settings/actions-org-add-runner-group.png) +1. Enter a name for your runner group, and assign a policy for repository access. + + You can configure a runner group to be accessible to a specific list of repositories, or to all repositories in the organization.{% ifversion ghec or ghes %} By default, only private repositories can access runners in a runner group, but you can override this. This setting can't be overridden if configuring an organization's runner group that was shared by an enterprise.{% endif %} + + ![Add runner group options](/assets/images/help/settings/actions-org-add-runner-group-options.png) +1. Click **Save group** to create the group and apply the policy. +{% endif %} \ No newline at end of file diff --git a/data/reusables/actions/hosted-runner-security-admonition.md b/data/reusables/actions/hosted-runner-security-admonition.md new file mode 100644 index 000000000000..8c33797d55d7 --- /dev/null +++ b/data/reusables/actions/hosted-runner-security-admonition.md @@ -0,0 +1,5 @@ +{% warning %} + +**Warning**: {% data reusables.actions.hosted-runner-security %} + +{% endwarning %} \ No newline at end of file diff --git a/data/reusables/actions/hosted-runner-security.md b/data/reusables/actions/hosted-runner-security.md new file mode 100644 index 000000000000..ed12d189db73 --- /dev/null +++ b/data/reusables/actions/hosted-runner-security.md @@ -0,0 +1,3 @@ +We recommend that you only use {% data variables.actions.hosted_runner %}s with private repositories: +- Forks of your repository can potentially run dangerous code on your {% data variables.actions.hosted_runner %} by creating a pull request that executes the code in a workflow. +- You could incur unexpected costs if you allow forked repositories to run jobs on your {% data variables.actions.hosted_runner %}s. \ No newline at end of file diff --git a/data/reusables/actions/moving-a-runner-to-a-group.md b/data/reusables/actions/moving-a-runner-to-a-group.md new file mode 100644 index 000000000000..9686c85aa30e --- /dev/null +++ b/data/reusables/actions/moving-a-runner-to-a-group.md @@ -0,0 +1,15 @@ +If you don't specify a runner group during the registration process, your new runners are automatically assigned to the default group, and can then be moved to another group. + +{% data reusables.actions.self-hosted-runner-navigate-to-org-enterprise %} +{% ifversion ghec or ghes > 3.3 or ghae-issue-5091 %} +1. In the "Runners" list, click the runner that you want to configure. +2. Select the **Runner group** drop-down. +3. In "Move runner to group", choose a destination group for the runner. +{% elsif ghae or ghes < 3.4 %} +1. In the {% ifversion ghes or ghae %}"Runner groups"{% endif %} section of the settings page, locate the current group of the runner you want to move and expand the list of group members. + ![View runner group members](/assets/images/help/settings/actions-org-runner-group-members.png) +2. Select the checkbox next to the self-hosted runner, and then click **Move to group** to see the available destinations. + ![Runner group member move](/assets/images/help/settings/actions-org-runner-group-member-move.png) +3. To move the runner, click on the destination group. + ![Runner group member move](/assets/images/help/settings/actions-org-runner-group-member-move-destination.png) +{% endif %} \ No newline at end of file diff --git a/data/reusables/actions/removing-a-runner-group.md b/data/reusables/actions/removing-a-runner-group.md new file mode 100644 index 000000000000..1703d7e04418 --- /dev/null +++ b/data/reusables/actions/removing-a-runner-group.md @@ -0,0 +1,9 @@ +Runners are automatically returned to the default group when their group is removed. + +{% ifversion ghes or ghae or ghec %} +{% data reusables.actions.runner-groups-navigate-to-repo-org-enterprise %} +1. In the list of groups, to the right of the group you want to delete, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}. +2. To remove the group, click **Remove group**. +3. Review the confirmation prompts, and click **Remove this runner group**. Any runners still in this group will be automatically moved to the default group, where they will inherit the access permissions assigned to that group. + +{% endif %} \ No newline at end of file diff --git a/data/reusables/actions/runner-group-enterprise-overview.md b/data/reusables/actions/runner-group-enterprise-overview.md new file mode 100644 index 000000000000..516bccdefe90 --- /dev/null +++ b/data/reusables/actions/runner-group-enterprise-overview.md @@ -0,0 +1,3 @@ +Runner groups are used to control access to runners at the organization and enterprise level. Enterprise owners can configure access policies that control which organizations {% ifversion restrict-groups-to-workflows %}and workflows {% endif %}in an enterprise have access to the runner group. Organization owners can configure access policies that control which repositories{% ifversion restrict-groups-to-workflows %} and workflows{% endif %} in an organization have access to the runner group. + +When an enterprise owner grants access to a runner group, organization owners can see the runner group listed in the organization's runner settings. The organization owners can then assign additional granular repository{% ifversion restrict-groups-to-workflows %} and workflow{% endif %} access policies to the enterprise runner group. \ No newline at end of file diff --git a/data/reusables/actions/self-hosted-runner-groups-add-to-enterprise-first-steps.md b/data/reusables/actions/runner-groups-add-to-enterprise-first-steps.md similarity index 100% rename from data/reusables/actions/self-hosted-runner-groups-add-to-enterprise-first-steps.md rename to data/reusables/actions/runner-groups-add-to-enterprise-first-steps.md diff --git a/data/reusables/actions/self-hosted-runner-groups-navigate-to-repo-org-enterprise.md b/data/reusables/actions/runner-groups-navigate-to-repo-org-enterprise.md similarity index 89% rename from data/reusables/actions/self-hosted-runner-groups-navigate-to-repo-org-enterprise.md rename to data/reusables/actions/runner-groups-navigate-to-repo-org-enterprise.md index 4819bd92eb97..b4680b1ee5ec 100644 --- a/data/reusables/actions/self-hosted-runner-groups-navigate-to-repo-org-enterprise.md +++ b/data/reusables/actions/runner-groups-navigate-to-repo-org-enterprise.md @@ -1,9 +1,9 @@ {% ifversion fpt %} -1. Navigate to the main page of the repository or organization where your self-hosted runner groups are located. +1. Navigate to the main page of the repository or organization where your runner groups are located. 2. Click {% octicon "gear" aria-label="The Settings gear" %} **Settings**. {% data reusables.organizations.settings-sidebar-actions-runner-groups %} {% elsif ghec or ghes or ghae %} -1. Navigate to where your self-hosted runner groups are located: +1. Navigate to where your runner groups are located: * **In an organization**: navigate to the main page and click {% octicon "gear" aria-label="The Settings gear" %} **Settings**. * **If using an enterprise-level group**: diff --git a/data/reusables/actions/self-hosted-runner-add-to-enterprise.md b/data/reusables/actions/self-hosted-runner-add-to-enterprise.md index ac0187078c1a..d328def7f768 100644 --- a/data/reusables/actions/self-hosted-runner-add-to-enterprise.md +++ b/data/reusables/actions/self-hosted-runner-add-to-enterprise.md @@ -3,7 +3,7 @@ {% data reusables.enterprise-accounts.policies-tab %} {% data reusables.enterprise-accounts.actions-tab %} {% data reusables.enterprise-accounts.actions-runners-tab %} -1. Click **New runner**. +{% ifversion actions-hosted-runners %}1. Click **New runner**, then click **New self-hosted runner**.{% else %}1. Click **New runner**.{% endif %} {% data reusables.actions.self-hosted-runner-configure %} {%- elsif ghae or ghes < 3.4 %} To add a self-hosted runner to an enterprise, you must be an enterprise owner. diff --git a/data/reusables/actions/self-hosted-runner-navigate-to-org-enterprise.md b/data/reusables/actions/self-hosted-runner-navigate-to-org-enterprise.md index 589308b1e4b0..6c884cdb9753 100644 --- a/data/reusables/actions/self-hosted-runner-navigate-to-org-enterprise.md +++ b/data/reusables/actions/self-hosted-runner-navigate-to-org-enterprise.md @@ -3,7 +3,7 @@ 2. Click {% octicon "gear" aria-label="The Settings gear" %} **Settings**. {% data reusables.organizations.settings-sidebar-actions-runners %} {% elsif ghec or ghes or ghae %} -1. Navigate to where your self-hosted runner is registered: +1. Navigate to where your runner is registered: * **In an organization**: navigate to the main page and click {% octicon "gear" aria-label="The Settings gear" %} **Settings**. * **If using an enterprise-level runner**: diff --git a/data/reusables/actions/self-hosted-runner-navigate-to-repo-org-enterprise.md b/data/reusables/actions/self-hosted-runner-navigate-to-repo-org-enterprise.md index 47a1613bb514..b43bfa22c6e3 100644 --- a/data/reusables/actions/self-hosted-runner-navigate-to-repo-org-enterprise.md +++ b/data/reusables/actions/self-hosted-runner-navigate-to-repo-org-enterprise.md @@ -3,7 +3,7 @@ 2. Click {% octicon "gear" aria-label="The Settings gear" %} **Settings**. {% data reusables.organizations.settings-sidebar-actions-runners %} {% elsif ghec or ghes or ghae %} -1. Navigate to where your self-hosted runner is registered: +1. Navigate to where your runner is registered: * **In an organization or repository**: navigate to the main page and click {% octicon "gear" aria-label="The Settings gear" %} **Settings**. * **If using an enterprise-level runner**: diff --git a/data/reusables/actions/self-hosted-runner-security-admonition.md b/data/reusables/actions/self-hosted-runner-security-admonition.md new file mode 100644 index 000000000000..3070a6394f67 --- /dev/null +++ b/data/reusables/actions/self-hosted-runner-security-admonition.md @@ -0,0 +1,7 @@ +{% warning %} + +**Warning**: {% data reusables.actions.self-hosted-runner-security %} + +For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories)." + +{% endwarning %} \ No newline at end of file diff --git a/data/reusables/actions/self-hosted-runner-security.md b/data/reusables/actions/self-hosted-runner-security.md index 0d4c1556b1bb..c90b1938d49a 100644 --- a/data/reusables/actions/self-hosted-runner-security.md +++ b/data/reusables/actions/self-hosted-runner-security.md @@ -1 +1 @@ -We recommend that you only use self-hosted runners with private repositories. This is because forks of your repository can potentially run dangerous code on your self-hosted runner machine by creating a pull request that executes the code in a workflow. +We recommend that you only use self-hosted runners with private repositories. This is because forks of your public repository can potentially run dangerous code on your self-hosted runner machine by creating a pull request that executes the code in a workflow. \ No newline at end of file diff --git a/data/reusables/billing/billing-hosted-runners.md b/data/reusables/billing/billing-hosted-runners.md new file mode 100644 index 000000000000..6b04d05ac21d --- /dev/null +++ b/data/reusables/billing/billing-hosted-runners.md @@ -0,0 +1,9 @@ +| Linux | 4 | $0.016 | +| Linux | 8 | $0.032 | +| Linux | 16 | $0.064 | +| Linux | 32 | $0.128 | +| Linux | 64 | $0.256 | +| Windows | 8 | $0.064 | +| Windows | 16 | $0.128 | +| Windows | 32 | $0.256 | +| Windows | 64 | $0.512 | \ No newline at end of file diff --git a/data/reusables/billing/billing-standard-runners.md b/data/reusables/billing/billing-standard-runners.md new file mode 100644 index 000000000000..c3dc2b3ec351 --- /dev/null +++ b/data/reusables/billing/billing-standard-runners.md @@ -0,0 +1,5 @@ +| Operating system | Cores | Per-minute rate (USD) | +|------- | --------- | --------- | +| Linux | 2 | $0.008 | +| macOS | 3 | $0.08 | +| Windows | 2 | $0.016 | diff --git a/data/reusables/gated-features/hosted-runners.md b/data/reusables/gated-features/hosted-runners.md new file mode 100644 index 000000000000..4f1e2137bbfb --- /dev/null +++ b/data/reusables/gated-features/hosted-runners.md @@ -0,0 +1 @@ +The {% data variables.actions.hosted_runner %}s feature is currently in beta for organizations and enterprises using the {% data variables.product.prodname_team %} or {% data variables.product.prodname_ghe_cloud %} plans, and is subject to change. \ No newline at end of file diff --git a/data/variables/actions.yml b/data/variables/actions.yml index a7720841ca2b..5191ec655d07 100644 --- a/data/variables/actions.yml +++ b/data/variables/actions.yml @@ -1 +1,2 @@ azure_portal: 'Azure Portal' +hosted_runner: 'larger runner' diff --git a/lib/graphql/static/changelog.json b/lib/graphql/static/changelog.json index 99353a9e0022..c29ced108639 100644 --- a/lib/graphql/static/changelog.json +++ b/lib/graphql/static/changelog.json @@ -1,4 +1,24 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Type MergeCommitMessage was added

", + "

Type MergeCommitTitle was added

", + "

Type SquashMergeCommitMessage was added

", + "

Type SquashMergeCommitTitle was added

", + "

Field mergeCommitMessage was added to object type Repository

", + "

Field mergeCommitTitle was added to object type Repository

", + "

Field squashMergeCommitMessage was added to object type Repository

", + "

Field squashMergeCommitTitle was added to object type Repository

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [], + "date": "2022-09-01" + }, { "schemaChanges": [ { diff --git a/lib/graphql/static/schema-dotcom.json b/lib/graphql/static/schema-dotcom.json index 81b5fe1859ad..5b78ba5963f4 100644 --- a/lib/graphql/static/schema-dotcom.json +++ b/lib/graphql/static/schema-dotcom.json @@ -55802,6 +55802,22 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "mergeCommitMessage", + "description": "

How the default commit message will be generated when merging a pull request.

", + "type": "MergeCommitMessage!", + "id": "mergecommitmessage", + "kind": "enums", + "href": "/graphql/reference/enums#mergecommitmessage" + }, + { + "name": "mergeCommitTitle", + "description": "

How the default commit title will be generated when merging a pull request.

", + "type": "MergeCommitTitle!", + "id": "mergecommittitle", + "kind": "enums", + "href": "/graphql/reference/enums#mergecommittitle" + }, { "name": "milestone", "description": "

Returns a single milestone from the current repository by number.

", @@ -56958,6 +56974,22 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "squashMergeCommitMessage", + "description": "

How the default commit message will be generated when squash merging a pull request.

", + "type": "SquashMergeCommitMessage!", + "id": "squashmergecommitmessage", + "kind": "enums", + "href": "/graphql/reference/enums#squashmergecommitmessage" + }, + { + "name": "squashMergeCommitTitle", + "description": "

How the default commit title will be generated when squash merging a pull request.

", + "type": "SquashMergeCommitTitle!", + "id": "squashmergecommittitle", + "kind": "enums", + "href": "/graphql/reference/enums#squashmergecommittitle" + }, { "name": "squashPrTitleUsedAsDefault", "description": "

Whether a squash merge commit can use the pull request title as default.

", @@ -74787,6 +74819,44 @@ } ] }, + { + "name": "MergeCommitMessage", + "kind": "enums", + "id": "mergecommitmessage", + "href": "/graphql/reference/enums#mergecommitmessage", + "description": "

The possible default commit messages for merges.

", + "values": [ + { + "name": "BLANK", + "description": "

Default to a blank commit message.

" + }, + { + "name": "PR_BODY", + "description": "

Default to the pull request's body.

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, + { + "name": "MergeCommitTitle", + "kind": "enums", + "id": "mergecommittitle", + "href": "/graphql/reference/enums#mergecommittitle", + "description": "

The possible default commit titles for merges.

", + "values": [ + { + "name": "MERGE_MESSAGE", + "description": "

Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name).

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, { "name": "MergeStateStatus", "kind": "enums", @@ -77534,6 +77604,44 @@ } ] }, + { + "name": "SquashMergeCommitMessage", + "kind": "enums", + "id": "squashmergecommitmessage", + "href": "/graphql/reference/enums#squashmergecommitmessage", + "description": "

The possible default commit messages for squash merges.

", + "values": [ + { + "name": "BLANK", + "description": "

Default to a blank commit message.

" + }, + { + "name": "COMMIT_MESSAGES", + "description": "

Default to the branch's commit messages.

" + }, + { + "name": "PR_BODY", + "description": "

Default to the pull request's body.

" + } + ] + }, + { + "name": "SquashMergeCommitTitle", + "kind": "enums", + "id": "squashmergecommittitle", + "href": "/graphql/reference/enums#squashmergecommittitle", + "description": "

The possible default commit titles for squash merges.

", + "values": [ + { + "name": "COMMIT_OR_PR_TITLE", + "description": "

Default to the commit's title (if only one commit) or the pull request's title (when more than one commit).

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, { "name": "StarOrderField", "kind": "enums", diff --git a/lib/graphql/static/schema-ghae.json b/lib/graphql/static/schema-ghae.json index 69e6a7c5ded9..cf4819350555 100644 --- a/lib/graphql/static/schema-ghae.json +++ b/lib/graphql/static/schema-ghae.json @@ -46043,6 +46043,22 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "mergeCommitMessage", + "description": "

How the default commit message will be generated when merging a pull request.

", + "type": "MergeCommitMessage!", + "id": "mergecommitmessage", + "kind": "enums", + "href": "/graphql/reference/enums#mergecommitmessage" + }, + { + "name": "mergeCommitTitle", + "description": "

How the default commit title will be generated when merging a pull request.

", + "type": "MergeCommitTitle!", + "id": "mergecommittitle", + "kind": "enums", + "href": "/graphql/reference/enums#mergecommittitle" + }, { "name": "milestone", "description": "

Returns a single milestone from the current repository by number.

", @@ -46874,6 +46890,22 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "squashMergeCommitMessage", + "description": "

How the default commit message will be generated when squash merging a pull request.

", + "type": "SquashMergeCommitMessage!", + "id": "squashmergecommitmessage", + "kind": "enums", + "href": "/graphql/reference/enums#squashmergecommitmessage" + }, + { + "name": "squashMergeCommitTitle", + "description": "

How the default commit title will be generated when squash merging a pull request.

", + "type": "SquashMergeCommitTitle!", + "id": "squashmergecommittitle", + "kind": "enums", + "href": "/graphql/reference/enums#squashmergecommittitle" + }, { "name": "squashPrTitleUsedAsDefault", "description": "

Whether a squash merge commit can use the pull request title as default.

", @@ -61294,6 +61326,44 @@ } ] }, + { + "name": "MergeCommitMessage", + "kind": "enums", + "id": "mergecommitmessage", + "href": "/graphql/reference/enums#mergecommitmessage", + "description": "

The possible default commit messages for merges.

", + "values": [ + { + "name": "BLANK", + "description": "

Default to a blank commit message.

" + }, + { + "name": "PR_BODY", + "description": "

Default to the pull request's body.

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, + { + "name": "MergeCommitTitle", + "kind": "enums", + "id": "mergecommittitle", + "href": "/graphql/reference/enums#mergecommittitle", + "description": "

The possible default commit titles for merges.

", + "values": [ + { + "name": "MERGE_MESSAGE", + "description": "

Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name).

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, { "name": "MergeStateStatus", "kind": "enums", @@ -63303,6 +63373,44 @@ } ] }, + { + "name": "SquashMergeCommitMessage", + "kind": "enums", + "id": "squashmergecommitmessage", + "href": "/graphql/reference/enums#squashmergecommitmessage", + "description": "

The possible default commit messages for squash merges.

", + "values": [ + { + "name": "BLANK", + "description": "

Default to a blank commit message.

" + }, + { + "name": "COMMIT_MESSAGES", + "description": "

Default to the branch's commit messages.

" + }, + { + "name": "PR_BODY", + "description": "

Default to the pull request's body.

" + } + ] + }, + { + "name": "SquashMergeCommitTitle", + "kind": "enums", + "id": "squashmergecommittitle", + "href": "/graphql/reference/enums#squashmergecommittitle", + "description": "

The possible default commit titles for squash merges.

", + "values": [ + { + "name": "COMMIT_OR_PR_TITLE", + "description": "

Default to the commit's title (if only one commit) or the pull request's title (when more than one commit).

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, { "name": "StarOrderField", "kind": "enums", diff --git a/lib/graphql/static/schema-ghec.json b/lib/graphql/static/schema-ghec.json index 81b5fe1859ad..5b78ba5963f4 100644 --- a/lib/graphql/static/schema-ghec.json +++ b/lib/graphql/static/schema-ghec.json @@ -55802,6 +55802,22 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "mergeCommitMessage", + "description": "

How the default commit message will be generated when merging a pull request.

", + "type": "MergeCommitMessage!", + "id": "mergecommitmessage", + "kind": "enums", + "href": "/graphql/reference/enums#mergecommitmessage" + }, + { + "name": "mergeCommitTitle", + "description": "

How the default commit title will be generated when merging a pull request.

", + "type": "MergeCommitTitle!", + "id": "mergecommittitle", + "kind": "enums", + "href": "/graphql/reference/enums#mergecommittitle" + }, { "name": "milestone", "description": "

Returns a single milestone from the current repository by number.

", @@ -56958,6 +56974,22 @@ "kind": "scalars", "href": "/graphql/reference/scalars#boolean" }, + { + "name": "squashMergeCommitMessage", + "description": "

How the default commit message will be generated when squash merging a pull request.

", + "type": "SquashMergeCommitMessage!", + "id": "squashmergecommitmessage", + "kind": "enums", + "href": "/graphql/reference/enums#squashmergecommitmessage" + }, + { + "name": "squashMergeCommitTitle", + "description": "

How the default commit title will be generated when squash merging a pull request.

", + "type": "SquashMergeCommitTitle!", + "id": "squashmergecommittitle", + "kind": "enums", + "href": "/graphql/reference/enums#squashmergecommittitle" + }, { "name": "squashPrTitleUsedAsDefault", "description": "

Whether a squash merge commit can use the pull request title as default.

", @@ -74787,6 +74819,44 @@ } ] }, + { + "name": "MergeCommitMessage", + "kind": "enums", + "id": "mergecommitmessage", + "href": "/graphql/reference/enums#mergecommitmessage", + "description": "

The possible default commit messages for merges.

", + "values": [ + { + "name": "BLANK", + "description": "

Default to a blank commit message.

" + }, + { + "name": "PR_BODY", + "description": "

Default to the pull request's body.

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, + { + "name": "MergeCommitTitle", + "kind": "enums", + "id": "mergecommittitle", + "href": "/graphql/reference/enums#mergecommittitle", + "description": "

The possible default commit titles for merges.

", + "values": [ + { + "name": "MERGE_MESSAGE", + "description": "

Default to the classic title for a merge message (e.g., Merge pull request #123 from branch-name).

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, { "name": "MergeStateStatus", "kind": "enums", @@ -77534,6 +77604,44 @@ } ] }, + { + "name": "SquashMergeCommitMessage", + "kind": "enums", + "id": "squashmergecommitmessage", + "href": "/graphql/reference/enums#squashmergecommitmessage", + "description": "

The possible default commit messages for squash merges.

", + "values": [ + { + "name": "BLANK", + "description": "

Default to a blank commit message.

" + }, + { + "name": "COMMIT_MESSAGES", + "description": "

Default to the branch's commit messages.

" + }, + { + "name": "PR_BODY", + "description": "

Default to the pull request's body.

" + } + ] + }, + { + "name": "SquashMergeCommitTitle", + "kind": "enums", + "id": "squashmergecommittitle", + "href": "/graphql/reference/enums#squashmergecommittitle", + "description": "

The possible default commit titles for squash merges.

", + "values": [ + { + "name": "COMMIT_OR_PR_TITLE", + "description": "

Default to the commit's title (if only one commit) or the pull request's title (when more than one commit).

" + }, + { + "name": "PR_TITLE", + "description": "

Default to the pull request's title.

" + } + ] + }, { "name": "StarOrderField", "kind": "enums",