1
0
mirror of synced 2025-12-22 11:26:57 -05:00

Merge branch 'main' into jules-converting-user-warning-update

This commit is contained in:
Jules Parker
2021-07-21 15:43:52 +02:00
committed by GitHub
65 changed files with 443 additions and 799 deletions

View File

@@ -1,4 +1,4 @@
{
"presets": ["next/babel"],
"plugins": [["styled-components", { "ssr": true }]]
"plugins": [["styled-components", { "ssr": true }], "@babel/plugin-syntax-top-level-await"]
}

View File

@@ -11,6 +11,7 @@ module.exports = {
ecmaVersion: 11,
requireConfigFile: 'false',
babelOptions: { configFile: './.babelrc' },
sourceType: 'module',
},
rules: {
'import/no-extraneous-dependencies': ['error', { packageDir: '.' }],

View File

@@ -14,11 +14,17 @@ on:
jobs:
check-schema-versions:
if: ${{ github.repository == 'github/docs-internal' }}
runs-on: ubuntu-latest
runs-on: ${{ fromJson('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
steps:
- name: Checkout repository code
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- name: Setup node
uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f
with:
node-version: 16.x
cache: npm
- name: Install dependencies
run: npm ci

View File

@@ -3,6 +3,7 @@ import pick from 'lodash/pick'
import type { BreadcrumbT } from 'components/Breadcrumbs'
import type { FeatureFlags } from 'components/hooks/useFeatureFlags'
import { ExcludesNull } from 'components/lib/ExcludesNull'
type ProductT = {
external: boolean
@@ -186,7 +187,11 @@ export const getMainContextFromRequest = (req: any): MainContextT => {
}
// only pull things we need from the product tree, and make sure there are default values instead of `undefined`
const getCurrentProductTree = (input: any): ProductTreeNode => {
const getCurrentProductTree = (input: any): ProductTreeNode | null => {
if (input.page.hidden) {
return null
}
return {
href: input.href,
renderedShortTitle: input.renderedShortTitle || '',
@@ -197,7 +202,7 @@ const getCurrentProductTree = (input: any): ProductTreeNode => {
title: input.page.title,
shortTitle: input.page.shortTitle || '',
},
childPages: (input.childPages || []).map(getCurrentProductTree),
childPages: (input.childPages || []).map(getCurrentProductTree).filter(ExcludesNull),
}
}

View File

@@ -151,7 +151,7 @@ We recommend creating a README file to help people learn how to use your action.
### Strengths of GitHub Actions and GitHub Apps
While both {% data variables.product.prodname_actions %} and {% data variables.product.prodname_github_app %}s provide ways to build automation and workflow tools, they each have strengths that make them useful in different ways.
While both {% data variables.product.prodname_actions %} and {% data variables.product.prodname_github_apps %} provide ways to build automation and workflow tools, they each have strengths that make them useful in different ways.
{% data variables.product.prodname_github_apps %}:
* Run persistently and can react to events quickly.

View File

@@ -343,6 +343,8 @@ test_async:
```yaml
jobs:
test_async:
runs-on: ubuntu-latest
steps:
- name: Cache node modules
uses: actions/cache@v2
with:

View File

@@ -990,6 +990,8 @@ The maximum number of minutes to run the step before killing the process.
The maximum number of minutes to let a job run before {% data variables.product.prodname_dotcom %} automatically cancels it. Default: 360
If the timeout exceeds the job execution time limit for the runner, the job will be canceled when the execution time limit is met instead. For more information about job execution time limits, see "[Usage limits, billing, and administration](/actions/reference/usage-limits-billing-and-administration#usage-limits)."
## `jobs.<job_id>.strategy`
A strategy creates a build matrix for your jobs. You can define different variations to run each job in.

View File

@@ -28,7 +28,7 @@ If you use a third-party static analysis tool that can produce results as Static
## Integrations with webhooks
You can use {% data variables.product.prodname_code_scanning %} webhooks to build or set up integrations, such as [{% data variables.product.prodname_github_app %}s](/apps/building-github-apps/) or [{% data variables.product.prodname_oauth_app %}s](/apps/building-oauth-apps/), that subscribe to {% data variables.product.prodname_code_scanning %} events in your repository. For example, you could build an integration that creates an issue on {% data variables.product.product_name %} or sends you a Slack notification when a new {% data variables.product.prodname_code_scanning %} alert is added in your repository. For more information, see "[Creating webhooks](/developers/webhooks-and-events/creating-webhooks)" and "[Webhook events and payloads](/developers/webhooks-and-events/webhook-events-and-payloads#code_scanning_alert)."
You can use {% data variables.product.prodname_code_scanning %} webhooks to build or set up integrations, such as [{% data variables.product.prodname_github_apps %}](/apps/building-github-apps/) or [{% data variables.product.prodname_oauth_apps %}](/apps/building-oauth-apps/), that subscribe to {% data variables.product.prodname_code_scanning %} events in your repository. For example, you could build an integration that creates an issue on {% data variables.product.product_name %} or sends you a Slack notification when a new {% data variables.product.prodname_code_scanning %} alert is added in your repository. For more information, see "[Creating webhooks](/developers/webhooks-and-events/creating-webhooks)" and "[Webhook events and payloads](/developers/webhooks-and-events/webhook-events-and-payloads#code_scanning_alert)."
## Further reading

View File

@@ -127,7 +127,7 @@ For a list of REST API endpoints you can use to get high-level information about
## Authenticating as an installation
Authenticating as an installation lets you perform actions in the API for that installation. Before authenticating as an installation, you must create an installation access token. Ensure that you have already installed your GitHub App to at least one repository; it is impossible to create an installation token without a single installation. These installation access tokens are used by {% data variables.product.prodname_github_app %}s to authenticate. For more information, see "[Installing GitHub Apps](/developers/apps/managing-github-apps/installing-github-apps)."
Authenticating as an installation lets you perform actions in the API for that installation. Before authenticating as an installation, you must create an installation access token. Ensure that you have already installed your GitHub App to at least one repository; it is impossible to create an installation token without a single installation. These installation access tokens are used by {% data variables.product.prodname_github_apps %} to authenticate. For more information, see "[Installing GitHub Apps](/developers/apps/managing-github-apps/installing-github-apps)."
By default, installation access tokens are scoped to all the repositories that an installation can access. You can limit the scope of the installation access token to specific repositories by using the `repository_ids` parameter. See the [Create an installation access token for an app](/rest/reference/apps#create-an-installation-access-token-for-an-app) endpoint for more details. Installation access tokens have the permissions configured by the {% data variables.product.prodname_github_app %} and expire after one hour.
@@ -193,7 +193,7 @@ $ curl -i \
## Accessing API endpoints as an installation
For a list of REST API endpoints that are available for use by {% data variables.product.prodname_github_app %}s using an installation access token, see "[Available Endpoints](/rest/overview/endpoints-available-for-github-apps)."
For a list of REST API endpoints that are available for use by {% data variables.product.prodname_github_apps %} using an installation access token, see "[Available Endpoints](/rest/overview/endpoints-available-for-github-apps)."
For a list of endpoints related to installations, see "[Installations](/rest/reference/apps#installations)."

View File

@@ -19,7 +19,7 @@ shortTitle: Rate limits
{% ifversion fpt %}
Different server-to-server request rate limits apply to {% data variables.product.prodname_github_app %}s if the app is installed on organizations or repositories owned by a {% data variables.product.prodname_ghe_cloud %} account.
Different server-to-server request rate limits apply to {% data variables.product.prodname_github_apps %} if the app is installed on organizations or repositories owned by a {% data variables.product.prodname_ghe_cloud %} account.
### Normal server-to-server rate limits
@@ -31,17 +31,17 @@ Different server-to-server request rate limits apply to {% data variables.produc
### {% data variables.product.prodname_ghe_cloud %} server-to-server rate limits
{% data variables.product.prodname_github_app %}s that are installed on an organization or repository owned by a {% data variables.product.prodname_ghe_cloud %} account and make server-to-server requests have a rate limit of 15,000 requests per hour.
{% data variables.product.prodname_github_apps %} that are installed on an organization or repository owned by a {% data variables.product.prodname_ghe_cloud %} account and make server-to-server requests have a rate limit of 15,000 requests per hour.
{% endif %}
## User-to-server requests
{% data variables.product.prodname_github_app %}s can also act [on behalf of a user](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-and-authorizing-users-for-github-apps), making user-to-server requests.
{% data variables.product.prodname_github_apps %} can also act [on behalf of a user](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#identifying-and-authorizing-users-for-github-apps), making user-to-server requests.
{% ifversion fpt %}
Different user-to-server request rate limits apply to {% data variables.product.prodname_github_app %}s if the app is installed on organizations or repositories owned by a {% data variables.product.prodname_ghe_cloud %} account and the authenticated user also belongs to the same {% data variables.product.prodname_ghe_cloud %} account.
Different user-to-server request rate limits apply to {% data variables.product.prodname_github_apps %} if the app is installed on organizations or repositories owned by a {% data variables.product.prodname_ghe_cloud %} account and the authenticated user also belongs to the same {% data variables.product.prodname_ghe_cloud %} account.
### Normal user-to-server rate limits

View File

@@ -71,9 +71,9 @@ If you want your app to use non-expiring user-to-server access tokens, you can d
![Option to opt-in to expiring user tokens during GitHub Apps setup](/assets/images/github-apps/expire-user-tokens-selection.png)
Existing {% data variables.product.prodname_github_app %}s using user-to-server authorization tokens are only affected by this new flow when the app owner enables expiring user tokens for their app.
Existing {% data variables.product.prodname_github_apps %} using user-to-server authorization tokens are only affected by this new flow when the app owner enables expiring user tokens for their app.
Enabling expiring user tokens for existing {% data variables.product.prodname_github_app %}s requires sending users through the OAuth flow to re-issue new user tokens that will expire in 8 hours and making a request with the refresh token to get a new access token and refresh token. For more information, see "[Identifying and authorizing users for GitHub Apps](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)."
Enabling expiring user tokens for existing {% data variables.product.prodname_github_apps %} requires sending users through the OAuth flow to re-issue new user tokens that will expire in 8 hours and making a request with the refresh token to get a new access token and refresh token. For more information, see "[Identifying and authorizing users for GitHub Apps](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)."
{% ifversion fpt or ghes > 3.1 or ghae-next %}

View File

@@ -16,7 +16,7 @@ topics:
---
Apps on {% data variables.product.prodname_dotcom %} allow you to automate and improve your workflow. You can build apps to improve your workflow.{% ifversion fpt %} You can also share or sell apps in [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace). To learn how to list an app on {% data variables.product.prodname_marketplace %}, see "[Getting started with GitHub Marketplace](/marketplace/getting-started/)."{% endif %}
{% data reusables.marketplace.github_apps_preferred %}, but GitHub supports both {% data variables.product.prodname_oauth_app %}s and {% data variables.product.prodname_github_apps %}. For information on choosing a type of app, see "[Differences between GitHub Apps and OAuth Apps](/developers/apps/differences-between-github-apps-and-oauth-apps)."
{% data reusables.marketplace.github_apps_preferred %}, but GitHub supports both {% data variables.product.prodname_oauth_apps %} and {% data variables.product.prodname_github_apps %}. For information on choosing a type of app, see "[Differences between GitHub Apps and OAuth Apps](/developers/apps/differences-between-github-apps-and-oauth-apps)."
{% data reusables.apps.general-apps-restrictions %}
@@ -49,7 +49,7 @@ Keep these ideas in mind when creating {% data variables.product.prodname_github
To begin developing {% data variables.product.prodname_github_apps %}, start with "[Creating a {% data variables.product.prodname_github_app %}](/apps/building-github-apps/creating-a-github-app/)."{% ifversion fpt %} To learn how to use {% data variables.product.prodname_github_app %} Manifests, which allow people to create preconfigured {% data variables.product.prodname_github_apps %}, see "[Creating {% data variables.product.prodname_github_apps %} from a manifest](/apps/building-github-apps/creating-github-apps-from-a-manifest/)."{% endif %}
## About {% data variables.product.prodname_oauth_app %}s
## About {% data variables.product.prodname_oauth_apps %}
OAuth2 is a protocol that lets external applications request authorization to private details in a user's {% data variables.product.prodname_dotcom %} account without accessing their password. This is preferred over Basic Authentication because tokens can be limited to specific types of data and can be revoked by users at any time.
@@ -57,19 +57,19 @@ OAuth2 is a protocol that lets external applications request authorization to pr
An {% data variables.product.prodname_oauth_app %} uses {% data variables.product.prodname_dotcom %} as an identity provider to authenticate as the user who grants access to the app. This means when a user grants an {% data variables.product.prodname_oauth_app %} access, they grant permissions to _all_ repositories they have access to in their account, and also to any organizations they belong to that haven't blocked third-party access.
Building an {% data variables.product.prodname_oauth_app %} is a good option if you are creating more complex processes than a simple script can handle. Note that {% data variables.product.prodname_oauth_app %}s are applications that need to be hosted somewhere.
Building an {% data variables.product.prodname_oauth_app %} is a good option if you are creating more complex processes than a simple script can handle. Note that {% data variables.product.prodname_oauth_apps %} are applications that need to be hosted somewhere.
Keep these ideas in mind when creating {% data variables.product.prodname_oauth_app %}s:
Keep these ideas in mind when creating {% data variables.product.prodname_oauth_apps %}:
{% ifversion fpt %}
* {% data reusables.apps.maximum-oauth-apps-allowed %} {% endif %}
* An {% data variables.product.prodname_oauth_app %} should always act as the authenticated {% data variables.product.prodname_dotcom %} user across all of {% data variables.product.prodname_dotcom %} (for example, when providing user notifications).
* An {% data variables.product.prodname_oauth_app %} can be used as an identity provider by enabling a "Login with {% data variables.product.prodname_dotcom %}" for the authenticated user.
* Don't build an {% data variables.product.prodname_oauth_app %} if you want your application to act on a single repository. With the `repo` OAuth scope, {% data variables.product.prodname_oauth_app %}s can act on _all_ of the authenticated user's repositories.
* Don't build an {% data variables.product.prodname_oauth_app %} to act as an application for your team or company. {% data variables.product.prodname_oauth_app %}s authenticate as a single user, so if one person creates an {% data variables.product.prodname_oauth_app %} for a company to use, and then they leave the company, no one else will have access to it.{% ifversion fpt %}
* Don't build an {% data variables.product.prodname_oauth_app %} if you want your application to act on a single repository. With the `repo` OAuth scope, {% data variables.product.prodname_oauth_apps %} can act on _all_ of the authenticated user's repositories.
* Don't build an {% data variables.product.prodname_oauth_app %} to act as an application for your team or company. {% data variables.product.prodname_oauth_apps %} authenticate as a single user, so if one person creates an {% data variables.product.prodname_oauth_app %} for a company to use, and then they leave the company, no one else will have access to it.{% ifversion fpt %}
* {% data reusables.apps.oauth-apps-restrictions %}{% endif %}
For more on {% data variables.product.prodname_oauth_app %}s, see "[Creating an {% data variables.product.prodname_oauth_app %}](/apps/building-oauth-apps/creating-an-oauth-app/)" and "[Registering your app](/rest/guides/basics-of-authentication#registering-your-app)."
For more on {% data variables.product.prodname_oauth_apps %}, see "[Creating an {% data variables.product.prodname_oauth_app %}](/apps/building-oauth-apps/creating-an-oauth-app/)" and "[Registering your app](/rest/guides/basics-of-authentication#registering-your-app)."
## Personal access tokens
@@ -87,7 +87,7 @@ Keep these ideas in mind when using personal access tokens:
## Determining which integration to build
Before you get started creating integrations, you need to determine the best way to access, authenticate, and interact with the {% data variables.product.prodname_dotcom %} APIs. The following image offers some questions to ask yourself when deciding whether to use personal access tokens, {% data variables.product.prodname_github_apps %}, or {% data variables.product.prodname_oauth_app %}s for your integration.
Before you get started creating integrations, you need to determine the best way to access, authenticate, and interact with the {% data variables.product.prodname_dotcom %} APIs. The following image offers some questions to ask yourself when deciding whether to use personal access tokens, {% data variables.product.prodname_github_apps %}, or {% data variables.product.prodname_oauth_apps %} for your integration.
![Intro to apps question flow](/assets/images/intro-to-apps-flow.png)

View File

@@ -1,6 +1,6 @@
---
title: Activating optional features for apps
intro: 'You can test new optional features for your {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_app %}s.'
intro: 'You can test new optional features for your {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %}.'
redirect_from:
- /developers/apps/activating-beta-features-for-apps
- /developers/apps/activating-optional-features-for-apps
@@ -25,7 +25,7 @@ shortTitle: Activate optional features
3. Select the {% data variables.product.prodname_github_app %} you want to enable {% ifversion ghes < 3.1 %} a beta {% else %} an optional {% endif %} feature for.
{% data reusables.apps.optional_feature_activation %}
## Activating {% ifversion ghes < 3.1 %} beta {% else %} optional {% endif %} features for {% data variables.product.prodname_oauth_app %}s
## Activating {% ifversion ghes < 3.1 %} beta {% else %} optional {% endif %} features for {% data variables.product.prodname_oauth_apps %}
{% data reusables.user-settings.access_settings %}
{% data reusables.user-settings.developer_settings %}

View File

@@ -1,6 +1,6 @@
---
title: Differences between GitHub Apps and OAuth Apps
intro: 'Understanding the differences between {% data variables.product.prodname_github_app %}s and {% data variables.product.prodname_oauth_app %}s will help you decide which app you want to create. An {% data variables.product.prodname_oauth_app %} acts as a GitHub user, whereas a {% data variables.product.prodname_github_app %} uses its own identity when installed on an organization or on repositories within an organization.'
intro: 'Understanding the differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %} will help you decide which app you want to create. An {% data variables.product.prodname_oauth_app %} acts as a GitHub user, whereas a {% data variables.product.prodname_github_app %} uses its own identity when installed on an organization or on repositories within an organization.'
redirect_from:
- /early-access/integrations/integrations-vs-oauth-applications/
- /apps/building-integrations/setting-up-a-new-integration/about-choosing-an-integration-type/
@@ -62,7 +62,7 @@ An _authorized_ OAuth App has access to all of the user's or organization owner'
| Installation tokens expire after a predefined amount of time (currently 1 hour). | OAuth tokens remain active until they're revoked by the customer. |
| {% data reusables.apps.api-rate-limits-non-ghec %}{% ifversion fpt %} Higher rate limits apply for {% data variables.product.prodname_ghe_cloud %}. For more information, see "[Rate limits for GitHub Apps](/developers/apps/rate-limits-for-github-apps)."{% endif %} | OAuth tokens use the user's rate limit of 5,000 requests per hour. |
| Rate limit increases can be granted both at the GitHub Apps level (affecting all installations) and at the individual installation level. | Rate limit increases are granted per OAuth App. Every token granted to that OAuth App gets the increased limit. |{% ifversion fpt or ghes > 2.21 or ghae %}
| {% data variables.product.prodname_github_app %}s can authenticate on behalf of the user, which is called user-to-server requests. The flow to authorize is the same as the OAuth App authorization flow. User-to-server tokens can expire and be renewed with a refresh token. For more information, see "[Refreshing user-to-server access tokens](/apps/building-github-apps/refreshing-user-to-server-access-tokens/)" and "[Identifying and authorizing users for GitHub Apps](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)." | The OAuth flow used by {% data variables.product.prodname_oauth_app %}s authorizes an {% data variables.product.prodname_oauth_app %} on behalf of the user. This is the same flow used in {% data variables.product.prodname_github_app %} user-to-server authorization. |{% endif %}
| {% data variables.product.prodname_github_apps %} can authenticate on behalf of the user, which is called user-to-server requests. The flow to authorize is the same as the OAuth App authorization flow. User-to-server tokens can expire and be renewed with a refresh token. For more information, see "[Refreshing user-to-server access tokens](/apps/building-github-apps/refreshing-user-to-server-access-tokens/)" and "[Identifying and authorizing users for GitHub Apps](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)." | The OAuth flow used by {% data variables.product.prodname_oauth_apps %} authorizes an {% data variables.product.prodname_oauth_app %} on behalf of the user. This is the same flow used in {% data variables.product.prodname_github_app %} user-to-server authorization. |{% endif %}
## Requesting permission levels for resources

View File

@@ -46,7 +46,7 @@ These guidelines assume that you have a registered OAuth App{% ifversion fpt %}
While the majority of [REST API](/rest) endpoints and [GraphQL](/graphql) queries are available to GitHub Apps today, we are still in the process of enabling some endpoints. Review the [available REST endpoints](/rest/overview/endpoints-available-for-github-apps) to ensure that the endpoints you need are compatible with GitHub Apps. Note that some of the API endpoints enabled for GitHub Apps allow the app to act on behalf of the user. See "[User-to-server requests](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#user-to-server-requests)" for a list of endpoints that allow a GitHub App to authenticate as a user.
We recommend reviewing the list of API endpoints you need as early as possible. Please let Support know if there is an endpoint you require that is not yet enabled for {% data variables.product.prodname_github_app %}s.
We recommend reviewing the list of API endpoints you need as early as possible. Please let Support know if there is an endpoint you require that is not yet enabled for {% data variables.product.prodname_github_apps %}.
### Design to stay within API rate limits

View File

@@ -57,8 +57,8 @@ If your app is already published and you're a verified publisher, then you can p
To publish a paid app (or an app that offers a paid plan), you must also meet the following requirements:
- {% data variables.product.prodname_github_app %}s should have a minimum of 100 installations.
- {% data variables.product.prodname_oauth_app %}s should have a minimum of 200 users.
- {% data variables.product.prodname_github_apps %} should have a minimum of 100 installations.
- {% data variables.product.prodname_oauth_apps %} should have a minimum of 200 users.
- All paid apps must handle {% data variables.product.prodname_marketplace %} purchase events for new purchases, upgrades, downgrades, cancellations, and free trials. For more information, see "[Billing requirements for paid apps](#billing-requirements-for-paid-apps)" below.
When you are ready to publish the app on {% data variables.product.prodname_marketplace %} you must request verification for the app listing.

View File

@@ -30,11 +30,11 @@ To publish apps with free plans, you only need to meet the general requirements
### New to apps?
If you're interested in creating an app for {% data variables.product.prodname_marketplace %}, but you're new to {% data variables.product.prodname_github_apps %} or {% data variables.product.prodname_oauth_app %}s, see "[Building {% data variables.product.prodname_github_apps %}](/developers/apps/building-github-apps)" or "[Building {% data variables.product.prodname_oauth_app %}s](/developers/apps/building-oauth-apps)."
If you're interested in creating an app for {% data variables.product.prodname_marketplace %}, but you're new to {% data variables.product.prodname_github_apps %} or {% data variables.product.prodname_oauth_apps %}, see "[Building {% data variables.product.prodname_github_apps %}](/developers/apps/building-github-apps)" or "[Building {% data variables.product.prodname_oauth_apps %}](/developers/apps/building-oauth-apps)."
### GitHub Apps vs. OAuth Apps
### {% data variables.product.prodname_github_apps %} vs. {% data variables.product.prodname_oauth_apps %}
{% data reusables.marketplace.github_apps_preferred %}, although you can list both OAuth and {% data variables.product.prodname_github_app %}s in {% data variables.product.prodname_marketplace %}. For more information, see "[Differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_app %}s](/apps/differences-between-apps/)" and "[Migrating {% data variables.product.prodname_oauth_app %}s to {% data variables.product.prodname_github_apps %}](/apps/migrating-oauth-apps-to-github-apps/)."
{% data reusables.marketplace.github_apps_preferred %}, although you can list both OAuth and {% data variables.product.prodname_github_apps %} in {% data variables.product.prodname_marketplace %}. For more information, see "[Differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %}](/apps/differences-between-apps/)" and "[Migrating {% data variables.product.prodname_oauth_apps %} to {% data variables.product.prodname_github_apps %}](/apps/migrating-oauth-apps-to-github-apps/)."
## Publishing an app to {% data variables.product.prodname_marketplace %} overview

View File

@@ -70,4 +70,4 @@ Please [contact us](https://github.com/contact?form%5Bsubject%5D=GitHub+Services
As a high-level overview, the process of migration typically involves:
- Identifying how and where your product is using GitHub Services.
- Identifying the corresponding webhook events you need to configure in order to move to plain webhooks.
- Implementing the design using either [{% data variables.product.prodname_oauth_app %}s](/apps/building-oauth-apps/) or [{% data variables.product.prodname_github_app %}s. {% data variables.product.prodname_github_app %}s](/apps/building-github-apps/) are preferred. To learn more about why {% data variables.product.prodname_github_app %}s are preferred, see "[Reasons for switching to {% data variables.product.prodname_github_app %}s](/apps/migrating-oauth-apps-to-github-apps/#reasons-for-switching-to-github-apps)."
- Implementing the design using either [{% data variables.product.prodname_oauth_apps %}](/apps/building-oauth-apps/) or [{% data variables.product.prodname_github_apps %}. {% data variables.product.prodname_github_apps %}](/apps/building-github-apps/) are preferred. To learn more about why {% data variables.product.prodname_github_apps %} are preferred, see "[Reasons for switching to {% data variables.product.prodname_github_apps %}](/apps/migrating-oauth-apps-to-github-apps/#reasons-for-switching-to-github-apps)."

View File

@@ -11,7 +11,7 @@ versions:
topics:
- Webhooks
---
Webhooks allow you to build or set up integrations, such as [{% data variables.product.prodname_github_app %}s](/apps/building-github-apps/) or [{% data variables.product.prodname_oauth_app %}s](/apps/building-oauth-apps/), which subscribe to certain events on GitHub.com. When one of those events is triggered, we'll send a HTTP POST payload to the webhook's configured URL. Webhooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server. You're only limited by your imagination.
Webhooks allow you to build or set up integrations, such as [{% data variables.product.prodname_github_apps %}](/apps/building-github-apps/) or [{% data variables.product.prodname_oauth_apps %}](/apps/building-oauth-apps/), which subscribe to certain events on GitHub.com. When one of those events is triggered, we'll send a HTTP POST payload to the webhook's configured URL. Webhooks can be used to update an external issue tracker, trigger CI builds, update a backup mirror, or even deploy to your production server. You're only limited by your imagination.
Webhooks can be installed on{% ifversion ghes or ghae %} [{% data variables.product.prodname_enterprise %}](/rest/reference/enterprise-admin#global-webhooks/),{% endif %} an [organization][org-hooks], a specific [repository][repo-hooks], or a {% data variables.product.prodname_github_app %}. Once installed, the webhook will be sent each time one or more subscribed events occurs.

View File

@@ -109,7 +109,7 @@ Also, the `User-Agent` for the requests will have the prefix `GitHub-Hookshot/`.
- Repository webhooks only receive payloads for the `created` and `completed` event types in a repository
- Organization webhooks only receive payloads for the `created` and `completed` event types in repositories
- {% data variables.product.prodname_github_app %}s with the `checks:read` permission receive payloads for the `created` and `completed` events that occur in the repository where the app is installed. The app must have the `checks:write` permission to receive the `rerequested` and `requested_action` event types. The `rerequested` and `requested_action` event type payloads are only sent to the {% data variables.product.prodname_github_app %} being requested. {% data variables.product.prodname_github_app %}s with the `checks:write` are automatically subscribed to this webhook event.
- {% data variables.product.prodname_github_apps %} with the `checks:read` permission receive payloads for the `created` and `completed` events that occur in the repository where the app is installed. The app must have the `checks:write` permission to receive the `rerequested` and `requested_action` event types. The `rerequested` and `requested_action` event type payloads are only sent to the {% data variables.product.prodname_github_app %} being requested. {% data variables.product.prodname_github_apps %} with the `checks:write` are automatically subscribed to this webhook event.
### Webhook payload object
@@ -133,7 +133,7 @@ Also, the `User-Agent` for the requests will have the prefix `GitHub-Hookshot/`.
- Repository webhooks only receive payloads for the `completed` event types in a repository
- Organization webhooks only receive payloads for the `completed` event types in repositories
- {% data variables.product.prodname_github_app %}s with the `checks:read` permission receive payloads for the `created` and `completed` events that occur in the repository where the app is installed. The app must have the `checks:write` permission to receive the `requested` and `rerequested` event types. The `requested` and `rerequested` event type payloads are only sent to the {% data variables.product.prodname_github_app %} being requested. {% data variables.product.prodname_github_app %}s with the `checks:write` are automatically subscribed to this webhook event.
- {% data variables.product.prodname_github_apps %} with the `checks:read` permission receive payloads for the `created` and `completed` events that occur in the repository where the app is installed. The app must have the `checks:write` permission to receive the `requested` and `rerequested` event types. The `requested` and `rerequested` event type payloads are only sent to the {% data variables.product.prodname_github_app %} being requested. {% data variables.product.prodname_github_apps %} with the `checks:write` are automatically subscribed to this webhook event.
### Webhook payload object
@@ -156,7 +156,7 @@ Also, the `User-Agent` for the requests will have the prefix `GitHub-Hookshot/`.
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `security_events :read` permission
- {% data variables.product.prodname_github_apps %} with the `security_events :read` permission
### Webhook payload object
@@ -178,7 +178,7 @@ Also, the `User-Agent` for the requests will have the prefix `GitHub-Hookshot/`.
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -201,7 +201,7 @@ Webhook events are triggered based on the specificity of the domain you register
### Availability
- {% data variables.product.prodname_github_app %}s with the `content_references:write` permission
- {% data variables.product.prodname_github_apps %} with the `content_references:write` permission
### Webhook payload example
@@ -221,7 +221,7 @@ Webhook events are triggered based on the specificity of the domain you register
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -250,7 +250,7 @@ Webhook events are triggered based on the specificity of the domain you register
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -293,7 +293,7 @@ Webhook events are triggered based on the specificity of the domain you register
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `deployments` permission
- {% data variables.product.prodname_github_apps %} with the `deployments` permission
### Webhook payload object
@@ -318,7 +318,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `deployments` permission
- {% data variables.product.prodname_github_apps %} with the `deployments` permission
### Webhook payload object
@@ -349,7 +349,7 @@ Activity related to a discussion. For more information, see the "[Using the Grap
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `discussions` permission
- {% data variables.product.prodname_github_apps %} with the `discussions` permission
### Webhook payload object
@@ -375,7 +375,7 @@ Activity related to a comment in a discussion. For more information, see "[Using
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `discussions` permission
- {% data variables.product.prodname_github_apps %} with the `discussions` permission
### Webhook payload object
@@ -423,7 +423,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -441,11 +441,11 @@ Key | Type | Description
When someone revokes their authorization of a {% data variables.product.prodname_github_app %}, this event occurs. A {% data variables.product.prodname_github_app %} receives this webhook by default and cannot unsubscribe from this event.
{% data reusables.webhooks.authorization_event %} For details about user-to-server requests, which require {% data variables.product.prodname_github_app %} authorization, see "[Identifying and authorizing users for {% data variables.product.prodname_github_app %}s](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)."
{% data reusables.webhooks.authorization_event %} For details about user-to-server requests, which require {% data variables.product.prodname_github_app %} authorization, see "[Identifying and authorizing users for {% data variables.product.prodname_github_apps %}](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/)."
### Availability
- {% data variables.product.prodname_github_app %}s
- {% data variables.product.prodname_github_apps %}
### Webhook payload object
@@ -466,7 +466,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -492,7 +492,7 @@ Key | Type | Description
### Availability
- {% data variables.product.prodname_github_app %}s
- {% data variables.product.prodname_github_apps %}
### Webhook payload object
@@ -516,7 +516,7 @@ Key | Type | Description
### Availability
- {% data variables.product.prodname_github_app %}s
- {% data variables.product.prodname_github_apps %}
### Webhook payload object
@@ -536,7 +536,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `issues` permission
- {% data variables.product.prodname_github_apps %} with the `issues` permission
### Webhook payload object
@@ -559,7 +559,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `issues` permission
- {% data variables.product.prodname_github_apps %} with the `issues` permission
### Webhook payload object
@@ -582,7 +582,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `metadata` permission
- {% data variables.product.prodname_github_apps %} with the `metadata` permission
### Webhook payload object
@@ -609,7 +609,7 @@ Activity related to a GitHub Marketplace purchase. {% data reusables.webhooks.ac
### Availability
- {% data variables.product.prodname_github_app %}s
- {% data variables.product.prodname_github_apps %}
### Webhook payload object
@@ -633,7 +633,7 @@ For a detailed description of this payload and the payload for each type of `act
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `members` permission
- {% data variables.product.prodname_github_apps %} with the `members` permission
### Webhook payload object
@@ -655,7 +655,7 @@ For a detailed description of this payload and the payload for each type of `act
### Availability
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `members` permission
- {% data variables.product.prodname_github_apps %} with the `members` permission
### Webhook payload object
@@ -700,7 +700,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `pull_requests` permission
- {% data variables.product.prodname_github_apps %} with the `pull_requests` permission
### Webhook payload object
@@ -723,7 +723,7 @@ Key | Type | Description
{% ifversion ghes or ghae %}
- GitHub Enterprise webhooks only receive `created` and `deleted` events. For more information, "[Global webhooks](/rest/reference/enterprise-admin#global-webhooks/).{% endif %}
- Organization webhooks only receive the `deleted`, `added`, `removed`, `renamed`, and `invited` events
- {% data variables.product.prodname_github_app %}s with the `members` permission
- {% data variables.product.prodname_github_apps %} with the `members` permission
### Webhook payload object
@@ -749,7 +749,7 @@ Key | Type | Description
### Availability
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `organization_administration` permission
- {% data variables.product.prodname_github_apps %} with the `organization_administration` permission
### Webhook payload object
@@ -798,7 +798,7 @@ Activity related to {% data variables.product.prodname_registry %}. {% data reus
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `pages` permission
- {% data variables.product.prodname_github_apps %} with the `pages` permission
### Webhook payload object
@@ -823,7 +823,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s receive a ping event with an `app_id` used to register the app
- {% data variables.product.prodname_github_apps %} receive a ping event with an `app_id` used to register the app
### Webhook payload object
@@ -849,7 +849,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `repository_projects` or `organization_projects` permission
- {% data variables.product.prodname_github_apps %} with the `repository_projects` or `organization_projects` permission
### Webhook payload object
@@ -871,7 +871,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `repository_projects` or `organization_projects` permission
- {% data variables.product.prodname_github_apps %} with the `repository_projects` or `organization_projects` permission
### Webhook payload object
@@ -893,7 +893,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `repository_projects` or `organization_projects` permission
- {% data variables.product.prodname_github_apps %} with the `repository_projects` or `organization_projects` permission
### Webhook payload object
@@ -915,7 +915,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `metadata` permission
- {% data variables.product.prodname_github_apps %} with the `metadata` permission
### Webhook payload object
@@ -938,7 +938,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `pull_requests` permission
- {% data variables.product.prodname_github_apps %} with the `pull_requests` permission
### Webhook payload object
@@ -963,7 +963,7 @@ Deliveries for `review_requested` and `review_request_removed` events will have
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `pull_requests` permission
- {% data variables.product.prodname_github_apps %} with the `pull_requests` permission
### Webhook payload object
@@ -985,7 +985,7 @@ Deliveries for `review_requested` and `review_request_removed` events will have
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `pull_requests` permission
- {% data variables.product.prodname_github_apps %} with the `pull_requests` permission
### Webhook payload object
@@ -1014,7 +1014,7 @@ Deliveries for `review_requested` and `review_request_removed` events will have
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -1053,7 +1053,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `contents` permission
- {% data variables.product.prodname_github_apps %} with the `contents` permission
### Webhook payload object
@@ -1075,7 +1075,7 @@ This event occurs when a {% data variables.product.prodname_github_app %} sends
### Availability
- {% data variables.product.prodname_github_app %}s must have the `contents` permission to receive this webhook.
- {% data variables.product.prodname_github_apps %} must have the `contents` permission to receive this webhook.
### Webhook payload example
@@ -1090,7 +1090,7 @@ This event occurs when a {% data variables.product.prodname_github_app %} sends
- Repository webhooks receive all event types except `deleted`
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `metadata` permission receive all event types except `deleted`
- {% data variables.product.prodname_github_apps %} with the `metadata` permission receive all event types except `deleted`
### Webhook payload object
@@ -1159,7 +1159,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `secret_scanning_alerts:read` permission
- {% data variables.product.prodname_github_apps %} with the `secret_scanning_alerts:read` permission
### Webhook payload object
@@ -1182,7 +1182,7 @@ Activity related to a security advisory. A security advisory provides informatio
### Availability
- {% data variables.product.prodname_github_app %}s with the `security_events` permission
- {% data variables.product.prodname_github_apps %} with the `security_events` permission
### Webhook payload object
@@ -1250,7 +1250,7 @@ You can only create a sponsorship webhook on {% data variables.product.prodname_
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `statuses` permission
- {% data variables.product.prodname_github_apps %} with the `statuses` permission
### Webhook payload object
@@ -1278,7 +1278,7 @@ Key | Type | Description
### Availability
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `members` permission
- {% data variables.product.prodname_github_apps %} with the `members` permission
### Webhook payload object
@@ -1309,7 +1309,7 @@ Key | Type | Description
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `members` permission
- {% data variables.product.prodname_github_apps %} with the `members` permission
### Webhook payload object
@@ -1350,7 +1350,7 @@ The events actor is the [user](/rest/reference/users) who starred a repositor
- Repository webhooks
- Organization webhooks
- {% data variables.product.prodname_github_app %}s with the `metadata` permission
- {% data variables.product.prodname_github_apps %} with the `metadata` permission
### Webhook payload object
@@ -1371,7 +1371,7 @@ This event occurs when someone triggers a workflow run on GitHub or sends a `POS
### Availability
- {% data variables.product.prodname_github_app %}s must have the `contents` permission to receive this webhook.
- {% data variables.product.prodname_github_apps %} must have the `contents` permission to receive this webhook.
### Webhook payload example
@@ -1385,7 +1385,7 @@ When a {% data variables.product.prodname_actions %} workflow run is requested o
### Availability
- {% data variables.product.prodname_github_app %}s with the `actions` or `contents` permissions.
- {% data variables.product.prodname_github_apps %} with the `actions` or `contents` permissions.
### Webhook payload object

View File

@@ -26,7 +26,7 @@ When an {% data variables.product.prodname_oauth_app %} wants to identify you by
## {% data variables.product.prodname_oauth_app %} access
{% data variables.product.prodname_oauth_app %}s can have *read* or *write* access to your {% data variables.product.product_name %} data.
{% data variables.product.prodname_oauth_apps %} can have *read* or *write* access to your {% data variables.product.product_name %} data.
- **Read access** only allows an app to *look at* your data.
- **Write access** allows an app to *change* your data.
@@ -41,7 +41,7 @@ When an {% data variables.product.prodname_oauth_app %} wants to identify you by
*Scopes* are named groups of permissions that an {% data variables.product.prodname_oauth_app %} can request to access both public and non-public data.
When you want to use an {% data variables.product.prodname_oauth_app %} that integrates with {% data variables.product.product_name %}, that app lets you know what type of access to your data will be required. If you grant access to the app, then the app will be able to perform actions on your behalf, such as reading or modifying data. For example, if you want to use an app that requests `user:email` scope, the app will have read-only access to your private email addresses. For more information, see "[About scopes for {% data variables.product.prodname_oauth_app %}s](/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps)."
When you want to use an {% data variables.product.prodname_oauth_app %} that integrates with {% data variables.product.product_name %}, that app lets you know what type of access to your data will be required. If you grant access to the app, then the app will be able to perform actions on your behalf, such as reading or modifying data. For example, if you want to use an app that requests `user:email` scope, the app will have read-only access to your private email addresses. For more information, see "[About scopes for {% data variables.product.prodname_oauth_apps %}](/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps)."
{% tip %}
@@ -53,7 +53,7 @@ When you want to use an {% data variables.product.prodname_oauth_app %} that int
### Types of requested data
{% data variables.product.prodname_oauth_app %}s can request several types of data.
{% data variables.product.prodname_oauth_apps %} can request several types of data.
| Type of data | Description |
| --- | --- |
@@ -69,17 +69,17 @@ When you want to use an {% data variables.product.prodname_oauth_app %} that int
## Requesting updated permissions
When {% data variables.product.prodname_oauth_app %}s request new access permissions, they will notify you of the differences between their current permissions and the new permissions.
When {% data variables.product.prodname_oauth_apps %} request new access permissions, they will notify you of the differences between their current permissions and the new permissions.
{% ifversion fpt %}
## {% data variables.product.prodname_oauth_app %}s and organizations
## {% data variables.product.prodname_oauth_apps %} and organizations
When you authorize an {% data variables.product.prodname_oauth_app %} for your personal user account, you'll also see how the authorization will affect each organization you're a member of.
- **For organizations *with* {% data variables.product.prodname_oauth_app %} access restrictions, you can request that organization admins approve the application for use in that organization.** If the organization does not approve the application, then the application will only be able to access the organization's public resources. If you're an organization admin, you can [approve the application](/articles/approving-oauth-apps-for-your-organization) yourself.
- **For organizations *without* {% data variables.product.prodname_oauth_app %} access restrictions, the application will automatically be authorized for access to that organization's resources.** For this reason, you should be careful about which {% data variables.product.prodname_oauth_app %}s you approve for access to your personal account resources as well as any organization resources.
- **For organizations *without* {% data variables.product.prodname_oauth_app %} access restrictions, the application will automatically be authorized for access to that organization's resources.** For this reason, you should be careful about which {% data variables.product.prodname_oauth_apps %} you approve for access to your personal account resources as well as any organization resources.
If you belong to any organizations that enforce SAML single sign-on, you must have an active SAML session for each organization each time you authorize an {% data variables.product.prodname_oauth_app %}.

View File

@@ -36,7 +36,7 @@ Applications can have *read* or *write* access to your {% data variables.product
*Scopes* are named groups of permissions that an application can request to access both public and non-public data.
When you want to use a third-party application that integrates with {% data variables.product.product_name %}, that application lets you know what type of access to your data will be required. If you grant access to the application, then the application will be able to perform actions on your behalf, such as reading or modifying data. For example, if you want to use an app that requests `user:email` scope, the app will have read-only access to your private email addresses. For more information, see "[About scopes for {% data variables.product.prodname_oauth_app %}s](/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps)."
When you want to use a third-party application that integrates with {% data variables.product.product_name %}, that application lets you know what type of access to your data will be required. If you grant access to the application, then the application will be able to perform actions on your behalf, such as reading or modifying data. For example, if you want to use an app that requests `user:email` scope, the app will have read-only access to your private email addresses. For more information, see "[About scopes for {% data variables.product.prodname_oauth_apps %}](/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps)."
{% tip %}

View File

@@ -13,20 +13,20 @@ topics:
- Access management
shortTitle: Authorized integrations
---
## Reviewing your authorized {% data variables.product.prodname_oauth_app %}s
## Reviewing your authorized {% data variables.product.prodname_oauth_apps %}
{% data reusables.user_settings.access_settings %}
{% data reusables.user_settings.access_applications %}
{% data reusables.user_settings.access_authorized_oauth_apps %}
{% data reusables.user_settings.review-oauth-apps %}
## Reviewing your authorized {% data variables.product.prodname_github_app %}s
## Reviewing your authorized {% data variables.product.prodname_github_apps %}
{% data reusables.user_settings.access_settings %}
{% data reusables.user_settings.access_applications %}
3. Click the **Authorized {% data variables.product.prodname_github_app %}s** tab.
![Authorized {% data variables.product.prodname_github_app %}s tab](/assets/images/help/settings/settings-authorized-github-apps-tab.png)
3. Review the {% data variables.product.prodname_github_app %}s that have access to your account. For those that you don't recognize or that are out of date, click **Revoke**. To revoke all {% data variables.product.prodname_github_app %}s, click **Revoke all**.
3. Click the **Authorized {% data variables.product.prodname_github_apps %}** tab.
![Authorized {% data variables.product.prodname_github_apps %} tab](/assets/images/help/settings/settings-authorized-github-apps-tab.png)
3. Review the {% data variables.product.prodname_github_apps %} that have access to your account. For those that you don't recognize or that are out of date, click **Revoke**. To revoke all {% data variables.product.prodname_github_apps %}, click **Revoke all**.
![List of authorized {% data variables.product.prodname_github_app %}](/assets/images/help/settings/revoke-github-app.png)
## Further reading

View File

@@ -49,7 +49,7 @@ The events listed in your security log are triggered by your actions. Actions ar
| [`codespaces`](#codespaces-category-actions) | Contains all activities related to {% data variables.product.prodname_codespaces %}. For more information, see "[About {% data variables.product.prodname_codespaces %}](/github/developing-online-with-codespaces/about-codespaces)."
| [`marketplace_agreement_signature`](#marketplace_agreement_signature-category-actions) | Contains all activities related to signing the {% data variables.product.prodname_marketplace %} Developer Agreement.
| [`marketplace_listing`](#marketplace_listing-category-actions) | Contains all activities related to listing apps in {% data variables.product.prodname_marketplace %}.{% endif %}
| [`oauth_access`](#oauth_access-category-actions) | Contains all activities related to [{% data variables.product.prodname_oauth_app %}s](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-oauth-apps) you've connected with.{% ifversion fpt %}
| [`oauth_access`](#oauth_access-category-actions) | Contains all activities related to [{% data variables.product.prodname_oauth_apps %}](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-oauth-apps) you've connected with.{% ifversion fpt %}
| [`payment_method`](#payment_method-category-actions) | Contains all activities related to paying for your {% data variables.product.prodname_dotcom %} subscription.{% endif %}
| [`profile_picture`](#profile_picture-category-actions) | Contains all activities related to your profile picture.
| [`project`](#project-category-actions) | Contains all activities related to project boards.

View File

@@ -84,7 +84,7 @@ You don't need to upload your public key to {% data variables.product.product_na
{% ifversion fpt %}
## Signature verification for bots
Organizations and {% data variables.product.prodname_github_app %}s that require commit signing can use bots to sign commits. If a commit or tag has a bot signature that is cryptographically verifiable, {% data variables.product.product_name %} marks the commit or tag as verified.
Organizations and {% data variables.product.prodname_github_apps %} that require commit signing can use bots to sign commits. If a commit or tag has a bot signature that is cryptographically verifiable, {% data variables.product.product_name %} marks the commit or tag as verified.
Signature verification for bots will only work if the request is verified and authenticated as the {% data variables.product.prodname_github_app %} or bot and contains no custom author information, custom committer information, and no custom signature information, such as Commits API.
{% endif %}

View File

@@ -30,7 +30,7 @@ There are two types of status checks on {% data variables.product.product_name %
- Checks
- Statuses
_Checks_ are different from _statuses_ in that they provide line annotations, more detailed messaging, and are only available for use with {% data variables.product.prodname_github_app %}s.
_Checks_ are different from _statuses_ in that they provide line annotations, more detailed messaging, and are only available for use with {% data variables.product.prodname_github_apps %}.
Organization owners and users with push access to a repository can create checks and statuses with {% data variables.product.product_name %}'s API. For more information, see "[Checks](/rest/reference/checks)" and "[Statuses](/rest/reference/repos#statuses)."

View File

@@ -7,7 +7,7 @@ redirect_from:
versions:
fpt: '*'
---
You can discover, browse, and install free and paid tools, including {% data variables.product.prodname_github_app %}s, {% data variables.product.prodname_oauth_app %}s, and {% data variables.product.prodname_actions %}, in [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace).
You can discover, browse, and install free and paid tools, including {% data variables.product.prodname_github_apps %}, {% data variables.product.prodname_oauth_apps %}, and {% data variables.product.prodname_actions %}, in [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace).
If you purchase a paid tool, you'll pay for your tool subscription with the same billing information you use to pay for your {% data variables.product.product_name %} subscription, and receive one bill on your regular billing date. For more information, see "[About billing for {% data variables.product.prodname_marketplace %}](/articles/about-billing-for-github-marketplace)."

View File

@@ -7,19 +7,19 @@ redirect_from:
versions:
fpt: '*'
---
You can install integrations in your personal account or organizations you own. You can also install {% data variables.product.prodname_github_app %}s from a third-party in a specific repository where you have admin permissions or which is owned by your organization.
You can install integrations in your personal account or organizations you own. You can also install {% data variables.product.prodname_github_apps %} from a third-party in a specific repository where you have admin permissions or which is owned by your organization.
## Differences between {% data variables.product.prodname_github_app %}s and {% data variables.product.prodname_oauth_app %}s
## Differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %}
Integrations can be {% data variables.product.prodname_github_app %}s, {% data variables.product.prodname_oauth_app %}s, or anything that utilizes {% data variables.product.product_name %} APIs or webhooks.
Integrations can be {% data variables.product.prodname_github_apps %}, {% data variables.product.prodname_oauth_apps %}, or anything that utilizes {% data variables.product.product_name %} APIs or webhooks.
{% data variables.product.prodname_github_app %}s offer granular permissions and request access to only what the app needs. {% data variables.product.prodname_github_app %}s also offer specific user-level permissions that each user must authorize individually when an app is installed or when the integrator changes the permissions requested by the app.
{% data variables.product.prodname_github_apps %} offer granular permissions and request access to only what the app needs. {% data variables.product.prodname_github_apps %} also offer specific user-level permissions that each user must authorize individually when an app is installed or when the integrator changes the permissions requested by the app.
For more information, see:
- "[Differences between {% data variables.product.prodname_github_app %}s and {% data variables.product.prodname_oauth_app %}s](/apps/differences-between-apps/)"
- "[Differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %}](/apps/differences-between-apps/)"
- "[About apps](/apps/about-apps/)"
- "[User-level permissions](/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps/#user-level-permissions)"
- "[Authorizing {% data variables.product.prodname_oauth_app %}s](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-oauth-apps)"
- "[Authorizing {% data variables.product.prodname_oauth_apps %}](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-oauth-apps)"
- "[Authorizing {% data variables.product.prodname_github_apps %}](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-github-apps)"
- "[Reviewing your authorized integrations](/articles/reviewing-your-authorized-integrations/)"
@@ -31,10 +31,10 @@ You can create a {% data variables.product.prodname_github_app %} with simplifie
You can find an integration to install or publish your own integration in {% data variables.product.prodname_marketplace %}.
[{% data variables.product.prodname_marketplace %}](https://github.com/marketplace) contains {% data variables.product.prodname_github_app %}s and {% data variables.product.prodname_oauth_app %}s. For more information on finding an integration or creating your own integration, see "[About {% data variables.product.prodname_marketplace %}](/articles/about-github-marketplace)."
[{% data variables.product.prodname_marketplace %}](https://github.com/marketplace) contains {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_apps %}. For more information on finding an integration or creating your own integration, see "[About {% data variables.product.prodname_marketplace %}](/articles/about-github-marketplace)."
## Integrations purchased directly from integrators
You can also purchase some integrations directly from integrators. As an organization member, if you find a {% data variables.product.prodname_github_app %} that you'd like to use, you can request that an organization approve and install the app for the organization.
If you have admin permissions for all organization-owned repositories the app is installed on, you can install {% data variables.product.prodname_github_app %}s with repository-level permissions without having to ask an organization owner to approve the app. When an integrator changes an app's permissions, if the permissions are for a repository only, organization owners and people with admin permissions to a repository with that app installed can review and accept the new permissions.
If you have admin permissions for all organization-owned repositories the app is installed on, you can install {% data variables.product.prodname_github_apps %} with repository-level permissions without having to ask an organization owner to approve the app. When an integrator changes an app's permissions, if the permissions are for a repository only, organization owners and people with admin permissions to a repository with that app installed can review and accept the new permissions.

View File

@@ -21,7 +21,7 @@ If you use a third-party static analysis tool that can produce results as Static
## Integrations with webhooks
You can use {% data variables.product.prodname_code_scanning %} webhooks to build or set up integrations, such as [{% data variables.product.prodname_github_app %}s](/apps/building-github-apps/) or [{% data variables.product.prodname_oauth_app %}s](/apps/building-oauth-apps/), that subscribe to {% data variables.product.prodname_code_scanning %} events in your repository. For example, you could build an integration that creates an issue on {% data variables.product.product_name %} or sends you a Slack notification when a new {% data variables.product.prodname_code_scanning %} alert is added in your repository. For more information, see "[Creating webhooks](/developers/webhooks-and-events/creating-webhooks)" and "[Webhook events and payloads](/developers/webhooks-and-events/webhook-events-and-payloads#code_scanning_alert)."
You can use {% data variables.product.prodname_code_scanning %} webhooks to build or set up integrations, such as [{% data variables.product.prodname_github_apps %}](/apps/building-github-apps/) or [{% data variables.product.prodname_oauth_apps %}](/apps/building-oauth-apps/), that subscribe to {% data variables.product.prodname_code_scanning %} events in your repository. For example, you could build an integration that creates an issue on {% data variables.product.product_name %} or sends you a Slack notification when a new {% data variables.product.prodname_code_scanning %} alert is added in your repository. For more information, see "[Creating webhooks](/developers/webhooks-and-events/creating-webhooks)" and "[Webhook events and payloads](/developers/webhooks-and-events/webhook-events-and-payloads#code_scanning_alert)."
## Further reading

View File

@@ -1,5 +1,5 @@
---
title: GitHub.com
title: GitHub
redirect_from:
- /articles/
- /common-issues-and-questions/

View File

@@ -68,7 +68,7 @@ You can use the `path` qualifier to search for source code that appears at a spe
## Search by language
<!-- If you make changes to this feature, update /getting-started-with-github/github-language-support to reflect any changes. -->
You can search for code based on what language it's written in. The `language` qualifier can be the language name or alias. For a full list of supported languages with their names and aliases, see the [github/linguist repository]((https://github.com/github/linguist/blob/master/lib/linguist/languages.yml).
You can search for code based on what language it's written in. The `language` qualifier can be the language name or alias. For a full list of supported languages with their names and aliases, see the [github/linguist repository](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml).
| Qualifier | Example
| ------------- | -------------

View File

@@ -11,8 +11,8 @@ shortTitle: Integrate Jira with projects
---
{% data reusables.user_settings.access_settings %}
{% data reusables.user_settings.developer_settings %}
3. In the left sidebar, click **{% data variables.product.prodname_oauth_app %}s**.
![{% data variables.product.prodname_oauth_app %}s tab in the left sidebar](/assets/images/help/settings/developer-settings-oauth-apps.png)
3. In the left sidebar, click **{% data variables.product.prodname_oauth_apps %}**.
![{% data variables.product.prodname_oauth_apps %} tab in the left sidebar](/assets/images/help/settings/developer-settings-oauth-apps.png)
3. Click **Register a new application**.
4. Under **Application name**, type "Jira".
5. Under **Homepage URL**, type the full URL to your Jira instance.

View File

@@ -196,7 +196,7 @@ For more information, see "[Autolinked references and URLs](/articles/autolinked
## Content attachments
Some {% data variables.product.prodname_github_app %}s provide information in {% data variables.product.product_name %} for URLs that link to their registered domains. {% data variables.product.product_name %} renders the information provided by the app under the URL in the body or comment of an issue or pull request.
Some {% data variables.product.prodname_github_apps %} provide information in {% data variables.product.product_name %} for URLs that link to their registered domains. {% data variables.product.product_name %} renders the information provided by the app under the URL in the body or comment of an issue or pull request.
![Content attachment](/assets/images/github-apps/content_reference_attachment.png)

View File

@@ -17,8 +17,8 @@ shortTitle: Review installed integrations
{% data reusables.profile.access_org %}
{% data reusables.profile.org_settings %}
4. In the left sidebar, click **Installed {% data variables.product.prodname_github_app %}s**.
![Installed {% data variables.product.prodname_github_app %}s tab in the organization settings sidebar](/assets/images/help/organizations/org-settings-installed-github-apps.png)
4. In the left sidebar, click **Installed {% data variables.product.prodname_github_apps %}**.
![Installed {% data variables.product.prodname_github_apps %} tab in the organization settings sidebar](/assets/images/help/organizations/org-settings-installed-github-apps.png)
5. Next to the {% data variables.product.prodname_github_app %} you'd like to review, click **Configure**.
![Configure button](/assets/images/help/organizations/configure-installed-integration-button.png)
6. Review the {% data variables.product.prodname_github_app %}'s permissions and repository access.

View File

@@ -1,6 +1,6 @@
---
title: Adding GitHub App managers in your organization
intro: 'Organization owners can grant users the ability to manage some or all {% data variables.product.prodname_github_app %}s owned by the organization.'
intro: 'Organization owners can grant users the ability to manage some or all {% data variables.product.prodname_github_apps %} owned by the organization.'
redirect_from:
- /articles/adding-github-app-managers-in-your-organization
- /github/setting-up-and-managing-organizations-and-teams/adding-github-app-managers-in-your-organization
@@ -16,7 +16,7 @@ shortTitle: Add GitHub App managers
For more information about {% data variables.product.prodname_github_app %} manager permissions, see "[Permission levels for an organization](/articles/permission-levels-for-an-organization#github-app-managers)."
## Giving someone the ability to manage all {% data variables.product.prodname_github_app %}s owned by the organization
## Giving someone the ability to manage all {% data variables.product.prodname_github_apps %} owned by the organization
{% data reusables.profile.access_org %}
{% data reusables.profile.org_settings %}
@@ -29,7 +29,7 @@ For more information about {% data variables.product.prodname_github_app %} mana
{% data reusables.profile.access_org %}
{% data reusables.profile.org_settings %}
{% data reusables.organizations.github-apps-settings-sidebar %}
1. Under "{% data variables.product.prodname_github_app %}s", click on the avatar of the app you'd like to add a {% data variables.product.prodname_github_app %} manager for.
1. Under "{% data variables.product.prodname_github_apps %}", click on the avatar of the app you'd like to add a {% data variables.product.prodname_github_app %} manager for.
![Select {% data variables.product.prodname_github_app %}](/assets/images/help/organizations/select-github-app.png)
{% data reusables.organizations.app-managers-settings-sidebar %}
1. Under "App managers", type the username of the person you want to designate as a GitHub App manager for the app, and click **Grant**.

View File

@@ -1,6 +1,6 @@
---
title: Managing access to your organization's apps
intro: 'As an organization owner, you can allow individual organization members to manage {% data variables.product.prodname_github_app %}s in your organization.'
intro: 'As an organization owner, you can allow individual organization members to manage {% data variables.product.prodname_github_apps %} in your organization.'
redirect_from:
- /articles/managing-access-to-your-organization-s-apps
- /articles/managing-access-to-your-organizations-apps

View File

@@ -29,7 +29,7 @@ For more information about {% data variables.product.prodname_github_app %} mana
{% data reusables.profile.access_org %}
{% data reusables.profile.org_settings %}
{% data reusables.organizations.github-apps-settings-sidebar %}
1. Under "{% data variables.product.prodname_github_app %}s", click on the avatar of the app you'd like to remove a {% data variables.product.prodname_github_app %} manager from.
1. Under "{% data variables.product.prodname_github_apps %}", click on the avatar of the app you'd like to remove a {% data variables.product.prodname_github_app %} manager from.
![Select {% data variables.product.prodname_github_app %}](/assets/images/help/organizations/select-github-app.png)
{% data reusables.organizations.app-managers-settings-sidebar %}
1. Under "App managers", find the username of the person you want to remove {% data variables.product.prodname_github_app %} manager permissions from, and click **Revoke**.

View File

@@ -127,9 +127,9 @@ Organization members can have *owner*{% ifversion fpt %}, *billing manager*,{% e
## {% data variables.product.prodname_github_app %} managers
By default, only organization owners can manage the settings of {% data variables.product.prodname_github_app %}s owned by an organization. To allow additional users to manage {% data variables.product.prodname_github_app %}s owned by an organization, an owner can grant them {% data variables.product.prodname_github_app %} manager permissions.
By default, only organization owners can manage the settings of {% data variables.product.prodname_github_apps %} owned by an organization. To allow additional users to manage {% data variables.product.prodname_github_apps %} owned by an organization, an owner can grant them {% data variables.product.prodname_github_app %} manager permissions.
When you designate a user as a {% data variables.product.prodname_github_app %} manager in your organization, you can grant them access to manage the settings of some or all {% data variables.product.prodname_github_app %}s owned by the organization. For more information, see:
When you designate a user as a {% data variables.product.prodname_github_app %} manager in your organization, you can grant them access to manage the settings of some or all {% data variables.product.prodname_github_apps %} owned by the organization. For more information, see:
- "[Adding GitHub App managers in your organization](/articles/adding-github-app-managers-in-your-organization)"
- "[Removing GitHub App managers from your organization](/articles/removing-github-app-managers-from-your-organization)"

View File

@@ -1,6 +1,6 @@
---
title: About OAuth App access restrictions
intro: 'Organizations can choose which {% data variables.product.prodname_oauth_app %}s have access to their repositories and other resources by enabling {% data variables.product.prodname_oauth_app %} access restrictions.'
intro: 'Organizations can choose which {% data variables.product.prodname_oauth_apps %} have access to their repositories and other resources by enabling {% data variables.product.prodname_oauth_app %} access restrictions.'
redirect_from:
- /articles/about-third-party-application-restrictions/
- /articles/about-oauth-app-access-restrictions
@@ -13,7 +13,7 @@ topics:
shortTitle: OAuth App access
---
When {% data variables.product.prodname_oauth_app %} access restrictions are enabled, organization members cannot authorize {% data variables.product.prodname_oauth_app %} access to organization resources. Organization members can request owner approval for {% data variables.product.prodname_oauth_app %}s they'd like to use, and organization owners receive a notification of pending requests.
When {% data variables.product.prodname_oauth_app %} access restrictions are enabled, organization members cannot authorize {% data variables.product.prodname_oauth_app %} access to organization resources. Organization members can request owner approval for {% data variables.product.prodname_oauth_apps %} they'd like to use, and organization owners receive a notification of pending requests.
{% data reusables.organizations.oauth_app_restrictions_default %}
@@ -28,11 +28,11 @@ When {% data variables.product.prodname_oauth_app %} access restrictions are ena
When an organization owner sets up {% data variables.product.prodname_oauth_app %} access restrictions for the first time:
- **Applications that are owned by the organization** are automatically given access to the organization's resources.
- **{% data variables.product.prodname_oauth_app %}s** immediately lose access to the organization's resources.
- **{% data variables.product.prodname_oauth_apps %}** immediately lose access to the organization's resources.
- **SSH keys created before February 2014** immediately lose access to the organization's resources (this includes user and deploy keys).
- **SSH keys created by {% data variables.product.prodname_oauth_app %}s during or after February 2014** immediately lose access to the organization's resources.
- **Hook deliveries from private organization repositories** will no longer be sent to unapproved {% data variables.product.prodname_oauth_app %}s.
- **API access** to private organization resources is not available for unapproved {% data variables.product.prodname_oauth_app %}s. In addition, there are no privileged create, update, or delete actions on public organization resources.
- **SSH keys created by {% data variables.product.prodname_oauth_apps %} during or after February 2014** immediately lose access to the organization's resources.
- **Hook deliveries from private organization repositories** will no longer be sent to unapproved {% data variables.product.prodname_oauth_apps %}.
- **API access** to private organization resources is not available for unapproved {% data variables.product.prodname_oauth_apps %}. In addition, there are no privileged create, update, or delete actions on public organization resources.
- **Hooks created by users and hooks created before May 2014** will not be affected.
- **Private forks of organization-owned repositories** are subject to the organization's access restrictions.
@@ -53,9 +53,9 @@ If an organization disables {% data variables.product.prodname_oauth_app %} acce
## Further reading
- "[Enabling {% data variables.product.prodname_oauth_app %} access restrictions for your organization](/articles/enabling-oauth-app-access-restrictions-for-your-organization)"
- "[Approving {% data variables.product.prodname_oauth_app %}s for your organization](/articles/approving-oauth-apps-for-your-organization)"
- "[Approving {% data variables.product.prodname_oauth_apps %} for your organization](/articles/approving-oauth-apps-for-your-organization)"
- "[Reviewing your organization's installed integrations](/articles/reviewing-your-organization-s-installed-integrations)"
- "[Denying access to a previously approved {% data variables.product.prodname_oauth_app %} for your organization](/articles/denying-access-to-a-previously-approved-oauth-app-for-your-organization)"
- "[Disabling {% data variables.product.prodname_oauth_app %} access restrictions for your organization](/articles/disabling-oauth-app-access-restrictions-for-your-organization)"
- "[Requesting organization approval for {% data variables.product.prodname_oauth_app %}s](/articles/requesting-organization-approval-for-oauth-apps)"
- "[Authorizing {% data variables.product.prodname_oauth_app %}s](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-oauth-apps)"
- "[Requesting organization approval for {% data variables.product.prodname_oauth_apps %}](/articles/requesting-organization-approval-for-oauth-apps)"
- "[Authorizing {% data variables.product.prodname_oauth_apps %}](/github/authenticating-to-github/keeping-your-account-and-data-secure/authorizing-oauth-apps)"

View File

@@ -1,6 +1,6 @@
---
title: Disabling OAuth App access restrictions for your organization
intro: 'Organization owners can disable restrictions on the {% data variables.product.prodname_oauth_app %}s that have access to the organization''s resources.'
intro: 'Organization owners can disable restrictions on the {% data variables.product.prodname_oauth_apps %} that have access to the organization''s resources.'
redirect_from:
- /articles/disabling-third-party-application-restrictions-for-your-organization/
- /articles/disabling-oauth-app-access-restrictions-for-your-organization

View File

@@ -1,6 +1,6 @@
---
title: Enabling OAuth App access restrictions for your organization
intro: 'Organization owners can enable {% data variables.product.prodname_oauth_app %} access restrictions to prevent untrusted apps from accessing the organization''s resources while allowing organization members to use {% data variables.product.prodname_oauth_app %}s for their personal accounts.'
intro: 'Organization owners can enable {% data variables.product.prodname_oauth_app %} access restrictions to prevent untrusted apps from accessing the organization''s resources while allowing organization members to use {% data variables.product.prodname_oauth_apps %} for their personal accounts.'
redirect_from:
- /articles/enabling-third-party-application-restrictions-for-your-organization/
- /articles/enabling-oauth-app-access-restrictions-for-your-organization
@@ -18,7 +18,7 @@ shortTitle: Enable OAuth App
{% warning %}
**Warnings**:
- Enabling {% data variables.product.prodname_oauth_app %} access restrictions will revoke organization access for all previously authorized {% data variables.product.prodname_oauth_app %}s and SSH keys. For more information, see "[About {% data variables.product.prodname_oauth_app %} access restrictions](/articles/about-oauth-app-access-restrictions)."
- Enabling {% data variables.product.prodname_oauth_app %} access restrictions will revoke organization access for all previously authorized {% data variables.product.prodname_oauth_apps %} and SSH keys. For more information, see "[About {% data variables.product.prodname_oauth_app %} access restrictions](/articles/about-oauth-app-access-restrictions)."
- Once you've set up {% data variables.product.prodname_oauth_app %} access restrictions, make sure to re-authorize any {% data variables.product.prodname_oauth_app %} that require access to the organization's private data on an ongoing basis. All organization members will need to create new SSH keys, and the organization will need to create new deploy keys as needed.
- When {% data variables.product.prodname_oauth_app %} access restrictions are enabled, applications can use an OAuth token to access information about {% data variables.product.prodname_marketplace %} transactions.

View File

@@ -1,6 +1,6 @@
---
title: Restricting access to your organization's data
intro: '{% data variables.product.prodname_oauth_app %} access restrictions allow organization owners to restrict an untrusted app''s access to the organization''s data. Organization members can then use {% data variables.product.prodname_oauth_app %}s for their personal user accounts while keeping organization data safe.'
intro: '{% data variables.product.prodname_oauth_app %} access restrictions allow organization owners to restrict an untrusted app''s access to the organization''s data. Organization members can then use {% data variables.product.prodname_oauth_apps %} for their personal user accounts while keeping organization data safe.'
redirect_from:
- /articles/restricting-access-to-your-organization-s-data
- /articles/restricting-access-to-your-organizations-data

View File

@@ -14,7 +14,7 @@ miniTocMaxHeadingLevel: 3
{% data reusables.actions.ae-beta %}
The {% data variables.product.prodname_actions %} API enables you to manage {% data variables.product.prodname_actions %} using the REST API. {% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_app %}s require the permissions mentioned in each endpoint. For more information, see "[{% data variables.product.prodname_actions %} Documentation](/actions)."
The {% data variables.product.prodname_actions %} API enables you to manage {% data variables.product.prodname_actions %} using the REST API. {% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_apps %} require the permissions mentioned in each endpoint. For more information, see "[{% data variables.product.prodname_actions %} Documentation](/actions)."
{% for operation in currentRestOperations %}
{% unless operation.subcategory %}{% include rest_operation %}{% endunless %}
@@ -52,7 +52,7 @@ You can also set permissions for an enterprise. For more information, see the "[
The Secrets API lets you create, update, delete, and retrieve information about encrypted secrets. {% data reusables.actions.about-secrets %} For more information, see "[Creating and using encrypted secrets](/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)."
{% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_app %}s must have the `secrets` permission to use this API. Authenticated users must have collaborator access to a repository to create, update, or read secrets.
{% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_apps %} must have the `secrets` permission to use this API. Authenticated users must have collaborator access to a repository to create, update, or read secrets.
{% for operation in currentRestOperations %}
{% if operation.subcategory == 'secrets' %}{% include rest_operation %}{% endif %}
@@ -65,7 +65,7 @@ The Secrets API lets you create, update, delete, and retrieve information about
The Self-hosted Runners API allows you to register, view, and delete self-hosted runners. {% data reusables.actions.about-self-hosted-runners %} For more information, see "[Hosting your own runners](/actions/hosting-your-own-runners)."
{% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_app %}s must have the `administration` permission for repositories or the `organization_self_hosted_runners` permission for organizations. Authenticated users must have admin access to the repository or organization to use this API.
{% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_apps %} must have the `administration` permission for repositories or the `organization_self_hosted_runners` permission for organizations. Authenticated users must have admin access to the repository or organization to use this API.
You can manage self-hosted runners for an enterprise. For more information, see the "[{% data variables.product.prodname_dotcom %} Enterprise administration](/rest/reference/enterprise-admin#github-actions)" REST API.
@@ -80,7 +80,7 @@ You can manage self-hosted runners for an enterprise. For more information, see
The Self-hosted Runners Groups API allows you manage groups of self-hosted runners. For more information, see "[Managing access to self-hosted runners using groups](/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups)."
{% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_app %}s must have the `administration` permission for repositories or the `organization_self_hosted_runners` permission for organizations. Authenticated users must have admin access to the repository or organization to use this API.
{% data reusables.actions.actions-authentication %} {% data variables.product.prodname_github_apps %} must have the `administration` permission for repositories or the `organization_self_hosted_runners` permission for organizations. Authenticated users must have admin access to the repository or organization to use this API.
You can manage self-hosted runner groups for an enterprise. For more information, see the "[{% data variables.product.prodname_dotcom %} Enterprise administration](/rest/reference/enterprise-admin##github-actions)" REST API.

View File

@@ -56,7 +56,7 @@ The {% data variables.product.prodname_marketplace %} API allows you to see whic
This API includes endpoints that allow you to [test your {% data variables.product.prodname_github_app %}](/marketplace/integrating-with-the-github-marketplace-api/testing-github-marketplace-apps/) with **stubbed data**. Stubbed data is hard-coded, fake data that will not change based on actual subscriptions.
To test with stubbed data, use a stubbed endpoint in place of its production counterpart. This allows you to test whether API logic succeeds before listing {% data variables.product.prodname_github_app %}s on {% data variables.product.prodname_marketplace %}.
To test with stubbed data, use a stubbed endpoint in place of its production counterpart. This allows you to test whether API logic succeeds before listing {% data variables.product.prodname_github_apps %} on {% data variables.product.prodname_marketplace %}.
Be sure to replace stubbed endpoints with production endpoints before deploying your {% data variables.product.prodname_github_app %}.

View File

@@ -15,7 +15,7 @@ shortTitle: GitHub App permissions
### About {% data variables.product.prodname_github_app %} permissions
{% data variables.product.prodname_github_app %}s are created with a set of permissions. Permissions define what resources the {% data variables.product.prodname_github_app %} can access via the API. For more information, see "[Setting permissions for GitHub Apps](/apps/building-github-apps/setting-permissions-for-github-apps/)."
{% data variables.product.prodname_github_apps %} are created with a set of permissions. Permissions define what resources the {% data variables.product.prodname_github_app %} can access via the API. For more information, see "[Setting permissions for GitHub Apps](/apps/building-github-apps/setting-permissions-for-github-apps/)."
### Metadata permissions

View File

@@ -1 +1 @@
{% data variables.product.prodname_github_app %}s must have the `actions` permission to use this API.
{% data variables.product.prodname_github_apps %} must have the `actions` permission to use this API.

View File

@@ -1 +1 @@
This API is available for authenticated users, {% data variables.product.prodname_oauth_app %}s, and {% data variables.product.prodname_github_app %}s. Access tokens require [`repo` scope](/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes) for private repos and [`public_repo` scope](/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes) for {% ifversion ghae %} for internal repos that are available to everyone on the enterprise.{% else %}public repos.{% endif %}
This API is available for authenticated users, {% data variables.product.prodname_oauth_apps %}, and {% data variables.product.prodname_github_apps %}. Access tokens require [`repo` scope](/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes) for private repos and [`public_repo` scope](/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes) for {% ifversion ghae %} for internal repos that are available to everyone on the enterprise.{% else %}public repos.{% endif %}

View File

@@ -1 +1 @@
{% data variables.product.prodname_github_app %}s making server-to-server requests use the installation's minimum rate limit of 5,000 requests per hour. Organization installations with more than 20 users receive another 50 requests per hour for each user. Installations that have more than 20 repositories receive another 50 requests per hour for each repository. The maximum rate limit for an installation is 12,500 requests per hour.
{% data variables.product.prodname_github_apps %} making server-to-server requests use the installation's minimum rate limit of 5,000 requests per hour. Organization installations with more than 20 users receive another 50 requests per hour for each user. Installations that have more than 20 repositories receive another 50 requests per hour for each repository. The maximum rate limit for an installation is 12,500 requests per hour.

View File

@@ -1,2 +1,2 @@
1. In the left sidebar, click **{% data variables.product.prodname_github_app %}s**.
![{% data variables.product.prodname_github_app %}s settings](/assets/images/help/organizations/github-apps-settings-sidebar.png)
1. In the left sidebar, click **{% data variables.product.prodname_github_apps %}**.
![{% data variables.product.prodname_github_apps %} settings](/assets/images/help/organizations/github-apps-settings-sidebar.png)

View File

@@ -1,4 +1,4 @@
{% ifversion fpt %}
1. Optionally, if the personal account or organization in which you're creating uses any {% data variables.product.prodname_github_app %}s from {% data variables.product.prodname_marketplace %}, select any apps you'd like to use in the repository.
![List of your account's {% data variables.product.prodname_github_app %}s from {% data variables.product.prodname_marketplace %} and option to grant access](/assets/images/help/repository/create-repository-choose-marketplace-apps.png)
1. Optionally, if the personal account or organization in which you're creating uses any {% data variables.product.prodname_github_apps %} from {% data variables.product.prodname_marketplace %}, select any apps you'd like to use in the repository.
![List of your account's {% data variables.product.prodname_github_apps %} from {% data variables.product.prodname_marketplace %} and option to grant access](/assets/images/help/repository/create-repository-choose-marketplace-apps.png)
{% endif %}

View File

@@ -1,4 +1,4 @@
For questions, bug reports, and discussions about {% data variables.product.prodname_github_app %}s, {% data variables.product.prodname_oauth_app %}s, and API development, explore the {% data variables.product.prodname_support_forum_with_url %}. The forum is moderated and maintained by {% data variables.product.company_short %} staff, but questions posted to the forum are not guaranteed to receive a reply from {% data variables.product.company_short %} staff.
For questions, bug reports, and discussions about {% data variables.product.prodname_github_apps %}, {% data variables.product.prodname_oauth_apps %}, and API development, explore the {% data variables.product.prodname_support_forum_with_url %}. The forum is moderated and maintained by {% data variables.product.company_short %} staff, but questions posted to the forum are not guaranteed to receive a reply from {% data variables.product.company_short %} staff.
Consider reaching out to [GitHub Support](https://github.com/contact) directly using the contact form for:
- guaranteed response from {% data variables.product.product_name %} staff

View File

@@ -1,2 +1,2 @@
1. Review the tokens that have access to your account. For those that you don't recognize or that are out-of-date, click **{% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}**, then click **Revoke**. To revoke all tokens, click **Revoke all**.
![List of authorized {% data variables.product.prodname_oauth_app %}s](/assets/images/help/settings/revoke-oauth-app.png)
![List of authorized {% data variables.product.prodname_oauth_apps %}](/assets/images/help/settings/revoke-oauth-app.png)

View File

@@ -102,7 +102,7 @@ export async function versionPages(obj, version, langCode, site) {
const versionedChildPages = await Promise.all(
obj.childPages
// Drop child pages that do not apply to the current version.
// Drop child pages that do not apply to the current version
.filter((childPage) => childPage.page.applicableVersions.includes(version))
// Version the child pages recursively.
.map((childPage) => versionPages(Object.assign({}, childPage), version, langCode, site))

View File

@@ -3,9 +3,9 @@ import next from 'next'
const { NODE_ENV } = process.env
const isDevelopment = NODE_ENV === 'development'
const nextApp = next({ dev: isDevelopment })
export const nextApp = next({ dev: isDevelopment })
export const nextHandleRequest = nextApp.getRequestHandler()
nextApp.prepare()
await nextApp.prepare()
function renderPageWithNext(req, res, next) {
if (req.path.startsWith('/_next') && !req.path.startsWith('/_next/data')) {

420
package-lock.json generated
View File

@@ -72,8 +72,8 @@
"rehype-stringify": "^6.0.1",
"remark-code-extra": "^1.0.1",
"remark-gemoji-to-emoji": "^1.1.0",
"remark-parse": "^7.0.2",
"remark-rehype": "^5.0.0",
"remark-parse": "npm:remark-parse-no-trim@^8.0.4",
"remark-rehype": "^6.0.0",
"revalidator": "^0.3.1",
"rss-parser": "^3.12.0",
"scroll-anchoring": "^0.1.0",
@@ -93,6 +93,7 @@
"@actions/github": "^5.0.0",
"@babel/core": "^7.14.3",
"@babel/eslint-parser": "^7.14.3",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-transform-runtime": "^7.14.3",
"@babel/preset-env": "^7.14.2",
"@graphql-inspector/core": "^2.5.0",
@@ -1304,12 +1305,18 @@
}
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
"integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-typescript": {
@@ -8687,11 +8694,15 @@
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"node_modules/detab": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz",
"integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz",
"integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==",
"dependencies": {
"repeat-string": "^1.5.4"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/detect-newline": {
@@ -11179,11 +11190,6 @@
"web-namespaces": "^1.0.0"
}
},
"node_modules/hast-util-from-parse5/node_modules/vfile-location": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
"integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA=="
},
"node_modules/hast-util-has-property": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz",
@@ -16218,27 +16224,15 @@
}
},
"node_modules/mdast-util-definitions": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz",
"integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz",
"integrity": "sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA==",
"dependencies": {
"unist-util-visit": "^1.0.0"
}
"unist-util-visit": "^2.0.0"
},
"node_modules/mdast-util-definitions/node_modules/unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"dependencies": {
"unist-util-visit-parents": "^2.0.0"
}
},
"node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"dependencies": {
"unist-util-is": "^3.0.0"
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/mdast-util-from-markdown": {
@@ -16253,51 +16247,24 @@
"unist-util-stringify-position": "^2.0.0"
}
},
"node_modules/mdast-util-from-markdown/node_modules/parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"dependencies": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
},
"node_modules/mdast-util-to-hast": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-6.0.2.tgz",
"integrity": "sha512-GjcOimC9qHI0yNFAQdBesrZXzUkRdFleQlcoU8+TVNfDW6oLUazUx8MgUoTaUyCJzBOnE5AOgqhpURrSlf0QwQ==",
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-8.2.0.tgz",
"integrity": "sha512-WjH/KXtqU66XyTJQ7tg7sjvTw1OQcVV0hKdFh3BgHPwZ96fSBCQ/NitEHsN70Mmnggt+5eUUC7pCnK+2qGQnCA==",
"dependencies": {
"collapse-white-space": "^1.0.0",
"detab": "^2.0.0",
"mdast-util-definitions": "^1.2.0",
"mdurl": "^1.0.1",
"trim": "0.0.1",
"mdast-util-definitions": "^2.0.0",
"mdurl": "^1.0.0",
"trim-lines": "^1.0.0",
"unist-builder": "^1.0.1",
"unist-util-generated": "^1.1.0",
"unist-builder": "^2.0.0",
"unist-util-generated": "^1.0.0",
"unist-util-position": "^3.0.0",
"unist-util-visit": "^1.1.0",
"xtend": "^4.0.1"
}
"unist-util-visit": "^2.0.0"
},
"node_modules/mdast-util-to-hast/node_modules/unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"dependencies": {
"unist-util-visit-parents": "^2.0.0"
}
},
"node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"dependencies": {
"unist-util-is": "^3.0.0"
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/mdast-util-to-string": {
@@ -16454,19 +16421,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/micromark/node_modules/parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"dependencies": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
},
"node_modules/micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
@@ -18458,9 +18412,9 @@
}
},
"node_modules/parse-entities": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
"integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"dependencies": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
@@ -18468,6 +18422,10 @@
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/parse-headers": {
@@ -20060,33 +20018,41 @@
}
},
"node_modules/remark-parse": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz",
"integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==",
"version": "8.0.4",
"resolved": "git+ssh://git@github.com/docs/remark-parse-no-trim.git#8250e8847e9d9bb695e23de57c3fbf35bdc7f5e6",
"license": "MIT",
"dependencies": {
"ccount": "^1.0.0",
"collapse-white-space": "^1.0.2",
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-whitespace-character": "^1.0.0",
"is-word-character": "^1.0.0",
"markdown-escapes": "^1.0.0",
"parse-entities": "^1.1.0",
"parse-entities": "^2.0.0",
"repeat-string": "^1.5.4",
"state-toggle": "^1.0.0",
"trim": "0.0.1",
"trim-trailing-lines": "^1.0.0",
"unherit": "^1.0.4",
"unist-util-remove-position": "^1.0.0",
"vfile-location": "^2.0.0",
"unist-util-remove-position": "^2.0.0",
"vfile-location": "^3.0.0",
"xtend": "^4.0.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/remark-rehype": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-5.0.0.tgz",
"integrity": "sha512-tgo+AeOotuh9FnGMkEPbE6C3OfdARqqSxT0H/KNGAiTwJLiDoRSm6x/ytqPZTyYSiQ/exbi/kx7k6uUvqYL1wQ==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-6.0.0.tgz",
"integrity": "sha512-dt7cHCD2NbbmXoSnnNolk+MnWzylsOIEU07pyhZSM71Xy08xX07+yuCh+4rddyrB/a1hebygeteVEJieyCeDzg==",
"dependencies": {
"mdast-util-to-hast": "^6.0.0"
"mdast-util-to-hast": "^8.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/remove-trailing-separator": {
@@ -22276,15 +22242,14 @@
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
"optional": true
},
"node_modules/trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
"integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
},
"node_modules/trim-lines": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz",
"integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA=="
"integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/trim-newlines": {
"version": "3.0.1",
@@ -22650,11 +22615,12 @@
}
},
"node_modules/unist-builder": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz",
"integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==",
"dependencies": {
"object-assign": "^4.1.0"
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
"integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/unist-util-find-after": {
@@ -22679,9 +22645,13 @@
}
},
"node_modules/unist-util-generated": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz",
"integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw=="
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
"integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/unist-util-is": {
"version": "3.0.0",
@@ -22694,27 +22664,15 @@
"integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA=="
},
"node_modules/unist-util-remove-position": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz",
"integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
"integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
"dependencies": {
"unist-util-visit": "^1.1.0"
}
"unist-util-visit": "^2.0.0"
},
"node_modules/unist-util-remove-position/node_modules/unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"dependencies": {
"unist-util-visit-parents": "^2.0.0"
}
},
"node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"dependencies": {
"unist-util-is": "^3.0.0"
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/unist-util-stringify-position": {
@@ -23101,9 +23059,13 @@
}
},
"node_modules/vfile-location": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz",
"integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA=="
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
"integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/vfile-message": {
"version": "2.0.4",
@@ -25034,12 +24996,12 @@
}
},
"@babel/plugin-syntax-top-level-await": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
"integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
"@babel/helper-plugin-utils": "^7.14.5"
}
},
"@babel/plugin-syntax-typescript": {
@@ -31541,9 +31503,9 @@
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"detab": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz",
"integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz",
"integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==",
"requires": {
"repeat-string": "^1.5.4"
}
@@ -33636,13 +33598,6 @@
"vfile": "^4.0.0",
"vfile-location": "^3.2.0",
"web-namespaces": "^1.0.0"
},
"dependencies": {
"vfile-location": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
"integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA=="
}
}
},
"hast-util-has-property": {
@@ -37740,29 +37695,11 @@
}
},
"mdast-util-definitions": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz",
"integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz",
"integrity": "sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA==",
"requires": {
"unist-util-visit": "^1.0.0"
},
"dependencies": {
"unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"requires": {
"unist-util-visit-parents": "^2.0.0"
}
},
"unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"requires": {
"unist-util-is": "^3.0.0"
}
}
"unist-util-visit": "^2.0.0"
}
},
"mdast-util-from-markdown": {
@@ -37775,57 +37712,22 @@
"micromark": "~2.11.0",
"parse-entities": "^2.0.0",
"unist-util-stringify-position": "^2.0.0"
},
"dependencies": {
"parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"requires": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
}
}
},
"mdast-util-to-hast": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-6.0.2.tgz",
"integrity": "sha512-GjcOimC9qHI0yNFAQdBesrZXzUkRdFleQlcoU8+TVNfDW6oLUazUx8MgUoTaUyCJzBOnE5AOgqhpURrSlf0QwQ==",
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-8.2.0.tgz",
"integrity": "sha512-WjH/KXtqU66XyTJQ7tg7sjvTw1OQcVV0hKdFh3BgHPwZ96fSBCQ/NitEHsN70Mmnggt+5eUUC7pCnK+2qGQnCA==",
"requires": {
"collapse-white-space": "^1.0.0",
"detab": "^2.0.0",
"mdast-util-definitions": "^1.2.0",
"mdurl": "^1.0.1",
"trim": "0.0.1",
"mdast-util-definitions": "^2.0.0",
"mdurl": "^1.0.0",
"trim-lines": "^1.0.0",
"unist-builder": "^1.0.1",
"unist-util-generated": "^1.1.0",
"unist-builder": "^2.0.0",
"unist-util-generated": "^1.0.0",
"unist-util-position": "^3.0.0",
"unist-util-visit": "^1.1.0",
"xtend": "^4.0.1"
},
"dependencies": {
"unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"requires": {
"unist-util-visit-parents": "^2.0.0"
}
},
"unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"requires": {
"unist-util-is": "^3.0.0"
}
}
"unist-util-visit": "^2.0.0"
}
},
"mdast-util-to-string": {
@@ -37961,19 +37863,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"requires": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
}
}
},
@@ -39719,9 +39608,9 @@
}
},
"parse-entities": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
"integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"requires": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
@@ -41084,33 +40973,32 @@
}
},
"remark-parse": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.2.tgz",
"integrity": "sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==",
"version": "git+ssh://git@github.com/docs/remark-parse-no-trim.git#8250e8847e9d9bb695e23de57c3fbf35bdc7f5e6",
"from": "remark-parse@npm:remark-parse-no-trim@^8.0.4",
"requires": {
"ccount": "^1.0.0",
"collapse-white-space": "^1.0.2",
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-whitespace-character": "^1.0.0",
"is-word-character": "^1.0.0",
"markdown-escapes": "^1.0.0",
"parse-entities": "^1.1.0",
"parse-entities": "^2.0.0",
"repeat-string": "^1.5.4",
"state-toggle": "^1.0.0",
"trim": "0.0.1",
"trim-trailing-lines": "^1.0.0",
"unherit": "^1.0.4",
"unist-util-remove-position": "^1.0.0",
"vfile-location": "^2.0.0",
"unist-util-remove-position": "^2.0.0",
"vfile-location": "^3.0.0",
"xtend": "^4.0.1"
}
},
"remark-rehype": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-5.0.0.tgz",
"integrity": "sha512-tgo+AeOotuh9FnGMkEPbE6C3OfdARqqSxT0H/KNGAiTwJLiDoRSm6x/ytqPZTyYSiQ/exbi/kx7k6uUvqYL1wQ==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-6.0.0.tgz",
"integrity": "sha512-dt7cHCD2NbbmXoSnnNolk+MnWzylsOIEU07pyhZSM71Xy08xX07+yuCh+4rddyrB/a1hebygeteVEJieyCeDzg==",
"requires": {
"mdast-util-to-hast": "^6.0.0"
"mdast-util-to-hast": "^8.0.0"
}
},
"remove-trailing-separator": {
@@ -42961,11 +42849,6 @@
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
"optional": true
},
"trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
"integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
},
"trim-lines": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz",
@@ -43262,12 +43145,9 @@
}
},
"unist-builder": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz",
"integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==",
"requires": {
"object-assign": "^4.1.0"
}
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
"integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw=="
},
"unist-util-find-after": {
"version": "3.0.0",
@@ -43285,9 +43165,9 @@
}
},
"unist-util-generated": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz",
"integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw=="
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
"integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg=="
},
"unist-util-is": {
"version": "3.0.0",
@@ -43300,29 +43180,11 @@
"integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA=="
},
"unist-util-remove-position": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz",
"integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
"integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
"requires": {
"unist-util-visit": "^1.1.0"
},
"dependencies": {
"unist-util-visit": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
"integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
"requires": {
"unist-util-visit-parents": "^2.0.0"
}
},
"unist-util-visit-parents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
"integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
"requires": {
"unist-util-is": "^3.0.0"
}
}
"unist-util-visit": "^2.0.0"
}
},
"unist-util-stringify-position": {
@@ -43678,9 +43540,9 @@
}
},
"vfile-location": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz",
"integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA=="
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
"integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA=="
},
"vfile-message": {
"version": "2.0.4",

View File

@@ -74,8 +74,8 @@
"rehype-stringify": "^6.0.1",
"remark-code-extra": "^1.0.1",
"remark-gemoji-to-emoji": "^1.1.0",
"remark-parse": "^7.0.2",
"remark-rehype": "^5.0.0",
"remark-parse": "npm:remark-parse-no-trim@^8.0.4",
"remark-rehype": "^6.0.0",
"revalidator": "^0.3.1",
"rss-parser": "^3.12.0",
"scroll-anchoring": "^0.1.0",
@@ -95,6 +95,7 @@
"@actions/github": "^5.0.0",
"@babel/core": "^7.14.3",
"@babel/eslint-parser": "^7.14.3",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-transform-runtime": "^7.14.3",
"@babel/preset-env": "^7.14.2",
"@graphql-inspector/core": "^2.5.0",

View File

@@ -1,256 +0,0 @@
#!/usr/bin/env node
/*
This script does most of the work to convert our *.js files to use ESM
instead of CommonJS.
This is based on https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
This file assumes the two ESLint rules have already been installed and enforced:
- https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/global-require.md
- https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
(for reference) https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-module.md
*/
import fs from 'fs/promises'
import semver from 'semver'
import walkSync from 'walk-sync'
// https://stackoverflow.com/a/31102605
function orderKeys(unordered) {
return Object.keys(unordered)
.sort()
.reduce((obj, key) => {
obj[key] =
unordered[key].constructor === {}.constructor ? orderKeys(unordered[key]) : unordered[key]
return obj
}, {})
}
async function readPackageFile() {
return JSON.parse(await fs.readFile('./package.json', 'utf8'))
}
async function writePackageFile(packageFile) {
return fs.writeFile('./package.json', JSON.stringify(orderKeys(packageFile), ' ', 2) + '\n')
}
async function readAllJsFiles() {
const paths = walkSync('./', {
directories: false,
includeBasePath: true,
globs: ['**/*.js'],
ignore: ['node_modules', 'dist'],
})
return await Promise.all(paths.map(async (path) => [path, await fs.readFile(path, 'utf8')]))
}
function listJsonPaths() {
const paths = walkSync('./', {
directories: false,
includeBasePath: true,
globs: ['**/*.json'],
ignore: ['node_modules', 'dist'],
})
return paths.map((p) => p.replace('.json', ''))
}
function withAllFiles(jsFiles, fn) {
return jsFiles.map(([path, file]) => [path, fn(path, file)])
}
async function writeAllJsFiles(jsFiles) {
return await Promise.all(jsFiles.map(async ([path, file]) => await fs.writeFile(path, file)))
}
// Converts a path to an import name
/* Example:
import xLunrJa from 'lunr-languages/lunr.ja'
xLunrJa(lunr)
*/
function nameImport(p2) {
const myString = p2.split('/').pop()
const string = myString.replace(/[-.]([a-z])/g, (g) => g[1].toUpperCase())
return `x${string.charAt(0).toUpperCase()}${string.slice(1)}`
}
// Add "type": "module" to your package.json.
async function addTypeModule() {
const packageFile = await readPackageFile()
packageFile.type = 'module'
return writePackageFile(packageFile)
}
// Replace "main": "index.js" with "exports": "./index.js" in your package.json.
async function updateMainExport() {
const packageFile = await readPackageFile()
const main = packageFile.main
if (!main) return
delete packageFile.main
packageFile.exports = './' + main
return writePackageFile(packageFile)
}
// Update the "engines" field in package.json to Node.js 12: "node": "^12.20.0 || ^14.13.1 || >=16.0.0".
// If 12 is already required, we will skip this change.
async function checkEngines() {
const packageFile = await readPackageFile()
const nodeVersion = packageFile.engines.node
if (semver.gt(semver.minVersion(nodeVersion), '12.0.0')) return
packageFile.engines.node = '^12.20.0 || ^14.13.1 || >=16.0.0'
await writePackageFile(packageFile)
}
// Remove 'use strict'; from all JavaScript files.
function noStrict(path, file) {
if (file.includes('use strict')) {
throw new Error(`Cannot use strict in ${path}. Please remove and run this script again.`)
}
return file
}
// Read JSON requires separately
/*
import { promises as fs } from 'fs'
const packageJson = JSON.parse(await fs.readFile('package.json', 'utf8'))
*/
function noJsonReads(jsonPaths) {
return (path, file) => {
const found = [...file.matchAll(/require\('[./]+(.*?)'\)/gm)]
if (!found) return file
const matchesJsonPath = found
.map((f) => f[1])
.filter((f) => jsonPaths.some((p) => p.endsWith(f)))
if (matchesJsonPath.length) {
throw new Error(
`${path} has possible JSON requires: ${matchesJsonPath}. Please fix this manually then run the script again.`
)
}
return file
}
}
// Replace all require()/module.export with import/export.
// Use only full relative file paths for imports: import x from '.'; → import x from './index.js';.
// Add `.js` if starts with `./`
// Replace `:` to as
// Fix up standard const x = require('x') statements
function updateStandardImport(path, file) {
return file.replaceAll(/^const\s(.*?)\s*?=\s*?require\('(.*?)'\)$/gm, (_, p1, p2) => {
// Replace `:` to as
p1 = p1.replace(/\s*:\s*/g, ' as ')
// Add `.js` if path starts with `.`
if (p2.startsWith('.') && !p2.endsWith('.js')) p2 = p2 + '.js'
return `import ${p1} from '${p2}'`
})
}
// Fix up inlined requires that are still "top-level"
function updateInlineImport(path, file) {
return file.replaceAll(/^(.*?)require\('(.*?)'\)(.*)$/gm, (_, p1, p2, p3) => {
// Generate a new import name based on the path
const name = nameImport(p2)
// Add `.js` if starts with `.`
if (p2.startsWith('.') && !p2.endsWith('.js')) p2 = p2 + '.js'
// Fix up unused require('x') statements
if (!p1 && !p3) return `import '${p2}'`
return `import ${name} from '${p2}'\n${p1}${name}${p3}`
})
}
// Handle module.exports =
function updateDefaultExport(path, file) {
return file.replaceAll(/^module.exports\s*?=\s*?(\S.*)/gm, 'export default $1')
}
// Handle exports.x =
function updateNamedExport(path, file) {
return file.replaceAll(/^exports\.(\S+)\s*?=\s*?(\S.*)/gm, 'export const $1 = $2')
}
// Replace __filename and __dirname
function updateFileAndDir(path, file) {
if (!file.includes('__filename') && !file.includes('__dirname')) return file
return [
"import { fileURLToPath } from 'url'",
"import path from 'path'",
file.includes('__filename') && 'const __filename = fileURLToPath(import.meta.url)',
file.includes('__dirname') && 'const __dirname = path.dirname(fileURLToPath(import.meta.url))',
file,
]
.filter(Boolean)
.join('\n')
}
// lodash => lodash-es
function useEsLodash(path, file) {
return file.replace("'lodash'", "'lodash-es'")
}
// Pull all imports to the top of the file to avoid syntax issues
function moveImportsToTop(path, file) {
if (!file.includes('import')) return file
const isTop = (line) => /^import/gm.test(line)
const lineEnd = /\r?\n|\r/g
return (
file.split(lineEnd).filter(isTop).join('\n') +
'\n' +
file
.split(lineEnd)
.filter((line) => !isTop(line))
.join('\n')
)
}
// Make sure script declarations on the top of the file before imports
function updateScriptDeclaration(path, file) {
if (!path.startsWith('./script')) return file
file = file.replace('#!/usr/bin/env node\n', '')
return '#!/usr/bin/env node\n' + file
}
// Check there's no `require(` ... anywhere
function checkRequire(path, file) {
if (/require\s*\(/.test(file)) {
throw new Error(`"require(" still in ${path}`)
}
return file
}
// Check there's no `exports` ... anywhere
function checkExports(path, file) {
if (file.includes('exports')) {
throw new Error(`"exports" still in ${path}`)
}
return file
}
async function main() {
await addTypeModule()
await updateMainExport()
await checkEngines()
const jsonPaths = listJsonPaths()
let jsFiles = await readAllJsFiles()
jsFiles = withAllFiles(jsFiles, noStrict)
jsFiles = withAllFiles(jsFiles, noJsonReads(jsonPaths))
jsFiles = withAllFiles(jsFiles, updateStandardImport)
jsFiles = withAllFiles(jsFiles, updateInlineImport)
jsFiles = withAllFiles(jsFiles, updateDefaultExport)
jsFiles = withAllFiles(jsFiles, updateNamedExport)
jsFiles = withAllFiles(jsFiles, updateFileAndDir)
jsFiles = withAllFiles(jsFiles, useEsLodash)
jsFiles = withAllFiles(jsFiles, moveImportsToTop)
jsFiles = withAllFiles(jsFiles, updateScriptDeclaration)
jsFiles = withAllFiles(jsFiles, checkRequire)
jsFiles = withAllFiles(jsFiles, checkExports)
await writeAllJsFiles(jsFiles)
}
main()

View File

@@ -1,87 +0,0 @@
#!/usr/bin/env node
/*
As we update our markdown rendering pipeline,
the package update includes a new markdown rendering engine,
micromark, that is CommonMark compliant. The most obvious change is that
indents within `ul` and `ol` now require 4 spaces or a tab instead of
2 spaces. This script updates our content to that specification.
*/
import walkSync from 'walk-sync'
import fs from 'fs/promises'
/******************************************************************************/
async function readFiles(opts) {
const paths = walkSync('./', {
directories: false,
includeBasePath: true,
...opts,
})
return await Promise.all(paths.map(async (path) => [path, await fs.readFile(path, 'utf8')]))
}
function withAllFiles(files, fn) {
return files.map(([path, file]) => [path, fn(path, file)])
}
async function writeFiles(files) {
return await Promise.all(files.map(async ([path, file]) => await fs.writeFile(path, file)))
}
/******************************************************************************/
function updateIndent(path, file) {
// We don't want to change the frontmatter
let [, frontmatter, content] = file.split(/^-{3,}$/gm)
// If the file doesn't have frontmatter or content, meh
if (!frontmatter || !content) return file
// If there no `ul` or `ol`, no change
if (!/^([-*]\s)|(\d+[.)]\s)/gi.test(content)) return file
// If this file has a yaml example, skip it; its too hard to update automatically
if (/^\s*`{3}ya?ml/gim.test(content)) {
if (/^ {2,3}(\S)/gm.test(content)) {
console.log('YAML example, will skip', path)
}
return file
}
// Only within a `ul` or `ol`, update indent level
content = content
.split('\n')
.map((line, index, arr) => {
// If this isn't an indented line, continue
if (!/^ {2,3}(\S)/.test(line)) return line
// Find the previous line that is not whitespace or indented
let prevLineIndex = index - 1
while (/^\s*$/.test(arr[prevLineIndex]) || /^\s{2,}/.test(arr[prevLineIndex])) {
prevLineIndex--
}
// Only do it if previous line is ol/ul
const prevLine = arr[prevLineIndex]
if (!/^([-*]\s)|(\d+[.)]\s)/i.test(prevLine)) return line
return line.replace(/^ {2,3}(\S)/, ' $1')
})
.join('\n')
return ['---', frontmatter.trim(), '---', '', content.trim(), ''].join('\n')
}
async function main() {
let files = await readFiles({
globs: ['content/**/*.md', 'data/**/*.md'],
ignore: ['**/README.md'],
})
files = withAllFiles(files, updateIndent)
await writeFiles(files)
}
main()

View File

@@ -248,6 +248,116 @@ describe('platform specific content', () => {
})
})
describe('tool specific content', () => {
const pageWithSingleSwitcher = 'http://localhost:4001/en/actions/managing-workflow-runs/manually-running-a-workflow'
const pageWithoutSwitcher = 'http://localhost:4001/en/billing/managing-billing-for-github-sponsors/about-billing-for-github-sponsors'
const pageWithMultipleSwitcher = 'http://localhost:4001/en/issues/trying-out-the-new-projects-experience/using-the-api-to-manage-projects'
it('should have a tool switcher if a tool switcher is included', async () => {
await page.goto(pageWithSingleSwitcher)
const nav = await page.$$('nav#tool-switcher')
const switches = await page.$$('a.tool-switcher')
const selectedSwitch = await page.$$('a.tool-switcher.selected')
expect(nav).toHaveLength(1)
expect(switches.length).toBeGreaterThan(1)
expect(selectedSwitch).toHaveLength(1)
})
it('should have multiple tool switchers if multiple tools switchers are included', async () => {
await page.goto(pageWithMultipleSwitcher)
const toolSelector = await page.$$('nav#tool-switcher')
const switches = await page.$$('a.tool-switcher')
const selectedSwitch = await page.$$('a.tool-switcher.selected')
console.log(switches.length)
expect(toolSelector.length).toBeGreaterThan(1)
expect(switches.length).toBeGreaterThan(1)
expect(selectedSwitch.length).toEqual(toolSelector.length)
})
it('should NOT have a tool switcher if no tool switcher is included', async () => {
await page.goto(pageWithoutSwitcher)
const toolSelector = await page.$$('nav#tool-switcher')
const switches = await page.$$('a.tool-switcher')
const selectedSwitch = await page.$$('a.tool-switcher.selected')
expect(toolSelector).toHaveLength(0)
expect(switches).toHaveLength(0)
expect(selectedSwitch).toHaveLength(0)
})
it('should use cli if no defaultTool is specified and if webui is not one of the tools', async () => {
await page.goto(pageWithMultipleSwitcher)
const selectedToolElement = await page.waitForSelector('a.tool-switcher.selected')
const selectedTool = await page.evaluate(el => el.textContent, selectedToolElement)
expect(selectedTool).toBe('GitHub CLI')
})
it('should use webui if no defaultTool is specified and if webui is one of the tools', async () => {
await page.goto(pageWithSingleSwitcher)
const selectedToolElement = await page.waitForSelector('a.tool-switcher.selected')
const selectedTool = await page.evaluate(el => el.textContent, selectedToolElement)
expect(selectedTool).toBe('GitHub.com')
})
it('should use the recorded user selection', async () => {
// With no user data, the selected tool is GitHub.com
await page.goto(pageWithSingleSwitcher)
let selectedToolElement = await page.waitForSelector('a.tool-switcher.selected')
let selectedTool = await page.evaluate(el => el.textContent, selectedToolElement)
expect(selectedTool).toBe('GitHub.com')
await page.click(`.tool-switcher[data-tool="cli"]`)
// Revisiting the page after CLI is selected results in CLI as the selected tool
await page.goto(pageWithSingleSwitcher)
selectedToolElement = await page.waitForSelector('a.tool-switcher.selected')
selectedTool = await page.evaluate(el => el.textContent, selectedToolElement)
expect(selectedTool).toBe('GitHub CLI')
})
it('should show the content for the selected tool only', async () => {
await page.goto(pageWithSingleSwitcher)
const tools = ['webui', 'cli']
for (const tool of tools) {
await page.click(`.tool-switcher[data-tool="${tool}"]`)
// content for selected tool is expected to become visible
await page.waitForSelector(`.extended-markdown.${tool}`, { visible: true, timeout: 3000 })
// only a single tab should be selected
const selectedSwitch = await page.$$('a.tool-switcher.selected')
expect(selectedSwitch).toHaveLength(1)
// content for NOT selected tools is expected to become hidden
const otherTools = tools.filter(e => e !== tool)
for (const other of otherTools) {
await page.waitForSelector(`.extended-markdown.${other}`, { hidden: true, timeout: 3000 })
}
}
})
it('selecting a tool in one switcher will control all tool switchers on the page', async () => {
await page.goto(pageWithMultipleSwitcher)
const tools = { cli: 'GitHub CLI', curl: 'cURL' }
for (const [tool, toolName] of Object.entries(tools)) {
await page.click(`.tool-switcher[data-tool="${tool}"]`)
// content for selected tool is expected to become visible
await page.waitForSelector(`.extended-markdown.${tool}`, { visible: true, timeout: 3000 })
// all tabs should be selected
const toolSelector = await page.$$('nav#tool-switcher')
const selectedSwitch = await page.$$('a.tool-switcher.selected')
expect(selectedSwitch).toHaveLength(toolSelector.length)
const selectedToolElement = await page.waitForSelector('a.tool-switcher.selected')
const selectedTool = await page.evaluate(el => el.textContent, selectedToolElement)
expect(selectedTool).toBe(toolName)
}
})
})
describe('code examples', () => {
it('loads correctly', async () => {
await page.goto('http://localhost:4001/en/actions')

View File

@@ -47,5 +47,3 @@ export const getJSON = (helpers.getJSON = async function (route) {
const res = await helpers.get(route, { followRedirects: true })
return JSON.parse(res.text)
})
export default helpers

View File

@@ -20,7 +20,7 @@ describe('breadcrumbs', () => {
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs).toHaveLength(4)
expect($breadcrumbs[0].attribs.title).toBe('product: GitHub.com')
expect($breadcrumbs[0].attribs.title).toBe('product: GitHub')
expect($breadcrumbs[1].attribs.title).toBe('category: Authentication')
expect($breadcrumbs[2].attribs.title).toBe('mapTopic: Troubleshooting SSH')
expect($breadcrumbs[3].attribs.title).toBe('article: Use SSH over HTTPS port')
@@ -33,7 +33,7 @@ describe('breadcrumbs', () => {
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs).toHaveLength(3)
expect($breadcrumbs[0].attribs.title).toBe('product: GitHub.com')
expect($breadcrumbs[0].attribs.title).toBe('product: GitHub')
expect($breadcrumbs[1].attribs.title).toBe('category: Authentication')
expect($breadcrumbs[2].attribs.title).toBe('mapTopic: Account security')
expect($breadcrumbs[2].attribs.class.includes('color-text-tertiary')).toBe(true)
@@ -45,8 +45,7 @@ describe('breadcrumbs', () => {
)
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs).toHaveLength(4)
// The product is still GitHub.com on an Enterprise Server version
expect($breadcrumbs[0].attribs.title).toBe('product: GitHub.com')
expect($breadcrumbs[0].attribs.title).toBe('product: GitHub')
})
test('parses Liquid variables inside titles', async () => {
@@ -85,7 +84,7 @@ describe('breadcrumbs', () => {
expect($breadcrumbSpans).toHaveLength(2)
expect($breadcrumbLinks).toHaveLength(2)
expect($breadcrumbSpans[0].children[0].data).toBe('Early Access documentation')
expect($breadcrumbSpans[1].children[0].data).toBe('GitHub.com')
expect($breadcrumbSpans[1].children[0].data).toBe('GitHub')
expect($breadcrumbLinks[0].attribs.title).toBe(
'category: Enforcing best practices with GitHub Policies'
)
@@ -101,7 +100,7 @@ describe('breadcrumbs', () => {
{
documentType: 'product',
href: '/en/github',
title: 'GitHub.com',
title: 'GitHub',
},
]
expect(breadcrumbs).toEqual(expected)
@@ -113,7 +112,7 @@ describe('breadcrumbs', () => {
{
documentType: 'product',
href: '/en/github',
title: 'GitHub.com',
title: 'GitHub',
},
{
documentType: 'category',
@@ -132,7 +131,7 @@ describe('breadcrumbs', () => {
{
documentType: 'product',
href: '/en/github',
title: 'GitHub.com',
title: 'GitHub',
},
{
documentType: 'category',
@@ -156,7 +155,7 @@ describe('breadcrumbs', () => {
{
documentType: 'product',
href: '/en/github',
title: 'GitHub.com',
title: 'GitHub',
},
{
documentType: 'category',
@@ -185,7 +184,7 @@ describe('breadcrumbs', () => {
{
documentType: 'product',
href: '/en/github',
title: 'GitHub.com',
title: 'GitHub',
},
{
documentType: 'category',

View File

@@ -130,7 +130,7 @@ describe('header', () => {
const $ = await getDOM('/en/articles/enabling-required-status-checks')
const github = $('#homepages a.active[href="/en/github"]')
expect(github.length).toBe(1)
expect(github.text().trim()).toBe('GitHub.com')
expect(github.text().trim()).toBe('GitHub')
expect(github.attr('class').includes('active')).toBe(true)
const ghe = $(`#homepages a[href="/en/enterprise-server@${latest}/admin"]`)

View File

@@ -23,7 +23,7 @@ describe('sidebar', () => {
test('highlights active product on GitHub pages', async () => {
expect($githubPage('.sidebar-products li.sidebar-product').length).toBe(1)
expect($githubPage('.sidebar-products li.sidebar-product > a').text().trim()).toBe('GitHub.com')
expect($githubPage('.sidebar-products li.sidebar-product > a').text().trim()).toBe('GitHub')
})
test('includes links to external products like the CLI, Atom, Electron, and CodeQL', async () => {

View File

@@ -1,25 +1,26 @@
import { jest } from '@jest/globals'
import xFs from 'fs'
import { stat } from 'fs/promises'
import path from 'path'
import { testViaActionsOnly } from '../helpers/conditional-runs.js'
import { getDOM } from '../helpers/supertest.js'
import got from 'got'
const fs = xFs.promises
jest.useFakeTimers()
describe('cloning early-access', () => {
testViaActionsOnly('the content directory exists', async () => {
const eaDir = path.join(process.cwd(), 'content/early-access')
expect(await fs.stat(eaDir)).toBeTruthy()
expect(await stat(eaDir)).toBeTruthy()
})
testViaActionsOnly('the data directory exists', async () => {
const eaDir = path.join(process.cwd(), 'data/early-access')
expect(await fs.stat(eaDir)).toBeTruthy()
expect(await stat(eaDir)).toBeTruthy()
})
testViaActionsOnly('the assets/images directory exists', async () => {
const eaDir = path.join(process.cwd(), 'assets/images/early-access')
expect(await fs.stat(eaDir)).toBeTruthy()
expect(await stat(eaDir)).toBeTruthy()
})
})

View File

@@ -25,7 +25,7 @@ describe('products module', () => {
describe('mobile-only products nav', () => {
test('renders current product on various product pages for each product', async () => {
// Note the unversioned homepage at `/` does not have a product selected in the mobile dropdown
expect((await getDOM('/github'))('#current-product').text().trim()).toBe('GitHub.com')
expect((await getDOM('/github'))('#current-product').text().trim()).toBe('GitHub')
// Enterprise server
expect((await getDOM('/en/enterprise/admin'))('#current-product').text().trim()).toBe(
@@ -39,7 +39,7 @@ describe('mobile-only products nav', () => {
)('#current-product')
.text()
.trim()
).toBe('GitHub.com')
).toBe('GitHub')
expect((await getDOM('/desktop'))('#current-product').text().trim()).toBe('GitHub Desktop')