Merge branch 'main' into am-stead-14201
This commit is contained in:
@@ -64,6 +64,11 @@ jobs:
|
||||
node-version-file: 'package.json'
|
||||
cache: npm
|
||||
|
||||
# Currently we only need this to run dependencies in
|
||||
# src/workflows/check-canary-slots.js
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Clone docs-early-access
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
|
||||
@@ -32,7 +32,7 @@ When you unsubscribe from notifications in your inbox, you have several other tr
|
||||
|
||||
### Benefits of unsubscribing from the subscriptions page
|
||||
|
||||
When you unsubscribe from notifications on the subscriptions page, you can see more of the notifications you're subscribed to and sort them by "Most recently subscribed" or "Least recently subscribed".
|
||||
When you unsubscribe from notifications on the subscriptions page, you can see more of the notifications you're subscribed to and sort them by "Most recently subscribed" or "Least recently subscribed."
|
||||
|
||||
The subscriptions page shows you all of the notifications that you're currently subscribed to, including notifications that you have marked as **Done** in your inbox.
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@ For an example workflow of removing notifications that are easy to remove or tri
|
||||
Choose which type of notifications are most urgent to review and pick a time to review them that's best for you. You might consider the question "Who am I blocking?"
|
||||
|
||||
For example, you may decide to check your notifications in this order in the morning during your daily planning time:
|
||||
* Pull requests where your review is requested. (filter by `reason:review-requested`)
|
||||
* Events where your username is @mentioned, also called direct mentions. (filter by `reason:mention`)
|
||||
* Events where a team you're a member of is @mentioned, also called team mentions. (filter by `reason:team-mention`)
|
||||
* CI workflow failures for a specific repository. (filter by `reason:ci-activity` and `repo:owner/repo-name` and ensure you've enabled CI activity notifications for workflow failures in your notification settings)
|
||||
* Pull requests where your review is requested (filter by `reason:review-requested`)
|
||||
* Events where your username is @mentioned, also called direct mentions (filter by `reason:mention`)
|
||||
* Events where a team you're a member of is @mentioned, also called team mentions (filter by `reason:team-mention`)
|
||||
* CI workflow failures for a specific repository (filter by `reason:ci-activity` and `repo:owner/repo-name` and ensure you've enabled CI activity notifications for workflow failures in your notification settings)
|
||||
|
||||
{% tip %}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ versions:
|
||||
|
||||
{% data reusables.actions.jobs.section-assigning-permissions-to-jobs %}
|
||||
|
||||
## Defining access for the `GITHUB_TOKEN` scopes
|
||||
## Defining access for the `GITHUB_TOKEN` permissions
|
||||
|
||||
{% data reusables.actions.github-token-available-permissions %}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ topics:
|
||||
- Enterprise
|
||||
children:
|
||||
- /configuring-backups-on-your-instance
|
||||
- /known-issues-with-backups-for-your-instance
|
||||
redirect_from:
|
||||
- /admin/backing-up-and-restoring-your-instance/known-issues-with-backups-for-your-instance
|
||||
---
|
||||
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
---
|
||||
title: Known issues with backups for your instance
|
||||
intro: 'See an overview of workarounds for issues that impact the backup or restoration process for {% data variables.product.prodname_ghe_server %}.'
|
||||
versions:
|
||||
feature: backup-utilities-encryption-bug
|
||||
type: overview
|
||||
topics:
|
||||
- Enterprise
|
||||
- Troubleshooting
|
||||
- Backups
|
||||
shortTitle: Known issues with backups
|
||||
redirect_from:
|
||||
- /admin/configuration/configuring-your-enterprise/known-issues-with-backups-for-your-instance
|
||||
---
|
||||
|
||||
## About known issues with {% data variables.product.prodname_ghe_server %} backups
|
||||
|
||||
{% data variables.product.company_short %} provides workarounds for the following issues that could impact backup or restoration of data for a {% data variables.product.prodname_ghe_server %} instance. For more information, see "Known issues" in the [{% data variables.product.prodname_ghe_server %} release notes](/admin/release-notes).
|
||||
|
||||
{% ifversion backup-utilities-encryption-bug %}
|
||||
|
||||
## Users cannot sign in after restoration of a backup
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** This known issue has been fixed in {% data variables.product.prodname_enterprise_backup_utilities %} {% ifversion ghes = 3.9 %}3.9.1{% endif %}.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
If you used {% data variables.product.prodname_enterprise_backup_utilities %} {% ifversion ghes = 3.9 %}3.7.0, 3.8.0, or 3.9.0{% endif %} to back up an instance running any release in the {% data variables.product.product_name %} 3.7{% ifversion ghes = 3.9 %} or 3.8{% endif %} series, after you restore the backup to a new instance, users cannot sign in. Though users cannot sign in, the backup itself is unaffected and all data is intact.
|
||||
|
||||
After you restore an existing backup affected by this issue, you can resolve the issue by modifying the configuration on the new instance.
|
||||
|
||||
### Restoring from an existing backup
|
||||
|
||||
If you've restored an existing backup from {% data variables.product.prodname_enterprise_backup_utilities %} {% ifversion ghes = 3.9%}3.7.0, 3.8.0, or 3.9.0{% endif %} to a new instance and users cannot sign in, you must output configuration data from the source {% data variables.product.product_name %} instance and adjust the configuration on the target instance.
|
||||
|
||||
To ensure users can sign into the new target instance, ensure that your environment meets the following requirements.
|
||||
|
||||
* The source {% data variables.product.product_name %} instance must be running and accessible via SSH.
|
||||
* You must have an existing backup from {% data variables.product.prodname_enterprise_backup_utilities %} {% ifversion ghes = 3.9 %}3.7.0, 3.8.0, or 3.9.0{% endif %}.
|
||||
* You must have provisioned a new target {% data variables.product.product_name %} instance and restored the backup. For more information, see "[AUTOTITLE](/admin/installation/setting-up-a-github-enterprise-server-instance)" and "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/configuring-backups-on-your-instance)."
|
||||
|
||||
1. SSH into the source {% data variables.product.product_name %} instance that you backed up. If your instance comprises multiple nodes, for example if high availability or geo-replication are configured, SSH into the primary node. If you use a cluster, you can SSH into any node. Replace HOSTNAME with the actual hostname of your instance. For more information about SSH access, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/accessing-the-administrative-shell-ssh)."
|
||||
|
||||
```shell copy
|
||||
ssh -p 122 admin@HOSTNAME
|
||||
```
|
||||
|
||||
{%- ifversion ghes = 3.9 %}
|
||||
1. To display a list of decryption keys, run the following command.
|
||||
|
||||
```shell copy
|
||||
ghe-config secrets.github.encrypted-column-keying-material
|
||||
```
|
||||
|
||||
1. Copy the output to a safe and temporary location.
|
||||
1. To display a list of encryption keys, run the following command.
|
||||
|
||||
```shell copy
|
||||
ghe-config secrets.github.encrypted-column-current-encryption-key
|
||||
```
|
||||
|
||||
1. Copy the output to a safe and temporary location.
|
||||
{%- endif %}
|
||||
1. SSH into the destination {% data variables.product.product_name %} instance where you restored the backup. Replace HOSTNAME with the actual hostname of your instance.
|
||||
|
||||
```shell copy
|
||||
ssh -p 122 admin@HOSTNAME
|
||||
```
|
||||
|
||||
1. Enable maintenance mode. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/enabling-and-scheduling-maintenance-mode#enabling-maintenance-mode-immediately-or-scheduling-a-maintenance-window-for-a-later-time)."
|
||||
1. To verify that the destination instance is ready for configuration, run the following {% ifversion ghes = 3.9 %}commands{% endif %}. There should be no output displayed.
|
||||
|
||||
```shell copy
|
||||
ghe-config secrets.github.encrypted-column-keying-material
|
||||
{%- ifversion ghes = 3.9 %}
|
||||
ghe-config secrets.github.encrypted-column-current-encryption-key
|
||||
{%- endif %}
|
||||
```
|
||||
|
||||
{%- ifversion ghes = 3.9 %}
|
||||
1. To update the decryption keys on the destination instance, run the following command. Replace DECRYPTION-KEY-LIST with the output from step 1.
|
||||
|
||||
```shell copy
|
||||
ghe-config secrets.github.encrypted-column-keying-material "DECRYPTION-KEY-LIST"
|
||||
```
|
||||
|
||||
1. To update the encryption key on the destination instance, run the following command. Replace ENCRYPTION-KEY with the output from step 4.
|
||||
|
||||
```shell copy
|
||||
ghe-config secrets.github.encrypted-column-current-encryption-key "ENCRYPTION-KEY"
|
||||
```
|
||||
|
||||
{%- endif %}
|
||||
1. To apply the configuration, run the following command.
|
||||
|
||||
```shell copy
|
||||
ghe-config-apply
|
||||
```
|
||||
|
||||
1. Wait for the configuration run to complete.
|
||||
1. To ensure that the target instance's configuration contains the keys, run the following {% ifversion ghes = 3.9 %}commands{% endif %} and verify that the output matches step 1{% ifversion ghes = 3.9 %} and step 4{% endif %}.
|
||||
|
||||
```shell copy
|
||||
ghe-config secrets.github.encrypted-column-keying-material
|
||||
{%- ifversion ghes = 3.9 %}
|
||||
ghe-config secrets.github.encrypted-column-current-encryption-key
|
||||
{%- endif %}
|
||||
```
|
||||
|
||||
1. Have a user sign into the destination instance. If any issues arise, contact {% data variables.contact.enterprise_support %}. For more information, see "[AUTOTITLE](/support/contacting-github-support)."
|
||||
|
||||
{% endif %}
|
||||
@@ -14,6 +14,7 @@ redirect_from:
|
||||
- /enterprise/admin/user-management/configuring-git-large-file-storage-for-your-enterprise
|
||||
- /admin/user-management/configuring-git-large-file-storage-for-your-enterprise
|
||||
- /admin/user-management/managing-repositories-in-your-enterprise/configuring-git-large-file-storage-for-your-enterprise
|
||||
- /admin/managing-accounts-and-repositories/managing-repositories-in-your-enterprise/migrating-to-internal-repositories
|
||||
versions:
|
||||
ghes: '*'
|
||||
type: how_to
|
||||
|
||||
@@ -14,7 +14,6 @@ children:
|
||||
- /viewing-user-owned-repositories-in-your-enterprise
|
||||
- /accessing-user-owned-repositories-in-your-enterprise
|
||||
- /configuring-git-large-file-storage-for-your-enterprise
|
||||
- /migrating-to-internal-repositories
|
||||
- /disabling-git-ssh-access-on-your-enterprise
|
||||
- /locking-a-repository
|
||||
- /restoring-a-deleted-repository
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
---
|
||||
title: Migrating to internal repositories
|
||||
intro: 'You can migrate to internal repositories to unify the innersource experience for developers using both {% data variables.product.prodname_ghe_server %} and {% data variables.product.prodname_ghe_cloud %}.'
|
||||
redirect_from:
|
||||
- /enterprise/admin/installation/migrating-to-internal-repositories
|
||||
- /enterprise/admin/user-management/migrating-to-internal-repositories
|
||||
- /admin/user-management/migrating-to-internal-repositories
|
||||
- /admin/user-management/managing-repositories-in-your-enterprise//migrating-to-internal-repositories
|
||||
permissions: Site administrators can migrate to internal repositories.
|
||||
versions:
|
||||
ghes: '<3.10'
|
||||
type: how_to
|
||||
topics:
|
||||
- Enterprise
|
||||
- Privacy
|
||||
- Repositories
|
||||
- Security
|
||||
shortTitle: Internal repository migration
|
||||
---
|
||||
## About internal repositories
|
||||
|
||||
Internal repositories are available in {% data variables.product.prodname_ghe_server %} 2.20+. {% data reusables.repositories.about-internal-repos %} For more information, see "[AUTOTITLE](/repositories/creating-and-managing-repositories/about-repositories#about-repository-visibility)."
|
||||
|
||||
In future releases of {% data variables.product.prodname_ghe_server %}, we will adjust how repository visibility works so that the terms public, internal, and private have a uniform meaning for developers on {% data variables.product.prodname_ghe_server %} and {% data variables.product.prodname_ghe_cloud %}.
|
||||
|
||||
To prepare for these changes, if you have private mode enabled, you can run a migration on your instance to convert public repositories to internal. This migration is currently optional, to allow you to test the changes on a non-production instance. The migration will become mandatory in the future.
|
||||
|
||||
When you run the migration, all public repositories owned by organizations on your instance will become internal repositories. If any of those repositories have forks, the forks will become private. Private repositories will remain private.
|
||||
|
||||
All public repositories owned by user accounts on your instance will become private repositories. If any of those repositories have forks, the forks will also become private. The owner of each fork will be given read permissions to the fork's parent.
|
||||
|
||||
Anonymous Git read access will be disabled for each public repository that becomes internal or private.
|
||||
|
||||
If your current default visibility for repositories is public, the default will become internal. If the current default is private, the default will not change. You can change the default at any time. For more information, see "[AUTOTITLE](/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#configuring-the-default-visibility-of-new-repositories-in-your-enterprise)."
|
||||
|
||||
The repository creation policy for the instance will change to disable public repositories and allow private and internal repositories. You can update the policy at any time. For more information, see "[AUTOTITLE](/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise)."
|
||||
|
||||
If you don't have private mode enabled, the migration script will have no effect.
|
||||
|
||||
## Running the migration
|
||||
|
||||
1. Connect to the administrative shell. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/accessing-the-administrative-shell-ssh)."
|
||||
{% ifversion ghes %}
|
||||
1. Run the migration command.
|
||||
|
||||
```shell
|
||||
github-env bin/safe-ruby lib/github/transitions/20191210220630_convert_public_ghes_repos_to_internal.rb --verbose -w | tee -a /tmp/convert_public_ghes_repos_to_internal.log
|
||||
```
|
||||
|
||||
{% else %}
|
||||
1. Navigate to the `/data/github/current` directory.
|
||||
|
||||
```shell
|
||||
cd /data/github/current
|
||||
```
|
||||
|
||||
1. Run the migration command.
|
||||
|
||||
```shell
|
||||
sudo bin/safe-ruby lib/github/transitions/20191210220630_convert_public_ghes_repos_to_internal.rb --verbose -w | tee -a /tmp/convert_public_ghes_repos_to_internal.log
|
||||
```
|
||||
|
||||
{% endif %}
|
||||
|
||||
Log output will appear in the terminal and `/tmp/convert_public_ghes_repos_to_internal.log`.
|
||||
|
||||
## Further reading
|
||||
|
||||
* "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/enabling-private-mode)"
|
||||
@@ -52,6 +52,7 @@ The trial lasts for **{% data reusables.enterprise.ghec-trial-length %} days** a
|
||||
* {% data variables.product.prodname_sponsors %}
|
||||
* Paid {% data variables.product.prodname_marketplace %} apps
|
||||
* {% data variables.product.prodname_github_connect %}
|
||||
* {% data variables.large_files.product_name_long %}
|
||||
* For {% data variables.product.prodname_actions %}, increased minutes, job concurrency, and {% data variables.actions.hosted_runner %}s
|
||||
|
||||
If you invite an existing organization into your trial enterprise, **all of these features will be disabled**. If you remove the organization from the enterprise, the features will be re-enabled.
|
||||
|
||||
@@ -23,9 +23,7 @@ You can set up a {% data variables.product.prodname_copilot %} subscription for
|
||||
* **For an organization**, you can set up a subscription to {% data variables.product.prodname_copilot_for_business %}, then grant access to members.
|
||||
* **For an enterprise on {% data variables.product.prodname_ghe_cloud %}**, you can set up a subscription to {% data variables.product.prodname_copilot_for_business %} or {% data variables.product.prodname_copilot_enterprise %}, then allow organizations to grant access to members.
|
||||
|
||||
A free subscription for {% data variables.product.prodname_copilot %} is available to verified students, teachers, and maintainers of popular open-source repositories on {% data variables.product.company_short %}. If you meet the criteria as an open source maintainer, you will be automatically notified when you visit the {% data variables.product.prodname_copilot %} subscription page. As a student, if you receive the {% data variables.product.prodname_student_pack %}, you will also be offered a free subscription when you visit the {% data variables.product.prodname_copilot %} subscription page. For more information about the {% data variables.product.prodname_student_pack %}, see "[AUTOTITLE](/free-pro-team@latest/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-students/apply-to-github-global-campus-as-a-student)."
|
||||
|
||||
{% data reusables.billing.billing-info %}
|
||||
> [!NOTE] A free subscription for {% data variables.product.prodname_copilot %} is available to verified students, teachers, and maintainers of popular open-source repositories on {% data variables.product.company_short %}. See "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer)."
|
||||
|
||||
## About billing for {% data variables.product.prodname_copilot_for_individuals %}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ redirect_from:
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** The {% data variables.codespaces.serverless %} editor is currently in beta preview. You can provide feedback [in our Discussions](https://github.com/community/community/discussions/categories/general).
|
||||
**Note:** The {% data variables.codespaces.serverless %} editor is currently in beta preview. You can provide feedback [in our Discussions](https://github.com/community/community/discussions/categories/codespaces).
|
||||
|
||||
{% endnote %}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ For more information, see "[AUTOTITLE](/copilot/about-github-copilot/github-copi
|
||||
|
||||
* _Sign up for a subscription to {% data variables.product.prodname_copilot_for_individuals %}_. You can <a href="https://github.com/github-copilot/signup?ref_cta=Copilot+trial&ref_loc=about+github+copilot&ref_page=docs" target="_blank"><span>try {% data variables.product.prodname_copilot %} for free</span></a> with a one-time 30-day trial. After the free trial, you will need a paid subscription for continued use.
|
||||
* _If you are a member of an organization or enterprise_ that has a subscription to {% data variables.product.prodname_copilot %}, you can request access to {% data variables.product.prodname_copilot_short %} by going to [https://github.com/settings/copilot](https://github.com/settings/copilot) and requesting access under "Get Copilot from an organization."
|
||||
* _If you are a verified student, teacher, or maintainer of a popular open source project_, {% data variables.product.prodname_copilot %} is free to use. See "[AUTOTITLE](/billing/managing-billing-for-github-copilot/about-billing-for-github-copilot)."
|
||||
* _If you are a verified student, teacher, or maintainer of a popular open source project_, {% data variables.product.prodname_copilot %} is free to use. See "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer)."
|
||||
|
||||
**As an organization owner or enterprise admin**, you can purchase a subscription to {% data variables.product.prodname_copilot_for_business %} or {% data variables.product.prodname_copilot_enterprise %} for your organization or enterprise, and allow organizations to grant access to members. For more information, see "[AUTOTITLE](/copilot/about-github-copilot/)"
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Getting free access to Copilot as a student, teacher, or maintainer
|
||||
shortTitle: Get free access
|
||||
intro: 'Learn how to use {% data variables.product.prodname_copilot_short %} for free as a student, teacher, or open-source maintainer.'
|
||||
versions:
|
||||
feature: copilot
|
||||
type: how_to
|
||||
topics:
|
||||
- Copilot
|
||||
---
|
||||
|
||||
## About free {% data variables.product.prodname_copilot_short %} access
|
||||
|
||||
There are three ways to qualify for free access to {% data variables.product.prodname_copilot_for_individuals %}:
|
||||
|
||||
* **As a verified student on {% data variables.product.prodname_education %}.** To learn about becoming a verified student, see "[AUTOTITLE](/free-pro-team@latest/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-education-for-students/apply-to-github-education-as-a-student)."
|
||||
* **As a verified teacher on {% data variables.product.prodname_education %}.** To learn about becoming a verified teacher, see "[AUTOTITLE](/free-pro-team@latest/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-education-for-teachers/apply-to-github-education-as-a-teacher)."
|
||||
* **As a maintainer of a popular open-source repository.** To determine if you are an eligible maintainer, see "[Accessing {% data variables.product.prodname_copilot %} for free](#accessing-github-copilot-for-free)."
|
||||
|
||||
{% data variables.product.company_short %} reevaluates your eligibility every month.
|
||||
|
||||
> [!NOTE] If you do not meet the previous criteria, you can still <a href="https://github.com/github-copilot/signup?ref_cta=Copilot+trial&ref_loc=about+github+copilot&ref_page=docs" target="_blank"><span>try {% data variables.product.prodname_copilot %} for free</span></a> with a one-time 30-day trial. After the free trial, you will need a paid subscription for continued use.
|
||||
|
||||
## Accessing {% data variables.product.prodname_copilot %} for free
|
||||
|
||||
1. In the upper-right corner of any page, click your profile photo, then click **{% octicon "copilot" aria-hidden="true" %} Your {% data variables.product.prodname_copilot_short %}**.
|
||||
1. If you qualify for free access to {% data variables.product.prodname_copilot_short %}, you will see a page titled "{% data variables.product.prodname_copilot_for_individuals %}" informing you that you are eligible. Click **Get access to {% data variables.product.prodname_copilot %}**.
|
||||
1. On the page that appears, configure the {% data variables.product.prodname_copilot_short %} use policies to meet your needs, then click **Save and complete**.
|
||||
@@ -7,6 +7,7 @@ versions:
|
||||
topics:
|
||||
- Copilot
|
||||
children:
|
||||
- /getting-free-access-to-copilot-as-a-student-teacher-or-maintainer
|
||||
- /subscribing-to-copilot-as-an-individual-user
|
||||
- /installing-github-copilot-extensions-for-your-personal-account
|
||||
- /managing-copilot-policies-as-an-individual-subscriber
|
||||
@@ -14,4 +15,3 @@ children:
|
||||
- /canceling-your-copilot-trial-as-an-individual-user
|
||||
- /canceling-copilot-as-an-individual-user
|
||||
---
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ There are a few ways that you can get access to {% data variables.product.prodna
|
||||
|
||||
* _Sign up for a subscription to {% data variables.product.prodname_copilot_for_individuals %}_. You can <a href="https://github.com/github-copilot/signup?ref_cta=Copilot+trial&ref_loc=about+github+copilot&ref_page=docs" target="_blank"><span>try {% data variables.product.prodname_copilot %} for free</span></a> with a one-time 30-day trial. After the free trial, you will need a paid subscription for continued use.
|
||||
* _If you are a member of an organization or enterprise_ that has a subscription to {% data variables.product.prodname_copilot %}, you can request access to {% data variables.product.prodname_copilot_short %} by going to [https://github.com/settings/copilot](https://github.com/settings/copilot) and requesting access under "Get Copilot from an organization."
|
||||
* _If you are a verified student, teacher, or maintainer of a popular open source project_, {% data variables.product.prodname_copilot %} is free to use. See "[AUTOTITLE](/billing/managing-billing-for-github-copilot/about-billing-for-github-copilot)."
|
||||
* _If you are a verified student, teacher, or maintainer of a popular open source project_, {% data variables.product.prodname_copilot %} is free to use. See "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer)."
|
||||
|
||||
## 2. Install the {% data variables.product.prodname_copilot_short %} extension for your IDE
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ Once you are a verified {% data variables.product.prodname_global_campus %} stud
|
||||
* Discover student-created repositories from {% data variables.product.prodname_community_exchange %}. For more information, see "[AUTOTITLE](/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-students/about-github-community-exchange)."
|
||||
|
||||
{% data variables.product.prodname_global_campus %} students also receive the following {% data variables.product.prodname_dotcom %} benefits.
|
||||
* **{% data variables.product.prodname_copilot %}**: Verified students receive a free subscription for {% data variables.product.prodname_copilot %}. You will be automatically notified about the free subscription when you visit the {% data variables.product.prodname_copilot %} subscription page in your account settings. For more information about subscribing to and using {% data variables.product.prodname_copilot %}, see "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/subscribing-to-copilot-as-an-individual-user)."
|
||||
* **{% data variables.product.prodname_copilot %}**: Verified students receive a free subscription for {% data variables.product.prodname_copilot %}. See "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer)."
|
||||
* **{% data variables.product.prodname_github_codespaces %}**: {% data reusables.education.student-codespaces-benefit %} For more information on getting started with {% data variables.product.prodname_github_codespaces %}, see "[AUTOTITLE](/codespaces/overview)."
|
||||
|
||||
{% note %}
|
||||
|
||||
@@ -29,7 +29,7 @@ Before applying for an individual discount, check if your learning community is
|
||||
* Stay in the know on what the student community is interested in by rewatching recent [Campus TV](https://www.twitch.tv/githubeducation) episodes. Campus TV is created by {% data variables.product.prodname_dotcom %} and student community leaders and can be watched live or on demand.
|
||||
* Request a {% data variables.product.prodname_dotcom %} swag bag with educational materials and goodies for your students.
|
||||
|
||||
A free subscription for {% data variables.product.prodname_copilot %} is available to verified teachers with {% data variables.product.prodname_education %}. You will be automatically notified about the free subscription when you visit the {% data variables.product.prodname_copilot %} subscription page in your account settings. For more information about subscribing to and using {% data variables.product.prodname_copilot %}, see "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/subscribing-to-copilot-as-an-individual-user)" and "[AUTOTITLE](/copilot/about-github-copilot/what-is-github-copilot)."
|
||||
A free subscription for {% data variables.product.prodname_copilot %} is available to verified teachers with {% data variables.product.prodname_education %}. See "[AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/getting-free-access-to-copilot-as-a-student-teacher-or-maintainer)."
|
||||
|
||||
## Further reading
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ topics:
|
||||
{% ifversion ghec %}
|
||||
1. Optionally, if your organization or enterprise account uses team synchronization or your enterprise uses {% data variables.product.prodname_emus %}, connect an identity provider group to your team.
|
||||
* If your enterprise uses {% data variables.product.prodname_emus %}, use the "Identity Provider Groups" drop-down menu, and select a single identity provider group to connect to the new team. For more information, "[AUTOTITLE](/enterprise-cloud@latest/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/managing-team-memberships-with-identity-provider-groups)."
|
||||
* If your organization or enterprise account uses team synchronization, under "Identity Provider Groups", select the **Select Groups** dropdown menu, and click up to five identity provider groups to connect to the new team. For more information, see "[AUTOTITLE](/organizations/organizing-members-into-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
* If your organization or enterprise account uses team synchronization, under "Identity Provider Groups," select the **Select Groups** dropdown menu, and click up to five identity provider groups to connect to the new team. For more information, see "[AUTOTITLE](/organizations/organizing-members-into-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
{% endif %}
|
||||
{% data reusables.organizations.team_visibility %}
|
||||
{% data reusables.organizations.team-notifications %}
|
||||
@@ -66,7 +66,7 @@ You must be a site admin and an organization owner to create a team with LDAP sy
|
||||
{% data reusables.user-settings.access_org %}
|
||||
{% data reusables.organizations.new_team %}
|
||||
{% data reusables.organizations.team_name %}
|
||||
1. Under "LDAP group", search for an LDAP group's DN to map the team to. If you don't know the DN, type the LDAP group's name. {% data variables.product.prodname_ghe_server %} will search for and autocomplete any matches.
|
||||
1. Under "LDAP group," search for an LDAP group's DN to map the team to. If you don't know the DN, type the LDAP group's name. {% data variables.product.prodname_ghe_server %} will search for and autocomplete any matches.
|
||||
{% data reusables.organizations.team_description %}
|
||||
{% data reusables.organizations.team_visibility %}
|
||||
{% data reusables.organizations.create-team-choose-parent %}
|
||||
|
||||
@@ -40,8 +40,6 @@ All {% data variables.product.prodname_pages %} sites, including sites that are
|
||||
|
||||
When you set or change your custom domain in the Pages settings, an automatic DNS check begins. This check determines if your DNS settings are configured to allow {% data variables.product.prodname_dotcom %} to obtain a certificate automatically. If the check is successful, {% data variables.product.prodname_dotcom %} queues a job to request a TLS certificate from [Let's Encrypt](https://letsencrypt.org/). On receiving a valid certificate, {% data variables.product.prodname_dotcom %} automatically uploads it to the servers that handle TLS termination for Pages. When this process completes successfully, a check mark is displayed beside your custom domain name.
|
||||
|
||||
Please note that your {% data variables.product.prodname_pages %} site must be publicly available for a Let's Encrypt certificate to be issued. Once the certificate has been issued you may revert the site to private.
|
||||
|
||||
The process may take some time. If the process has not completed several minutes after you clicked **Save**, try clicking **Remove** next to your custom domain name. Retype the domain name and click **Save** again. This will cancel and restart the provisioning process.
|
||||
|
||||
## Resolving problems with mixed content
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# Reference: ghes#6726, ghes#6731
|
||||
# Encryption bug in GitHub Enterprise Server Backup Utilities
|
||||
|
||||
versions:
|
||||
ghes: '>=3.7 <=3.9'
|
||||
@@ -1,4 +1,4 @@
|
||||
You can define the access that the `GITHUB_TOKEN` will permit by specifying `read`, `write`, or `none` as the value of the available scopes within the `permissions` key.
|
||||
You can define the access that the `GITHUB_TOKEN` will permit by specifying `read`, `write`, or `none` as the value of the available permissions within the `permissions` key.
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
@@ -17,9 +17,9 @@ permissions:
|
||||
statuses: read|write|none
|
||||
```
|
||||
|
||||
If you specify the access for any of these scopes, all of those that are not specified are set to `none`.
|
||||
If you specify the access for any of these permissions, all of those that are not specified are set to `none`.
|
||||
|
||||
You can use the following syntax to define one of `read-all` or `write-all` access for all of the available scopes:
|
||||
You can use the following syntax to define one of `read-all` or `write-all` access for all of the available permissions:
|
||||
|
||||
```yaml
|
||||
permissions: read-all
|
||||
@@ -29,7 +29,7 @@ permissions: read-all
|
||||
permissions: write-all
|
||||
```
|
||||
|
||||
You can use the following syntax to disable permissions for all of the available scopes:
|
||||
You can use the following syntax to disable permissions for all of the available permissions:
|
||||
|
||||
```yaml
|
||||
permissions: {}
|
||||
|
||||
@@ -1 +1 @@
|
||||
The `GITHUB_TOKEN` secret is set to an access token for the repository each time a job in a workflow begins. You should set the permissions for this access token in the workflow file to grant read access for the `contents` scope and write access for the `packages` scope. For more information, see "[AUTOTITLE](/actions/security-guides/automatic-token-authentication)."
|
||||
The `GITHUB_TOKEN` secret is set to an access token for the repository each time a job in a workflow begins. You should set the permissions for this access token in the workflow file to grant read access for the `contents` permission and write access for the `packages` permission. For more information, see "[AUTOTITLE](/actions/security-guides/automatic-token-authentication)."
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
For each of the available scopes, shown in the table below, you can assign one of the permissions: `read`, `write`, or `none`. If you specify the access for any of these scopes, all of those that are not specified are set to `none`.
|
||||
For each of the available permissions, shown in the table below, you can assign one of the access levels: `read`, `write`, or `none`. `write` includes `read`. If you specify the access for any of these permissions, all of those that are not specified are set to `none`.
|
||||
|
||||
Available scopes and details of what each allows an action to do:
|
||||
Available permissions and details of what each allows an action to do:
|
||||
|
||||
| Scope | Allows an action using `GITHUB_TOKEN` to |
|
||||
| Permission | Allows an action using `GITHUB_TOKEN` to |
|
||||
| --- | --- |
|
||||
| `actions` | Work with GitHub Actions. For example, `actions: write` permits an action to cancel a workflow run. For more information, see "[AUTOTITLE](/rest/overview/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-actions)." |
|
||||
{% ifversion artifact-attestations %}| `attestations` | Work with artifact attestations. For example, `attestations: write` permits an action to generate an artifact attestation for a build. For more information, see "[AUTOTITLE](/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)" |{% endif %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
This example shows permissions being set for the `GITHUB_TOKEN` that will only apply to the job named `stale`. Write access is granted for the `issues` and `pull-requests` scopes. All other scopes will have no access.
|
||||
This example shows permissions being set for the `GITHUB_TOKEN` that will only apply to the job named `stale`. Write access is granted for the `issues` and `pull-requests` permissions. All other permissions will have no access.
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
|
||||
@@ -1 +1 @@
|
||||
1. Under "Workflow permissions", choose whether you want the `GITHUB_TOKEN` to have read and write access for all scopes (the permissive setting), or just read access for the `contents` {% ifversion actions-default-workflow-permissions-restrictive %}and `packages` scopes{% else %}scope{% endif %} (the restricted setting).
|
||||
1. Under "Workflow permissions", choose whether you want the `GITHUB_TOKEN` to have read and write access for all permissions (the permissive setting), or just read access for the `contents` {% ifversion actions-default-workflow-permissions-restrictive %}and `packages` permissions{% else %}permission{% endif %} (the restricted setting).
|
||||
|
||||
@@ -1924,6 +1924,21 @@
|
||||
"description": "A project board was closed.",
|
||||
"docs_reference_links": "/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.add",
|
||||
"description": "A collaborator was added to a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.remove",
|
||||
"description": "A collaborator was removed from a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.update",
|
||||
"description": "A project collaborator's permission level was changed.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.create",
|
||||
"description": "A project board was created.",
|
||||
@@ -1989,6 +2004,16 @@
|
||||
"description": "A view was deleted in a project board.",
|
||||
"docs_reference_links": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_private",
|
||||
"description": "A project's visibility was changed from public to private.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_public",
|
||||
"description": "A project's visibility was changed from private to public.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "protected_branch.authorized_users_teams",
|
||||
"description": "The users, teams, or integrations allowed to bypass a branch protection were changed.",
|
||||
|
||||
@@ -854,6 +854,21 @@
|
||||
"description": "A project board was closed.",
|
||||
"docs_reference_links": "/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.add",
|
||||
"description": "A collaborator was added to a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.remove",
|
||||
"description": "A collaborator was removed from a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.update",
|
||||
"description": "A project collaborator's permission level was changed.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.create",
|
||||
"description": "A project board was created.",
|
||||
@@ -919,6 +934,16 @@
|
||||
"description": "A view was deleted in a project board.",
|
||||
"docs_reference_links": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_private",
|
||||
"description": "A project's visibility was changed from public to private.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_public",
|
||||
"description": "A project's visibility was changed from private to public.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "protected_branch.update_merge_queue_enforcement_level",
|
||||
"description": "Enforcement of the merge queue was modified for a branch.",
|
||||
|
||||
@@ -2669,6 +2669,21 @@
|
||||
"description": "A project board was closed.",
|
||||
"docs_reference_links": "/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.add",
|
||||
"description": "A collaborator was added to a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.remove",
|
||||
"description": "A collaborator was removed from a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.update",
|
||||
"description": "A project collaborator's permission level was changed.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.create",
|
||||
"description": "A project board was created.",
|
||||
@@ -2734,6 +2749,16 @@
|
||||
"description": "A view was deleted in a project board.",
|
||||
"docs_reference_links": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_private",
|
||||
"description": "A project's visibility was changed from public to private.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_public",
|
||||
"description": "A project's visibility was changed from private to public.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "protected_branch.authorized_users_teams",
|
||||
"description": "The users, teams, or integrations allowed to bypass a branch protection were changed.",
|
||||
|
||||
@@ -1924,6 +1924,21 @@
|
||||
"description": "A project board was closed.",
|
||||
"docs_reference_links": "/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.add",
|
||||
"description": "A collaborator was added to a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.remove",
|
||||
"description": "A collaborator was removed from a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.update",
|
||||
"description": "A project collaborator's permission level was changed.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.create",
|
||||
"description": "A project board was created.",
|
||||
@@ -1989,6 +2004,16 @@
|
||||
"description": "A view was deleted in a project board.",
|
||||
"docs_reference_links": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_private",
|
||||
"description": "A project's visibility was changed from public to private.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_public",
|
||||
"description": "A project's visibility was changed from private to public.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "protected_branch.authorized_users_teams",
|
||||
"description": "The users, teams, or integrations allowed to bypass a branch protection were changed.",
|
||||
|
||||
@@ -854,6 +854,21 @@
|
||||
"description": "A project board was closed.",
|
||||
"docs_reference_links": "/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.add",
|
||||
"description": "A collaborator was added to a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.remove",
|
||||
"description": "A collaborator was removed from a project.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project_collaborator.update",
|
||||
"description": "A project collaborator's permission level was changed.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.create",
|
||||
"description": "A project board was created.",
|
||||
@@ -919,6 +934,16 @@
|
||||
"description": "A view was deleted in a project board.",
|
||||
"docs_reference_links": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_private",
|
||||
"description": "A project's visibility was changed from public to private.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "project.visibility_public",
|
||||
"description": "A project's visibility was changed from private to public.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "protected_branch.update_merge_queue_enforcement_level",
|
||||
"description": "Enforcement of the merge queue was modified for a branch.",
|
||||
|
||||
@@ -799,6 +799,16 @@
|
||||
"description": "A user was removed from an external group.",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "external_group.scim_api_failure",
|
||||
"description": "Failed external group SCIM API request.",
|
||||
"docs_reference_links": "/rest/scim/scim"
|
||||
},
|
||||
{
|
||||
"action": "external_group.scim_api_success",
|
||||
"description": "Successful external group SCIM API request. Excludes GET API requests.",
|
||||
"docs_reference_links": "/rest/scim/scim"
|
||||
},
|
||||
{
|
||||
"action": "external_group.unlink",
|
||||
"description": "An external group was unlinked to a GitHub team.",
|
||||
@@ -824,6 +834,16 @@
|
||||
"description": "N/A",
|
||||
"docs_reference_links": "N/A"
|
||||
},
|
||||
{
|
||||
"action": "external_identity.scim_api_failure",
|
||||
"description": "Failed external identity SCIM API request.",
|
||||
"docs_reference_links": "/rest/scim/scim"
|
||||
},
|
||||
{
|
||||
"action": "external_identity.scim_api_success",
|
||||
"description": "Successful external identity SCIM API request. Excludes GET API requests.",
|
||||
"docs_reference_links": "/rest/scim/scim"
|
||||
},
|
||||
{
|
||||
"action": "external_identity.update",
|
||||
"description": "N/A",
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
"apiOnlyEvents": "This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.",
|
||||
"apiRequestEvent": "This event is only available via audit log streaming."
|
||||
},
|
||||
"sha": "3ac2d4c716cc68acced9b36bcbca354f3bc44acd"
|
||||
"sha": "fc5e91e9835961526f47763279ea4a3aecff8986"
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
# GraphQL scripts
|
||||
|
||||
A [scheduled workflow](../.github/workflows/sync-graphql.yml) runs the following
|
||||
A [scheduled workflow](../../../.github/workflows/sync-graphql.yml) runs the following
|
||||
scripts on a daily basis:
|
||||
```
|
||||
src/graphql/scripts/sync.js
|
||||
```
|
||||
These scripts update the [JSON data files](src/graphql/data) used to
|
||||
render GraphQL docs. See the [`src/graphql/README`](src/graphql/README.md)
|
||||
These scripts update the [JSON data files](../../../src/graphql/data) used to
|
||||
render GraphQL docs. See the [`src/graphql/README`](../../../src/graphql/README.md)
|
||||
for more info.
|
||||
|
||||
**Note**: The changelog script pulls content from the internal-developer repo. It relies on graphql-docs automation running daily to update the changelog files in internal-developer.
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
"ghec": [
|
||||
"2022-11-28"
|
||||
],
|
||||
"ghes-3.9": [
|
||||
"2022-11-28"
|
||||
],
|
||||
"ghes-3.10": [
|
||||
"2022-11-28"
|
||||
],
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"sha": "00fae02249073354067331da2dd7bea361de446a"
|
||||
"sha": "8074aca243db70cf804ed7e5315e52f7a78b244a"
|
||||
}
|
||||
@@ -12,7 +12,7 @@ export const dates = JSON.parse(await fs.readFile('src/ghes-releases/lib/enterpr
|
||||
export const next = '3.14'
|
||||
export const nextNext = '3.15'
|
||||
|
||||
export const supported = ['3.13', '3.12', '3.11', '3.10', '3.9']
|
||||
export const supported = ['3.13', '3.12', '3.11', '3.10']
|
||||
|
||||
// Edit this to `null` when it's no longer the release candidate
|
||||
export const releaseCandidate = null
|
||||
@@ -41,6 +41,7 @@ function isValidNext(v1, v2) {
|
||||
// array and you should never need to touch the `deprecated` array
|
||||
// on the line just below.
|
||||
export const deprecatedWithFunctionalRedirects = [
|
||||
'3.9',
|
||||
'3.8',
|
||||
'3.7',
|
||||
'3.6',
|
||||
|
||||
@@ -1,28 +1,51 @@
|
||||
#!/usr/bin/env node
|
||||
import { execSync } from 'child_process'
|
||||
import yaml from 'js-yaml'
|
||||
|
||||
const slotName = process.env.SLOT_NAME
|
||||
const appServiceName = process.env.APP_SERVICE_NAME
|
||||
const resourceGroupName = process.env.RESOURCE_GROUP_NAME
|
||||
const url = process.env.CANARY_BUILD_URL
|
||||
const expectedSHA = process.env.EXPECTED_SHA
|
||||
const waitDuration = parseInt(process.env.CHECK_INTERVAL, 10) || 10000
|
||||
const curlConnectTimeoutSeconds = parseInt(process.env.CURL_CONNECT_TIMEOUT_SECONDS || '5', 10)
|
||||
const maxWaitingTimeSeconds = parseInt(process.MAX_WAITING_TIME || 10 * 60 * 1000, 10)
|
||||
|
||||
function getBuildSha() {
|
||||
console.log(`Fetching ${url}`)
|
||||
function getBuildSha(slot, appService, resourceGroup) {
|
||||
console.log('Getting Canary App Service Docker config')
|
||||
const t0 = Date.now()
|
||||
let config
|
||||
try {
|
||||
const o = execSync(`curl --connect-timeout ${curlConnectTimeoutSeconds} ${url}`, {
|
||||
encoding: 'utf8',
|
||||
})
|
||||
console.log(`Fetched ${url}. Took ${Date.now() - t0}ms`)
|
||||
return o.toString().trim()
|
||||
config = JSON.parse(
|
||||
execSync(
|
||||
`az webapp config container show --show-multicontainer-config --slot ${slot} -n ${appService} -g ${resourceGroup}`,
|
||||
{ encoding: 'utf8' },
|
||||
),
|
||||
)
|
||||
} catch (err) {
|
||||
console.log(`Error fetching build sha from ${url}`)
|
||||
console.log('Error getting the Canary App Service Slot config')
|
||||
return null
|
||||
}
|
||||
|
||||
// The config is an array of objects. One of the objects
|
||||
// contains a copy of the Docker compose configuration file
|
||||
// pushed to the slot (see src/workflows/docker-compose.prod.tmpl.yaml).
|
||||
// The value key contains the stringified YAML file, so we
|
||||
// need to parse it to JSON to extract the image sha.
|
||||
const dockerComposeYaml = config.find(
|
||||
(obj) => obj.name === 'DOCKER_CUSTOM_IMAGE_NAME_DECODED',
|
||||
).value
|
||||
|
||||
let dockerComposeConfig
|
||||
try {
|
||||
dockerComposeConfig = yaml.load(dockerComposeYaml)
|
||||
} catch (err) {
|
||||
console.log('Error loading the YAML configuration data from the Canary App Service Slot config')
|
||||
return null
|
||||
}
|
||||
// The image key looks like this:
|
||||
// `ghdocsprod.azurecr.io/github/docs-internal:d7ee70f225a0f10f293ffdd2d43931acf02c6751`
|
||||
const sha = dockerComposeConfig.services['ghdocs-prod'].image.split(':')[1]
|
||||
console.log(`Fetched Canary App Service Slot configuration}. Took ${Date.now() - t0}ms`)
|
||||
return sha
|
||||
}
|
||||
|
||||
function getStatesForSlot(slot, appService, resourceGroup) {
|
||||
@@ -38,7 +61,7 @@ let attempts = 0
|
||||
async function doCheck() {
|
||||
attempts++
|
||||
console.log('Attempt:', attempts)
|
||||
const buildSha = getBuildSha()
|
||||
const buildSha = getBuildSha(slotName, appServiceName, resourceGroupName)
|
||||
console.log('Canary build SHA:', buildSha || '*unknown/failed*', 'Expected SHA:', expectedSHA)
|
||||
|
||||
const states = getStatesForSlot(slotName, appServiceName, resourceGroupName)
|
||||
|
||||
Reference in New Issue
Block a user