diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2815b0d847e9..5368a43186a8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -163,4 +163,7 @@ jobs: ENABLED_LANGUAGES: ${{ matrix.name == 'languages' && 'all' || '' }} ROOT: ${{ (matrix.name == 'fixtures' || matrix.name == 'article-api' || matrix.name == 'landings' ) && 'src/fixtures/fixtures' || '' }} TRANSLATIONS_FIXTURE_ROOT: ${{ (matrix.name == 'fixtures' || matrix.name == 'article-api') && 'src/fixtures/fixtures/translations' || '' }} + # Enable debug logging when "Re-run jobs with debug logging" is used in GitHub Actions UI + # This will output additional timing and path information to help diagnose timeout issues + RUNNER_DEBUG: ${{ runner.debug }} run: npm test -- src/${{ matrix.name }}/tests/ diff --git a/content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/index.md b/content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/index.md index ab81395a6bcf..74480480b15e 100644 --- a/content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/index.md +++ b/content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/index.md @@ -1,13 +1,12 @@ --- title: Managing supply chain security for your enterprise shortTitle: Supply chain security -intro: 'You can visualize, maintain, and secure the dependencies in your developers'' software supply chain.' +intro: You can visualize, maintain, and secure the dependencies in your developers' software supply chain. versions: ghes: '*' topics: - Enterprise children: - - /about-supply-chain-security-for-your-enterprise - /enabling-the-dependency-graph-for-your-enterprise - /viewing-the-vulnerability-data-for-your-enterprise - /configuring-dependabot-to-work-with-limited-internet-access diff --git a/content/admin/managing-code-security/securing-your-enterprise/index.md b/content/admin/managing-code-security/securing-your-enterprise/index.md index 600ed42b44cb..79b858f19605 100644 --- a/content/admin/managing-code-security/securing-your-enterprise/index.md +++ b/content/admin/managing-code-security/securing-your-enterprise/index.md @@ -12,7 +12,6 @@ topics: - Dependabot - Repositories children: - - /about-security-configurations - /applying-the-github-recommended-security-configuration-to-your-enterprise - /creating-a-custom-security-configuration-for-your-enterprise - /applying-a-custom-security-configuration-to-your-enterprise @@ -20,3 +19,4 @@ children: - /editing-a-custom-security-configuration - /deleting-a-custom-security-configuration --- + diff --git a/content/admin/managing-iam/provisioning-user-accounts-with-scim/user-provisioning-with-scim-on-ghes.md b/content/admin/managing-iam/provisioning-user-accounts-with-scim/user-provisioning-with-scim-on-ghes.md index 1e90c192a404..2f7a2718ab44 100644 --- a/content/admin/managing-iam/provisioning-user-accounts-with-scim/user-provisioning-with-scim-on-ghes.md +++ b/content/admin/managing-iam/provisioning-user-accounts-with-scim/user-provisioning-with-scim-on-ghes.md @@ -45,6 +45,8 @@ The following IdPs are partner IdPs. They offer an application that you can use When you use a single partner IdP for both authentication and provisioning, {% data variables.product.company_short %} provides support for the application on the partner IdP and the IdP's integration with {% data variables.product.prodname_dotcom %}. Support for PingFederate is in {% data variables.release-phases.public_preview %}. +We do not have a supported partner application when using Entra ID for Azure Government. + ### Other identity management systems If you cannot use a single partner IdP for both authentication and provisioning, you can use another identity management system or combination of systems. The system must: diff --git a/content/admin/managing-iam/using-saml-for-enterprise-iam/configuring-saml-single-sign-on-for-your-enterprise.md b/content/admin/managing-iam/using-saml-for-enterprise-iam/configuring-saml-single-sign-on-for-your-enterprise.md index 909197f39f8d..989289f5d230 100644 --- a/content/admin/managing-iam/using-saml-for-enterprise-iam/configuring-saml-single-sign-on-for-your-enterprise.md +++ b/content/admin/managing-iam/using-saml-for-enterprise-iam/configuring-saml-single-sign-on-for-your-enterprise.md @@ -73,6 +73,8 @@ For more information about connecting Microsoft Entra ID (previously known as Az For more information about connecting Entra ID to your enterprise, see [Tutorial: Microsoft Entra SSO integration with GitHub Enterprise Server](https://learn.microsoft.com/en-us/entra/identity/saas-apps/github-ae-tutorial) in Microsoft Docs. +We do not have a supported partner application when using Entra ID for Azure Government. + ## Username considerations with SAML {% data reusables.enterprise_user_management.consider-usernames-for-external-authentication %} For more information, see [AUTOTITLE](/admin/identity-and-access-management/managing-iam-for-your-enterprise/username-considerations-for-external-authentication). diff --git a/content/billing/reference/index.md b/content/billing/reference/index.md index 63c969028970..37858423da95 100644 --- a/content/billing/reference/index.md +++ b/content/billing/reference/index.md @@ -23,6 +23,6 @@ children: - /product-usage-included - /roles-for-visual-studio - /supported-payment-methods + - /previous-billing-platform-endpoints contentType: reference --- - diff --git a/content/billing/reference/previous-billing-platform-endpoints.md b/content/billing/reference/previous-billing-platform-endpoints.md new file mode 100644 index 000000000000..39109a86dcd7 --- /dev/null +++ b/content/billing/reference/previous-billing-platform-endpoints.md @@ -0,0 +1,105 @@ +--- +title: Migrating from the endpoints used for the previous billing platform +shortTitle: Previous billing platform endpoints +intro: 'If your organization previously used the billing platform that predated metered billing, this article explains how to migrate existing usage reporting to the current billing usage endpoints.' +versions: + fpt: '*' + ghec: '*' +topics: + - Enterprise + - Billing + - REST +permissions: 'Enterprise owners, organization owners, and billing managers' +product: '{% data reusables.billing.enhanced-billing-platform-product %}' +contentType: reference +--- + + + + +After you transition to metered billing, the endpoints you used to get data from the previous billing platform will no longer return accurate usage information. + +You will need to upgrade all calls using the previous `/ACCOUNT-TYPE/NAME/settings/billing/PRODUCT` REST API endpoints to use the equivalent `/ACCOUNT-TYPE/NAME/settings/billing/usage` endpoint. + +## Changes in authentication + +If you used a {% data variables.product.pat_v2 %} to authenticate with the previous endpoints, you will need create a {% data variables.product.pat_v1 %} to authenticate with the new endpoint. + +In addition, you may want to use the new query parameters to specify a time period or cost center. + +## Calculating {% data variables.product.prodname_actions %} information from the new response data + +Example of the previous response + +```json +{"total_minutes_used": 305, "total_paid_minutes_used": 0, "included_minutes": 3000, "minutes_used_breakdown": { "UBUNTU": 205, "MACOS": 10, "WINDOWS": 90 } } +``` + +Example of the new response + +```json +{ "usageItems": [ { "date": "2023-08-01", "product": "Actions", "sku": "Actions Linux", "quantity": 100, "unitType": "minutes", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example"} ] } +``` + +To get the same values from the new response data: + +{% rowheaders %} + +| Previous property | Calculate from new API response | +|------ |----------- | +| `total_minutes_used` |
  1. Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  2. Sum `quantity`
| +| `total_paid_minutes_used`| This is now represented as a $ amount via `netAmount`.
  1. Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  2. Sum `netAmount`
| +| `included_minutes` | This is now represented as a $ amount via `discountAmount`.
  1. Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  2. Sum `discountAmount`
| +| `minutes_used_breakdown` |
  1. Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  2. Sum `quantity` grouped by `sku`
| + +{% endrowheaders %} + +## Calculating {% data variables.product.prodname_registry %} information from the new response data + +Example of the previous response + +```json +{ "total_gigabytes_bandwidth_used": 50, "total_paid_gigabytes_bandwidth_used": 40, "included_gigabytes_bandwidth": 10 } +``` + +Example of the new response + +```json +{ "usageItems": [ { "date": "2023-08-01", "product": "Packages", "sku": "Packages data transfer", "quantity": 100, "unitType": "gigabytes", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example" } ] } +``` + +{% rowheaders %} + +| Previous property | Calculate from new API response | +|------ |----------- | +| `total_gigabytes_bandwidth_used` |
  1. Filter results by `"product": "Packages"` and `"unitType": "gigabytes"`
  2. Sum `quantity`
| +| `total_paid_gigabytes_bandwidth_used`| This is now represented as a $ amount via `netAmount`.
  1. Filter results by `"product": "Packages"` and `"unitType": "gigabytes"`
  2. Sum `netAmount`
| +| `included_gigabytes_bandwidth` | This is now represented as a $ amount via `discountAmount`.
  1. Filter results by `"product": "Packages"` and `"unitType": "gigabytes"`
  2. Sum `discountAmount`
| + +{% endrowheaders %} + +## Calculating shared storage information from the new response data + +Example of the previous response + +```json +{ "days_left_in_billing_cycle": 20, "estimated_paid_storage_for_month": 15, "estimated_storage_for_month": 40 } +``` + +Example of the new response + +```json +{ "usageItems": [ { "date": "2023-08-01", "product": "Packages", "sku": "Packages storage", "quantity": 100, "unitType": "GigabyteHours", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example" } ] } +``` + +{% rowheaders %} + +| Previous property | Calculate from new API response | +|------ |----------- | +| `days_left_in_billing_cycle` | Not available. This information can be inferred by subtracting the current day of the month from the number of days in the current month. | +| `estimated_paid_storage_for_month`| This is now represented as a $ amount via `netAmount`.

Prerequisite: pass the `month` and `year` query parameters.

For Actions storage
  1. Filter results by `"product": "Actions"` and `"unitType": "GigabyteHours"`
  2. Sum `netAmount`
For Packages storage
  1. Filter results by `"product": "Packages"` and `"unitType": "GigabyteHours"`
  2. Sum `netAmount`
| +| `estimated_storage_for_month` | Prerequisite: pass the `month` and `year` query parameters.

For Actions storage
  1. Filter results by `"product": "Actions"` and `"unitType": "GigabyteHours"`
  2. Sum `quantity`
For Packages storage
  1. Filter results by `"product": "Packages"` and `"unitType": "GigabyteHours"`
  2. Sum `quantity`
| + +{% endrowheaders %} + + diff --git a/content/billing/tutorials/automate-usage-reporting.md b/content/billing/tutorials/automate-usage-reporting.md index 5f7b2dd11e47..9aaf87fe285c 100644 --- a/content/billing/tutorials/automate-usage-reporting.md +++ b/content/billing/tutorials/automate-usage-reporting.md @@ -17,141 +17,170 @@ product: '{% data reusables.billing.enhanced-billing-platform-product %}' contentType: tutorials --- -You can automatically pull data from {% data variables.product.github %} to populate the business systems you use to monitor costs and usage using the REST API. If you haven't used the {% data variables.product.github %} REST API before, see [AUTOTITLE](/rest/using-the-rest-api). +After you transition to metered billing, you may want to automatically track usage and costs for paid {% data variables.product.github %} features in your internal reporting systems. For example, you might want to monitor spend over time, reconcile invoices, or feed usage data into finance or BI tools. -## Overview of endpoints +In this tutorial, you’ll learn how to use the REST API to retrieve billing usage data, filter it by time period or cost center, and automate recurring reports at the user, organization, or enterprise level. You’ll also learn how to interpret key fields in the response so you can turn raw usage data into meaningful cost insights. -You need to use different endpoints to gather data depending on your account type and the information level you want. +## Prerequisites -{% rowheaders %} +Before you begin this tutorial, make sure that: -| Account | Report | Access | Endpoint | More information | -|---------|--------|--------|----------|------------------| -| Users | Premium request consumption, with details of quota and billed usage | Account holder | `/users/{username}/settings/billing/premium_request/usage` | [AUTOTITLE](/rest/billing/usage?apiVersion=2022-11-28#get-billing-premium-request-usage-report-for-a-user) | -| Users | Usage data for all paid products | Account holder | `/users/{username}/settings/billing/usage/summary` | [AUTOTITLE](/rest/billing/usage?apiVersion=2022-11-28#get-billing-usage-summary-for-a-user) | -| Organizations | Premium request consumption, with details of quota and billed usage | Organization owners and billing managers | `/organizations/{org}/settings/billing/premium_request/usage` | [AUTOTITLE](/rest/billing/usage?apiVersion=2022-11-28#get-billing-premium-request-usage-report-for-an-organization) | -| Organizations | Usage data for all paid products | Organization owners and billing managers | `/organizations/{org}/settings/billing/usage/summary` | [AUTOTITLE](/rest/billing/usage?apiVersion=2022-11-28#get-billing-usage-summary-for-an-organization) | -| Enterprises | Premium request consumption, with details of quota and billed usage | Enterprise owners and billing managers | `/enterprises/{enterprise}/settings/billing/premium_request/usage` | [AUTOTITLE](/rest/billing/usage?apiVersion=2022-11-28#get-billing-premium-request-usage-report-for-an-enterprise) | -| Enterprises | Usage data for all paid products | Enterprise owners and billing managers | `/enterprises/{enterprise}/settings/billing/usage/summary` | [AUTOTITLE](/rest/billing/usage?apiVersion=2022-11-28#get-billing-usage-summary-for-an-enterprise) | +* You have access to billing data at the level you want to report on: + * User-level reports: account holder + * Organization-level reports: organization owner or billing manager + * Enterprise-level reports: enterprise administrator or billing manager -{% endrowheaders %} +* You’re familiar with making authenticated requests to the REST API. For an introduction, see [AUTOTITLE](/rest/using-the-rest-api). +* You authenticate using a {% data variables.product.pat_v1 %}. The billing usage endpoints do not support {% data variables.product.pat_v2_plural %}. -## Getting premium request consumption +Depending on your reporting needs, you may also want access to an internal system (such as a spreadsheet, database, or BI tool) where you can store and analyze the usage data retrieved from the API. -1. Authenticate with {% data variables.product.github %} with one of the following methods: - * **{% data variables.product.prodname_cli %}:** use the `gh auth login` command to authenticate, see [AUTOTITLE](/github-cli/github-cli/quickstart). - * **Create a {% data variables.product.pat_v1 %}:** and pass the token to in your API call, see [Creating a {% data variables.product.pat_v1 %}](/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic). +## Step 1: Decide what level to report on -1. Call the required `premium_request/usage` endpoint, specifying the enterprise, organization, or user that you want data for. +Decide which account level you want to report on. This determines **which REST API endpoint you’ll call** and what your report will include. -## Getting usage data for all paid products +Choose the reporting level that best matches your goal: -1. Authenticate with {% data variables.product.github %} with one of the following methods: - * **{% data variables.product.prodname_cli %}:** use the `gh auth login` command to authenticate, see [AUTOTITLE](/github-cli/github-cli/quickstart). - * **Create a {% data variables.product.pat_v1 %}:** and pass the token to in your API call, see [Creating a {% data variables.product.pat_v1 %}](/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic). +| Reporting level | When to use it | +| ----------------- | ---------------- | +| **User** | You want a report for a single account, for example to understand personal usage and costs. | +| **Organization** | You want to track usage and costs for a specific organization, for example for team-level monitoring or chargeback. | +| **Enterprise** | You want a centralized view across multiple organizations, for example for finance reporting or cost center reporting. | -1. Call the required `usage` endpoint, specifying the enterprise, organization, or user that you want data for. +Once you’ve chosen a reporting level, you’ll use the corresponding endpoint in the next step to retrieve usage data and build an automated report. -1. By default, data for all products for the current year is reported. For enterprises, only data that is not associated with a cost center is reported. +## Step 2: Retrieve usage data for paid products - You can request more specific data using query parameters. - * Specify time period by setting one or more of the following parameters: `year`, `month`, `day`, and `hour`. - * Specify a cost center to report on by identifier using the `cost_center_id` query parameter (enterprise endpoint only). +After you’ve decided which level to report on, use the REST API to retrieve usage data for paid {% data variables.product.github %} products. For all endpoints, see [AUTOTITLE](/rest/billing/usage). -For more detailed information and an example calls and responses, see: -* [Get billing usage report for an enterprise](/rest/enterprise-admin/billing?apiVersion=2022-11-28#get-billing-usage-report-for-an-enterprise) -* [Get billing usage report for an organization](/rest/billing/enhanced-billing?apiVersion=2022-11-28#get-billing-usage-report-for-an-organization) -* [Get billing usage report for a user](/rest/billing/enhanced-billing?apiVersion=2022-11-28#get-billing-usage-report-for-a-user) +{% data variables.product.github %} provides two types of billing usage data: - - +* **Usage summaries** – aggregated usage and cost data for all paid products. +* **Premium request usage** – detailed usage and billing data for premium requests, including quotas and overage usage. -## Migrating from the endpoints used for the previous billing platform +In most reporting scenarios, you’ll start with a **usage summary** to understand overall usage and spend, and then use premium request usage data when you need deeper insight into premium request consumption. -After you transition to metered billing, the endpoints you used to get data from the previous billing platform will no longer return accurate usage information. +### Retrieve a usage summary -* Upgrade all calls of the form: `/ACCOUNT-TYPE/NAME/settings/billing/PRODUCT` -* To use the equivalent: `/ACCOUNT-TYPE/NAME/settings/billing/usage` endpoint +Use the usage summary endpoint that corresponds to the reporting level you chose in Step 1. -### Changes in authentication +For example, to retrieve a usage summary for an enterprise, make a request to: -If you used a {% data variables.product.pat_v2 %} to authenticate with the previous endpoints, you will need create a {% data variables.product.pat_v1 %} to authenticate with the new endpoint. +`/enterprises/{enterprise}/settings/billing/usage/summary` -In addition, you may want to use the new query parameters to specify a time period or cost center. +You must authenticate your request to this endpoint. -### Calculating {% data variables.product.prodname_actions %} information from the new response data +**Example using curl** -Example of the previous response - -```json -{"total_minutes_used": 305, "total_paid_minutes_used": 0, "included_minutes": 3000, "minutes_used_breakdown": { "UBUNTU": 205, "MACOS": 10, "WINDOWS": 90 } } +```bash +curl -L \ + -H "Authorization: Bearer $GITHUB_TOKEN" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/enterprises/ENTERPRISE/settings/billing/usage/summary ``` -Example of the new response +Replace `ENTERPRISE` with the enterprise slug and set the `GITHUB_TOKEN` environment variable to a {% data variables.product.pat_generic %} with the required billing permissions. + +**Example using the {% data variables.product.prodname_cli %}** -```json -{ "usageItems": [ { "date": "2023-08-01", "product": "Actions", "sku": "Actions Linux", "quantity": 100, "unitType": "minutes", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example"} ] } +```bash +gh api \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /enterprises/ENTERPRISE/settings/billing/usage/summary ``` -To get the same values from the new response data: +This endpoint returns aggregated usage data for all paid products for the current year by default. Each entry includes information such as the product, unit type, quantity used, and billed amount. -{% rowheaders %} +You can use the same approach to retrieve usage summaries for an organization or user by calling the equivalent endpoint for that account level. -| Previous property | Calculate from new API response | -|------ |----------- | -| `total_minutes_used` | | -| `total_paid_minutes_used`| This is now represented as a $ amount via `netAmount`.| -| `included_minutes` | This is now represented as a $ amount via `discountAmount`.| -| `minutes_used_breakdown` | | +### Retrieve premium request usage -{% endrowheaders %} +If you need to report specifically on premium request consumption, use the `premium_request/usage` endpoint for the same account level. This endpoint provides additional details such as included usage, billed overages, and remaining quota. -### Calculating {% data variables.product.prodname_registry %} information from the new response data +In the next step, you’ll learn how to filter usage data by time period or cost center so you can generate more targeted reports. -Example of the previous response +## Step 3: Filter usage data by time period or cost center -```json -{ "total_gigabytes_bandwidth_used": 50, "total_paid_gigabytes_bandwidth_used": 40, "included_gigabytes_bandwidth": 10 } -``` +By default, usage summary endpoints return data for the **current year**. To generate more targeted reports or analyze trends over time, you can filter usage data using query parameters. + +### Filter by time period + +You can limit the usage data returned by specifying one or more of the following query parameters: + +* `year` +* `month` +* `day` +* `hour` -Example of the new response +For example, to retrieve usage data for a specific month, include the `year` and `month` parameters in your request: -```json -{ "usageItems": [ { "date": "2023-08-01", "product": "Packages", "sku": "Packages data transfer", "quantity": 100, "unitType": "gigabytes", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example" } ] } + ```http +GET /enterprises/{enterprise}/settings/billing/usage/summary?year=2024&month=12 ``` -{% rowheaders %} +Filtering by time period is useful when you want to: -| Previous property | Calculate from new API response | -|------ |----------- | -| `total_gigabytes_bandwidth_used` | | -| `total_paid_gigabytes_bandwidth_used`| This is now represented as a $ amount via `netAmount`. | -| `included_gigabytes_bandwidth` | This is now represented as a $ amount via `discountAmount`. | +* Generate monthly or daily usage reports +* Compare usage before and after a change, such as enabling a new feature +* Reconcile usage with invoices for a specific billing period -{% endrowheaders %} +### Filter by cost center (enterprise only) -### Calculating shared storage information from the new response data +If you’re retrieving enterprise-level usage data, you can also filter results by cost center using the `cost_center_id` query parameter. -Example of the previous response +Filtering by cost center allows you to: -```json -{ "days_left_in_billing_cycle": 20, "estimated_paid_storage_for_month": 15, "estimated_storage_for_month": 40 } -``` +* Attribute usage and costs to specific teams or business units +* Generate cost center–specific reports for finance or leadership stakeholders -Example of the new response +Cost center filtering is available only for enterprise usage summary endpoints. -```json -{ "usageItems": [ { "date": "2023-08-01", "product": "Packages", "sku": "Packages storage", "quantity": 100, "unitType": "GigabyteHours", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example" } ] } -``` +In the next step, you’ll learn how to automate these API calls to generate recurring usage reports. + +## Step 4: Automate recurring usage reports + +Once you’ve identified the usage data you want to collect and how to filter it, you can automate your reporting by running the same API requests on a recurring schedule. + +Common automation patterns include: + +* Running scheduled API requests (for example, daily or monthly) to collect usage data +* Storing the results in an internal system such as a database, spreadsheet, or BI tool +* Using the data to monitor trends, detect changes in usage, or support cost reviews + +When automating reports, consistency matters. Use the same reporting level, filters, and time ranges each time so that usage trends are comparable over time. + +For example, you might: + +* Run a monthly enterprise-level usage summary to track overall spend +* Generate cost center–specific reports for internal chargeback or showback +* Monitor usage growth after enabling new paid features + +In the next step, you’ll learn how to interpret the usage and cost fields returned by the API so you can turn raw data into meaningful insights. + +## Step 5: Interpret usage and cost fields in the API response + +The usage summary response includes both **usage** and **cost** information. Understanding how these fields relate to each other helps you interpret spend, included usage, and billed overages. + +Each usage item includes: + +* A **quantity**, which represents the amount of usage for a specific product and unit type +* A **netAmount**, which represents the billed cost for that usage +* A **discountAmount**, which represents usage covered by included quotas or discounts + +In general: + +* Use **quantity** to understand how much of a product was consumed +* Use **netAmount** to understand what was billed +* Use **discountAmount** to understand how much usage was included or discounted + +For example, a high quantity with a low netAmount may indicate that most usage was covered by included quotas, while a rising netAmount over time may indicate increased paid usage. + +Different products report usage using different unit types (such as minutes, gigabytes, or requests). To calculate product-specific metrics or reproduce values from the previous billing platform, you may need to filter usage items by product and unit type and aggregate the results. Detailed examples are available in the reference documentation linked in the next step. -{% rowheaders %} +## Step 6: Calculate product-specific usage metrics -| Previous property | Calculate from new API response | -|------ |----------- | -| `days_left_in_billing_cycle` | Not available. This information can be inferred by subtracting the current day of the month from the number of days in the current month. | -| `estimated_paid_storage_for_month`| This is now represented as a $ amount via `netAmount`.

Prerequisite: pass the `month` and `year` query parameters.

For Actions storage For Packages storage | -| `estimated_storage_for_month` | Prerequisite: pass the `month` and `year` query parameters.

For Actions storage For Packages storage | +In some cases, you may need to calculate product-specific usage metrics from the usage summary response. This is most relevant if you want to generate custom reports for a specific product or reproduce values used in legacy reporting. -{% endrowheaders %} +To calculate these metrics, you typically filter usage items by `product` and `unitType`, then aggregate fields such as `quantity`, `netAmount`, and `discountAmount`. - +For detailed examples and product-specific calculations, see [AUTOTITLE](/billing/reference/previous-billing-platform-endpoints). diff --git a/content/code-security/code-quality/concepts/index.md b/content/code-security/code-quality/concepts/index.md deleted file mode 100644 index e5f79fa0cff0..000000000000 --- a/content/code-security/code-quality/concepts/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Concepts for GitHub Code Quality -shortTitle: Concepts -allowTitleToDifferFromFilename: true -intro: 'Discover how {% data variables.product.prodname_code_quality %} works, its core features, and key terms.' -versions: - feature: code-quality -topics: - - Code Quality -children: - - /about-code-quality -contentType: concepts ---- \ No newline at end of file diff --git a/content/code-security/code-quality/index.md b/content/code-security/code-quality/index.md index 072501794b5d..9de45c0917bf 100644 --- a/content/code-security/code-quality/index.md +++ b/content/code-security/code-quality/index.md @@ -8,7 +8,6 @@ topics: - Code Quality children: - /get-started - - /concepts - /how-tos - /reference - /tutorials diff --git a/content/code-security/code-scanning/enabling-code-scanning/index.md b/content/code-security/code-scanning/enabling-code-scanning/index.md index cb3b69415318..38b2b6825a78 100644 --- a/content/code-security/code-scanning/enabling-code-scanning/index.md +++ b/content/code-security/code-scanning/enabling-code-scanning/index.md @@ -1,7 +1,7 @@ --- title: Enabling code scanning shortTitle: Enable code scanning -intro: 'You can quickly and easily secure your code with default setup for {% data variables.product.prodname_code_scanning %}.' +intro: You can quickly and easily secure your code with default setup for {% data variables.product.prodname_code_scanning %}. product: '{% data reusables.gated-features.code-scanning %}' versions: fpt: '*' @@ -13,6 +13,6 @@ topics: - CodeQL children: - /configuring-default-setup-for-code-scanning - - /evaluating-default-setup-for-code-scanning - /configuring-default-setup-for-code-scanning-at-scale --- + diff --git a/content/code-security/code-scanning/index.md b/content/code-security/code-scanning/index.md index eb388fe9d6b7..da6ebff993a2 100644 --- a/content/code-security/code-scanning/index.md +++ b/content/code-security/code-scanning/index.md @@ -17,7 +17,6 @@ topics: - Code scanning - CodeQL children: - - /introduction-to-code-scanning - /enabling-code-scanning - /creating-an-advanced-setup-for-code-scanning - /managing-code-scanning-alerts diff --git a/content/code-security/code-scanning/integrating-with-code-scanning/index.md b/content/code-security/code-scanning/integrating-with-code-scanning/index.md index f23fd5a5066d..ecb777d9bebf 100644 --- a/content/code-security/code-scanning/integrating-with-code-scanning/index.md +++ b/content/code-security/code-scanning/integrating-with-code-scanning/index.md @@ -1,7 +1,7 @@ --- title: Integrating with code scanning shortTitle: Integrate with code scanning -intro: 'You can integrate third-party code analysis tools with {% data variables.product.prodname_dotcom %} {% data variables.product.prodname_code_scanning %} by uploading data as SARIF files.' +intro: You can integrate third-party code analysis tools with {% data variables.product.prodname_dotcom %} {% data variables.product.prodname_code_scanning %} by uploading data as SARIF files. product: '{% data reusables.gated-features.code-scanning %}' redirect_from: - /github/finding-security-vulnerabilities-and-errors-in-your-code/managing-results-from-code-scanning @@ -16,8 +16,8 @@ topics: - Code scanning - Integration children: - - /about-integration-with-code-scanning - /using-code-scanning-with-your-existing-ci-system - /uploading-a-sarif-file-to-github - /sarif-support-for-code-scanning --- + diff --git a/content/code-security/code-scanning/introduction-to-code-scanning/index.md b/content/code-security/code-scanning/introduction-to-code-scanning/index.md deleted file mode 100644 index 18fa779c08eb..000000000000 --- a/content/code-security/code-scanning/introduction-to-code-scanning/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Introduction to code scanning -shortTitle: Introduction -intro: 'Learn what {% data variables.product.prodname_code_scanning %} is, how it helps you secure your code, and what {% data variables.product.prodname_code_scanning %} tools are available.' -product: '{% data reusables.gated-features.code-scanning %}' -redirect_from: - - /github/finding-security-vulnerabilities-and-errors-in-your-code/automatically-scanning-your-code-for-vulnerabilities-and-errors - - /code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors - - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors -versions: - fpt: '*' - ghec: '*' - ghes: '*' -topics: - - Code Security - - Code scanning - - CodeQL -children: - - /about-code-scanning - - /about-code-scanning-with-codeql ---- diff --git a/content/code-security/code-scanning/managing-code-scanning-alerts/index.md b/content/code-security/code-scanning/managing-code-scanning-alerts/index.md index 301fdb8042e2..64633a204106 100644 --- a/content/code-security/code-scanning/managing-code-scanning-alerts/index.md +++ b/content/code-security/code-scanning/managing-code-scanning-alerts/index.md @@ -1,7 +1,7 @@ --- title: Managing code scanning alerts shortTitle: Manage alerts -intro: 'Learn how to triage, track, and resolve {% data variables.product.prodname_code_scanning %} alerts.' +intro: Learn how to triage, track, and resolve {% data variables.product.prodname_code_scanning %} alerts. product: '{% data reusables.gated-features.code-scanning %}' versions: fpt: '*' @@ -15,7 +15,6 @@ redirect_from: - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/tracking-code-scanning-alerts-in-issues-using-task-lists - /code-security/code-scanning/managing-code-scanning-alerts/tracking-code-scanning-alerts-in-issues-using-task-lists children: - - /about-code-scanning-alerts - /responsible-use-autofix-code-scanning - /disabling-autofix-for-code-scanning - /assessing-code-scanning-alerts-for-your-repository @@ -24,3 +23,4 @@ children: - /fixing-alerts-in-security-campaign - /triaging-code-scanning-alerts-in-pull-requests --- + diff --git a/content/code-security/code-scanning/managing-your-code-scanning-configuration/index.md b/content/code-security/code-scanning/managing-your-code-scanning-configuration/index.md index be0d34cbce84..a949ccda25ad 100644 --- a/content/code-security/code-scanning/managing-your-code-scanning-configuration/index.md +++ b/content/code-security/code-scanning/managing-your-code-scanning-configuration/index.md @@ -14,7 +14,6 @@ topics: children: - /about-the-tool-status-page - /editing-your-configuration-of-default-setup - - /codeql-query-suites - /set-code-scanning-merge-protection - /enabling-delegated-alert-dismissal-for-code-scanning - /configuring-larger-runners-for-default-setup diff --git a/content/code-security/codeql-cli/getting-started-with-the-codeql-cli/index.md b/content/code-security/codeql-cli/getting-started-with-the-codeql-cli/index.md index 93dd23013097..bd6aa7781210 100644 --- a/content/code-security/codeql-cli/getting-started-with-the-codeql-cli/index.md +++ b/content/code-security/codeql-cli/getting-started-with-the-codeql-cli/index.md @@ -1,6 +1,6 @@ --- title: Getting started with the CodeQL CLI -intro: 'You can use the {% data variables.product.prodname_codeql_cli %} to locally develop, test and run {% data variables.product.prodname_codeql %} queries on software projects.' +intro: You can use the {% data variables.product.prodname_codeql_cli %} to locally develop, test and run {% data variables.product.prodname_codeql %} queries on software projects. shortTitle: Getting started product: '{% data reusables.gated-features.codeql %}' versions: @@ -12,7 +12,6 @@ topics: - Code scanning - CodeQL children: - - /about-the-codeql-cli - /setting-up-the-codeql-cli - /preparing-your-code-for-codeql-analysis - /analyzing-your-code-with-codeql-queries @@ -21,3 +20,4 @@ children: redirect_from: - /code-security/codeql-cli/using-the-codeql-cli --- + diff --git a/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/index.md b/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/index.md index 9abdd52bd070..c5ef5a83802e 100644 --- a/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/index.md +++ b/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/index.md @@ -1,6 +1,6 @@ --- title: Using the advanced functionality of the CodeQL CLI -intro: 'You can use the {% data variables.product.prodname_codeql_cli %} to locally develop, test and run {% data variables.product.prodname_codeql %} queries on software projects.' +intro: You can use the {% data variables.product.prodname_codeql_cli %} to locally develop, test and run {% data variables.product.prodname_codeql %} queries on software projects. product: '{% data reusables.gated-features.codeql %}' shortTitle: Advanced functionality versions: @@ -13,7 +13,6 @@ topics: - CodeQL children: - /advanced-setup-of-the-codeql-cli - - /about-codeql-workspaces - /using-custom-queries-with-the-codeql-cli - /creating-codeql-query-suites - /testing-custom-queries @@ -21,7 +20,6 @@ children: - /creating-and-working-with-codeql-packs - /publishing-and-using-codeql-packs - /specifying-command-options-in-a-codeql-configuration-file - - /query-reference-files - /sarif-output - /csv-output - /extractor-options @@ -30,3 +28,4 @@ children: redirect_from: - /code-security/codeql-cli/codeql-cli-reference --- + diff --git a/content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/index.md b/content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/index.md index 10ae6348e145..d0a5aa7a3337 100644 --- a/content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/index.md +++ b/content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/index.md @@ -1,7 +1,7 @@ --- title: Getting started with the {% data variables.product.prodname_codeql %} for Visual Studio Code extension shortTitle: Getting started -intro: 'The {% data variables.product.prodname_codeql %} extension for {% data variables.product.prodname_vscode %} makes it easy to run a query to find problems in codebases.' +intro: The {% data variables.product.prodname_codeql %} extension for {% data variables.product.prodname_vscode %} makes it easy to run a query to find problems in codebases. product: '{% data reusables.gated-features.codeql %}' versions: fpt: '*' @@ -12,7 +12,6 @@ topics: - Code scanning - CodeQL children: - - /about-codeql-for-vs-code - /installing-codeql-for-vs-code - /managing-codeql-databases - /running-codeql-queries @@ -21,3 +20,4 @@ children: redirect_from: - /code-security/codeql-for-vs-code/setting-up-codeql-in-visual-studio-code --- + diff --git a/content/code-security/code-quality/concepts/about-code-quality.md b/content/code-security/concepts/about-code-quality.md similarity index 93% rename from content/code-security/code-quality/concepts/about-code-quality.md rename to content/code-security/concepts/about-code-quality.md index 6d9b4bcd87b3..848e30695bb9 100644 --- a/content/code-security/code-quality/concepts/about-code-quality.md +++ b/content/code-security/concepts/about-code-quality.md @@ -1,13 +1,17 @@ --- title: About GitHub Code Quality -shortTitle: About Code Quality -intro: 'Use {% data variables.product.prodname_code_quality %} to flag code quality issues in pull requests and repository scans, apply {% data variables.product.prodname_copilot_short %}-powered autofixes, and enforce standards with rulesets.' +shortTitle: GitHub Code Quality +allowTitleToDifferFromFilename: true +intro: Use {% data variables.product.prodname_code_quality %} to flag code quality issues in pull requests and repository scans, apply {% data variables.product.prodname_copilot_short %}-powered autofixes, and enforce standards with rulesets. product: '{% data reusables.gated-features.code-quality-availability %}' versions: feature: code-quality topics: - Code Quality contentType: concepts +redirect_from: + - /code-security/code-quality/concepts/about-code-quality + - /code-security/code-quality/concepts --- {% data reusables.code-quality.code-quality-preview-note %} diff --git a/content/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts.md b/content/code-security/concepts/code-scanning/about-code-scanning-alerts.md similarity index 98% rename from content/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts.md rename to content/code-security/concepts/code-scanning/about-code-scanning-alerts.md index d42823b1d5da..6b43cf98914d 100644 --- a/content/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts.md +++ b/content/code-security/concepts/code-scanning/about-code-scanning-alerts.md @@ -1,5 +1,6 @@ --- title: About code scanning alerts +shortTitle: Code scanning alerts intro: Learn about the different types of code scanning alerts and the information that helps you understand the problem each alert highlights. permissions: '{% data reusables.permissions.code-scanning-all-alerts %}' product: '{% data reusables.gated-features.code-scanning %}' @@ -9,11 +10,13 @@ versions: ghec: '*' redirect_from: - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-alerts + - /code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts type: overview topics: - Code Security - Code scanning - CodeQL +contentType: concepts --- {% data reusables.code-scanning.enterprise-enable-code-scanning %} diff --git a/content/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning.md b/content/code-security/concepts/code-scanning/about-code-scanning.md similarity index 94% rename from content/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning.md rename to content/code-security/concepts/code-scanning/about-code-scanning.md index bb7427c590eb..eb3509fbc2f7 100644 --- a/content/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning.md +++ b/content/code-security/concepts/code-scanning/about-code-scanning.md @@ -1,6 +1,7 @@ --- title: About code scanning -intro: 'You can use {% data variables.product.prodname_code_scanning %} to find security vulnerabilities and errors in the code for your project on {% data variables.product.prodname_dotcom %}.' +shortTitle: Introduction +intro: You can use {% data variables.product.prodname_code_scanning %} to find security vulnerabilities and errors in the code for your project on {% data variables.product.prodname_dotcom %}. product: '{% data reusables.gated-features.code-scanning %}' redirect_from: - /github/managing-security-vulnerabilities/about-automated-code-scanning @@ -9,6 +10,7 @@ redirect_from: - /code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning - /github/finding-security-vulnerabilities-and-errors-in-your-code/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning + - /code-security/code-scanning/introduction-to-code-scanning/about-code-scanning versions: fpt: '*' ghes: '*' @@ -17,6 +19,7 @@ type: overview topics: - Code Security - Code scanning +contentType: concepts --- {% data reusables.code-scanning.enterprise-enable-code-scanning %} diff --git a/content/code-security/code-scanning/integrating-with-code-scanning/about-integration-with-code-scanning.md b/content/code-security/concepts/code-scanning/about-integration-with-code-scanning.md similarity index 84% rename from content/code-security/code-scanning/integrating-with-code-scanning/about-integration-with-code-scanning.md rename to content/code-security/concepts/code-scanning/about-integration-with-code-scanning.md index 897f4ceeccd8..a2c532014bd9 100644 --- a/content/code-security/code-scanning/integrating-with-code-scanning/about-integration-with-code-scanning.md +++ b/content/code-security/concepts/code-scanning/about-integration-with-code-scanning.md @@ -1,13 +1,14 @@ --- title: About integration with code scanning -shortTitle: About integration -intro: 'You can perform {% data variables.product.prodname_code_scanning %} externally and then display the results in {% data variables.product.prodname_dotcom %}, or configure webhooks that listen to {% data variables.product.prodname_code_scanning %} activity in your repository.' +shortTitle: Integration with code scanning +intro: You can perform {% data variables.product.prodname_code_scanning %} externally and then display the results in {% data variables.product.prodname_dotcom %}, or configure webhooks that listen to {% data variables.product.prodname_code_scanning %} activity in your repository. product: '{% data reusables.gated-features.code-scanning %}' redirect_from: - /github/finding-security-vulnerabilities-and-errors-in-your-code/about-integration-with-code-scanning - /code-security/secure-coding/about-integration-with-code-scanning - /code-security/secure-coding/integrating-with-code-scanning/about-integration-with-code-scanning - /github/finding-security-vulnerabilities-and-errors-in-your-code/integrating-with-code-scanning/about-integration-with-code-scanning + - /code-security/code-scanning/integrating-with-code-scanning/about-integration-with-code-scanning versions: fpt: '*' ghes: '*' @@ -18,6 +19,7 @@ topics: - Code scanning - Webhooks - Integration +contentType: concepts --- ## About integration with code scanning diff --git a/content/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning-with-codeql.md b/content/code-security/concepts/code-scanning/codeql/about-code-scanning-with-codeql.md similarity index 94% rename from content/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning-with-codeql.md rename to content/code-security/concepts/code-scanning/codeql/about-code-scanning-with-codeql.md index 715d80e42d21..ee705fb9b6e1 100644 --- a/content/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning-with-codeql.md +++ b/content/code-security/concepts/code-scanning/codeql/about-code-scanning-with-codeql.md @@ -1,11 +1,12 @@ --- title: About code scanning with CodeQL -shortTitle: About CodeQL code scanning -intro: 'You can use {% data variables.product.prodname_codeql %} to identify vulnerabilities and errors in your code. The results are shown as {% data variables.product.prodname_code_scanning %} alerts in {% data variables.product.prodname_dotcom %}.' +shortTitle: CodeQL code scanning +intro: You can use {% data variables.product.prodname_codeql %} to identify vulnerabilities and errors in your code. The results are shown as {% data variables.product.prodname_code_scanning %} alerts in {% data variables.product.prodname_dotcom %}. product: '{% data reusables.gated-features.code-scanning %}' redirect_from: - /code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning-with-codeql + - /code-security/code-scanning/introduction-to-code-scanning/about-code-scanning-with-codeql versions: fpt: '*' ghes: '*' @@ -15,6 +16,7 @@ topics: - Code Security - Code scanning - CodeQL +contentType: concepts --- {% data reusables.code-scanning.enterprise-enable-code-scanning %} diff --git a/content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/about-codeql-for-vs-code.md b/content/code-security/concepts/code-scanning/codeql/about-codeql-for-vs-code.md similarity index 92% rename from content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/about-codeql-for-vs-code.md rename to content/code-security/concepts/code-scanning/codeql/about-codeql-for-vs-code.md index aa5f947f004d..661406633f44 100644 --- a/content/code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/about-codeql-for-vs-code.md +++ b/content/code-security/concepts/code-scanning/codeql/about-codeql-for-vs-code.md @@ -1,6 +1,6 @@ --- title: About CodeQL for VS Code -shortTitle: About the extension +shortTitle: CodeQL for VS Code versions: fpt: '*' ghec: '*' @@ -11,9 +11,11 @@ topics: - Code scanning - CodeQL type: reference -intro: 'You can write, run, and test {% data variables.product.prodname_codeql %} queries inside {% data variables.product.prodname_vscode %} with the {% data variables.product.prodname_codeql %} extension.' +intro: You can write, run, and test {% data variables.product.prodname_codeql %} queries inside {% data variables.product.prodname_vscode %} with the {% data variables.product.prodname_codeql %} extension. redirect_from: - /code-security/codeql-for-vs-code/about-codeql-for-visual-studio-code + - /code-security/codeql-for-vs-code/getting-started-with-codeql-for-vs-code/about-codeql-for-vs-code +contentType: concepts --- ## About {% data variables.product.prodname_codeql %} for {% data variables.product.prodname_vscode %} diff --git a/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces.md b/content/code-security/concepts/code-scanning/codeql/about-codeql-workspaces.md similarity index 98% rename from content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces.md rename to content/code-security/concepts/code-scanning/codeql/about-codeql-workspaces.md index bcc3465277bd..e31017373b11 100644 --- a/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces.md +++ b/content/code-security/concepts/code-scanning/codeql/about-codeql-workspaces.md @@ -1,5 +1,6 @@ --- title: About CodeQL workspaces +shortTitle: CodeQL workspaces intro: '{% data variables.product.prodname_codeql %} workspaces allow you to develop and maintain a group of {% data variables.product.prodname_codeql %} packs that depend on each other.' product: '{% data reusables.gated-features.codeql %}' versions: @@ -13,6 +14,8 @@ topics: redirect_from: - /code-security/codeql-cli/about-codeql-workspaces - /code-security/codeql-cli/codeql-cli-reference/about-codeql-workspaces + - /code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces +contentType: concepts --- ## About {% data variables.product.prodname_codeql %} workspaces diff --git a/content/code-security/codeql-cli/getting-started-with-the-codeql-cli/about-the-codeql-cli.md b/content/code-security/concepts/code-scanning/codeql/about-the-codeql-cli.md similarity index 95% rename from content/code-security/codeql-cli/getting-started-with-the-codeql-cli/about-the-codeql-cli.md rename to content/code-security/concepts/code-scanning/codeql/about-the-codeql-cli.md index 0ea0c8df55f5..e11ce95aed6b 100644 --- a/content/code-security/codeql-cli/getting-started-with-the-codeql-cli/about-the-codeql-cli.md +++ b/content/code-security/concepts/code-scanning/codeql/about-the-codeql-cli.md @@ -1,6 +1,7 @@ --- title: About the CodeQL CLI -intro: 'You can use the {% data variables.product.prodname_codeql_cli %} to run {% data variables.product.prodname_codeql %} processes locally on software projects or to generate {% data variables.product.prodname_code_scanning %} results for upload to {% data variables.product.github %}.' +shortTitle: CodeQL CLI +intro: You can use the {% data variables.product.prodname_codeql_cli %} to run {% data variables.product.prodname_codeql %} processes locally on software projects or to generate {% data variables.product.prodname_code_scanning %} results for upload to {% data variables.product.github %}. product: '{% data reusables.gated-features.codeql %}' versions: fpt: '*' @@ -22,6 +23,8 @@ redirect_from: - /github/finding-security-vulnerabilities-and-errors-in-your-code/using-codeql-code-scanning-with-your-existing-ci-system/troubleshooting-codeql-code-scanning-in-your-ci-system - /code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system/migrating-from-the-codeql-runner-to-codeql-cli - /code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system/about-codeql-code-scanning-in-your-ci-system + - /code-security/codeql-cli/getting-started-with-the-codeql-cli/about-the-codeql-cli +contentType: concepts --- Software developers and security researchers can secure their code diff --git a/content/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites.md b/content/code-security/concepts/code-scanning/codeql/codeql-query-suites.md similarity index 97% rename from content/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites.md rename to content/code-security/concepts/code-scanning/codeql/codeql-query-suites.md index 5d890931aeaf..d5d25ca262a9 100644 --- a/content/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites.md +++ b/content/code-security/concepts/code-scanning/codeql/codeql-query-suites.md @@ -10,11 +10,12 @@ versions: redirect_from: - /code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/built-in-codeql-query-suites - /code-security/code-scanning/managing-your-code-scanning-configuration/built-in-codeql-query-suites + - /code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites type: reference topics: - Code scanning - CodeQL -contentType: other +contentType: concepts --- ## About {% data variables.product.prodname_codeql %} query suites diff --git a/content/code-security/concepts/code-scanning/codeql/index.md b/content/code-security/concepts/code-scanning/codeql/index.md new file mode 100644 index 000000000000..91accd1bae58 --- /dev/null +++ b/content/code-security/concepts/code-scanning/codeql/index.md @@ -0,0 +1,19 @@ +--- +title: Concepts for CodeQL +shortTitle: CodeQL +intro: Understand the core concepts behind {% data variables.product.prodname_codeql %} and how it helps you find vulnerabilities and errors in your code. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - Code scanning +contentType: concepts +children: + - /about-code-scanning-with-codeql + - /codeql-query-suites + - /about-the-codeql-cli + - /about-codeql-for-vs-code + - /about-codeql-workspaces + - /query-reference-files +--- diff --git a/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/query-reference-files.md b/content/code-security/concepts/code-scanning/codeql/query-reference-files.md similarity index 95% rename from content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/query-reference-files.md rename to content/code-security/concepts/code-scanning/codeql/query-reference-files.md index 74b51325aaeb..7a10739f5b56 100644 --- a/content/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/query-reference-files.md +++ b/content/code-security/concepts/code-scanning/codeql/query-reference-files.md @@ -13,6 +13,8 @@ topics: redirect_from: - /code-security/codeql-cli/query-reference-files - /code-security/codeql-cli/codeql-cli-reference/query-reference-files + - /code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/query-reference-files +contentType: concepts --- ## About query reference files diff --git a/content/code-security/code-scanning/enabling-code-scanning/evaluating-default-setup-for-code-scanning.md b/content/code-security/concepts/code-scanning/evaluating-default-setup-for-code-scanning.md similarity index 93% rename from content/code-security/code-scanning/enabling-code-scanning/evaluating-default-setup-for-code-scanning.md rename to content/code-security/concepts/code-scanning/evaluating-default-setup-for-code-scanning.md index e4f8d1d72ef1..8f698ed0062d 100644 --- a/content/code-security/code-scanning/enabling-code-scanning/evaluating-default-setup-for-code-scanning.md +++ b/content/code-security/concepts/code-scanning/evaluating-default-setup-for-code-scanning.md @@ -1,7 +1,7 @@ --- title: Evaluating default setup for code scanning shortTitle: Evaluate code scanning -intro: 'Learn how to assess how code scanning is working for you, and how you can customize your setup to best meet your needs.' +intro: Learn how to assess how code scanning is working for you, and how you can customize your setup to best meet your needs. permissions: '{% data reusables.permissions.security-repo-enable %}' type: how_to topics: @@ -11,6 +11,9 @@ versions: fpt: '*' ghes: '*' ghec: '*' +redirect_from: + - /code-security/code-scanning/enabling-code-scanning/evaluating-default-setup-for-code-scanning +contentType: concepts --- When you first start using {% data variables.product.prodname_code_scanning %}, you'll likely use default setup. This guide describes how to evaluate how default setup for {% data variables.product.prodname_code_scanning %} is working for you, and what steps to take if something isn't working as you expect. This guide also describes how you can customize {% data variables.product.prodname_code_scanning %} if you find that you have a specific use case that your new configuration doesn't fit. diff --git a/content/code-security/concepts/code-scanning/index.md b/content/code-security/concepts/code-scanning/index.md new file mode 100644 index 000000000000..2620e78e8208 --- /dev/null +++ b/content/code-security/concepts/code-scanning/index.md @@ -0,0 +1,21 @@ +--- +title: Concepts for code scanning +shortTitle: Code scanning +intro: Learn core concepts for {% data variables.product.github %}'s code scanning features. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +redirect_from: + - /code-security/code-scanning/introduction-to-code-scanning +topics: + - Code Security + - Code scanning +contentType: concepts +children: + - /about-code-scanning + - /about-code-scanning-alerts + - /evaluating-default-setup-for-code-scanning + - /about-integration-with-code-scanning + - /codeql +--- diff --git a/content/code-security/concepts/index.md b/content/code-security/concepts/index.md index e363dc85f881..edd87776204a 100644 --- a/content/code-security/concepts/index.md +++ b/content/code-security/concepts/index.md @@ -16,5 +16,9 @@ topics: - Dependabot contentType: concepts children: - - /vulnerability-reporting-and-management + - /secret-security + - /code-scanning + - /about-code-quality - supply-chain-security + - /vulnerability-reporting-and-management + - /security-at-scale diff --git a/content/code-security/secret-scanning/managing-alerts-from-secret-scanning/about-alerts.md b/content/code-security/concepts/secret-security/about-alerts.md similarity index 95% rename from content/code-security/secret-scanning/managing-alerts-from-secret-scanning/about-alerts.md rename to content/code-security/concepts/secret-security/about-alerts.md index 71804d1c4919..ef7df24a7e01 100644 --- a/content/code-security/secret-scanning/managing-alerts-from-secret-scanning/about-alerts.md +++ b/content/code-security/concepts/secret-security/about-alerts.md @@ -1,6 +1,6 @@ --- title: About secret scanning alerts -intro: 'Learn about the different types of {% data variables.secret-scanning.alerts %}.' +intro: Learn about the different types of {% data variables.secret-scanning.alerts %}. permissions: '{% data reusables.permissions.secret-scanning-alerts %}' product: '{% data reusables.gated-features.secret-scanning %}' versions: @@ -13,8 +13,11 @@ topics: - Secret Protection - Alerts - Repositories -shortTitle: About alerts +shortTitle: Secret scanning alerts allowTitleToDifferFromFilename: true +redirect_from: + - /code-security/secret-scanning/managing-alerts-from-secret-scanning/about-alerts +contentType: concepts --- ## About types of alerts diff --git a/content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/about-delegated-bypass-for-push-protection.md b/content/code-security/concepts/secret-security/about-delegated-bypass-for-push-protection.md similarity index 90% rename from content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/about-delegated-bypass-for-push-protection.md rename to content/code-security/concepts/secret-security/about-delegated-bypass-for-push-protection.md index ed96fac24dd6..fe34526b3d12 100644 --- a/content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/about-delegated-bypass-for-push-protection.md +++ b/content/code-security/concepts/secret-security/about-delegated-bypass-for-push-protection.md @@ -12,7 +12,10 @@ topics: - Secret Protection - Alerts - Repositories -shortTitle: About delegated bypass +shortTitle: Delegated bypass +redirect_from: + - /code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/about-delegated-bypass-for-push-protection +contentType: concepts --- ## About delegated bypass for push protection diff --git a/content/code-security/secret-scanning/introduction/about-push-protection.md b/content/code-security/concepts/secret-security/about-push-protection.md similarity index 95% rename from content/code-security/secret-scanning/introduction/about-push-protection.md rename to content/code-security/concepts/secret-security/about-push-protection.md index 923f97fbb630..6e7f4c555c91 100644 --- a/content/code-security/secret-scanning/introduction/about-push-protection.md +++ b/content/code-security/concepts/secret-security/about-push-protection.md @@ -1,6 +1,6 @@ --- title: About push protection -intro: 'Push protection blocks contributors from pushing secrets to a repository and generates an alert whenever a contributor bypasses the block.{% ifversion secret-scanning-push-protection-for-users %} Push protection can be applied at the repository, organization, and user account level{% else %} You can apply push protection at repository or organization level{% endif %}.' +intro: Push protection blocks contributors from pushing secrets to a repository and generates an alert whenever a contributor bypasses the block.{% ifversion secret-scanning-push-protection-for-users %} Push protection can be applied at the repository, organization, and user account level{% else %} You can apply push protection at repository or organization level{% endif %}. product: '{% data reusables.gated-features.push-protection-for-repos %}' versions: fpt: '*' @@ -10,6 +10,7 @@ redirect_from: - /early-access/code-security/secret-scanning/protecting-pushes-with-secret-scanning - /code-security/secret-scanning/protecting-pushes-with-secret-scanning - /code-security/secret-scanning/push-protection-for-repositories-and-organizations + - /code-security/secret-scanning/introduction/about-push-protection type: overview topics: - Secret scanning @@ -17,6 +18,7 @@ topics: - Alerts - Repositories shortTitle: Push protection +contentType: concepts --- ## About push protection diff --git a/content/code-security/secret-scanning/introduction/about-secret-scanning-for-partners.md b/content/code-security/concepts/secret-security/about-secret-scanning-for-partners.md similarity index 81% rename from content/code-security/secret-scanning/introduction/about-secret-scanning-for-partners.md rename to content/code-security/concepts/secret-security/about-secret-scanning-for-partners.md index d69f24a76854..210dd8d38236 100644 --- a/content/code-security/secret-scanning/introduction/about-secret-scanning-for-partners.md +++ b/content/code-security/concepts/secret-security/about-secret-scanning-for-partners.md @@ -1,6 +1,6 @@ --- title: About secret scanning for partners -intro: 'When {% data variables.product.prodname_secret_scanning %} detects authentication details for a service provider in a public repository on {% data variables.product.prodname_dotcom %}, an alert is sent directly to the provider. This allows service providers who are {% data variables.product.prodname_dotcom %} partners to promptly take action to secure their systems.' +intro: When {% data variables.product.prodname_secret_scanning %} detects authentication details for a service provider in a public repository on {% data variables.product.prodname_dotcom %}, an alert is sent directly to the provider. This allows service providers who are {% data variables.product.prodname_dotcom %} partners to promptly take action to secure their systems. product: '{% data reusables.gated-features.secret-scanning-partner-alerts %}' versions: fpt: '*' @@ -10,6 +10,9 @@ topics: - Secret scanning - Secret Protection shortTitle: Secret scanning for partners +redirect_from: + - /code-security/secret-scanning/introduction/about-secret-scanning-for-partners +contentType: concepts --- ## About {% data variables.secret-scanning.partner_alerts %} diff --git a/content/code-security/secret-scanning/introduction/about-secret-scanning.md b/content/code-security/concepts/secret-security/about-secret-scanning.md similarity index 99% rename from content/code-security/secret-scanning/introduction/about-secret-scanning.md rename to content/code-security/concepts/secret-security/about-secret-scanning.md index 2bbc52e356d1..a74dc758f882 100644 --- a/content/code-security/secret-scanning/introduction/about-secret-scanning.md +++ b/content/code-security/concepts/secret-security/about-secret-scanning.md @@ -12,6 +12,7 @@ redirect_from: - /github/administering-a-repository/about-secret-scanning - /code-security/secret-security/about-secret-scanning - /code-security/secret-scanning/about-secret-scanning + - /code-security/secret-scanning/introduction/about-secret-scanning versions: fpt: '*' ghes: '*' @@ -21,6 +22,7 @@ topics: - Secret scanning - Secret Protection shortTitle: Secret scanning +contentType: concepts --- ## About {% data variables.product.prodname_secret_scanning %} diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-security-with-github.md b/content/code-security/concepts/secret-security/about-secret-security-with-github.md similarity index 89% rename from content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-security-with-github.md rename to content/code-security/concepts/secret-security/about-secret-security-with-github.md index 992648d7dc45..a741c63bebc1 100644 --- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-security-with-github.md +++ b/content/code-security/concepts/secret-security/about-secret-security-with-github.md @@ -1,9 +1,9 @@ --- -title: 'About secret security with GitHub' -shortTitle: 'Secret protection tools' -intro: 'Learn how {% data variables.product.github %}''s security tools can help you identify, remediate, and prevent secret leaks.' +title: About secret security with GitHub +shortTitle: Secret protection tools +intro: Learn how {% data variables.product.github %}'s security tools can help you identify, remediate, and prevent secret leaks. product: '{% data reusables.gated-features.secret-protection %}' -permissions: 'Organizations on {% data variables.product.prodname_team %} or {% data variables.product.prodname_enterprise %}' +permissions: Organizations on {% data variables.product.prodname_team %} or {% data variables.product.prodname_enterprise %} contentType: concepts versions: feature: secret-risk-assessment @@ -15,6 +15,7 @@ topics: - Security redirect_from: - /code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment + - /code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-security-with-github --- {% data variables.product.github %} provides tools to help you understand and address your organization's exposure to leaked secrets: diff --git a/content/code-security/concepts/secret-security/index.md b/content/code-security/concepts/secret-security/index.md new file mode 100644 index 000000000000..1e796d93a9b7 --- /dev/null +++ b/content/code-security/concepts/secret-security/index.md @@ -0,0 +1,22 @@ +--- +title: Concepts for secret security +shortTitle: Secret security +intro: Learn core concepts for {% data variables.product.github %}'s secret security features. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - Secret Protection + - Secret scanning +contentType: concepts +children: + - /about-secret-scanning + - /about-push-protection + - /about-secret-security-with-github + - /about-alerts + - /about-delegated-bypass-for-push-protection + - /about-secret-scanning-for-partners + - /working-with-push-protection-and-the-github-mcp-server + - /working-with-push-protection-from-the-rest-api +--- diff --git a/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-and-the-github-mcp-server.md b/content/code-security/concepts/secret-security/working-with-push-protection-and-the-github-mcp-server.md similarity index 79% rename from content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-and-the-github-mcp-server.md rename to content/code-security/concepts/secret-security/working-with-push-protection-and-the-github-mcp-server.md index 0f857fe6f5db..4b0963eca393 100644 --- a/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-and-the-github-mcp-server.md +++ b/content/code-security/concepts/secret-security/working-with-push-protection-and-the-github-mcp-server.md @@ -1,8 +1,8 @@ --- title: Working with push protection and the GitHub MCP server shortTitle: Push protection and the GitHub MCP server -intro: 'Learn how you are protected from leaking secrets during interactions with the {% data variables.product.github %} MCP server, and how to bypass a push protection block if you need to.' -product: 'Public repositories on {% data variables.product.prodname_dotcom_the_website %}' +intro: Learn how you are protected from leaking secrets during interactions with the {% data variables.product.github %} MCP server, and how to bypass a push protection block if you need to. +product: Public repositories on {% data variables.product.prodname_dotcom_the_website %} permissions: '{% data reusables.permissions.push-protection-resolve-block %}' versions: feature: copilot @@ -13,6 +13,9 @@ topics: - Alerts - Repositories - Copilot +redirect_from: + - /code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-and-the-github-mcp-server +contentType: concepts --- ## About push protection and the {% data variables.product.github %} MCP server diff --git a/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api.md b/content/code-security/concepts/secret-security/working-with-push-protection-from-the-rest-api.md similarity index 80% rename from content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api.md rename to content/code-security/concepts/secret-security/working-with-push-protection-from-the-rest-api.md index 7f765bef0931..20d00f14808a 100644 --- a/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api.md +++ b/content/code-security/concepts/secret-security/working-with-push-protection-from-the-rest-api.md @@ -1,7 +1,7 @@ --- title: Working with push protection from the REST API shortTitle: Push protection from the REST API -intro: 'Learn your options for unblocking your push to {% data variables.product.prodname_dotcom %} using the REST API if {% data variables.product.prodname_secret_scanning %} detects a secret in the content of your API request.' +intro: Learn your options for unblocking your push to {% data variables.product.prodname_dotcom %} using the REST API if {% data variables.product.prodname_secret_scanning %} detects a secret in the content of your API request. permissions: '{% data reusables.permissions.push-protection-resolve-block %}' versions: feature: secret-scanning-push-protection-content-endpoints @@ -11,6 +11,9 @@ topics: - Secret Protection - Alerts - Repositories +redirect_from: + - /code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api +contentType: concepts --- ## About push protection from the REST API diff --git a/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md b/content/code-security/concepts/security-at-scale/about-enabling-security-features-at-scale.md similarity index 94% rename from content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md rename to content/code-security/concepts/security-at-scale/about-enabling-security-features-at-scale.md index adab203f4061..a0018c57f237 100644 --- a/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale.md +++ b/content/code-security/concepts/security-at-scale/about-enabling-security-features-at-scale.md @@ -1,7 +1,7 @@ --- title: About enabling security features at scale -shortTitle: About organization security -intro: 'You can quickly secure your organization at scale with {% data variables.product.prodname_security_configurations %} and {% data variables.product.prodname_global_settings %}.' +shortTitle: Organization security +intro: You can quickly secure your organization at scale with {% data variables.product.prodname_security_configurations %} and {% data variables.product.prodname_global_settings %}. versions: feature: security-configurations topics: @@ -9,6 +9,9 @@ topics: - Secret Protection - Organizations - Security +redirect_from: + - /code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/about-enabling-security-features-at-scale +contentType: concepts --- ## About securing your organization diff --git a/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/about-security-campaigns.md b/content/code-security/concepts/security-at-scale/about-security-campaigns.md similarity index 94% rename from content/code-security/securing-your-organization/fixing-security-alerts-at-scale/about-security-campaigns.md rename to content/code-security/concepts/security-at-scale/about-security-campaigns.md index b2eb14d899b3..69a01484db98 100644 --- a/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/about-security-campaigns.md +++ b/content/code-security/concepts/security-at-scale/about-security-campaigns.md @@ -1,7 +1,7 @@ --- -title: 'About security campaigns' -shortTitle: 'About security campaigns' -intro: 'You can fix security alerts at scale by creating security campaigns and collaborating with developers to burn down your security backlog.' +title: About security campaigns +shortTitle: Security campaigns +intro: You can fix security alerts at scale by creating security campaigns and collaborating with developers to burn down your security backlog. product: '{% data reusables.gated-features.security-campaigns %}' allowTitleToDifferFromFilename: true type: overview @@ -15,6 +15,8 @@ topics: - Secret Protection - Organizations - Security +redirect_from: + - /code-security/securing-your-organization/fixing-security-alerts-at-scale/about-security-campaigns --- Once you have identified security alerts the next step is to identify the most urgent alerts and get them fixed. Security campaigns are a way to group alerts and share them with developers, so you can collaborate to remediate vulnerabilities in the code{% ifversion security-campaigns-secrets %} and any exposed secrets{% endif %}. diff --git a/content/admin/managing-code-security/securing-your-enterprise/about-security-configurations.md b/content/code-security/concepts/security-at-scale/about-security-configurations.md similarity index 92% rename from content/admin/managing-code-security/securing-your-enterprise/about-security-configurations.md rename to content/code-security/concepts/security-at-scale/about-security-configurations.md index 5e2269fe1e97..d79d163110db 100644 --- a/content/admin/managing-code-security/securing-your-enterprise/about-security-configurations.md +++ b/content/code-security/concepts/security-at-scale/about-security-configurations.md @@ -1,13 +1,16 @@ --- title: About security configurations shortTitle: Security configurations -intro: 'Security configurations are collections of security settings that you can apply across your enterprise.' +intro: Security configurations are collections of security settings that you can apply across your enterprise. versions: feature: security-configuration-enterprise-level topics: - Advanced Security - Enterprise - Security +redirect_from: + - /admin/managing-code-security/securing-your-enterprise/about-security-configurations +contentType: concepts --- ## About {% data variables.product.prodname_security_configurations %} diff --git a/content/code-security/security-overview/about-security-overview.md b/content/code-security/concepts/security-at-scale/about-security-overview.md similarity index 97% rename from content/code-security/security-overview/about-security-overview.md rename to content/code-security/concepts/security-at-scale/about-security-overview.md index 425c5034f324..07c167b9edd3 100644 --- a/content/code-security/security-overview/about-security-overview.md +++ b/content/code-security/concepts/security-at-scale/about-security-overview.md @@ -1,6 +1,7 @@ --- title: About security overview -intro: 'You can gain insights into the overall security landscape of your organization or enterprise and identify repositories that require intervention using security overview.' +shortTitle: Security overview +intro: You can gain insights into the overall security landscape of your organization or enterprise and identify repositories that require intervention using security overview. product: | {% data reusables.gated-features.security-overview-general %}{% ifversion secret-risk-assessment %} @@ -8,6 +9,7 @@ product: | redirect_from: - /code-security/security-overview/exploring-security-alerts - /code-security/security-overview/about-the-security-overview + - /code-security/security-overview/about-security-overview versions: fpt: '*' ghes: '*' @@ -23,6 +25,7 @@ topics: - Organizations - Secret scanning - Teams +contentType: concepts --- {% ifversion fpt %} diff --git a/content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/about-supply-chain-security-for-your-enterprise.md b/content/code-security/concepts/security-at-scale/about-supply-chain-security-for-your-enterprise.md similarity index 89% rename from content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/about-supply-chain-security-for-your-enterprise.md rename to content/code-security/concepts/security-at-scale/about-supply-chain-security-for-your-enterprise.md index d0d39008a3c2..d277500d2c56 100644 --- a/content/admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/about-supply-chain-security-for-your-enterprise.md +++ b/content/code-security/concepts/security-at-scale/about-supply-chain-security-for-your-enterprise.md @@ -1,7 +1,7 @@ --- title: About supply chain security for your enterprise intro: You can enable features that help your developers understand and update the dependencies their code relies on. -shortTitle: About supply chain security +shortTitle: Supply chain security permissions: '' versions: ghes: '*' @@ -12,6 +12,8 @@ topics: - Dependency graph redirect_from: - /admin/code-security/managing-supply-chain-security-for-your-enterprise/about-supply-chain-security-for-your-enterprise + - /admin/managing-code-security/managing-supply-chain-security-for-your-enterprise/about-supply-chain-security-for-your-enterprise +contentType: concepts --- You can allow users to identify their projects' dependencies by enabling the dependency graph for {% data variables.product.prodname_ghe_server %}. For more information, see [Enabling the dependency graph for your enterprise](/admin/code-security/managing-supply-chain-security-for-your-enterprise/enabling-the-dependency-graph-for-your-enterprise). diff --git a/content/code-security/getting-started/auditing-security-alerts.md b/content/code-security/concepts/security-at-scale/auditing-security-alerts.md similarity index 98% rename from content/code-security/getting-started/auditing-security-alerts.md rename to content/code-security/concepts/security-at-scale/auditing-security-alerts.md index 828b49091621..5d5da1939e00 100644 --- a/content/code-security/getting-started/auditing-security-alerts.md +++ b/content/code-security/concepts/security-at-scale/auditing-security-alerts.md @@ -14,6 +14,9 @@ topics: - Code Security - Secret Protection shortTitle: Audit security alerts +redirect_from: + - /code-security/getting-started/auditing-security-alerts +contentType: concepts --- ## About security tools for auditors diff --git a/content/code-security/concepts/security-at-scale/index.md b/content/code-security/concepts/security-at-scale/index.md new file mode 100644 index 000000000000..0def87508d81 --- /dev/null +++ b/content/code-security/concepts/security-at-scale/index.md @@ -0,0 +1,24 @@ +--- +title: Concepts for security at scale +shortTitle: Security at scale +intro: Learn about the concepts behind managing code security at scale in your organization or enterprise. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +topics: + - Code Security + - Secret Protection + - Organizations + - Security + - Advanced Security + - Enterprise +contentType: concepts +children: + - /about-enabling-security-features-at-scale + - /about-security-configurations + - /about-security-overview + - /about-security-campaigns + - /auditing-security-alerts + - /about-supply-chain-security-for-your-enterprise +--- diff --git a/content/code-security/dependabot/dependabot-alerts/index.md b/content/code-security/dependabot/dependabot-alerts/index.md index b5c9e31410c9..518c79af341c 100644 --- a/content/code-security/dependabot/dependabot-alerts/index.md +++ b/content/code-security/dependabot/dependabot-alerts/index.md @@ -14,9 +14,7 @@ topics: - Repositories - Dependencies children: - - /configuring-dependabot-alerts - /viewing-and-updating-dependabot-alerts - /enable-delegated-alert-dismissal - - /configuring-notifications-for-dependabot-alerts --- diff --git a/content/code-security/dependabot/dependabot-auto-triage-rules/index.md b/content/code-security/dependabot/dependabot-auto-triage-rules/index.md index aa7021bcf797..27832236a9d1 100644 --- a/content/code-security/dependabot/dependabot-auto-triage-rules/index.md +++ b/content/code-security/dependabot/dependabot-auto-triage-rules/index.md @@ -12,8 +12,6 @@ topics: - Repositories - Dependencies children: - - /using-github-preset-rules-to-prioritize-dependabot-alerts - - /customizing-auto-triage-rules-to-prioritize-dependabot-alerts - /managing-automatically-dismissed-alerts redirect_from: - /code-security/dependabot/dependabot-alert-rules diff --git a/content/code-security/dependabot/dependabot-security-updates/index.md b/content/code-security/dependabot/dependabot-security-updates/index.md deleted file mode 100644 index a4eb13af82c7..000000000000 --- a/content/code-security/dependabot/dependabot-security-updates/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Automatically updating dependencies with known vulnerabilities with Dependabot security updates -intro: '{% data variables.product.prodname_dependabot %} can help you fix vulnerable dependencies by automatically raising pull requests to update dependencies to secure versions.' -allowTitleToDifferFromFilename: true -versions: - fpt: '*' - ghec: '*' - ghes: '*' -topics: - - Repositories - - Dependabot - - Security updates - - Dependencies - - Pull requests -shortTitle: Dependabot security updates -children: - - /configuring-dependabot-security-updates - - /customizing-dependabot-security-prs ---- - diff --git a/content/code-security/dependabot/dependabot-version-updates/index.md b/content/code-security/dependabot/dependabot-version-updates/index.md index 89a7c27dbfa4..9e8d02b6774c 100644 --- a/content/code-security/dependabot/dependabot-version-updates/index.md +++ b/content/code-security/dependabot/dependabot-version-updates/index.md @@ -20,10 +20,8 @@ topics: - Dependencies - Pull requests children: - - /configuring-dependabot-version-updates - /optimizing-pr-creation-version-updates - /customizing-dependabot-prs - - /controlling-dependencies-updated shortTitle: Dependabot version updates --- diff --git a/content/code-security/dependabot/ecosystems-supported-by-dependabot/index.md b/content/code-security/dependabot/ecosystems-supported-by-dependabot/index.md index 31e4a7abaf60..1578a3b9aa74 100644 --- a/content/code-security/dependabot/ecosystems-supported-by-dependabot/index.md +++ b/content/code-security/dependabot/ecosystems-supported-by-dependabot/index.md @@ -15,5 +15,5 @@ topics: shortTitle: Dependabot ecosystems children: - /supported-ecosystems-and-repositories - - /optimizing-java-packages-dependabot --- + diff --git a/content/code-security/dependabot/index.md b/content/code-security/dependabot/index.md index 16246ea41cea..140749caace0 100644 --- a/content/code-security/dependabot/index.md +++ b/content/code-security/dependabot/index.md @@ -17,9 +17,7 @@ children: - /ecosystems-supported-by-dependabot - /dependabot-alerts - /dependabot-auto-triage-rules - - /dependabot-security-updates - /dependabot-version-updates - /working-with-dependabot - - /maintain-dependencies - /troubleshooting-dependabot --- diff --git a/content/code-security/dependabot/maintain-dependencies/index.md b/content/code-security/dependabot/maintain-dependencies/index.md deleted file mode 100644 index 42dd72a2b9f7..000000000000 --- a/content/code-security/dependabot/maintain-dependencies/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Maintaining dependencies at scale -shortTitle: Maintain dependencies at scale -intro: You can use {% data variables.product.prodname_dependabot %} to automatically update your dependencies for your repositories and organizations. -versions: - fpt: '*' - ghec: '*' - ghes: '*' -topics: - - Dependabot - - Organizations - - Security - - Dependencies -children: - - /managing-dependabot-on-self-hosted-runners - - /removing-dependabot-access-to-public-registries ---- - diff --git a/content/code-security/dependabot/troubleshooting-dependabot/index.md b/content/code-security/dependabot/troubleshooting-dependabot/index.md index 3ca1c139c11d..473bfbc36900 100644 --- a/content/code-security/dependabot/troubleshooting-dependabot/index.md +++ b/content/code-security/dependabot/troubleshooting-dependabot/index.md @@ -1,6 +1,6 @@ --- title: Troubleshooting Dependabot -intro: 'If you have problems with {% data variables.product.prodname_dependabot %}, you can use tips in these articles to help resolve issues.' +intro: If you have problems with {% data variables.product.prodname_dependabot %}, you can use tips in these articles to help resolve issues. allowTitleToDifferFromFilename: true versions: fpt: '*' @@ -14,10 +14,8 @@ topics: - Repositories shortTitle: Troubleshoot Dependabot children: - - /listing-dependencies-configured-for-version-updates - /viewing-dependabot-job-logs - /dependabot-updates-stopped - - /troubleshooting-dependabot-errors - /troubleshooting-dependabot-on-github-actions - - /troubleshooting-the-detection-of-vulnerable-dependencies --- + diff --git a/content/code-security/dependabot/working-with-dependabot/dependabot-options-reference.md b/content/code-security/dependabot/working-with-dependabot/dependabot-options-reference.md index 7edb8c20ddde..cd1f50e448a6 100644 --- a/content/code-security/dependabot/working-with-dependabot/dependabot-options-reference.md +++ b/content/code-security/dependabot/working-with-dependabot/dependabot-options-reference.md @@ -473,7 +473,7 @@ Change the limit on the maximum number of pull requests for version updates open When `open-pull-requests-limit` is defined: -* {% data variables.product.prodname_dependabot %} opens pull requests up to the defined integer value. +* {% data variables.product.prodname_dependabot %} opens pull requests up to the defined integer value. A large value can be set to effectively remove the open pull request limit. * You can temporarily disable version updates for a package manager by setting this option to zero, see [Disabling {% data variables.product.prodname_dependabot_version_updates %}](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates#disabling-dependabot-version-updates). ## `package-ecosystem` {% octicon "versions" aria-label="Version updates only" height="24" %} diff --git a/content/code-security/dependabot/working-with-dependabot/index.md b/content/code-security/dependabot/working-with-dependabot/index.md index e0c37e892793..403e8bfc96f1 100644 --- a/content/code-security/dependabot/working-with-dependabot/index.md +++ b/content/code-security/dependabot/working-with-dependabot/index.md @@ -14,11 +14,7 @@ topics: - Dependencies - Pull requests children: - - /managing-pull-requests-for-dependency-updates - /automating-dependabot-with-github-actions - - /keeping-your-actions-up-to-date-with-dependabot - - /configuring-access-to-private-registries-for-dependabot - - /guidance-for-the-configuration-of-private-registries-for-dependabot - /configuring-multi-ecosystem-updates - /dependabot-options-reference - /setting-dependabot-to-run-on-self-hosted-runners-using-arc diff --git a/content/code-security/getting-started/index.md b/content/code-security/getting-started/index.md index d7d750b463fa..0a079208a11a 100644 --- a/content/code-security/getting-started/index.md +++ b/content/code-security/getting-started/index.md @@ -2,7 +2,7 @@ title: Getting started with secure coding shortTitle: Getting started allowTitleToDifferFromFilename: true -intro: 'Introduction to secure coding with {% data variables.product.github %}.' +intro: Introduction to secure coding with {% data variables.product.github %}. versions: fpt: '*' ghes: '*' @@ -17,7 +17,5 @@ children: - /quickstart-for-securing-your-repository - /quickstart-for-securing-your-organization - /adding-a-security-policy-to-your-repository - - /auditing-security-alerts - - /best-practices-for-preventing-data-leaks-in-your-organization - /understanding-github-secret-types --- diff --git a/content/code-security/how-tos/index.md b/content/code-security/how-tos/index.md index e28cf139b472..5733b88c7c7e 100644 --- a/content/code-security/how-tos/index.md +++ b/content/code-security/how-tos/index.md @@ -15,4 +15,6 @@ topics: - Dependencies - Dependabot contentType: how-tos +children: + - secure-your-supply-chain --- diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/exporting-a-software-bill-of-materials-for-your-repository.md b/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/exporting-a-software-bill-of-materials-for-your-repository.md similarity index 94% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/exporting-a-software-bill-of-materials-for-your-repository.md rename to content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/exporting-a-software-bill-of-materials-for-your-repository.md index 2d0341491374..da640de3bd42 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/exporting-a-software-bill-of-materials-for-your-repository.md +++ b/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/exporting-a-software-bill-of-materials-for-your-repository.md @@ -12,6 +12,9 @@ topics: - Dependencies - Repositories shortTitle: Export dependencies as SBOM +redirect_from: + - /code-security/supply-chain-security/understanding-your-software-supply-chain/exporting-a-software-bill-of-materials-for-your-repository +contentType: how-tos --- ## About the dependency graph and SBOM exports diff --git a/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/index.md b/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/index.md new file mode 100644 index 000000000000..bcd45b5d263d --- /dev/null +++ b/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/index.md @@ -0,0 +1,14 @@ +--- +title: Establishing provenance and integrity for your projects +shortTitle: Establish provenance and integrity +intro: Secure and audit your releases and artifacts. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +contentType: how-tos +children: + - /preventing-changes-to-your-releases + - /exporting-a-software-bill-of-materials-for-your-repository +--- + diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/preventing-changes-to-your-releases.md b/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/preventing-changes-to-your-releases.md similarity index 83% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/preventing-changes-to-your-releases.md rename to content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/preventing-changes-to-your-releases.md index 8d056b886621..43be00391f77 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/preventing-changes-to-your-releases.md +++ b/content/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/preventing-changes-to-your-releases.md @@ -1,7 +1,7 @@ --- title: Preventing changes to your releases shortTitle: Prevent release changes -intro: 'You can enforce immutable releases for a repository or organization to prevent potential vulnerabilities.' +intro: You can enforce immutable releases for a repository or organization to prevent potential vulnerabilities. versions: fpt: '*' ghec: '*' @@ -10,6 +10,9 @@ topics: - Code Security - Vulnerabilities - Dependencies +redirect_from: + - /code-security/supply-chain-security/understanding-your-software-supply-chain/preventing-changes-to-your-releases +contentType: how-tos --- ## Enforcing immutable releases for your repository diff --git a/content/code-security/how-tos/secure-your-supply-chain/index.md b/content/code-security/how-tos/secure-your-supply-chain/index.md new file mode 100644 index 000000000000..c594f16266d6 --- /dev/null +++ b/content/code-security/how-tos/secure-your-supply-chain/index.md @@ -0,0 +1,15 @@ +--- +title: Securing your supply chain +shortTitle: Secure your supply chain +intro: Enable and manage features for supply chain security. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +contentType: how-tos +children: + - secure-your-dependencies + - manage-your-dependency-security + - troubleshoot-dependency-security + - establish-provenance-and-integrity +--- \ No newline at end of file diff --git a/content/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md similarity index 96% rename from content/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md index 5ecff731710d..110cbacf7f1e 100644 --- a/content/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot.md @@ -1,12 +1,13 @@ --- title: Configuring access to private registries for Dependabot -intro: 'You can configure {% data variables.product.prodname_dependabot %} to access dependencies stored in private registries. You can store authentication information, like passwords and access tokens, as encrypted secrets and then reference these in the {% data variables.product.prodname_dependabot %} configuration file.{% ifversion dependabot-on-actions-self-hosted %} If you have registries on private networks, you can also configure {% data variables.product.prodname_dependabot %} access when running {% data variables.product.prodname_dependabot %} on self-hosted runners.{% endif %}' +intro: You can configure {% data variables.product.prodname_dependabot %} to access dependencies stored in private registries. You can store authentication information, like passwords and access tokens, as encrypted secrets and then reference these in the {% data variables.product.prodname_dependabot %} configuration file.{% ifversion dependabot-on-actions-self-hosted %} If you have registries on private networks, you can also configure {% data variables.product.prodname_dependabot %} access when running {% data variables.product.prodname_dependabot %} on self-hosted runners.{% endif %} permissions: '{% data reusables.permissions.dependabot-various-tasks %}' redirect_from: - /github/administering-a-repository/managing-encrypted-secrets-for-dependabot - /code-security/supply-chain-security/managing-encrypted-secrets-for-dependabot - /code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/managing-encrypted-secrets-for-dependabot - /code-security/dependabot/working-with-dependabot/managing-encrypted-secrets-for-dependabot + - /code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot versions: fpt: '*' ghec: '*' @@ -19,6 +20,7 @@ topics: - Repositories - Dependencies shortTitle: Configure access to private registries +contentType: how-tos --- ## About private registries diff --git a/content/code-security/dependabot/dependabot-alerts/configuring-notifications-for-dependabot-alerts.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-notifications-for-dependabot-alerts.md similarity index 96% rename from content/code-security/dependabot/dependabot-alerts/configuring-notifications-for-dependabot-alerts.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-notifications-for-dependabot-alerts.md index 203db90b7791..99ed62e76dff 100644 --- a/content/code-security/dependabot/dependabot-alerts/configuring-notifications-for-dependabot-alerts.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-notifications-for-dependabot-alerts.md @@ -1,11 +1,12 @@ --- title: Configuring notifications for Dependabot alerts -shortTitle: Configure notifications -intro: 'Optimize how you receive notifications about {% data variables.product.prodname_dependabot_alerts %}.' +shortTitle: Configure Dependabot notifications +intro: Optimize how you receive notifications about {% data variables.product.prodname_dependabot_alerts %}. redirect_from: - /github/managing-security-vulnerabilities/configuring-notifications-for-vulnerable-dependencies - /code-security/supply-chain-security/configuring-notifications-for-vulnerable-dependencies - /code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/configuring-notifications-for-vulnerable-dependencies + - /code-security/dependabot/dependabot-alerts/configuring-notifications-for-dependabot-alerts versions: fpt: '*' ghes: '*' @@ -18,6 +19,7 @@ topics: - Vulnerabilities - Dependencies - Repositories +contentType: how-tos --- ## About notifications for {% data variables.product.prodname_dependabot_alerts %} diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-review-action.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-the-dependency-review-action.md similarity index 98% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-review-action.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-the-dependency-review-action.md index d5487ffc0ded..4e15685c6e68 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-review-action.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-the-dependency-review-action.md @@ -16,6 +16,8 @@ topics: - Pull requests redirect_from: - /code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-dependency-review + - /code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-review-action +contentType: how-tos --- ## About the {% data variables.dependency-review.action_name %} diff --git a/content/code-security/dependabot/dependabot-version-updates/controlling-dependencies-updated.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/controlling-dependencies-updated.md similarity index 97% rename from content/code-security/dependabot/dependabot-version-updates/controlling-dependencies-updated.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/controlling-dependencies-updated.md index b92b455d0578..9c39c7f265a2 100644 --- a/content/code-security/dependabot/dependabot-version-updates/controlling-dependencies-updated.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/controlling-dependencies-updated.md @@ -1,6 +1,6 @@ --- title: Controlling which dependencies are updated by Dependabot -intro: 'Learn how to configure your `dependabot.yml` file so that {% data variables.product.prodname_dependabot %} automatically updates the packages you specify, in the way you define.' +intro: Learn how to configure your `dependabot.yml` file so that {% data variables.product.prodname_dependabot %} automatically updates the packages you specify, in the way you define. allowTitleToDifferFromFilename: true permissions: '{% data reusables.permissions.dependabot-yml-configure %}' versions: @@ -15,6 +15,9 @@ topics: - Dependencies - Pull requests shortTitle: Control dependency update +redirect_from: + - /code-security/dependabot/dependabot-version-updates/controlling-dependencies-updated +contentType: how-tos --- You can customize your {% data variables.product.prodname_dependabot %} configuration to suit your needs, by adding options to your `dependabot.yml` file. For example, you can make sure that {% data variables.product.prodname_dependabot %} uses the correct package manifest files, and updates only the dependencies you want maintained. diff --git a/content/code-security/dependabot/dependabot-auto-triage-rules/customizing-auto-triage-rules-to-prioritize-dependabot-alerts.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-auto-triage-rules-to-prioritize-dependabot-alerts.md similarity index 95% rename from content/code-security/dependabot/dependabot-auto-triage-rules/customizing-auto-triage-rules-to-prioritize-dependabot-alerts.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-auto-triage-rules-to-prioritize-dependabot-alerts.md index 0028e13365db..c79dd109c43d 100644 --- a/content/code-security/dependabot/dependabot-auto-triage-rules/customizing-auto-triage-rules-to-prioritize-dependabot-alerts.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-auto-triage-rules-to-prioritize-dependabot-alerts.md @@ -1,6 +1,6 @@ --- title: Customizing auto-triage rules to prioritize Dependabot alerts -intro: 'You can create your own {% data variables.dependabot.auto_triage_rules_short %} to control which alerts are dismissed or snoozed, and which alerts you want {% data variables.product.prodname_dependabot %} to open pull requests for.' +intro: You can create your own {% data variables.dependabot.auto_triage_rules_short %} to control which alerts are dismissed or snoozed, and which alerts you want {% data variables.product.prodname_dependabot %} to open pull requests for. product: '{% data reusables.gated-features.dependabot-auto-triage-rules %}' permissions: '{% data reusables.permissions.dependabot-auto-triage-rules %}' versions: @@ -14,9 +14,11 @@ topics: - Vulnerabilities - Repositories - Dependencies -shortTitle: Custom auto-triage rules +shortTitle: Auto-triage Dependabot alerts redirect_from: - /code-security/dependabot/dependabot-alert-rules/customizing-alert-rules-to-prioritize-dependabot-alerts + - /code-security/dependabot/dependabot-auto-triage-rules/customizing-auto-triage-rules-to-prioritize-dependabot-alerts +contentType: how-tos --- ## About {% data variables.dependabot.custom_rules %} diff --git a/content/code-security/dependabot/dependabot-security-updates/customizing-dependabot-security-prs.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-dependabot-security-prs.md similarity index 97% rename from content/code-security/dependabot/dependabot-security-updates/customizing-dependabot-security-prs.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-dependabot-security-prs.md index 96d046d4f66b..6cdb046e054c 100644 --- a/content/code-security/dependabot/dependabot-security-updates/customizing-dependabot-security-prs.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-dependabot-security-prs.md @@ -1,6 +1,6 @@ --- title: Customizing pull requests for Dependabot security updates -intro: 'Learn how to customize Dependabot pull requests for security updates to align with your project''s security priorities and workflows.' +intro: Learn how to customize Dependabot pull requests for security updates to align with your project's security priorities and workflows. allowTitleToDifferFromFilename: true permissions: '{% data reusables.permissions.dependabot-yml-configure %}' versions: @@ -15,6 +15,9 @@ topics: - Dependencies - Pull requests shortTitle: Customize Dependabot PRs +redirect_from: + - /code-security/dependabot/dependabot-security-updates/customizing-dependabot-security-prs +contentType: how-tos --- ## About customizing pull requests for security updates diff --git a/content/code-security/dependabot/working-with-dependabot/guidance-for-the-configuration-of-private-registries-for-dependabot.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/guidance-for-the-configuration-of-private-registries-for-dependabot.md similarity index 98% rename from content/code-security/dependabot/working-with-dependabot/guidance-for-the-configuration-of-private-registries-for-dependabot.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/guidance-for-the-configuration-of-private-registries-for-dependabot.md index 5692749dbefd..5f2f465b4cd6 100644 --- a/content/code-security/dependabot/working-with-dependabot/guidance-for-the-configuration-of-private-registries-for-dependabot.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/guidance-for-the-configuration-of-private-registries-for-dependabot.md @@ -1,6 +1,6 @@ --- title: Guidance for the configuration of private registries for Dependabot -intro: 'This article contains detailed information about configuring private registries, as well as commands you can run from the command line to configure your package managers locally.' +intro: This article contains detailed information about configuring private registries, as well as commands you can run from the command line to configure your package managers locally. permissions: '{% data reusables.permissions.dependabot-various-tasks %}' versions: fpt: '*' @@ -13,7 +13,10 @@ topics: - Secret store - Repositories - Dependencies -shortTitle: Guidance for configuring private registries +shortTitle: Configure private registries +redirect_from: + - /code-security/dependabot/working-with-dependabot/guidance-for-the-configuration-of-private-registries-for-dependabot +contentType: how-tos --- ## About configuring private registries for {% data variables.product.prodname_dependabot %} diff --git a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/index.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/index.md new file mode 100644 index 000000000000..baf1e01b9726 --- /dev/null +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/index.md @@ -0,0 +1,28 @@ +--- +title: Managing your dependency security +shortTitle: Manage your dependency security +intro: Customize and configure features for dependency management. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +contentType: how-tos +children: + - /customizing-auto-triage-rules-to-prioritize-dependabot-alerts + - /using-github-preset-rules-to-prioritize-dependabot-alerts + - /customizing-dependabot-security-prs + - /controlling-dependencies-updated + - /configuring-the-dependency-review-action + - /optimizing-java-packages-dependabot + - /configuring-notifications-for-dependabot-alerts + - /configuring-access-to-private-registries-for-dependabot + - /removing-dependabot-access-to-public-registries + - /managing-pull-requests-for-dependency-updates + - /managing-dependabot-on-self-hosted-runners + - /listing-dependencies-configured-for-version-updates + - /guidance-for-the-configuration-of-private-registries-for-dependabot +redirect_from: + - /code-security/dependabot/maintain-dependencies + - /code-security/dependabot/dependabot-security-updates +--- + diff --git a/content/code-security/dependabot/troubleshooting-dependabot/listing-dependencies-configured-for-version-updates.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/listing-dependencies-configured-for-version-updates.md similarity index 90% rename from content/code-security/dependabot/troubleshooting-dependabot/listing-dependencies-configured-for-version-updates.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/listing-dependencies-configured-for-version-updates.md index 59632c4d17ce..455eb33de319 100644 --- a/content/code-security/dependabot/troubleshooting-dependabot/listing-dependencies-configured-for-version-updates.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/listing-dependencies-configured-for-version-updates.md @@ -1,12 +1,13 @@ --- title: Listing dependencies configured for version updates -intro: 'You can view the dependencies that {% data variables.product.prodname_dependabot %} monitors for updates.' +intro: You can view the dependencies that {% data variables.product.prodname_dependabot %} monitors for updates. permissions: '{% data reusables.permissions.dependabot-yml-configure %}' redirect_from: - /github/administering-a-repository/listing-dependencies-configured-for-version-updates - /code-security/supply-chain-security/listing-dependencies-configured-for-version-updates - /code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/listing-dependencies-configured-for-version-updates - /code-security/dependabot/dependabot-version-updates/listing-dependencies-configured-for-version-updates + - /code-security/dependabot/troubleshooting-dependabot/listing-dependencies-configured-for-version-updates versions: fpt: '*' ghec: '*' @@ -18,6 +19,7 @@ topics: - Version updates - Dependencies shortTitle: List configured dependencies +contentType: how-tos --- {% data reusables.dependabot.enterprise-enable-dependabot %} diff --git a/content/code-security/dependabot/maintain-dependencies/managing-dependabot-on-self-hosted-runners.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners.md similarity index 97% rename from content/code-security/dependabot/maintain-dependencies/managing-dependabot-on-self-hosted-runners.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners.md index 795d81441a81..5a24e1ecdf5e 100644 --- a/content/code-security/dependabot/maintain-dependencies/managing-dependabot-on-self-hosted-runners.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners.md @@ -1,6 +1,6 @@ --- title: Managing Dependabot on self-hosted runners -intro: 'You can configure self-hosted runners that {% data variables.product.prodname_dependabot %} uses to access your private registries and internal network resources.' +intro: You can configure self-hosted runners that {% data variables.product.prodname_dependabot %} uses to access your private registries and internal network resources. shortTitle: Manage Dependabot on self-hosted runners permissions: '{% data reusables.permissions.dependabot-actions %}' versions: @@ -15,6 +15,8 @@ topics: - Repositories redirect_from: - /code-security/dependabot/working-with-dependabot/managing-dependabot-on-self-hosted-runners + - /code-security/dependabot/maintain-dependencies/managing-dependabot-on-self-hosted-runners +contentType: how-tos --- ## About {% data variables.product.prodname_dependabot %} on {% data variables.product.prodname_actions %} self-hosted runners diff --git a/content/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-pull-requests-for-dependency-updates.md similarity index 97% rename from content/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-pull-requests-for-dependency-updates.md index 800a9948285e..d2f8ef04571f 100644 --- a/content/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-pull-requests-for-dependency-updates.md @@ -1,11 +1,12 @@ --- title: Managing pull requests for dependency updates -intro: 'You manage pull requests raised by {% data variables.product.prodname_dependabot %} in much the same way as other pull requests, but there are some extra options.' +intro: You manage pull requests raised by {% data variables.product.prodname_dependabot %} in much the same way as other pull requests, but there are some extra options. permissions: '{% data reusables.permissions.dependabot-various-tasks %}' redirect_from: - /github/administering-a-repository/managing-pull-requests-for-dependency-updates - /code-security/supply-chain-security/managing-pull-requests-for-dependency-updates - /code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/managing-pull-requests-for-dependency-updates + - /code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates versions: fpt: '*' ghec: '*' @@ -19,6 +20,7 @@ topics: - Dependencies - Vulnerabilities shortTitle: Manage Dependabot PRs +contentType: how-tos --- {% data reusables.dependabot.enterprise-enable-dependabot %} diff --git a/content/code-security/dependabot/ecosystems-supported-by-dependabot/optimizing-java-packages-dependabot.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/optimizing-java-packages-dependabot.md similarity index 88% rename from content/code-security/dependabot/ecosystems-supported-by-dependabot/optimizing-java-packages-dependabot.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/optimizing-java-packages-dependabot.md index be4d943040e6..9d604cfc8c6c 100644 --- a/content/code-security/dependabot/ecosystems-supported-by-dependabot/optimizing-java-packages-dependabot.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/optimizing-java-packages-dependabot.md @@ -1,7 +1,7 @@ --- title: Optimizing Java packages for Dependabot updates -intro: 'By including metadata in your `pom.xml` file, you can enhance the information available to users in {% data variables.product.prodname_dependabot%} pull requests to update your Java packages.' -shortTitle: Optimize Java packages # Max 31 characters +intro: By including metadata in your `pom.xml` file, you can enhance the information available to users in {% data variables.product.prodname_dependabot%} pull requests to update your Java packages. +shortTitle: Optimize Java packages allowTitleToDifferFromFilename: true versions: fpt: '*' @@ -12,6 +12,9 @@ topics: - Dependabot - Dependencies - Repositories +redirect_from: + - /code-security/dependabot/ecosystems-supported-by-dependabot/optimizing-java-packages-dependabot +contentType: how-tos --- {% data variables.product.prodname_dependabot %} uses the information defined in `pom.xml` files to create pull requests to update Java dependencies for the Gradle and Maven ecosystems. When you include the project metadata that {% data variables.product.prodname_dependabot %} expects, pull requests contain links to the release notes for the suggested package update and a link where users can report any issues. This information means that users can update their packages with confidence after reviewing all the release information. diff --git a/content/code-security/dependabot/maintain-dependencies/removing-dependabot-access-to-public-registries.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/removing-dependabot-access-to-public-registries.md similarity index 98% rename from content/code-security/dependabot/maintain-dependencies/removing-dependabot-access-to-public-registries.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/removing-dependabot-access-to-public-registries.md index 85a3869a8c8e..00c92394d44c 100644 --- a/content/code-security/dependabot/maintain-dependencies/removing-dependabot-access-to-public-registries.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/removing-dependabot-access-to-public-registries.md @@ -1,6 +1,6 @@ --- title: Removing Dependabot access to public registries -intro: 'Examples of how you can configure {% data variables.product.prodname_dependabot %} to only access private registries by removing calls to public registries.' +intro: Examples of how you can configure {% data variables.product.prodname_dependabot %} to only access private registries by removing calls to public registries. permissions: '{% data reusables.permissions.dependabot-various-tasks %}' versions: fpt: '*' @@ -14,6 +14,8 @@ shortTitle: Remove access to public registries redirect_from: - /code-security/dependabot/working-with-dependabot/configuring-dependabot-to-only-access-private-registries - /code-security/dependabot/working-with-dependabot/removing-dependabot-access-to-public-registries + - /code-security/dependabot/maintain-dependencies/removing-dependabot-access-to-public-registries +contentType: how-tos --- ## About configuring {% data variables.product.prodname_dependabot %} to only access private registries diff --git a/content/code-security/dependabot/dependabot-auto-triage-rules/using-github-preset-rules-to-prioritize-dependabot-alerts.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/using-github-preset-rules-to-prioritize-dependabot-alerts.md similarity index 93% rename from content/code-security/dependabot/dependabot-auto-triage-rules/using-github-preset-rules-to-prioritize-dependabot-alerts.md rename to content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/using-github-preset-rules-to-prioritize-dependabot-alerts.md index 1c7295aace7f..1cb459df572c 100644 --- a/content/code-security/dependabot/dependabot-auto-triage-rules/using-github-preset-rules-to-prioritize-dependabot-alerts.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/using-github-preset-rules-to-prioritize-dependabot-alerts.md @@ -1,6 +1,6 @@ --- title: Using GitHub preset rules to prioritize Dependabot alerts -intro: 'You can use {% data variables.dependabot.github_presets %}, which are rules curated by {% data variables.product.company_short %}, to auto-dismiss low impact development alerts for npm dependencies.' +intro: You can use {% data variables.dependabot.github_presets %}, which are rules curated by {% data variables.product.company_short %}, to auto-dismiss low impact development alerts for npm dependencies. permissions: '{% data reusables.permissions.dependabot-github-presets %}' versions: fpt: '*' @@ -13,10 +13,12 @@ topics: - Vulnerabilities - Repositories - Dependencies -shortTitle: GitHub preset rules +shortTitle: Prioritize with preset rules redirect_from: - /code-security/dependabot/dependabot-alert-rules/using-github-curated-alert-rules-to-prioritize-dependabot-alerts - /code-security/dependabot/dependabot-auto-triage-rules/using-github-curated-default-rules-to-prioritize-dependabot-alerts + - /code-security/dependabot/dependabot-auto-triage-rules/using-github-preset-rules-to-prioritize-dependabot-alerts +contentType: how-tos --- ## About {% data variables.dependabot.github_presets %} diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-automatic-dependency-submission-for-your-repository.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-automatic-dependency-submission-for-your-repository.md similarity index 97% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-automatic-dependency-submission-for-your-repository.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-automatic-dependency-submission-for-your-repository.md index 32ea2f9797f8..594d28668bc3 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-automatic-dependency-submission-for-your-repository.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-automatic-dependency-submission-for-your-repository.md @@ -1,10 +1,11 @@ --- title: Configuring automatic dependency submission for your repository -shortTitle: Automatic dependency submission -intro: 'You can use automatic dependency submission to submit transitive dependency data in your repository. This enables you to analyze these transitive dependencies using the dependency graph.' +shortTitle: Submit dependencies automatically +intro: You can use automatic dependency submission to submit transitive dependency data in your repository. This enables you to analyze these transitive dependencies using the dependency graph. permissions: '{% data reusables.permissions.security-repo-enable %}' redirect_from: - /early-access/ghas/automatic-dependency-submission-for-maven + - /code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-automatic-dependency-submission-for-your-repository versions: feature: maven-transitive-dependencies type: how_to @@ -12,6 +13,7 @@ topics: - Dependency graph - Dependencies - Repositories +contentType: how-tos --- ## About automatic dependency submission diff --git a/content/code-security/dependabot/dependabot-alerts/configuring-dependabot-alerts.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-alerts.md similarity index 97% rename from content/code-security/dependabot/dependabot-alerts/configuring-dependabot-alerts.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-alerts.md index de4c136ca7d0..75bf97adcd97 100644 --- a/content/code-security/dependabot/dependabot-alerts/configuring-dependabot-alerts.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-alerts.md @@ -1,6 +1,6 @@ --- title: Configuring Dependabot alerts -intro: 'Enable {% data variables.product.prodname_dependabot_alerts %} to be generated when a new vulnerable dependency is found in one of your repositories.' +intro: Enable {% data variables.product.prodname_dependabot_alerts %} to be generated when a new vulnerable dependency is found in one of your repositories. shortTitle: Configure Dependabot alerts permissions: '{% data reusables.permissions.dependabot-alerts %}' versions: @@ -15,6 +15,9 @@ topics: - Dependencies - Pull requests - Repositories +redirect_from: + - /code-security/dependabot/dependabot-alerts/configuring-dependabot-alerts +contentType: how-tos --- ## About {% data variables.product.prodname_dependabot_alerts %} for vulnerable dependencies diff --git a/content/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-security-updates.md similarity index 97% rename from content/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-security-updates.md index c317f302f54b..2ca30c0e0f60 100644 --- a/content/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-security-updates.md @@ -1,6 +1,6 @@ --- title: Configuring Dependabot security updates -intro: 'You can use {% data variables.product.prodname_dependabot_security_updates %} or manual pull requests to easily update vulnerable dependencies.' +intro: You can use {% data variables.product.prodname_dependabot_security_updates %} or manual pull requests to easily update vulnerable dependencies. shortTitle: Configure security updates permissions: '{% data reusables.permissions.dependabot-yml-configure %}' redirect_from: @@ -11,6 +11,7 @@ redirect_from: - /github/managing-security-vulnerabilities/configuring-dependabot-security-updates - /code-security/supply-chain-security/configuring-dependabot-security-updates - /code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/configuring-dependabot-security-updates + - /code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates versions: fpt: '*' ghec: '*' @@ -23,6 +24,7 @@ topics: - Dependencies - Pull requests - Repositories +contentType: how-tos --- diff --git a/content/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-version-updates.md similarity index 97% rename from content/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-version-updates.md index c8fb79e039a5..9a5b2ca827a6 100644 --- a/content/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-version-updates.md @@ -1,12 +1,13 @@ --- title: Configuring Dependabot version updates -intro: 'You can configure your repository so that {% data variables.product.prodname_dependabot %} automatically updates the packages you use.' +intro: You can configure your repository so that {% data variables.product.prodname_dependabot %} automatically updates the packages you use. permissions: '{% data reusables.permissions.dependabot-yml-configure %}' redirect_from: - /github/administering-a-repository/enabling-and-disabling-version-updates - /code-security/supply-chain-security/enabling-and-disabling-version-updates - /code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/enabling-and-disabling-version-updates - /code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/enabling-and-disabling-dependabot-version-updates + - /code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates versions: fpt: '*' ghec: '*' @@ -19,6 +20,7 @@ topics: - Dependencies - Pull requests shortTitle: Configure version updates +contentType: how-tos --- {% data reusables.dependabot.enterprise-enable-dependabot %} diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-graph.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-the-dependency-graph.md similarity index 95% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-graph.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-the-dependency-graph.md index 66cb634258d3..dacce8b8f81b 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-graph.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-the-dependency-graph.md @@ -4,6 +4,7 @@ intro: You can allow users to identify their projects' dependencies by enabling permissions: '{% data reusables.permissions.dependency-graph %}' redirect_from: - /code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph#enabling-the-dependency-graph + - /code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-the-dependency-graph versions: fpt: '*' ghes: '*' @@ -14,6 +15,7 @@ topics: - Dependencies - Repositories shortTitle: Configure dependency graph +contentType: how-tos --- ## About the dependency graph diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/exploring-the-dependencies-of-a-repository.md similarity index 95% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/exploring-the-dependencies-of-a-repository.md index b2c2142a91e4..5569e1338796 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/exploring-the-dependencies-of-a-repository.md @@ -1,6 +1,6 @@ --- title: Exploring the dependencies of a repository -intro: 'You can use the dependency graph to see the packages your project depends on{% ifversion fpt or ghec %} and the repositories that depend on it{% endif %}. In addition, you can see any vulnerabilities detected in its dependencies.' +intro: You can use the dependency graph to see the packages your project depends on{% ifversion fpt or ghec %} and the repositories that depend on it{% endif %}. In addition, you can see any vulnerabilities detected in its dependencies. permissions: '{% data reusables.permissions.dependency-graph-view-dependencies %}' redirect_from: - /articles/listing-the-packages-that-a-repository-depends-on @@ -10,6 +10,7 @@ redirect_from: - /github/visualizing-repository-data-with-graphs/exploring-the-dependencies-and-dependents-of-a-repository - /github/visualizing-repository-data-with-graphs/exploring-the-dependencies-of-a-repository - /code-security/supply-chain-security/exploring-the-dependencies-of-a-repository + - /code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository versions: fpt: '*' ghes: '*' @@ -20,6 +21,7 @@ topics: - Dependencies - Repositories shortTitle: Explore dependencies +contentType: how-tos --- ## Viewing the dependency graph diff --git a/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/index.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/index.md new file mode 100644 index 000000000000..0750629c9434 --- /dev/null +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/index.md @@ -0,0 +1,21 @@ +--- +title: Securing your dependencies +shortTitle: Secure your dependencies +intro: Keep your supply chain secure by understanding and updating dependencies. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +contentType: how-tos +children: + - /configuring-dependabot-alerts + - /configuring-dependabot-security-updates + - /configuring-dependabot-version-updates + - /keeping-your-actions-up-to-date-with-dependabot + - /configuring-the-dependency-graph + - /exploring-the-dependencies-of-a-repository + - /configuring-automatic-dependency-submission-for-your-repository + - /using-the-dependency-submission-api + - /verifying-the-integrity-of-a-release +--- + diff --git a/content/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md similarity index 95% rename from content/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md index ee3124491815..897356517dde 100644 --- a/content/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md @@ -1,12 +1,13 @@ --- title: Keeping your actions up to date with Dependabot -intro: 'You can use {% data variables.product.prodname_dependabot %} to keep the actions you use updated to the latest versions.' +intro: You can use {% data variables.product.prodname_dependabot %} to keep the actions you use updated to the latest versions. permissions: '{% data reusables.permissions.dependabot-yml-configure %}' redirect_from: - /github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot - /github/administering-a-repository/keeping-your-actions-up-to-date-with-dependabot - /code-security/supply-chain-security/keeping-your-actions-up-to-date-with-dependabot - /code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/keeping-your-actions-up-to-date-with-dependabot + - /code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot versions: fpt: '*' ghec: '*' @@ -18,6 +19,7 @@ topics: - Version updates - Actions shortTitle: Auto-update actions +contentType: how-tos --- {% data reusables.dependabot.enterprise-enable-dependabot %} diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/using-the-dependency-submission-api.md similarity index 92% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/using-the-dependency-submission-api.md index 26f89c77c7a0..e56724961988 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/using-the-dependency-submission-api.md @@ -1,7 +1,7 @@ --- title: Using the dependency submission API -intro: 'You can use the {% data variables.dependency-submission-api.name %} to submit dependencies for projects, such as the dependencies resolved when a project is built or compiled.' -shortTitle: Dependency submission API +intro: You can use the {% data variables.dependency-submission-api.name %} to submit dependencies for projects, such as the dependencies resolved when a project is built or compiled. +shortTitle: Use dependency submission API topics: - API - Dependency graph @@ -11,6 +11,9 @@ versions: fpt: '*' ghes: '*' ghec: '*' +redirect_from: + - /code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api +contentType: how-tos --- ## About the {% data variables.dependency-submission-api.name %} diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/verifying-the-integrity-of-a-release.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/verifying-the-integrity-of-a-release.md similarity index 82% rename from content/code-security/supply-chain-security/understanding-your-software-supply-chain/verifying-the-integrity-of-a-release.md rename to content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/verifying-the-integrity-of-a-release.md index 5887986a03c8..a138f3772d76 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/verifying-the-integrity-of-a-release.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/verifying-the-integrity-of-a-release.md @@ -1,7 +1,7 @@ --- title: Verifying the integrity of a release shortTitle: Verify release integrity -intro: 'You can avoid tampering and accidental changes by ensuring the releases you use have not been modified after publication.' +intro: You can avoid tampering and accidental changes by ensuring the releases you use have not been modified after publication. versions: fpt: '*' ghec: '*' @@ -11,6 +11,9 @@ topics: - Vulnerabilities - Dependencies defaultTool: cli +redirect_from: + - /code-security/supply-chain-security/understanding-your-software-supply-chain/verifying-the-integrity-of-a-release +contentType: how-tos --- {% cli %} diff --git a/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/index.md b/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/index.md new file mode 100644 index 000000000000..3d4930728f5c --- /dev/null +++ b/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/index.md @@ -0,0 +1,14 @@ +--- +title: Troubleshooting dependency security +shortTitle: Troubleshoot dependency security +intro: Get help with Dependabot and dependency detection. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +contentType: how-tos +children: + - /troubleshooting-dependabot-errors + - /troubleshooting-the-detection-of-vulnerable-dependencies +--- + diff --git a/content/code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors.md b/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-dependabot-errors.md similarity index 98% rename from content/code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors.md rename to content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-dependabot-errors.md index d550a5f5a164..954b0b7beeaa 100644 --- a/content/code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors.md +++ b/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-dependabot-errors.md @@ -1,13 +1,14 @@ --- title: Troubleshooting Dependabot errors -intro: 'Sometimes {% data variables.product.prodname_dependabot %} is unable to raise a pull request to update your dependencies. You can review the error and unblock {% data variables.product.prodname_dependabot %}.' -shortTitle: Troubleshoot errors +intro: Sometimes {% data variables.product.prodname_dependabot %} is unable to raise a pull request to update your dependencies. You can review the error and unblock {% data variables.product.prodname_dependabot %}. +shortTitle: Troubleshoot Dependabot errors redirect_from: - /github/managing-security-vulnerabilities/troubleshooting-github-dependabot-errors - /github/managing-security-vulnerabilities/troubleshooting-dependabot-errors - /code-security/supply-chain-security/troubleshooting-dependabot-errors - /code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/troubleshooting-dependabot-errors - /code-security/dependabot/working-with-dependabot/troubleshooting-dependabot-errors + - /code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors versions: fpt: '*' ghec: '*' @@ -22,6 +23,7 @@ topics: - Troubleshooting - Errors - Dependencies +contentType: how-tos --- {% data reusables.dependabot.enterprise-enable-dependabot %} diff --git a/content/code-security/dependabot/troubleshooting-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies.md b/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-the-detection-of-vulnerable-dependencies.md similarity index 97% rename from content/code-security/dependabot/troubleshooting-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies.md rename to content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-the-detection-of-vulnerable-dependencies.md index 50434476a6d6..5c0609d44f25 100644 --- a/content/code-security/dependabot/troubleshooting-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies.md +++ b/content/code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-the-detection-of-vulnerable-dependencies.md @@ -1,12 +1,13 @@ --- title: Troubleshooting the detection of vulnerable dependencies -intro: 'If the dependency information reported by {% data variables.product.github %} is not what you expected, there are a number of points to consider, and various things you can check.' +intro: If the dependency information reported by {% data variables.product.github %} is not what you expected, there are a number of points to consider, and various things you can check. shortTitle: Troubleshoot vulnerability detection redirect_from: - /github/managing-security-vulnerabilities/troubleshooting-the-detection-of-vulnerable-dependencies - /code-security/supply-chain-security/troubleshooting-the-detection-of-vulnerable-dependencies - /code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/troubleshooting-the-detection-of-vulnerable-dependencies - /code-security/dependabot/working-with-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies + - /code-security/dependabot/troubleshooting-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies versions: fpt: '*' ghes: '*' @@ -22,6 +23,7 @@ topics: - Vulnerabilities - CVEs - Repositories +contentType: how-tos --- {% data reusables.dependabot.result-discrepancy %} diff --git a/content/code-security/index.md b/content/code-security/index.md index 4b81e45b83b1..1f1a2b8e411d 100644 --- a/content/code-security/index.md +++ b/content/code-security/index.md @@ -18,14 +18,14 @@ featuredLinks: - /code-security/trialing-github-advanced-security/planning-a-trial-of-ghas - /code-security/secret-scanning/enabling-secret-scanning-features - /code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning - - /code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates - - /code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates + - /code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-security-updates + - /code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-version-updates popular: - '{% ifversion secret-risk-assessment %}/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment{% endif %}' - '{% ifversion ghes %}/admin/release-notes{% endif %}' - /code-security/concepts/vulnerability-reporting-and-management/about-coordinated-disclosure-of-security-vulnerabilities - - /code-security/getting-started/best-practices-for-preventing-data-leaks-in-your-organization - - /code-security/securing-your-organization/fixing-security-alerts-at-scale/best-practice-fix-alerts-at-scale + - /code-security/tutorials/secure-your-organization/best-practices-for-preventing-data-leaks-in-your-organization + - /code-security/tutorials/secure-your-organization/best-practice-fix-alerts-at-scale - /code-security/concepts/supply-chain-security/best-practices-for-maintaining-dependencies changelog: label: security-and-compliance diff --git a/content/code-security/secret-scanning/introduction/index.md b/content/code-security/secret-scanning/introduction/index.md index 286b2a482c96..93852ce23ee8 100644 --- a/content/code-security/secret-scanning/introduction/index.md +++ b/content/code-security/secret-scanning/introduction/index.md @@ -2,7 +2,7 @@ title: Introduction to secret scanning shortTitle: Introduction allowTitleToDifferFromFilename: true -intro: 'Learn how {% data variables.product.prodname_secret_scanning %} detects secrets in existing content and new commits, helping you to avoid exposing sensitive data that could be exploited.' +intro: Learn how {% data variables.product.prodname_secret_scanning %} detects secrets in existing content and new commits, helping you to avoid exposing sensitive data that could be exploited. product: '{% data reusables.gated-features.secret-scanning %}' versions: fpt: '*' @@ -13,8 +13,6 @@ topics: - Secret scanning - Secret Protection children: - - /about-secret-scanning - - /about-push-protection - - /about-secret-scanning-for-partners - /supported-secret-scanning-patterns --- + diff --git a/content/code-security/secret-scanning/managing-alerts-from-secret-scanning/index.md b/content/code-security/secret-scanning/managing-alerts-from-secret-scanning/index.md index dfcebdae2a61..55037fe5b4eb 100644 --- a/content/code-security/secret-scanning/managing-alerts-from-secret-scanning/index.md +++ b/content/code-security/secret-scanning/managing-alerts-from-secret-scanning/index.md @@ -1,11 +1,10 @@ --- title: Managing alerts from secret scanning -intro: 'Learn how to find, evaluate, and resolve alerts for secrets stored in your repository.' +intro: Learn how to find, evaluate, and resolve alerts for secrets stored in your repository. product: '{% data reusables.gated-features.secret-scanning %}' redirect_from: - /github/administering-a-repository/managing-alerts-from-secret-scanning - /code-security/secret-security/managing-alerts-from-secret-scanning - versions: fpt: '*' ghes: '*' @@ -18,9 +17,9 @@ topics: - Repositories shortTitle: Manage alerts children: - - /about-alerts - /viewing-alerts - /evaluating-alerts - /resolving-alerts - /monitoring-alerts --- + diff --git a/content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/index.md b/content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/index.md index 2812f66d7470..cc91271ec157 100644 --- a/content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/index.md +++ b/content/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/delegated-bypass-for-push-protection/index.md @@ -2,7 +2,7 @@ title: Delegated bypass for push protection shortTitle: Delegated bypass allowTitleToDifferFromFilename: true -intro: 'You can control the ability to bypass push protection by setting up a reviewers group to assess requests. When a contributor proposes bypassing protections, any member of the bypass list can approve or block the request.' +intro: You can control the ability to bypass push protection by setting up a reviewers group to assess requests. When a contributor proposes bypassing protections, any member of the bypass list can approve or block the request. product: '{% data reusables.gated-features.secret-scanning %}' versions: feature: push-protection-delegated-bypass @@ -11,7 +11,7 @@ topics: - Secret Protection - Repositories children: - - /about-delegated-bypass-for-push-protection - /enabling-delegated-bypass-for-push-protection - /managing-requests-to-bypass-push-protection --- + diff --git a/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/index.md b/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/index.md index e29f0415305d..843d8f5bcda3 100644 --- a/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/index.md +++ b/content/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/index.md @@ -2,7 +2,7 @@ title: Working with secret scanning and push protection shortTitle: Work with secret scanning allowTitleToDifferFromFilename: true -intro: 'Avoid leaking sensitive data by blocking pushes containing tokens and other secrets.' +intro: Avoid leaking sensitive data by blocking pushes containing tokens and other secrets. product: '{% data reusables.gated-features.secret-scanning %}' versions: fpt: '*' @@ -16,10 +16,9 @@ children: - /remediating-a-leaked-secret - /push-protection-for-users - /working-with-push-protection-from-the-command-line - - /working-with-push-protection-from-the-rest-api - /working-with-push-protection-in-the-github-ui - - /working-with-push-protection-and-the-github-mcp-server redirect_from: - /code-security/secret-scanning/working-with-push-protection - /code-security/secret-scanning/pushing-a-branch-blocked-by-push-protection --- + diff --git a/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/index.md b/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/index.md index 5c3294e7563d..aec9da7d0297 100644 --- a/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/index.md +++ b/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/index.md @@ -1,7 +1,7 @@ --- title: Fixing security alerts at scale shortTitle: Fix alerts at scale -intro: 'Once you detect security alerts across your organization, you will want to create security campaigns to engage with developers and collaborate on fixing alerts.' +intro: Once you detect security alerts across your organization, you will want to create security campaigns to engage with developers and collaborate on fixing alerts. versions: feature: security-campaigns audience: @@ -12,8 +12,6 @@ topics: - Organizations - Security children: - - /about-security-campaigns - - /best-practice-fix-alerts-at-scale - /creating-managing-security-campaigns - /tracking-security-campaigns --- diff --git a/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/index.md b/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/index.md index 6e3cede7ec92..982033da23f8 100644 --- a/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/index.md +++ b/content/code-security/securing-your-organization/introduction-to-securing-your-organization-at-scale/index.md @@ -1,7 +1,7 @@ --- title: Introduction to securing your organization at scale shortTitle: Introduction -intro: 'Learn about securing your organization with {% data variables.product.prodname_security_configurations %} and {% data variables.product.prodname_global_settings %}.' +intro: Learn about securing your organization with {% data variables.product.prodname_security_configurations %} and {% data variables.product.prodname_global_settings %}. versions: feature: security-configurations topics: @@ -10,6 +10,6 @@ topics: - Organizations - Security children: - - /about-enabling-security-features-at-scale - /choosing-a-security-configuration-for-your-repositories --- + diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/index.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/index.md index 3dfa52c4d034..127cc79f6482 100644 --- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/index.md +++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/index.md @@ -11,14 +11,13 @@ topics: - Code Security - Security children: - - /about-secret-security-with-github - /assess-your-secret-risk - /viewing-the-secret-risk-assessment-report-for-your-organization - /export-risk-report-csv - /risk-report-csv-contents - - /interpreting-secret-risk-assessment-results - /protect-your-secrets - /calculating-the-cost-savings-of-push-protection - /estimating-the-price-of-secret-protection - /organizing-remediation-efforts-for-leaked-secrets --- + diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/index.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/index.md index cf2ac0403622..4269c4e57751 100644 --- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/index.md +++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/index.md @@ -12,7 +12,6 @@ topics: - Security children: - /prioritizing-dependabot-alerts-using-metrics - - /alerts-in-production-code redirect_from: - /code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilites --- diff --git a/content/code-security/security-overview/index.md b/content/code-security/security-overview/index.md index f90ce3e7af1c..067e5bb367e2 100644 --- a/content/code-security/security-overview/index.md +++ b/content/code-security/security-overview/index.md @@ -2,7 +2,7 @@ title: Viewing security information for your organization or enterprise shortTitle: Security overview allowTitleToDifferFromFilename: true -intro: 'Visualize adoption rates for {% data variables.product.prodname_GHAS %} features, alert discovery, and remediation for your organization or enterprise.' +intro: Visualize adoption rates for {% data variables.product.prodname_GHAS %} features, alert discovery, and remediation for your organization or enterprise. product: '{% data reusables.gated-features.security-overview-general %}' versions: fpt: '*' @@ -13,7 +13,6 @@ topics: - Code Security - Secret Protection children: - - /about-security-overview - /viewing-security-insights - /assessing-adoption-code-security - /assessing-code-security-risk @@ -26,3 +25,4 @@ children: - /reviewing-requests-to-bypass-push-protection - /review-alert-dismissal-requests --- + diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/index.md b/content/code-security/supply-chain-security/understanding-your-software-supply-chain/index.md index 8fea54ad486f..5c9d6913d184 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/index.md +++ b/content/code-security/supply-chain-security/understanding-your-software-supply-chain/index.md @@ -11,16 +11,8 @@ topics: shortTitle: Understand your supply chain children: - /dependency-graph-supported-package-ecosystems - - /configuring-the-dependency-graph - - /configuring-automatic-dependency-submission-for-your-repository - - /exporting-a-software-bill-of-materials-for-your-repository - - /using-the-dependency-submission-api - - /configuring-the-dependency-review-action - /customizing-your-dependency-review-action-configuration - /enforcing-dependency-review-across-an-organization - - /exploring-the-dependencies-of-a-repository - /troubleshooting-the-dependency-graph - - /preventing-changes-to-your-releases - - /verifying-the-integrity-of-a-release --- diff --git a/content/code-security/tutorials/index.md b/content/code-security/tutorials/index.md index c5f002ead31a..b864441aa70b 100644 --- a/content/code-security/tutorials/index.md +++ b/content/code-security/tutorials/index.md @@ -15,4 +15,6 @@ topics: - Dependencies - Dependabot contentType: tutorials +children: + - secure-your-organization --- diff --git a/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/best-practice-fix-alerts-at-scale.md b/content/code-security/tutorials/secure-your-organization/best-practice-fix-alerts-at-scale.md similarity index 97% rename from content/code-security/securing-your-organization/fixing-security-alerts-at-scale/best-practice-fix-alerts-at-scale.md rename to content/code-security/tutorials/secure-your-organization/best-practice-fix-alerts-at-scale.md index 5afb721b2457..37b5c25fa407 100644 --- a/content/code-security/securing-your-organization/fixing-security-alerts-at-scale/best-practice-fix-alerts-at-scale.md +++ b/content/code-security/tutorials/secure-your-organization/best-practice-fix-alerts-at-scale.md @@ -1,7 +1,7 @@ --- title: Best practices for fixing security alerts at scale -shortTitle: Best practices -intro: 'Guidance on how to create successful security campaigns that engage developers and help them grow their understanding of secure coding.' +shortTitle: Fix alerts at scale +intro: Guidance on how to create successful security campaigns that engage developers and help them grow their understanding of secure coding. allowTitleToDifferFromFilename: true product: '{% data reusables.gated-features.security-campaigns %}' type: reference @@ -15,6 +15,8 @@ topics: - Secret Protection - Organizations - Security +redirect_from: + - /code-security/securing-your-organization/fixing-security-alerts-at-scale/best-practice-fix-alerts-at-scale --- ## Elements of a successful security campaign diff --git a/content/code-security/getting-started/best-practices-for-preventing-data-leaks-in-your-organization.md b/content/code-security/tutorials/secure-your-organization/best-practices-for-preventing-data-leaks-in-your-organization.md similarity index 98% rename from content/code-security/getting-started/best-practices-for-preventing-data-leaks-in-your-organization.md rename to content/code-security/tutorials/secure-your-organization/best-practices-for-preventing-data-leaks-in-your-organization.md index 719089e68df5..4eedc682fbd9 100644 --- a/content/code-security/getting-started/best-practices-for-preventing-data-leaks-in-your-organization.md +++ b/content/code-security/tutorials/secure-your-organization/best-practices-for-preventing-data-leaks-in-your-organization.md @@ -1,6 +1,6 @@ --- title: Best practices for preventing data leaks in your organization -intro: 'Learn guidance and recommendations to help you avoid private or sensitive data present in your organization from being exposed.' +intro: Learn guidance and recommendations to help you avoid private or sensitive data present in your organization from being exposed. versions: fpt: '*' ghec: '*' @@ -12,6 +12,9 @@ topics: - Secret scanning - Secret Protection shortTitle: Prevent data leaks +redirect_from: + - /code-security/getting-started/best-practices-for-preventing-data-leaks-in-your-organization +contentType: tutorials --- ## About this guide diff --git a/content/code-security/tutorials/secure-your-organization/index.md b/content/code-security/tutorials/secure-your-organization/index.md new file mode 100644 index 000000000000..0e404a051459 --- /dev/null +++ b/content/code-security/tutorials/secure-your-organization/index.md @@ -0,0 +1,16 @@ +--- +title: Securing your organization +shortTitle: Secure your organization +intro: Build skills to help you prevent vulnerabilities and address alerts in your organization. +versions: + fpt: '*' + ghes: '*' + ghec: '*' +contentType: tutorials +children: + - /best-practices-for-preventing-data-leaks-in-your-organization + - /best-practice-fix-alerts-at-scale + - /prioritize-alerts-in-production-code + - /interpreting-secret-risk-assessment-results +--- + diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results.md b/content/code-security/tutorials/secure-your-organization/interpreting-secret-risk-assessment-results.md similarity index 90% rename from content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results.md rename to content/code-security/tutorials/secure-your-organization/interpreting-secret-risk-assessment-results.md index 2c91017f48b0..a67e21356540 100644 --- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results.md +++ b/content/code-security/tutorials/secure-your-organization/interpreting-secret-risk-assessment-results.md @@ -1,8 +1,8 @@ --- -title: 'Interpreting secret risk assessment results' -shortTitle: 'Interpret results' -intro: 'Understand the results from your {% data variables.product.prodname_secret_risk_assessment %} and prioritize leak remediation.' -permissions: 'Organization owners, security managers, and users with the **admin** role' +title: Interpreting secret risk assessment results +shortTitle: Interpret secret risk assessment +intro: Understand the results from your {% data variables.product.prodname_secret_risk_assessment %} and prioritize leak remediation. +permissions: Organization owners, security managers, and users with the **admin** role allowTitleToDifferFromFilename: true versions: feature: secret-risk-assessment @@ -11,6 +11,8 @@ topics: - Organizations - Security contentType: tutorials +redirect_from: + - /code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results --- ## Introduction diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/alerts-in-production-code.md b/content/code-security/tutorials/secure-your-organization/prioritize-alerts-in-production-code.md similarity index 92% rename from content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/alerts-in-production-code.md rename to content/code-security/tutorials/secure-your-organization/prioritize-alerts-in-production-code.md index c4e21a5ee2fc..793e05006665 100644 --- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/alerts-in-production-code.md +++ b/content/code-security/tutorials/secure-your-organization/prioritize-alerts-in-production-code.md @@ -1,7 +1,7 @@ --- title: Prioritizing Dependabot and code scanning alerts using production context -shortTitle: Alerts in production code -intro: 'Focus remediation on real risk by targeting {% data variables.product.prodname_dependabot %} and {% data variables.product.prodname_code_scanning %} alerts in artifacts deployed to production, using metadata from external registries like JFrog Artifactory, your own CI/CD workflows, or from {% data variables.product.prodname_microsoft_defender %}.' +shortTitle: Prioritize alerts in production code +intro: Focus remediation on real risk by targeting {% data variables.product.prodname_dependabot %} and {% data variables.product.prodname_code_scanning %} alerts in artifacts deployed to production, using metadata from external registries like JFrog Artifactory, your own CI/CD workflows, or from {% data variables.product.prodname_microsoft_defender %}. versions: fpt: '*' ghec: '*' @@ -14,6 +14,8 @@ topics: - Security redirect_from: - /code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/prioritizing-dependabot-alerts-using-production-context + - /code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilities/alerts-in-production-code + - /code-security/tutorials/secure-your-organization/alerts-in-production-code --- {% data reusables.security.production-context-mdc-preview %} diff --git a/content/copilot/index.md b/content/copilot/index.md index 3535e7226fed..13edc7134828 100644 --- a/content/copilot/index.md +++ b/content/copilot/index.md @@ -10,24 +10,6 @@ changelog: introLinks: overview: /copilot/get-started/what-is-github-copilot quickstart: /copilot/get-started/quickstart -featuredLinks: - startHere: - - /copilot/get-started/what-is-github-copilot - - '{% ifversion fpt %}/copilot/get-started/quickstart{% endif %}' - - '{% ifversion fpt %}/copilot/tutorials/try-extensions{% endif %}' - - '{% ifversion fpt %}/copilot/concepts/agents/coding-agent{% endif %}' - - '{% ifversion ghec %}/copilot/get-started/choose-enterprise-plan{% endif %}' - - '{% ifversion ghec %}/copilot/how-tos/set-up/set-up-for-enterprise{% endif %}' - - '{% ifversion ghec %}/copilot/tutorials/coding-agent/pilot-coding-agent{% endif %}' - popular: - - /copilot/get-started/features - - '{% ifversion fpt %}/copilot/tutorials/copilot-chat-cookbook{% endif %}' - - '{% ifversion fpt %}/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions{% endif %}' - - '{% ifversion fpt %}/copilot/how-tos/chat-with-copilot/chat-in-ide{% endif %}' - - '{% ifversion fpt %}/copilot/how-tos/use-copilot-for-common-tasks/use-copilot-in-the-cli{% endif %}' - - '{% ifversion ghec %}/copilot/how-tos/manage-and-track-spending/manage-request-allowances{% endif %}' - - '{% ifversion ghec %}/copilot/tutorials/roll-out-at-scale/enable-developers/drive-adoption{% endif %}' - - '{% ifversion ghec %}/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents{% endif %}' layout: discovery-landing heroImage: /assets/images/banner-images/hero-6 versions: diff --git a/content/copilot/tutorials/customization-library/custom-agents/bug-fix-teammate.md b/content/copilot/tutorials/customization-library/custom-agents/bug-fix-teammate.md index 7b7e96f831d2..e9cce4104082 100644 --- a/content/copilot/tutorials/customization-library/custom-agents/bug-fix-teammate.md +++ b/content/copilot/tutorials/customization-library/custom-agents/bug-fix-teammate.md @@ -61,4 +61,19 @@ You are a bug-fixing specialist focused on resolving issues in the codebase with Your goal is to make the codebase more stable and reliable by implementing working fixes, not just identifying problems. ``` +## How to use this {% data variables.copilot.copilot_custom_agent_short %} + +1. Go to the agents tab at [https://github.com/copilot/agents](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text). +1. Using the dropdown menus in the text box, select the repository and branch you want the custom agent to work in. +1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create a custom agent**. +1. An {% data variables.copilot.agent_profile %} template called `my-agent.agent.md` will open in the `.github/agents` directory, in the repository you chose. Name the file `bug-fix-teammate.agent.md` and paste in the example {% data variables.copilot.agent_profile %}. +1. Commit and merge this file into your repository's default branch. Go back to the agents tab (you may need to refresh the page), and in the text box, select your "bug-fix-teammate" agent from the dropdown. +1. In the text box, enter a task for the agent (such as the example below) and click **{% octicon "paper-airplane" aria-label="Start task" %} Start task** or press Return. + + ```copilot copy + Scan the repository for the most critical bug, then implement a targeted fix and explain your approach. + ``` + +The agent task will appear on the page below the text box. You can click into the task and follow along with the agent. For more information, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/track-copilot-sessions). + {% data reusables.copilot.custom-agents-further-reading %} diff --git a/content/copilot/tutorials/customization-library/custom-agents/cleanup-specialist.md b/content/copilot/tutorials/customization-library/custom-agents/cleanup-specialist.md index 24de467e4f57..63f72ff5effd 100644 --- a/content/copilot/tutorials/customization-library/custom-agents/cleanup-specialist.md +++ b/content/copilot/tutorials/customization-library/custom-agents/cleanup-specialist.md @@ -71,4 +71,19 @@ You are a cleanup specialist focused on making codebases cleaner and more mainta Focus on cleaning up existing code rather than adding new features. Work on both code files (.js, .py, etc.) and documentation files (.md, .txt, etc.) when removing duplication and improving consistency. ``` +## How to use this {% data variables.copilot.copilot_custom_agent_short %} + +1. Go to the agents tab at [https://github.com/copilot/agents](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text). +1. Using the dropdown menus in the text box, select the repository and branch you want the custom agent to work in. +1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create a custom agent**. +1. An {% data variables.copilot.agent_profile %} template called `my-agent.agent.md` will open in the `.github/agents` directory, in the repository you chose. Name the file `cleanup-specialist.agent.md` and paste in the example {% data variables.copilot.agent_profile %}. +1. Commit and merge this file into your repository's default branch. Go back to the agents tab (you may need to refresh the page), and in the text box, select your "cleanup-specialist" agent from the dropdown. +1. In the text box, enter a task for the agent (such as the example below) and click **{% octicon "paper-airplane" aria-label="Start task" %} Start task** or press Return. + + ```copilot copy + Refactor and clean up any messy or inconsistent code in the `src/utils` directory, then document the improvements you made. + ``` + +The agent task will appear on the page below the text box. You can click into the task and follow along with the agent. For more information, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/track-copilot-sessions). + {% data reusables.copilot.custom-agents-further-reading %} diff --git a/content/copilot/tutorials/customization-library/custom-agents/implementation-planner.md b/content/copilot/tutorials/customization-library/custom-agents/implementation-planner.md index 8bb9dd2864e6..d5d8a3f10866 100644 --- a/content/copilot/tutorials/customization-library/custom-agents/implementation-planner.md +++ b/content/copilot/tutorials/customization-library/custom-agents/implementation-planner.md @@ -75,4 +75,19 @@ For each phase, list specific tasks with complexity estimates (Small/Medium/Larg Adjust the detail level based on your needs - solo projects might need less formal documentation, while team projects benefit from more thorough planning. Focus on creating a roadmap that helps you stay organized and make progress. ``` +## How to use this {% data variables.copilot.copilot_custom_agent_short %} + +1. Go to the agents tab at [https://github.com/copilot/agents](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text). +1. Using the dropdown menus in the text box, select the repository and branch you want the custom agent to work in. +1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create a custom agent**. +1. An {% data variables.copilot.agent_profile %} template called `my-agent.agent.md` will open in the `.github/agents` directory, in the repository you chose. Name the file `implementation-planner.agent.md` and paste in the example {% data variables.copilot.agent_profile %}. +1. Commit and merge this file into your repository's default branch. Go back to the agents tab (you may need to refresh the page), and in the text box, select your "implementation-planner" agent from the dropdown. +1. In the text box, enter a task for the agent (such as the example below) and click **{% octicon "paper-airplane" aria-label="Start task" %} Start task** or press Return. + + ```copilot copy + Create a detailed implementation plan for adding user authentication to our web app, including technical approach, phases, and risk assessment. + ``` + +The agent task will appear on the page below the text box. You can click into the task and follow along with the agent. For more information, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/track-copilot-sessions). + {% data reusables.copilot.custom-agents-further-reading %} diff --git a/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md b/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md index eb304ffe8be7..f745fce663ad 100644 --- a/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md +++ b/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md @@ -74,7 +74,7 @@ Test this agent by giving it a task to complete: 1. Go to the agents tab at [https://github.com/copilot/agents](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text). 1. Using the dropdown menus in the text box, select the repository and branch you're comfortable testing with (ideally one with a minimal or outdated README). -1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create an agent**. +1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create a custom agent**. 1. An {% data variables.copilot.agent_profile %} template called `my-agent.agent.md` will open in the `.github/agents` directory, in the repository you chose. Name the file `readme-specialist.agent.md` and paste in the example {% data variables.copilot.agent_profile %}. 1. Commit and merge this file into your repository's default branch. Go back to the agents tab (you may need to refresh the page), and in the text box, select your "readme-specialist" agent from the dropdown. 1. In the text box, enter a task for the agent (such as the example below) and click **{% octicon "paper-airplane" aria-label="Start task" %} Start task** or press Return. diff --git a/content/copilot/tutorials/customization-library/prompt-files/document-api.md b/content/copilot/tutorials/customization-library/prompt-files/document-api.md index b918473da58c..8d468fdad123 100644 --- a/content/copilot/tutorials/customization-library/prompt-files/document-api.md +++ b/content/copilot/tutorials/customization-library/prompt-files/document-api.md @@ -23,7 +23,7 @@ This prompt file generates OpenAPI 3.0 specifications for REST API endpoints by ```text copy --- -mode: 'agent' +agent: 'agent' description: 'Generate OpenAPI 3.0 specification for API endpoints' --- diff --git a/content/copilot/tutorials/customization-library/prompt-files/generate-unit-tests.md b/content/copilot/tutorials/customization-library/prompt-files/generate-unit-tests.md index 084066447e77..cdc10a7bf271 100644 --- a/content/copilot/tutorials/customization-library/prompt-files/generate-unit-tests.md +++ b/content/copilot/tutorials/customization-library/prompt-files/generate-unit-tests.md @@ -23,7 +23,7 @@ This prompt file generates focused unit tests for specific functions or methods, ```text copy --- -mode: 'agent' +agent: 'agent' description: 'Generate unit tests for selected functions or methods' --- diff --git a/content/copilot/tutorials/customization-library/prompt-files/onboarding-plan.md b/content/copilot/tutorials/customization-library/prompt-files/onboarding-plan.md index 65bc684de940..79a2a6a06e06 100644 --- a/content/copilot/tutorials/customization-library/prompt-files/onboarding-plan.md +++ b/content/copilot/tutorials/customization-library/prompt-files/onboarding-plan.md @@ -21,7 +21,7 @@ contentType: tutorials ```text copy --- -mode: 'agent' +agent: 'agent' description: 'Help new team members onboard with a phased plan and suggestions for first tasks.' --- diff --git a/content/copilot/tutorials/customization-library/prompt-files/review-code.md b/content/copilot/tutorials/customization-library/prompt-files/review-code.md index b8efaf4d2ecb..8055f67c1be2 100644 --- a/content/copilot/tutorials/customization-library/prompt-files/review-code.md +++ b/content/copilot/tutorials/customization-library/prompt-files/review-code.md @@ -25,7 +25,7 @@ You can also use {% data variables.copilot.copilot_code-review_short %} in {% da ```text copy --- -mode: 'agent' +agent: 'agent' description: 'Perform a comprehensive code review' --- diff --git a/content/copilot/tutorials/customization-library/prompt-files/your-first-prompt-file.md b/content/copilot/tutorials/customization-library/prompt-files/your-first-prompt-file.md index c25ea457bf12..db497bc297fd 100644 --- a/content/copilot/tutorials/customization-library/prompt-files/your-first-prompt-file.md +++ b/content/copilot/tutorials/customization-library/prompt-files/your-first-prompt-file.md @@ -32,7 +32,7 @@ Start with this simple prompt file that helps you write clear, well-documented c ```text copy --- -mode: 'agent' +agent: 'agent' description: 'Generate a clear code explanation with examples' --- diff --git a/content/enterprise-onboarding/index.md b/content/enterprise-onboarding/index.md index c79a08f5d179..535e14c947c5 100644 --- a/content/enterprise-onboarding/index.md +++ b/content/enterprise-onboarding/index.md @@ -1,15 +1,6 @@ --- title: Enterprise onboarding intro: 'Onboard your company to {% data variables.product.prodname_ghe_cloud %} by following our recommended plan. You will set up teams with the access they need, create a policy framework to ensure compliance, and automate processes securely throughout your enterprise.' -featuredLinks: - startHere: - - '/enterprise-onboarding/getting-started-with-your-enterprise' - - '/enterprise-onboarding/adding-users-to-your-enterprise' - - '/enterprise-onboarding/setting-up-organizations-and-teams' - - '/enterprise-onboarding/support-for-your-enterprise' - popular: - - '/enterprise-onboarding/govern-people-and-repositories' - - '/enterprise-onboarding/github-actions-for-your-enterprise' layout: journey-landing journeyTracks: - id: 'getting_started' diff --git a/content/rest/copilot/copilot-usage-metrics.md b/content/rest/copilot/copilot-usage-metrics.md index 5058b836a1d6..79aafd43d534 100644 --- a/content/rest/copilot/copilot-usage-metrics.md +++ b/content/rest/copilot/copilot-usage-metrics.md @@ -10,6 +10,8 @@ autogenerated: rest allowTitleToDifferFromFilename: true --- +{% data reusables.copilot.usage-metrics-preview %} + To enable these endpoints, the "{% data variables.product.prodname_copilot_short %} usage metrics" policy must be set to **Enabled everywhere** for the enterprise. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies#defining-policies-for-your-enterprise). diff --git a/content/rest/orgs/custom-properties-for-orgs.md b/content/rest/orgs/custom-properties-for-orgs.md index 499f0ddc8701..a035a0e3d222 100644 --- a/content/rest/orgs/custom-properties-for-orgs.md +++ b/content/rest/orgs/custom-properties-for-orgs.md @@ -1,9 +1,8 @@ --- title: REST API endpoints for an organization's custom property values shortTitle: Custom properties for organizations -intro: 'Use the REST API to manage custom property values for an organization' +intro: Use the REST API to manage custom property values for an organization versions: # DO NOT MANUALLY EDIT. CHANGES WILL BE OVERWRITTEN BY A 🤖 - fpt: '*' ghec: '*' topics: - API diff --git a/content/site-policy/privacy-policies/github-codespaces-privacy-statement.md b/content/site-policy/privacy-policies/github-codespaces-privacy-statement.md deleted file mode 100644 index d8839e2e268c..000000000000 --- a/content/site-policy/privacy-policies/github-codespaces-privacy-statement.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: GitHub Codespaces Privacy Statement -redirect_from: - - /github/site-policy/github-codespaces-privacy-policy - - /github/site-policy/github-codespaces-privacy-statement -versions: - fpt: '*' -topics: - - Policy - - Legal ---- - -Effective Date: August 10, 2021 - -Use of GitHub Codespaces is subject to the [GitHub Privacy Statement](/site-policy/privacy-policies/github-privacy-statement). - -Activity on github.dev is subject to [GitHub's Beta Previews terms](/site-policy/github-terms/github-terms-of-service#j-beta-previews) - -## Using {% data variables.product.prodname_vscode %} - -GitHub Codespaces and github.dev allow for use of {% data variables.product.prodname_vscode %} in the web browser. When using {% data variables.product.prodname_vscode_shortname %} in the web browser, some telemetry collection is enabled by default and is [explained in detail on the {% data variables.product.prodname_vscode_shortname %} website](https://code.visualstudio.com/docs/configure/telemetry). Users can opt out of telemetry by going to File > Preferences > Settings under the top left menu. - -If a user chooses to opt out of telemetry capture in {% data variables.product.prodname_vscode_shortname %} while inside of a codespace as outlined, this will sync the disable telemetry preference across all future web sessions in GitHub Codespaces and github.dev. diff --git a/content/site-policy/privacy-policies/github-general-privacy-statement.md b/content/site-policy/privacy-policies/github-general-privacy-statement.md index 5228f566e243..d56ac0f754cf 100644 --- a/content/site-policy/privacy-policies/github-general-privacy-statement.md +++ b/content/site-policy/privacy-policies/github-general-privacy-statement.md @@ -10,6 +10,7 @@ redirect_from: - /github/site-policy/github-privacy-statement - /site-policy/privacy-policies/global-privacy-practices - /site-policy/privacy-policies/github-privacy-statement + - /site-policy/privacy-policies/github-codespaces-privacy-statement versions: fpt: '*' topics: diff --git a/content/site-policy/privacy-policies/index.md b/content/site-policy/privacy-policies/index.md index aef6d92cf7e6..e26a5f1176af 100644 --- a/content/site-policy/privacy-policies/index.md +++ b/content/site-policy/privacy-policies/index.md @@ -9,7 +9,6 @@ children: - /github-general-privacy-statement - /github-subprocessors - /github-cookies - - /github-codespaces-privacy-statement - /github-candidate-privacy-policy redirect_from: - /github/site-policy/github-data-protection-addendum diff --git a/data/learning-tracks/code-security.yml b/data/learning-tracks/code-security.yml index d5b604c62db8..aa513518c560 100644 --- a/data/learning-tracks/code-security.yml +++ b/data/learning-tracks/code-security.yml @@ -50,13 +50,13 @@ dependabot_alerts: - >- /code-security/concepts/supply-chain-security/about-dependabot-auto-triage-rules - >- - /code-security/dependabot/dependabot-alerts/configuring-notifications-for-dependabot-alerts + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-notifications-for-dependabot-alerts - >- - /code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-pull-requests-for-dependency-updates - >- - /code-security/dependabot/troubleshooting-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies + /code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-the-detection-of-vulnerable-dependencies - >- - /code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors + /code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-dependabot-errors dependabot_security_updates: title: Get pull requests to update your vulnerable dependencies description: >- @@ -66,15 +66,15 @@ dependabot_security_updates: - >- /code-security/concepts/supply-chain-security/about-dependabot-security-updates - >- - /code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates + /code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-security-updates - >- - /code-security/dependabot/dependabot-alerts/configuring-notifications-for-dependabot-alerts + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-notifications-for-dependabot-alerts - >- /repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository - >- - /code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-pull-requests-for-dependency-updates - >- - /code-security/dependabot/troubleshooting-dependabot/troubleshooting-the-detection-of-vulnerable-dependencies + /code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-the-detection-of-vulnerable-dependencies dependency_version_updates: title: Keep your dependencies up-to-date description: >- @@ -84,34 +84,34 @@ dependency_version_updates: - >- /code-security/concepts/supply-chain-security/about-dependabot-version-updates - >- - /code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates + /code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-version-updates - >- /code-security/dependabot/dependabot-version-updates/customizing-dependabot-prs - >- /code-security/dependabot/working-with-dependabot/dependabot-options-reference - >- - /code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot + /code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot - >- /code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions - >- - /code-security/dependabot/troubleshooting-dependabot/listing-dependencies-configured-for-version-updates + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/listing-dependencies-configured-for-version-updates - >- - /code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-dependabot - >- - /code-security/dependabot/working-with-dependabot/guidance-for-the-configuration-of-private-registries-for-dependabot + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/guidance-for-the-configuration-of-private-registries-for-dependabot - >- - /code-security/dependabot/maintain-dependencies/removing-dependabot-access-to-public-registries + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/removing-dependabot-access-to-public-registries - >- - /code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates + /code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-pull-requests-for-dependency-updates - >- - /code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-errors + /code-security/how-tos/secure-your-supply-chain/troubleshoot-dependency-security/troubleshooting-dependabot-errors secret_scanning: title: Scan for secrets description: >- Set up secret scanning to guard against accidental check-ins of tokens, passwords, and other secrets to your repository. guides: - - /code-security/secret-scanning/introduction/about-secret-scanning + - /code-security/concepts/secret-security/about-secret-scanning - /code-security/secret-scanning/enabling-secret-scanning-features/enabling-secret-scanning-for-your-repository - /code-security/secret-scanning/enabling-secret-scanning-features/enabling-push-protection-for-your-repository - >- @@ -125,7 +125,7 @@ secret_scanning: - /code-security/secret-scanning/introduction/supported-secret-scanning-patterns - >- {% ifversion secret-scanning-push-protection - %}/code-security/secret-scanning/introduction/about-push-protection{% + %}/code-security/concepts/secret-security/about-push-protection{% endif %} - >- {% ifversion secret-scanning-push-protection-for-users @@ -147,7 +147,7 @@ security_alerts: guides: - >- {% ifversion ghec or ghes - %}/code-security/security-overview/about-security-overview {% endif %} + %}/code-security/concepts/security-at-scale/about-security-overview {% endif %} - >- {% ifversion ghec or ghes %}/code-security/security-overview/assessing-adoption-code-security {% @@ -178,7 +178,7 @@ security_alerts: endif %} - >- {% ifversion ghec or ghes - %}/code-security/getting-started/auditing-security-alerts {% endif %} + %}/code-security/concepts/security-at-scale/auditing-security-alerts {% endif %} code_security_actions: title: Run code scanning with GitHub Actions description: >- @@ -186,7 +186,7 @@ code_security_actions: errors out of your repository. guides: - >- - /code-security/code-scanning/introduction-to-code-scanning/about-code-scanning + /code-security/concepts/code-scanning/about-code-scanning - >- /code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning - >- @@ -203,7 +203,7 @@ code_security_integration: description: Upload code analysis results from third-party systems to GitHub using SARIF. guides: - >- - /code-security/code-scanning/integrating-with-code-scanning/about-integration-with-code-scanning + /code-security/concepts/code-scanning/about-integration-with-code-scanning - >- /code-security/code-scanning/integrating-with-code-scanning/uploading-a-sarif-file-to-github - >- diff --git a/package.json b/package.json index 2d2a39b21897..0217006887a4 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "generate-code-quality-query-list": "tsx src/codeql-queries/scripts/generate-code-quality-query-list.ts", "generate-content-linter-docs": "tsx src/content-linter/scripts/generate-docs.ts", "move-content": "tsx src/content-render/scripts/move-content.ts", + "move-by-content-type": "tsx src/content-render/scripts/move-by-content-type.ts", "openapi-docs": "tsx src/rest/docs.ts", "playwright-test": "playwright test --config src/fixtures/playwright.config.ts --project=\"Google Chrome\"", "lint-report": "tsx src/content-linter/scripts/lint-report.ts", diff --git a/src/ai-tools/lib/file-utils.ts b/src/ai-tools/lib/file-utils.ts index c1cb00d05cb5..af8c0ef91224 100644 --- a/src/ai-tools/lib/file-utils.ts +++ b/src/ai-tools/lib/file-utils.ts @@ -85,7 +85,7 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: ) } - if (!parsed.content) { + if (parsed.content === undefined || parsed.content === null) { throw new Error('Failed to parse content from file') } @@ -133,9 +133,11 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: const formattedValue = typeof value === 'string' ? `'${value.replace(/'/g, "''")}'` : value // Find the line with this field + let foundField = false for (let i = 1; i < frontmatterEndIndex; i++) { const line = lines[i] if (line.startsWith(`${key}:`)) { + foundField = true // Simple replacement: keep the field name and spacing, replace the value const colonIndex = line.indexOf(':') const leadingSpace = line.substring(colonIndex + 1, colonIndex + 2) // Usually a space @@ -150,6 +152,12 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: break } } + + // If field doesn't exist, add it before the closing --- + if (!foundField && frontmatterEndIndex > 0) { + lines.splice(frontmatterEndIndex, 0, `${key}: ${formattedValue}`) + frontmatterEndIndex++ + } } return lines.join('\n') diff --git a/src/ai-tools/lib/prompt-utils.ts b/src/ai-tools/lib/prompt-utils.ts index ef7b726b7b55..7e2fbd887a04 100644 --- a/src/ai-tools/lib/prompt-utils.ts +++ b/src/ai-tools/lib/prompt-utils.ts @@ -2,6 +2,7 @@ import { fileURLToPath } from 'url' import fs from 'fs' import yaml from 'js-yaml' import path from 'path' +import readFrontmatter from '@/frame/lib/read-frontmatter' import { callModelsApi } from '@/ai-tools/lib/call-models-api' export interface PromptMessage { @@ -52,6 +53,67 @@ export function getRefinementDescriptions(editorTypes: string[]): string { return editorTypes.join(', ') } +/** + * Enrich context for intro prompt on index.md files + */ +export function enrichIndexContext(filePath: string, content: string): string { + if (!filePath.endsWith('index.md')) return content + + try { + const { data } = readFrontmatter(content) + if (!data) return content + + // Extract product name from file path (e.g., content/github-models/ -> "GitHub Models") + const productMatch = filePath.replace(/\\/g, '/').match(/content\/([^/]+)/) + const productName = productMatch + ? productMatch[1] + .split('-') + .map((w) => w.charAt(0).toUpperCase() + w.slice(1)) + .join(' ') + : '' + + // Get child article titles + const titles: string[] = [] + if (data.children && Array.isArray(data.children)) { + const dir = path.dirname(filePath) + for (const childPath of data.children.slice(0, 20)) { + try { + const childFile = path.join(dir, `${childPath.replace(/^\//, '')}.md`) + const childContent = fs.readFileSync(childFile, 'utf8') + const { data: childData } = readFrontmatter(childContent) + if (childData?.title) titles.push(childData.title) + } catch (error) { + if (process.env.AI_TOOLS_VERBOSE === 'true') { + console.warn('Failed to read or parse child article for intro context:', { + filePath, + childPath, + error, + }) + } + } + } + } + + // Build context note + const parts: string[] = [] + if (productName) parts.push(`Product: ${productName}`) + if (titles.length > 0) parts.push(`Child articles: ${titles.join(', ')}`) + + if (parts.length > 0) { + return `\n\n---\nContext for intro generation:\n${parts.join('\n')}\n---\n\n${content}` + } + } catch (error) { + if (process.env.AI_TOOLS_VERBOSE === 'true') { + console.warn('Failed to enrich index context for intro generation:', { + filePath, + error, + }) + } + } + + return content +} + /** * Call an editor with the given content and options */ diff --git a/src/ai-tools/prompts/content-type.md b/src/ai-tools/prompts/content-type.md new file mode 100644 index 000000000000..d784cb6a5d66 --- /dev/null +++ b/src/ai-tools/prompts/content-type.md @@ -0,0 +1,38 @@ +Your job is to read through GitHub Docs articles that I provide and figure out what content type it _most_ aligns to and add the frontmatter property `contentType` with an appropriate value. + +**Available `contentType` values (MUST choose from this exact list):** + +- 'get-started' (MANDATORY for files with "quickstart" in the filename; also use for other getting started content) +- 'concepts' (use for files with "about" in the filename; also use for other conceptual content) +- 'how-tos' (use for procedural content AND for subdirectory index.md files that have a `children` array) +- 'rai' (optional - only applies to files with "responsible-use" or "rai" in the filenames) +- 'reference' +- 'tutorials' + +There is one additional type, 'landing', which can ONLY be used on top-level product index.md files: 'content//index.md' + +**CRITICAL RULE**: If a file is an index.md with MORE than three directory parts (e.g., 'content///index.md'), it is a subdirectory index and should use 'how-tos', NOT 'landing'. The fact that it has a `children` array does NOT make it a landing page. + +For prior art, see the following file sets: + +- content/copilot/ +- content/actions/ +- content/account-and-profile/ +- content/integrations/ + +## Output format + +**Important:** Output ONLY the new frontmatter property that should be added to the file. Do not output the entire file content. + +```yaml +contentType: [selected option] +``` + + +**CRITICAL**: You are in write mode. Output ONLY the YAML frontmatter properties to update. +- Return just the YAML property in the format above +- Do NOT include analysis, explanations, or formatting +- Do NOT wrap in markdown code blocks or ```yaml +- Do NOT include the analysis format +- Just return the clean YAML properties for merging + \ No newline at end of file diff --git a/src/ai-tools/prompts/intro.md b/src/ai-tools/prompts/intro.md index 5a0b6be7e972..b6aec3c14da7 100644 --- a/src/ai-tools/prompts/intro.md +++ b/src/ai-tools/prompts/intro.md @@ -1,7 +1,20 @@ -You are an expert SEO content optimizer specializing in GitHub documentation. -Your task is to analyze a GitHub Docs content file and generate or optimize +You are an expert SEO content optimizer specializing in GitHub documentation. +Your task is to analyze a GitHub Docs content file and generate or optimize the intro frontmatter property following Google's meta description best practices. +## Context for index.md files + +For index.md files, you will receive additional context about the product and child articles: +- Product name (e.g., "GitHub Models", "GitHub Copilot") +- List of child article titles + +Use this context to create specific, product-focused intros rather than generic guidance. + +**Examples of good vs generic intros:** +- ❌ "Explore tutorials to build projects and learn new skills with GitHub" +- ❌ "Learn practical guides and step-by-step instructions" +- ✅ "Build AI applications with GitHub Models through hands-on tutorials covering model evaluation and deployment" + ## Core Requirements **Primary constraints (must-haves):** @@ -11,6 +24,11 @@ the intro frontmatter property following Google's meta description best practice * Different approach than title - don't start with same words/phrases * Lists 2-3 concrete outcomes maximum +**For index.md files:** +* Use the provided product name and child article context to create specific intros +* Identify key themes from child article titles to highlight covered topics +* Make intro specific to the product and topics, not generic guidance + **Secondary optimizations (nice-to-haves):** * Include relevant keywords naturally * Version-agnostic ({% data variables.* %} OK, avoid {% ifversion %}) @@ -46,6 +64,15 @@ the intro frontmatter property following Google's meta description best practice ✅ **Uniqueness**: Different angle from article title ✅ **Simplicity**: No colons, no complex lists, flowing sentences +**Examples for index.md files:** + +❌ **Too generic** (ignores provided context): +- Bad: "Explore practical guides and step-by-step instructions to accomplish tasks and solve problems on GitHub" + +✅ **Product-specific** (uses provided context): +- Better: "Learn to use GitHub Models for prototyping, evaluate AI models, and scale deployments across your organization" +- Or: "Build AI-powered applications with GitHub Models, from initial testing to enterprise-scale deployment" + ## Output format Use plain text formatting optimized for terminal readability: @@ -63,23 +90,23 @@ SEO-friendly alternative: "[Single, concise intro that summarizes the article's ## Character limits by content type - **Articles**: Maximum 354 characters -- **Categories**: Maximum 362 characters +- **Categories**: Maximum 362 characters - **Map Topics**: Maximum 362 characters ## Liquid syntax guidelines -**Keep these in intros** (they're acceptable for dynamic content): -- {% data variables.* %} - Product names and variables -- {% data reusables.* %} - Reusable content blocks +**When creating intros from scratch** (no existing intro field): +- Use plain text only - DO NOT use {% data variables.* %} or {% data reusables.* %} syntax +- Write out product names in full (e.g., "GitHub Copilot", "GitHub Actions", "GitHub Docs") +- This prevents hallucinating incorrect variable names -**Avoid these in intros** (version-agnostic content preferred): -- {% ifversion %} blocks - Create intros that work across all supported versions +**When updating existing intros** (intro field already exists): +- Preserve any existing {% data variables.* %} and {% data reusables.* %} references +- You may use the same variable patterns that already appear in the existing intro +- Do not introduce new variable references that weren't in the original -**Common variable meanings** (for analysis purposes): -- {% data variables.product.prodname_github %} = "GitHub" -- {% data variables.product.prodname_ghe_server %} = "GitHub Enterprise Server" -- {% data variables.product.prodname_copilot %} = "GitHub Copilot" -- {% data variables.copilot.copilot_coding_agent %} = "Copilot Coding Agent" +**Always avoid**: +- {% ifversion %} blocks - Create intros that work across all supported versions Focus on creating intros that would make sense to someone discovering this content through Google search, clearly communicating the value and relevance of the article. @@ -89,6 +116,12 @@ Focus on creating intros that would make sense to someone discovering this conte **CRITICAL**: You are in write mode. Output ONLY the YAML frontmatter property to update. +**For index.md files:** +- Use the provided product name and child article context in your intro +- Do NOT write generic intros that could apply to any product +- Make the intro specific to the actual product and covered topics + +**Output format:** - Return just: `intro: "your improved intro text"` - Do NOT include analysis, scoring, explanations, or formatting - Do NOT wrap in markdown code blocks or ```yaml diff --git a/src/ai-tools/scripts/ai-tools.ts b/src/ai-tools/scripts/ai-tools.ts index 39f150292b4e..62f2d3a04cfb 100644 --- a/src/ai-tools/scripts/ai-tools.ts +++ b/src/ai-tools/scripts/ai-tools.ts @@ -4,12 +4,14 @@ import path from 'path' import ora from 'ora' import { execFileSync } from 'child_process' import dotenv from 'dotenv' +import readFrontmatter from '@/frame/lib/read-frontmatter' import { findMarkdownFiles, mergeFrontmatterProperties } from '@/ai-tools/lib/file-utils' import { getPromptsDir, getAvailableEditorTypes, getRefinementDescriptions, callEditor, + enrichIndexContext, } from '@/ai-tools/lib/prompt-utils' import { fetchCopilotSpace, convertSpaceToPrompt } from '@/ai-tools/lib/spaces-utils' import { ensureGitHubToken } from '@/ai-tools/lib/auth-utils' @@ -196,12 +198,36 @@ program spinner.text = `Processing: ${relativePath}` try { // Expand Liquid references before processing + let originalIntro = '' + if (editorType === 'intro') { + const originalContent = fs.readFileSync(fileToProcess, 'utf8') + const { data: originalData } = readFrontmatter(originalContent) + originalIntro = originalData?.intro || '' + } + if (options.verbose) { console.log(`Expanding Liquid references in: ${relativePath}`) } runLiquidTagsScript('expand', [fileToProcess], options.verbose || false) - const content = fs.readFileSync(fileToProcess, 'utf8') + let content = fs.readFileSync(fileToProcess, 'utf8') + + // For intro prompt, add original intro and enrich context + if (editorType === 'intro') { + if (originalIntro) { + content = `\n\n---\nOriginal intro (unresolved): ${originalIntro}\n---\n\n${content}` + } + content = enrichIndexContext(fileToProcess, content) + } + + // For content-type prompt, skip files that already have contentType + if (editorType === 'content-type' && content.includes('contentType:')) { + spinner.stop() + console.log(`⏭️ Skipping ${relativePath} (already has contentType)`) + runLiquidTagsScript('restore', [fileToProcess], false) + continue + } + const answer = await callEditor( editorType, content, @@ -213,7 +239,7 @@ program spinner.stop() if (options.write) { - if (editorType === 'intro') { + if (editorType === 'intro' || editorType === 'content-type') { // For frontmatter addition/modification, merge properties instead of overwriting entire file const updatedContent = mergeFrontmatterProperties(fileToProcess, answer) fs.writeFileSync(fileToProcess, updatedContent, 'utf8') diff --git a/src/article-api/lib/get-link-data.ts b/src/article-api/lib/get-link-data.ts new file mode 100644 index 000000000000..f9c33c74608e --- /dev/null +++ b/src/article-api/lib/get-link-data.ts @@ -0,0 +1,48 @@ +import type { Context, Page } from '@/types' +import type { LinkData } from '@/article-api/transformers/types' + +/** + * Resolves link data (title, href, intro) for a given href and page + * + * This helper is used by landing page transformers to build link lists. + * It resolves the page from an href, renders its title and intro, and + * returns the canonical permalink. + * + * @param href - The href to resolve (can be relative or absolute) + * @param languageCode - The language code for the current page + * @param pathname - The current page's pathname (for relative resolution) + * @param context - The rendering context + * @param resolvePath - Function to resolve an href to a Page object + * @returns LinkData with resolved title, href, and optional intro + */ +export async function getLinkData( + href: string, + languageCode: string, + pathname: string, + context: Context, + resolvePath: ( + href: string, + languageCode: string, + pathname: string, + context: Context, + ) => Page | undefined, +): Promise { + const linkedPage = resolvePath(href, languageCode, pathname, context) + if (!linkedPage) return { href, title: href } + + const title = await linkedPage.renderTitle(context, { unwrap: true }) + const intro = linkedPage.intro + ? await linkedPage.renderProp('intro', context, { textOnly: true }) + : '' + + const permalink = linkedPage.permalinks.find( + (p) => p.languageCode === languageCode && p.pageVersion === context.currentVersion, + ) + const resolvedHref = permalink ? permalink.href : href + + return { + href: resolvedHref, + title, + intro, + } +} diff --git a/src/article-api/lib/load-template.ts b/src/article-api/lib/load-template.ts new file mode 100644 index 000000000000..2cf169ba791b --- /dev/null +++ b/src/article-api/lib/load-template.ts @@ -0,0 +1,31 @@ +import { readFileSync } from 'fs' +import { join, dirname } from 'path' +import { fileURLToPath } from 'url' + +// Get the directory path for the transformers directory +// This will be used to resolve template paths relative to transformers +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +/** + * Load a template file from the templates directory + * + * This helper loads Liquid template files used by transformers. + * Templates are located in src/article-api/templates/ + * + * @param templateName - The name of the template file (e.g., 'landing-page.template.md') + * @returns The template content as a string + * + * @example + * ```typescript + * const template = loadTemplate('landing-page.template.md') + * const rendered = await renderContent(template, context) + * ``` + */ +export function loadTemplate(templateName: string): string { + // Templates are in ../templates relative to the lib directory + // lib is at src/article-api/lib + // templates is at src/article-api/templates + const templatePath = join(__dirname, '../templates', templateName) + return readFileSync(templatePath, 'utf8') +} diff --git a/src/article-api/lib/resolve-path.ts b/src/article-api/lib/resolve-path.ts new file mode 100644 index 000000000000..88acc8f618b1 --- /dev/null +++ b/src/article-api/lib/resolve-path.ts @@ -0,0 +1,107 @@ +import type { Context, Page } from '@/types' + +/** + * Resolves an href to a Page object from the context + * + * This function handles various href formats: + * - External URLs (http/https) - returns undefined + * - Language-prefixed absolute paths (/en/copilot/...) - direct lookup + * - Absolute paths without language (/copilot/...) - adds language prefix + * - Relative paths (get-started) - resolved relative to pathname + * + * The function searches through context.pages using multiple strategies: + * 1. Direct key lookup with language prefix + * 2. Relative path joining with current pathname + * 3. endsWith matching for versioned keys (e.g., /en/enterprise-cloud@latest/...) + * + * @param href - The href to resolve + * @param languageCode - The language code (e.g., 'en') + * @param pathname - The current page's pathname (e.g., '/en/copilot') + * @param context - The rendering context containing all pages + * @returns The resolved Page object, or undefined if not found + * + * @example + * ```typescript + * // Absolute path with language + * resolvePath('/en/copilot/quickstart', 'en', '/en/copilot', context) + * + * // Absolute path without language (adds /en/) + * resolvePath('/copilot/quickstart', 'en', '/en/copilot', context) + * + * // Relative path (resolves to /en/copilot/quickstart) + * resolvePath('quickstart', 'en', '/en/copilot', context) + * + * // Relative path with leading slash (resolves relative to pathname) + * resolvePath('/quickstart', 'en', '/en/copilot', context) // -> /en/copilot/quickstart + * ``` + */ +export function resolvePath( + href: string, + languageCode: string, + pathname: string, + context: Context, +): Page | undefined { + // External URLs cannot be resolved + if (href.startsWith('http://') || href.startsWith('https://')) { + return undefined + } + + if (!context.pages) { + return undefined + } + + // Normalize href to start with / + const normalizedHref = href.startsWith('/') ? href : `/${href}` + + // Build full path with language prefix if needed + let fullPath: string + if (normalizedHref.startsWith(`/${languageCode}/`)) { + // Already has language prefix + fullPath = normalizedHref + } else if (href.startsWith('/') && !href.startsWith(`/${languageCode}/`)) { + // Path with leading slash but no language prefix - treat as relative to pathname + // e.g., pathname='/en/copilot', href='/get-started' -> '/en/copilot/get-started' + fullPath = pathname + href + } else { + // Relative path - add language prefix + // e.g., href='quickstart' -> '/en/quickstart' + fullPath = `/${languageCode}${normalizedHref}` + } + + // Clean up trailing slashes + const cleanPath = fullPath.replace(/\/$/, '') + + // Strategy 1: Direct lookup + if (context.pages[cleanPath]) { + return context.pages[cleanPath] + } + + // Strategy 2: Try relative to current pathname + const currentPath = pathname.replace(/\/$/, '') + const relativeHref = href.startsWith('/') ? href.slice(1) : href + const joinedPath = `${currentPath}/${relativeHref}` + + if (context.pages[joinedPath]) { + return context.pages[joinedPath] + } + + // Strategy 3: Search for keys that end with the path (handles versioned keys) + // e.g., key='/en/enterprise-cloud@latest/copilot' should match path='/en/copilot' + for (const [key, page] of Object.entries(context.pages)) { + if (key.endsWith(cleanPath) || key.endsWith(`${cleanPath}/`)) { + return page + } + } + + // Strategy 4: If href started with /, try endsWith matching on that too + if (href.startsWith('/')) { + const hrefClean = href.replace(/\/$/, '') + for (const [key, page] of Object.entries(context.pages)) { + if (key.endsWith(hrefClean) || key.endsWith(`${hrefClean}/`)) { + return page + } + } + } + + return undefined +} diff --git a/src/article-api/templates/landing-page.template.md b/src/article-api/templates/landing-page.template.md new file mode 100644 index 000000000000..cf0dac2168d1 --- /dev/null +++ b/src/article-api/templates/landing-page.template.md @@ -0,0 +1,25 @@ +# {{ title }} + +{% if intro %} +{{ intro }} +{% endif %} + +{% for section in sections %} +{% if section.title %} +## {{ section.title }} +{% endif %} + +{% for group in section.groups %} +{% if group.title %} +### {{ group.title }} +{% endif %} + +{% for link in group.links %} +* [{{ link.title }}]({{ link.href }}) +{% if link.intro %} + {{ link.intro }} +{% endif %} +{% endfor %} + +{% endfor %} +{% endfor %} \ No newline at end of file diff --git a/src/article-api/tests/get-link-data.ts b/src/article-api/tests/get-link-data.ts new file mode 100644 index 000000000000..fc11254faba3 --- /dev/null +++ b/src/article-api/tests/get-link-data.ts @@ -0,0 +1,136 @@ +import { describe, expect, test, vi } from 'vitest' +import { getLinkData } from '@/article-api/lib/get-link-data' +import type { Context, Page, Permalink } from '@/types' + +// Helper to create a minimal mock page +function createMockPage(options: { + title?: string + intro?: string + permalinks?: Partial[] +}): Page { + const page = { + title: options.title || 'Test Title', + intro: options.intro, + permalinks: (options.permalinks || []) as Permalink[], + renderTitle: vi.fn().mockResolvedValue(options.title || 'Test Title'), + renderProp: vi.fn().mockResolvedValue(options.intro || ''), + } + return page as unknown as Page +} + +// Helper to create a minimal context +function createContext(currentVersion = 'free-pro-team@latest'): Context { + return { currentVersion } as unknown as Context +} + +describe('getLinkData', () => { + describe('when page is not found', () => { + test('returns href as both href and title when page not resolved', async () => { + const resolvePath = vi.fn().mockReturnValue(undefined) + const context = createContext() + + const result = await getLinkData( + '/en/missing-page', + 'en', + '/en/current', + context, + resolvePath, + ) + + expect(result).toEqual({ + href: '/en/missing-page', + title: '/en/missing-page', + }) + }) + }) + + describe('when page is found', () => { + test('returns rendered title from page', async () => { + const page = createMockPage({ title: 'My Page Title' }) + const resolvePath = vi.fn().mockReturnValue(page) + const context = createContext() + + const result = await getLinkData('/en/some-page', 'en', '/en/current', context, resolvePath) + + expect(result.title).toBe('My Page Title') + expect(page.renderTitle).toHaveBeenCalledWith(context, { unwrap: true }) + }) + + test('returns rendered intro when page has intro', async () => { + const page = createMockPage({ + title: 'Page', + intro: 'This is the intro text', + }) + const resolvePath = vi.fn().mockReturnValue(page) + const context = createContext() + + const result = await getLinkData('/en/some-page', 'en', '/en/current', context, resolvePath) + + expect(result.intro).toBe('This is the intro text') + expect(page.renderProp).toHaveBeenCalledWith('intro', context, { textOnly: true }) + }) + + test('returns empty intro when page has no intro', async () => { + const page = createMockPage({ title: 'Page', intro: undefined }) + const resolvePath = vi.fn().mockReturnValue(page) + const context = createContext() + + const result = await getLinkData('/en/some-page', 'en', '/en/current', context, resolvePath) + + expect(result.intro).toBe('') + expect(page.renderProp).not.toHaveBeenCalled() + }) + + test('uses permalink href when matching permalink found', async () => { + const page = createMockPage({ + title: 'Page', + permalinks: [ + { languageCode: 'en', pageVersion: 'free-pro-team@latest', href: '/en/resolved-path' }, + ], + }) + const resolvePath = vi.fn().mockReturnValue(page) + const context = createContext('free-pro-team@latest') + + const result = await getLinkData( + '/en/original-href', + 'en', + '/en/current', + context, + resolvePath, + ) + + expect(result.href).toBe('/en/resolved-path') + }) + + test('falls back to original href when no matching permalink', async () => { + const page = createMockPage({ + title: 'Page', + permalinks: [{ languageCode: 'ja', pageVersion: 'free-pro-team@latest', href: '/ja/page' }], + }) + const resolvePath = vi.fn().mockReturnValue(page) + const context = createContext('free-pro-team@latest') + + const result = await getLinkData( + '/en/original-href', + 'en', + '/en/current', + context, + resolvePath, + ) + + expect(result.href).toBe('/en/original-href') + }) + }) + + describe('resolvePath function usage', () => { + test('passes correct arguments to resolvePath', async () => { + const page = createMockPage({ title: 'Page' }) + const resolvePath = vi.fn().mockReturnValue(page) + const context = createContext() + + await getLinkData('/en/target', 'en', '/en/current', context, resolvePath) + + expect(resolvePath).toHaveBeenCalledWith('/en/target', 'en', '/en/current', context) + }) + }) +}) diff --git a/src/article-api/tests/github-apps-transformer.ts b/src/article-api/tests/github-apps-transformer.ts index 003ea686345a..9a926d3d44c2 100644 --- a/src/article-api/tests/github-apps-transformer.ts +++ b/src/article-api/tests/github-apps-transformer.ts @@ -70,11 +70,15 @@ describe('GitHub Apps transformer', () => { }) test('endpoints are formatted as bullet lists', async () => { - const res = await get( - makeURL( - '/en/rest/authentication/endpoints-available-for-github-app-installation-access-tokens', - ), + const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1' + const url = makeURL( + '/en/rest/authentication/endpoints-available-for-github-app-installation-access-tokens', ) + const startTime = DEBUG ? Date.now() : 0 + if (DEBUG) console.log(`[DEBUG] Test sending request to ${url}`) + const res = await get(url) + if (DEBUG) + console.log(`[DEBUG] Test response: ${res.statusCode} in ${Date.now() - startTime}ms`) expect(res.statusCode).toBe(200) // Check for bullet list items with asterisks (per content guidelines) diff --git a/src/article-api/tests/load-template.ts b/src/article-api/tests/load-template.ts new file mode 100644 index 000000000000..ade3d72fadf6 --- /dev/null +++ b/src/article-api/tests/load-template.ts @@ -0,0 +1,20 @@ +import { describe, expect, test } from 'vitest' +import { loadTemplate } from '@/article-api/lib/load-template' + +describe('loadTemplate', () => { + test('loads an existing template file', () => { + const content = loadTemplate('landing-page.template.md') + expect(content).toContain('# {{ title }}') + expect(content).toContain('{% for section in sections %}') + }) + + test('throws error for non-existent template', () => { + expect(() => loadTemplate('non-existent-template.md')).toThrow() + }) + + test('returns template content as string', () => { + const content = loadTemplate('landing-page.template.md') + expect(typeof content).toBe('string') + expect(content.length).toBeGreaterThan(0) + }) +}) diff --git a/src/article-api/tests/resolve-path.ts b/src/article-api/tests/resolve-path.ts new file mode 100644 index 000000000000..6156b8c1e689 --- /dev/null +++ b/src/article-api/tests/resolve-path.ts @@ -0,0 +1,123 @@ +import { describe, expect, test } from 'vitest' +import { resolvePath } from '@/article-api/lib/resolve-path' +import type { Context, Page } from '@/types' + +// Helper to create a minimal mock page +function createMockPage(relativePath: string): Page { + return { + relativePath, + permalinks: [], + } as unknown as Page +} + +// Helper to create a minimal context with pages +function createContext(pages: Record): Context { + return { pages } as unknown as Context +} + +describe('resolvePath', () => { + describe('external URLs', () => { + test('returns undefined for http URLs', () => { + const context = createContext({}) + const result = resolvePath('http://example.com', 'en', '/en/copilot', context) + expect(result).toBeUndefined() + }) + + test('returns undefined for https URLs', () => { + const context = createContext({}) + const result = resolvePath('https://example.com/path', 'en', '/en/copilot', context) + expect(result).toBeUndefined() + }) + }) + + describe('missing context.pages', () => { + test('returns undefined when context.pages is undefined', () => { + const context = {} as Context + const result = resolvePath('/en/copilot', 'en', '/en', context) + expect(result).toBeUndefined() + }) + }) + + describe('language-prefixed absolute paths', () => { + test('finds page with exact language-prefixed path', () => { + const page = createMockPage('copilot/quickstart.md') + const context = createContext({ + '/en/copilot/quickstart': page, + }) + const result = resolvePath('/en/copilot/quickstart', 'en', '/en/copilot', context) + expect(result).toBe(page) + }) + + test('handles trailing slash in href', () => { + const page = createMockPage('copilot/quickstart.md') + const context = createContext({ + '/en/copilot/quickstart': page, + }) + const result = resolvePath('/en/copilot/quickstart/', 'en', '/en/copilot', context) + expect(result).toBe(page) + }) + }) + + describe('paths with leading slash (relative to pathname)', () => { + test('resolves path relative to current pathname', () => { + const page = createMockPage('copilot/get-started.md') + const context = createContext({ + '/en/copilot/get-started': page, + }) + const result = resolvePath('/get-started', 'en', '/en/copilot', context) + expect(result).toBe(page) + }) + + test('handles nested paths relative to pathname', () => { + const page = createMockPage('copilot/tutorials/basics.md') + const context = createContext({ + '/en/copilot/tutorials/basics': page, + }) + const result = resolvePath('/tutorials/basics', 'en', '/en/copilot', context) + expect(result).toBe(page) + }) + }) + + describe('relative paths without leading slash', () => { + test('resolves relative path by joining with pathname', () => { + const page = createMockPage('copilot/quickstart.md') + const context = createContext({ + '/en/copilot/quickstart': page, + }) + const result = resolvePath('quickstart', 'en', '/en/copilot', context) + expect(result).toBe(page) + }) + }) + + describe('versioned keys (endsWith matching)', () => { + test('finds versioned page using endsWith strategy', () => { + const page = createMockPage('copilot/index.md') + // The key ends with the path portion after the version string + const context = createContext({ + '/en/enterprise-cloud@latest/copilot': page, + }) + // When looking for /copilot, strategy 4 will find keys ending with /copilot + const result = resolvePath('/copilot', 'en', '/en', context) + expect(result).toBe(page) + }) + + test('finds page when key has trailing slash', () => { + const page = createMockPage('copilot/index.md') + const context = createContext({ + '/en/copilot/': page, + }) + const result = resolvePath('/en/copilot', 'en', '/en', context) + expect(result).toBe(page) + }) + }) + + describe('not found cases', () => { + test('returns undefined when page does not exist', () => { + const context = createContext({ + '/en/other': createMockPage('other.md'), + }) + const result = resolvePath('/en/copilot', 'en', '/en', context) + expect(result).toBeUndefined() + }) + }) +}) diff --git a/src/article-api/tests/rest-transformer.ts b/src/article-api/tests/rest-transformer.ts index f306102197f6..3cd8e6d5ad85 100644 --- a/src/article-api/tests/rest-transformer.ts +++ b/src/article-api/tests/rest-transformer.ts @@ -81,7 +81,13 @@ describe('REST transformer', () => { }) test('Status codes are formatted correctly', async () => { - const res = await get(makeURL('/en/rest/actions/artifacts')) + const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1' + const url = makeURL('/en/rest/actions/artifacts') + const startTime = DEBUG ? Date.now() : 0 + if (DEBUG) console.log(`[DEBUG] Test sending request to ${url}`) + const res = await get(url) + if (DEBUG) + console.log(`[DEBUG] Test response: ${res.statusCode} in ${Date.now() - startTime}ms`) expect(res.statusCode).toBe(200) // Check for status codes section diff --git a/src/article-api/tests/toc-transformer.ts b/src/article-api/tests/toc-transformer.ts new file mode 100644 index 000000000000..4bef199a0879 --- /dev/null +++ b/src/article-api/tests/toc-transformer.ts @@ -0,0 +1,55 @@ +import { describe, expect, test } from 'vitest' + +import { get } from '@/tests/helpers/e2etest' + +const makeURL = (pathname: string): string => + `/api/article/body?${new URLSearchParams({ pathname })}` + +describe('toc transformer', () => { + test('renders a category page (3-segment URL) with children', async () => { + // /en/actions/category is a category page (documentType: category) with children but no layout + const res = await get(makeURL('/en/actions/category')) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for title and intro + expect(res.body).toContain('# Category page of GitHub Actions') + expect(res.body).toContain('Learn how to migrate your existing CI/CD workflows') + + // Should have Links section with children (uses full title, not shortTitle) + expect(res.body).toContain('## Links') + expect(res.body).toContain('[Subcategory page about Actions](/en/actions/category/subcategory)') + }) + + test('renders a subcategory page (4+-segment URL) with children', async () => { + // /en/actions/category/subcategory is a subcategory page (documentType: subcategory) with children but no layout + const res = await get(makeURL('/en/actions/category/subcategory')) + expect(res.statusCode).toBe(200) + expect(res.headers['content-type']).toContain('text/markdown') + + // Check for title + expect(res.body).toContain('# Subcategory page about Actions') + + // Should have Links section with children + expect(res.body).toContain('## Links') + }) + + test('includes child intro text', async () => { + const res = await get(makeURL('/en/actions/category')) + expect(res.statusCode).toBe(200) + + // Each child link should have its intro text below + expect(res.body).toContain("Here's the intro for") + }) + + test('resolves child page titles correctly', async () => { + const res = await get(makeURL('/en/actions/category/subcategory')) + expect(res.statusCode).toBe(200) + + // Should NOT have href paths as titles + expect(res.body).not.toContain('* [/en/actions/category/subcategory/') + + // Should have proper article titles (or shortTitle) + expect(res.body).toMatch(/\[.*\]\(\/en\/actions\/category\/subcategory\/.*\)/) + }) +}) diff --git a/src/article-api/transformers/github-apps-transformer.ts b/src/article-api/transformers/github-apps-transformer.ts index 0d6a4732a1ab..522c9873b50d 100644 --- a/src/article-api/transformers/github-apps-transformer.ts +++ b/src/article-api/transformers/github-apps-transformer.ts @@ -8,6 +8,7 @@ import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) +const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1' // GitHub Apps data types interface GitHubAppsOperation { @@ -100,6 +101,9 @@ export class GithubAppsTransformer implements PageTransformer { context: Context, apiVersion?: string, ): Promise { + const startTime = DEBUG ? Date.now() : 0 + if (DEBUG) console.log(`[DEBUG] GitHubAppsTransformer: ${pathname}`) + // Import getAppsData dynamically to avoid circular dependencies const { getAppsData } = await import('@/github-apps/lib/index') @@ -216,6 +220,10 @@ export class GithubAppsTransformer implements PageTransformer { }) } + if (DEBUG) + console.log( + `[DEBUG] GitHubAppsTransformer.transform completed in ${Date.now() - startTime}ms`, + ) return finalContent } diff --git a/src/article-api/transformers/index.ts b/src/article-api/transformers/index.ts index 589439ed8ea7..7974441e18fa 100644 --- a/src/article-api/transformers/index.ts +++ b/src/article-api/transformers/index.ts @@ -6,6 +6,7 @@ import { AuditLogsTransformer } from './audit-logs-transformer' import { GraphQLTransformer } from './graphql-transformer' import { GithubAppsTransformer } from './github-apps-transformer' import { WebhooksTransformer } from './webhooks-transformer' +import { TocTransformer } from './toc-transformer' /** * Global transformer registry @@ -20,6 +21,7 @@ transformerRegistry.register(new AuditLogsTransformer()) transformerRegistry.register(new GraphQLTransformer()) transformerRegistry.register(new GithubAppsTransformer()) transformerRegistry.register(new WebhooksTransformer()) +transformerRegistry.register(new TocTransformer()) export { TransformerRegistry } from './types' export type { PageTransformer } from './types' diff --git a/src/article-api/transformers/rest-transformer.ts b/src/article-api/transformers/rest-transformer.ts index 87f6b9abd417..5ba981f1a55d 100644 --- a/src/article-api/transformers/rest-transformer.ts +++ b/src/article-api/transformers/rest-transformer.ts @@ -10,6 +10,7 @@ import { fastTextOnly } from '@/content-render/unified/text-only' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) +const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1' /** * Transformer for REST API pages @@ -28,6 +29,9 @@ export class RestTransformer implements PageTransformer { context: Context, apiVersion?: string, ): Promise { + const startTime = DEBUG ? Date.now() : 0 + if (DEBUG) console.log(`[DEBUG] RestTransformer: ${pathname}`) + // Import getRest dynamically to avoid circular dependencies const { default: getRest } = await import('@/rest/lib/index') @@ -110,6 +114,7 @@ export class RestTransformer implements PageTransformer { markdownRequested: true, }) + if (DEBUG) console.log(`[DEBUG] RestTransformer completed in ${Date.now() - startTime}ms`) return rendered } diff --git a/src/article-api/transformers/toc-transformer.ts b/src/article-api/transformers/toc-transformer.ts new file mode 100644 index 000000000000..f74c38a7fa31 --- /dev/null +++ b/src/article-api/transformers/toc-transformer.ts @@ -0,0 +1,78 @@ +import type { Context, Page } from '@/types' +import type { PageTransformer, TemplateData, Section } from './types' +import { renderContent } from '@/content-render/index' +import { loadTemplate } from '@/article-api/lib/load-template' +import { resolvePath } from '@/article-api/lib/resolve-path' +import { getLinkData } from '@/article-api/lib/get-link-data' + +interface CategoryPage extends Page { + children?: string[] +} + +/** + * Transformer for table of contents (TOC) landing pages - pages with children but no specific layout. + * These are simple navigation pages (category/subcategory) that list child pages with titles and intros. + * Corresponds to TocLanding component in the web UI. + */ +export class TocTransformer implements PageTransformer { + templateName = 'landing-page.template.md' + + canTransform(page: Page): boolean { + // Transform pages that have children but no layout specified + // These are typically category or subcategory pages + const categoryPage = page as CategoryPage + return ( + !page.layout && + (page.documentType === 'category' || page.documentType === 'subcategory') && + !!categoryPage.children && + categoryPage.children.length > 0 + ) + } + + async transform(page: Page, pathname: string, context: Context): Promise { + const templateData = await this.prepareTemplateData(page, pathname, context) + const templateContent = loadTemplate(this.templateName) + + return await renderContent(templateContent, { + ...context, + ...templateData, + markdownRequested: true, + }) + } + + private async prepareTemplateData( + page: Page, + pathname: string, + context: Context, + ): Promise { + const mapPage = page as CategoryPage + const languageCode = page.languageCode || 'en' + const sections: Section[] = [] + + // Get all child pages + if (mapPage.children?.length) { + const links = await Promise.all( + mapPage.children.map(async (childHref) => { + return await getLinkData(childHref, languageCode, pathname, context, resolvePath) + }), + ) + + const validLinks = links.filter((l) => l.href) + if (validLinks.length > 0) { + sections.push({ + title: 'Links', + groups: [{ title: null, links: validLinks }], + }) + } + } + + const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' + const title = await page.renderTitle(context, { unwrap: true }) + + return { + title, + intro, + sections, + } + } +} diff --git a/src/article-api/transformers/types.ts b/src/article-api/transformers/types.ts index 4916aea2283e..aa2441f816e2 100644 --- a/src/article-api/transformers/types.ts +++ b/src/article-api/transformers/types.ts @@ -1,5 +1,39 @@ import type { Context, Page } from '@/types' +/** + * Link data for landing page sections + */ +export interface LinkData { + href: string + title: string + intro?: string +} + +/** + * Group of links with an optional title + */ +export interface LinkGroup { + title: string | null + links: LinkData[] +} + +/** + * Section containing multiple link groups + */ +export interface Section { + title: string | null + groups: LinkGroup[] +} + +/** + * Template data structure for landing pages + */ +export interface TemplateData { + title: string + intro: string + sections: Section[] +} + /** * Base interface for page-to-markdown transformers * @@ -7,6 +41,13 @@ import type { Context, Page } from '@/types' * into markdown format for the Article API */ export interface PageTransformer { + /** + * Optional: The name of the template file to use for rendering + * If provided, can be used by helper functions to load the template + * Example: 'landing-page.template.md' + */ + templateName?: string + /** * Check if this transformer can handle the given page */ diff --git a/src/audit-logs/data/fpt/organization.json b/src/audit-logs/data/fpt/organization.json index ee828e6f534f..4d1501b86153 100644 --- a/src/audit-logs/data/fpt/organization.json +++ b/src/audit-logs/data/fpt/organization.json @@ -520,7 +520,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -538,7 +538,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -555,7 +555,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -574,7 +574,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -597,7 +597,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -620,7 +620,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -643,7 +643,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -659,7 +659,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -677,7 +677,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -695,7 +695,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -2144,96 +2144,6 @@ "request_access_security_header" ] }, - { - "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", - "fields": [ - "request_id", - "team", - "created_at", - "user_id", - "@timestamp", - "number", - "org", - "title", - "actor", - "actor_id", - "user", - "action", - "user_agent", - "operation_type", - "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" - }, - { - "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", - "fields": [ - "actor_id", - "action", - "@timestamp", - "user_agent", - "operation_type", - "user_id", - "actor", - "number", - "user", - "created_at", - "request_id", - "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" - }, - { - "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", - "fields": [ - "action", - "_document_id", - "request_id", - "org", - "@timestamp", - "actor_id", - "operation_type", - "user", - "user_id", - "org_id", - "user_agent", - "actor", - "number", - "team", - "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" - }, - { - "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", - "fields": [ - "created_at", - "_document_id", - "title", - "user", - "user_agent", - "org", - "operation_type", - "actor_id", - "@timestamp", - "actor", - "team", - "action", - "org_id", - "request_id", - "user_id", - "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" - }, { "action": "enterprise_announcement.create", "description": "A global announcement banner was created for the enterprise.", @@ -16840,67 +16750,6 @@ "team_type" ] }, - { - "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", - "docs_reference_links": "N/A", - "fields": [ - "business_id", - "operation_type", - "@timestamp", - "user_agent", - "actor", - "actor_id", - "user", - "business", - "action", - "request_id", - "created_at", - "user_id", - "_document_id" - ] - }, - { - "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", - "fields": [ - "org_id", - "action", - "operation_type", - "request_id", - "actor", - "org", - "created_at", - "actor_id", - "user", - "user_id", - "@timestamp", - "user_agent", - "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" - }, - { - "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", - "docs_reference_links": "N/A", - "fields": [ - "actor_id", - "@timestamp", - "action", - "_document_id", - "user_agent", - "user_id", - "business_id", - "request_id", - "user", - "business", - "operation_type", - "actor", - "created_at" - ] - }, { "action": "team_group_mapping.create", "description": "N/A", diff --git a/src/audit-logs/data/ghec/enterprise.json b/src/audit-logs/data/ghec/enterprise.json index 72992d10e527..923e4d2a0f9e 100644 --- a/src/audit-logs/data/ghec/enterprise.json +++ b/src/audit-logs/data/ghec/enterprise.json @@ -3394,7 +3394,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -3412,7 +3412,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -3429,7 +3429,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -3448,7 +3448,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -3471,7 +3471,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -3494,7 +3494,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -3517,7 +3517,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -3533,7 +3533,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -3551,7 +3551,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -3569,7 +3569,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -4968,96 +4968,6 @@ "request_access_security_header" ] }, - { - "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", - "fields": [ - "request_id", - "team", - "created_at", - "user_id", - "@timestamp", - "number", - "org", - "title", - "actor", - "actor_id", - "user", - "action", - "user_agent", - "operation_type", - "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" - }, - { - "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", - "fields": [ - "actor_id", - "action", - "@timestamp", - "user_agent", - "operation_type", - "user_id", - "actor", - "number", - "user", - "created_at", - "request_id", - "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" - }, - { - "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", - "fields": [ - "action", - "_document_id", - "request_id", - "org", - "@timestamp", - "actor_id", - "operation_type", - "user", - "user_id", - "org_id", - "user_agent", - "actor", - "number", - "team", - "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" - }, - { - "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", - "fields": [ - "created_at", - "_document_id", - "title", - "user", - "user_agent", - "org", - "operation_type", - "actor_id", - "@timestamp", - "actor", - "team", - "action", - "org_id", - "request_id", - "user_id", - "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" - }, { "action": "enterprise_announcement.create", "description": "A global announcement banner was created for the enterprise.", @@ -20142,67 +20052,6 @@ "team_type" ] }, - { - "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", - "docs_reference_links": "N/A", - "fields": [ - "business_id", - "operation_type", - "@timestamp", - "user_agent", - "actor", - "actor_id", - "user", - "business", - "action", - "request_id", - "created_at", - "user_id", - "_document_id" - ] - }, - { - "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", - "fields": [ - "org_id", - "action", - "operation_type", - "request_id", - "actor", - "org", - "created_at", - "actor_id", - "user", - "user_id", - "@timestamp", - "user_agent", - "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" - }, - { - "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", - "docs_reference_links": "N/A", - "fields": [ - "actor_id", - "@timestamp", - "action", - "_document_id", - "user_agent", - "user_id", - "business_id", - "request_id", - "user", - "business", - "operation_type", - "actor", - "created_at" - ] - }, { "action": "team.promote_maintainer", "description": "A user was promoted from a team member to a team maintainer.", diff --git a/src/audit-logs/data/ghec/organization.json b/src/audit-logs/data/ghec/organization.json index ee828e6f534f..4d1501b86153 100644 --- a/src/audit-logs/data/ghec/organization.json +++ b/src/audit-logs/data/ghec/organization.json @@ -520,7 +520,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -538,7 +538,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -555,7 +555,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -574,7 +574,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -597,7 +597,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -620,7 +620,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -643,7 +643,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -659,7 +659,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -677,7 +677,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -695,7 +695,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -2144,96 +2144,6 @@ "request_access_security_header" ] }, - { - "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", - "fields": [ - "request_id", - "team", - "created_at", - "user_id", - "@timestamp", - "number", - "org", - "title", - "actor", - "actor_id", - "user", - "action", - "user_agent", - "operation_type", - "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" - }, - { - "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", - "fields": [ - "actor_id", - "action", - "@timestamp", - "user_agent", - "operation_type", - "user_id", - "actor", - "number", - "user", - "created_at", - "request_id", - "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" - }, - { - "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", - "fields": [ - "action", - "_document_id", - "request_id", - "org", - "@timestamp", - "actor_id", - "operation_type", - "user", - "user_id", - "org_id", - "user_agent", - "actor", - "number", - "team", - "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" - }, - { - "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", - "fields": [ - "created_at", - "_document_id", - "title", - "user", - "user_agent", - "org", - "operation_type", - "actor_id", - "@timestamp", - "actor", - "team", - "action", - "org_id", - "request_id", - "user_id", - "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" - }, { "action": "enterprise_announcement.create", "description": "A global announcement banner was created for the enterprise.", @@ -16840,67 +16750,6 @@ "team_type" ] }, - { - "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", - "docs_reference_links": "N/A", - "fields": [ - "business_id", - "operation_type", - "@timestamp", - "user_agent", - "actor", - "actor_id", - "user", - "business", - "action", - "request_id", - "created_at", - "user_id", - "_document_id" - ] - }, - { - "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", - "fields": [ - "org_id", - "action", - "operation_type", - "request_id", - "actor", - "org", - "created_at", - "actor_id", - "user", - "user_id", - "@timestamp", - "user_agent", - "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" - }, - { - "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", - "docs_reference_links": "N/A", - "fields": [ - "actor_id", - "@timestamp", - "action", - "_document_id", - "user_agent", - "user_id", - "business_id", - "request_id", - "user", - "business", - "operation_type", - "actor", - "created_at" - ] - }, { "action": "team_group_mapping.create", "description": "N/A", diff --git a/src/audit-logs/data/ghes-3.14/enterprise.json b/src/audit-logs/data/ghes-3.14/enterprise.json index 30218c91edce..7bd219da9a8a 100644 --- a/src/audit-logs/data/ghes-3.14/enterprise.json +++ b/src/audit-logs/data/ghes-3.14/enterprise.json @@ -2672,8 +2672,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -2690,13 +2690,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -2710,13 +2709,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -2733,13 +2731,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -2757,8 +2754,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -13929,7 +13925,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -13949,8 +13945,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -13965,12 +13961,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.14/organization.json b/src/audit-logs/data/ghes-3.14/organization.json index c7e40ac64586..518573fbbc5d 100644 --- a/src/audit-logs/data/ghes-3.14/organization.json +++ b/src/audit-logs/data/ghes-3.14/organization.json @@ -1591,8 +1591,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -1609,13 +1609,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -1629,13 +1628,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -1652,13 +1650,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -1676,8 +1673,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -14290,7 +14286,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -14310,8 +14306,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -14326,12 +14322,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.15/enterprise.json b/src/audit-logs/data/ghes-3.15/enterprise.json index 7a2bcb7581ce..d4b4fd087361 100644 --- a/src/audit-logs/data/ghes-3.15/enterprise.json +++ b/src/audit-logs/data/ghes-3.15/enterprise.json @@ -2672,8 +2672,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -2690,13 +2690,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -2710,13 +2709,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -2733,13 +2731,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -2757,8 +2754,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -14224,7 +14220,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -14244,8 +14240,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -14260,12 +14256,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.15/organization.json b/src/audit-logs/data/ghes-3.15/organization.json index 4a563b9bc0b5..9e8e100c3c1e 100644 --- a/src/audit-logs/data/ghes-3.15/organization.json +++ b/src/audit-logs/data/ghes-3.15/organization.json @@ -1615,8 +1615,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -1633,13 +1633,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -1653,13 +1652,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -1676,13 +1674,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -1700,8 +1697,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -14962,7 +14958,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -14982,8 +14978,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -14998,12 +14994,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.16/enterprise.json b/src/audit-logs/data/ghes-3.16/enterprise.json index 2beff6991a09..0f2ecb11bbad 100644 --- a/src/audit-logs/data/ghes-3.16/enterprise.json +++ b/src/audit-logs/data/ghes-3.16/enterprise.json @@ -1973,7 +1973,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -1991,7 +1991,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -2010,7 +2010,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -2026,7 +2026,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -2044,7 +2044,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -2062,7 +2062,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -2905,8 +2905,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -2923,13 +2923,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -2943,13 +2942,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -2966,13 +2964,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -2990,8 +2987,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -15269,7 +15265,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -15289,8 +15285,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -15305,12 +15301,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.16/organization.json b/src/audit-logs/data/ghes-3.16/organization.json index d0b633b4f75d..a959c15aafda 100644 --- a/src/audit-logs/data/ghes-3.16/organization.json +++ b/src/audit-logs/data/ghes-3.16/organization.json @@ -378,7 +378,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -396,7 +396,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -415,7 +415,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -431,7 +431,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -449,7 +449,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -467,7 +467,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -1722,8 +1722,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -1740,13 +1740,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -1760,13 +1759,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -1783,13 +1781,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -1807,8 +1804,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -15425,7 +15421,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -15445,8 +15441,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -15461,12 +15457,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.17/enterprise.json b/src/audit-logs/data/ghes-3.17/enterprise.json index ab5e3df047a0..a6610939151c 100644 --- a/src/audit-logs/data/ghes-3.17/enterprise.json +++ b/src/audit-logs/data/ghes-3.17/enterprise.json @@ -1996,7 +1996,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -2014,7 +2014,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -2031,7 +2031,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -2050,7 +2050,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -2073,7 +2073,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -2096,7 +2096,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -2119,7 +2119,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -2135,7 +2135,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -2153,7 +2153,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -2171,7 +2171,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -3058,8 +3058,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -3076,13 +3076,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -3096,13 +3095,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -3119,13 +3117,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -3143,8 +3140,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -15716,7 +15712,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -15736,8 +15732,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -15752,12 +15748,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.17/organization.json b/src/audit-logs/data/ghes-3.17/organization.json index 7e6de3fa98ad..2cd9a7a405bc 100644 --- a/src/audit-logs/data/ghes-3.17/organization.json +++ b/src/audit-logs/data/ghes-3.17/organization.json @@ -378,7 +378,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -396,7 +396,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -413,7 +413,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -432,7 +432,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -455,7 +455,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -478,7 +478,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -501,7 +501,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -517,7 +517,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -535,7 +535,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -553,7 +553,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -1888,8 +1888,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -1906,13 +1906,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -1926,13 +1925,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -1949,13 +1947,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -1973,8 +1970,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -15840,7 +15836,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -15860,8 +15856,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -15876,12 +15872,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.18/enterprise.json b/src/audit-logs/data/ghes-3.18/enterprise.json index 6bb39c8a3c09..20c9a9e5d4f7 100644 --- a/src/audit-logs/data/ghes-3.18/enterprise.json +++ b/src/audit-logs/data/ghes-3.18/enterprise.json @@ -1996,7 +1996,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -2014,7 +2014,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -2031,7 +2031,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -2050,7 +2050,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -2073,7 +2073,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -2096,7 +2096,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -2119,7 +2119,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -2135,7 +2135,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -2153,7 +2153,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -2171,7 +2171,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -3107,8 +3107,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -3125,13 +3125,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -3145,13 +3144,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -3168,13 +3166,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -3192,8 +3189,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -15819,7 +15815,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -15839,8 +15835,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -15855,12 +15851,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.18/organization.json b/src/audit-logs/data/ghes-3.18/organization.json index 1c643c7916f2..3302e00168fa 100644 --- a/src/audit-logs/data/ghes-3.18/organization.json +++ b/src/audit-logs/data/ghes-3.18/organization.json @@ -378,7 +378,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -396,7 +396,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -413,7 +413,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -432,7 +432,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -455,7 +455,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -478,7 +478,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -501,7 +501,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -517,7 +517,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -535,7 +535,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -553,7 +553,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -1937,8 +1937,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -1955,13 +1955,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -1975,13 +1974,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -1998,13 +1996,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -2022,8 +2019,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -16139,7 +16135,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -16159,8 +16155,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -16175,12 +16171,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.19/enterprise.json b/src/audit-logs/data/ghes-3.19/enterprise.json index 7cf7f4596e51..21e03d854912 100644 --- a/src/audit-logs/data/ghes-3.19/enterprise.json +++ b/src/audit-logs/data/ghes-3.19/enterprise.json @@ -2190,7 +2190,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -2208,7 +2208,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -2225,7 +2225,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -2244,7 +2244,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -2267,7 +2267,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -2290,7 +2290,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -2313,7 +2313,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -2329,7 +2329,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -2347,7 +2347,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -2365,7 +2365,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -3301,8 +3301,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -3319,13 +3319,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -3339,13 +3338,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -3362,13 +3360,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -3386,8 +3383,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -16622,7 +16618,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -16642,8 +16638,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -16658,12 +16654,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.19/organization.json b/src/audit-logs/data/ghes-3.19/organization.json index ed79b5549c70..fa9c9189aaa1 100644 --- a/src/audit-logs/data/ghes-3.19/organization.json +++ b/src/audit-logs/data/ghes-3.19/organization.json @@ -499,7 +499,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -517,7 +517,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -534,7 +534,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -553,7 +553,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -576,7 +576,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -599,7 +599,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -622,7 +622,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -638,7 +638,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -656,7 +656,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -674,7 +674,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -2079,8 +2079,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -2097,13 +2097,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -2117,13 +2116,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -2140,13 +2138,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -2164,8 +2161,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -16775,7 +16771,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -16795,8 +16791,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -16811,12 +16807,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.20/enterprise.json b/src/audit-logs/data/ghes-3.20/enterprise.json index 7f56840c0eba..e71cf627b1c8 100644 --- a/src/audit-logs/data/ghes-3.20/enterprise.json +++ b/src/audit-logs/data/ghes-3.20/enterprise.json @@ -2211,7 +2211,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -2229,7 +2229,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -2246,7 +2246,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -2265,7 +2265,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -2288,7 +2288,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -2311,7 +2311,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -2334,7 +2334,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -2350,7 +2350,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -2368,7 +2368,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -2386,7 +2386,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -3322,8 +3322,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -3340,13 +3340,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -3360,13 +3359,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -3383,13 +3381,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -3407,8 +3404,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -16643,7 +16639,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -16663,8 +16659,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -16679,12 +16675,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/data/ghes-3.20/organization.json b/src/audit-logs/data/ghes-3.20/organization.json index dccacc4cd85f..9f1a42327922 100644 --- a/src/audit-logs/data/ghes-3.20/organization.json +++ b/src/audit-logs/data/ghes-3.20/organization.json @@ -520,7 +520,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_fixed", @@ -538,7 +538,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_became_outdated", @@ -555,7 +555,7 @@ "business_id", "business" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closed_by_user", @@ -574,7 +574,7 @@ "alert_numbers", "dismissal_approver_id" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_approved", @@ -597,7 +597,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_denied", @@ -620,7 +620,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_closure_requested", @@ -643,7 +643,7 @@ "created_at", "operation_type" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_created", @@ -659,7 +659,7 @@ "org", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reappeared", @@ -677,7 +677,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "code_scanning.alert_reopened_by_user", @@ -695,7 +695,7 @@ "business", "alert_numbers" ], - "docs_reference_titles": "/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning" + "docs_reference_titles": "About code scanning" }, { "action": "codespaces.allow_permissions", @@ -2034,8 +2034,8 @@ }, { "action": "discussion_post.destroy", - "description": "Triggered when a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "request_id", "team", @@ -2052,13 +2052,12 @@ "user_agent", "operation_type", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.destroy", - "description": "Triggered when a reply to a team discussion post is deleted.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "actor_id", "action", @@ -2072,13 +2071,12 @@ "created_at", "request_id", "_document_id" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#deleting-a-comment" + ] }, { "action": "discussion_post_reply.update", - "description": "Triggered when a reply to a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "action", "_document_id", @@ -2095,13 +2093,12 @@ "number", "team", "created_at" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "discussion_post.update", - "description": "Triggered when a team discussion post is edited.", - "docs_reference_links": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "created_at", "_document_id", @@ -2119,8 +2116,7 @@ "request_id", "user_id", "number" - ], - "docs_reference_titles": "/communities/moderating-comments-and-conversations/managing-disruptive-comments#editing-a-comment" + ] }, { "action": "enterprise_announcement.create", @@ -16730,7 +16726,7 @@ }, { "action": "team_discussions.clear", - "description": "An organization owner cleared the setting to allow team discussions for an organization or enterprise.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "business_id", @@ -16750,8 +16746,8 @@ }, { "action": "team_discussions.disable", - "description": "Team discussions were disabled for an organization.", - "docs_reference_links": "/organizations/organizing-members-into-teams/disabling-team-discussions-for-your-organization", + "description": "N/A", + "docs_reference_links": "N/A", "fields": [ "org_id", "action", @@ -16766,12 +16762,11 @@ "@timestamp", "user_agent", "_document_id" - ], - "docs_reference_titles": "Organizations and teams documentation" + ] }, { "action": "team_discussions.enable", - "description": "Team discussions were enabled for an organization.", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "actor_id", diff --git a/src/audit-logs/lib/config.json b/src/audit-logs/lib/config.json index 68bb3c32ff57..8d37fae7c0f7 100644 --- a/src/audit-logs/lib/config.json +++ b/src/audit-logs/lib/config.json @@ -9,5 +9,5 @@ "git": "Note: Git events have special access requirements and retention policies that differ from other audit log events. For GitHub Enterprise Cloud, access Git events via the REST API only with 7-day retention. For GitHub Enterprise Server, Git events must be enabled in audit log configuration and are not included in search results.", "sso_redirect": "Note: Automatically redirecting users to sign in is currently in beta for Enterprise Managed Users and subject to change." }, - "sha": "a0978e32d2645c04a8281f443d22031a428e5f66" + "sha": "fbaed1dcada2315389283e2083195e0341236c09" } \ No newline at end of file diff --git a/src/content-render/scripts/move-by-content-type.ts b/src/content-render/scripts/move-by-content-type.ts new file mode 100644 index 000000000000..2acc86c97f75 --- /dev/null +++ b/src/content-render/scripts/move-by-content-type.ts @@ -0,0 +1,642 @@ +/** + * @purpose Writer tool + * @description Move files to the relevant directory based on `contentType` frontmatter + */ + +import { program } from 'commander' +import fs from 'fs/promises' +import path from 'path' +import chalk from 'chalk' +import { execFileSync } from 'child_process' +import walkFiles from '@/workflows/walk-files.js' +import readFrontmatter from '@/frame/lib/read-frontmatter.js' +import { contentTypesEnum } from '@/frame/lib/frontmatter' + +const CONTENT_TYPES = contentTypesEnum.filter( + (type) => type !== 'homepage' && type !== 'other' && type !== 'landing', +) + +// The number of path segments at the product level (e.g., "content//..."). +// Used when determining whether a target directory is a deeper subdirectory. +const PRODUCT_LEVEL_PATH_SEGMENTS = 3 + +const contentTypeToDir = (contentType: string): string => { + return contentType === 'rai' ? 'responsible-use' : contentType +} + +const validContentTypeDirs = new Set(CONTENT_TYPES.map(contentTypeToDir)) + +// Helper: Should we skip this index.md file from processing? +function shouldSkipIndexFile(filePath: string): boolean { + const relativePath = path.relative(process.cwd(), filePath) + const parts = relativePath.split(path.sep) + const contentIndex = parts.indexOf('content') + + // Skip product-level index.md: content/product/index.md + if (parts.length === contentIndex + PRODUCT_LEVEL_PATH_SEGMENTS) return true + + // Skip content-type-level index.md that's already in place: content/product/content-type/index.md + if (parts.length === contentIndex + 4) { + const parentDir = parts[parts.length - 2] + if (validContentTypeDirs.has(parentDir)) return true + } + + return false +} + +// Helper: Calculate target directory for a file +function calculateTarget(filePath: string, contentType: string, productDir: string) { + const relativePath = path.relative(process.cwd(), filePath) + const parts = relativePath.split(path.sep) + const contentIndex = parts.indexOf('content') + const fileName = path.basename(filePath) + + // Determine target content-type directory + const targetContentType = contentTypeToDir(contentType) + + // Calculate target path + if (targetContentType === 'how-tos') { + // Preserve subdirectory structure for how-tos + const pathAfterProduct = parts.slice(contentIndex + 2, -1) + if (pathAfterProduct[0] === 'how-tos') { + // Already in how-tos, no change + return { targetDir: path.dirname(filePath), targetPath: filePath } + } else { + // Move to how-tos preserving structure + const targetDir = path.join(productDir, targetContentType, ...pathAfterProduct) + return { targetDir, targetPath: path.join(targetDir, fileName) } + } + } else { + // Flatten to content-type directory + const targetDir = path.join(productDir, targetContentType) + return { targetDir, targetPath: path.join(targetDir, fileName) } + } +} + +interface FileMove { + filePath: string + targetDir: string + targetPath: string + contentType: string +} + +program + .name('content-type-based-move') + .description('Reorganize content files into subdirectories based on their contentType property') + .argument('[paths...]', 'Content paths to process') + .action(async (paths: string[]) => { + // ==================== + // 1. GATHER FILES + // ==================== + const filesToProcess: string[] = [] + if (paths?.length > 0) { + for (const p of paths) { + const stats = await fs.stat(p) + if (stats.isDirectory()) { + filesToProcess.push(...(await walkFiles(p, ['.md']))) + } else if (p.endsWith('.md')) { + filesToProcess.push(p) + } + } + } else { + filesToProcess.push(...(await walkFiles(path.join(process.cwd(), 'content'), ['.md']))) + } + + console.log(chalk.white(`Processing ${filesToProcess.length} files...\n`)) + + // ==================== + // 2. ANALYZE & PLAN MOVES + // ==================== + console.log(chalk.white('Analyzing files...\n')) + + const filesToMove: FileMove[] = [] + const skipped: Array<{ file: string; reason: string }> = [] + const targetDirs = new Set() // Relative paths of all target directories + const subdirTargets = new Set() // Subdirectories receiving index.md files + const productDirs = new Set() + const productsWithRai = new Set() + + for (const filePath of filesToProcess) { + const relativePath = path.relative(process.cwd(), filePath) + + try { + // Skip certain index.md files + if (path.basename(filePath) === 'index.md' && shouldSkipIndexFile(filePath)) { + continue + } + + // Read and validate contentType + const fileContent = await fs.readFile(filePath, 'utf-8') + const { data } = readFrontmatter(fileContent) + + if (!data?.contentType) { + skipped.push({ file: relativePath, reason: 'No contentType property found' }) + console.log(chalk.yellow(`⚠ Skipping ${relativePath}: No contentType property`)) + continue + } + + const contentType = data.contentType as string + const parts = relativePath.split(path.sep) + const contentIndex = parts.indexOf('content') + + // Skip all landing pages - they should only be product-level index.md and don't move + if (contentType === 'landing') { + console.log(chalk.gray(`→ Skipping ${relativePath}: landing pages don't move`)) + continue + } + + // Validate contentType + if (!CONTENT_TYPES.includes(contentType as any)) { + skipped.push({ file: relativePath, reason: `Invalid contentType: ${contentType}` }) + console.log( + chalk.yellow(`⚠ Skipping ${relativePath}: Invalid contentType "${contentType}"`), + ) + continue + } + + // Get product directory + if (contentIndex === -1 || contentIndex + 1 >= parts.length) { + console.log( + chalk.yellow(`⚠ Skipping ${relativePath}: Cannot determine product directory`), + ) + continue + } + + const productName = parts[contentIndex + 1] + const productDir = path.join(process.cwd(), 'content', productName) + productDirs.add(productDir) + + if (contentType === 'rai') productsWithRai.add(productName) + + // Calculate target + const { targetDir, targetPath } = calculateTarget(filePath, contentType, productDir) + + // Skip if already in correct location + if (path.dirname(filePath) === targetDir) continue + + // Skip if target exists + try { + await fs.access(targetPath) + skipped.push({ file: relativePath, reason: 'Target already exists' }) + console.log(chalk.yellow(`⚠ Skipping ${relativePath}: Target file already exists`)) + continue + } catch { + // Good, doesn't exist + } + + // Track this move + filesToMove.push({ filePath, targetDir, targetPath, contentType }) + + const relativeTargetDir = path.relative(process.cwd(), targetDir) + targetDirs.add(relativeTargetDir) + + // Track subdirectories that will receive index.md files + if ( + path.basename(filePath) === 'index.md' && + relativeTargetDir.split(path.sep).length > PRODUCT_LEVEL_PATH_SEGMENTS + ) { + subdirTargets.add(relativeTargetDir) + } + } catch (error) { + if (error instanceof Error) { + console.error( + chalk.red(`✗ Error analyzing ${relativePath}: ${error.message}\n${error.stack}`), + ) + } else { + console.error(chalk.red(`✗ Error analyzing ${relativePath}: ${String(error)}`)) + } + skipped.push({ file: relativePath, reason: `Error: ${error}` }) + } + } + + // ==================== + // 3. ENSURE STANDARD DIRECTORIES + // ==================== + console.log(chalk.white('Ensuring standard content-type directories exist...\n')) + + // Add standard content-type directories for each affected product + if (paths?.length > 0) { + for (const p of paths) { + const fullPath = path.resolve(process.cwd(), p) + const relativePath = path.relative(process.cwd(), fullPath) + const parts = relativePath.split(path.sep) + const contentIndex = parts.indexOf('content') + + if (contentIndex !== -1 && contentIndex + 1 < parts.length) { + const productName = parts[contentIndex + 1] + + for (const ct of CONTENT_TYPES.filter((t) => t !== 'rai' && t !== 'landing')) { + targetDirs.add(path.join('content', productName, contentTypeToDir(ct))) + } + + if (productsWithRai.has(productName)) { + targetDirs.add(path.join('content', productName, 'responsible-use')) + } + } + } + } + + // ==================== + // 4. CREATE PLACEHOLDERS + // ==================== + console.log(chalk.white('Creating placeholder index.md files...\n')) + + const newPlaceholders: string[] = [] + const titleMap: Record = { + 'get-started': 'Get started', + concepts: 'Concepts', + 'how-tos': 'How-tos', + reference: 'Reference', + tutorials: 'Tutorials', + 'responsible-use': 'Responsible use', + } + + for (const dirPath of targetDirs) { + const absoluteDirPath = path.join(process.cwd(), dirPath) + const indexPath = path.join(absoluteDirPath, 'index.md') + + try { + await fs.access(indexPath) + console.log(chalk.gray(`- Skipping ${dirPath}/index.md (already exists)`)) + } catch { + // Only create placeholders for top-level content-type directories (not subdirectories) + if (dirPath.split(path.sep).length > PRODUCT_LEVEL_PATH_SEGMENTS) continue + + // Skip if an index.md will be moved here + if (subdirTargets.has(dirPath)) { + console.log(chalk.gray(`- Skipping ${dirPath}/index.md (will be moved)`)) + continue + } + + const contentTypeName = path.basename(dirPath) + const title = titleMap[contentTypeName] || contentTypeName + + // Determine the correct contentType for this placeholder + // Map directory name back to contentType enum value + const placeholderContentType = + contentTypeName === 'responsible-use' ? 'rai' : contentTypeName + + const content = `--- +title: ${title} +versions: + fpt: '*' + ghec: '*' + ghes: '*' +contentType: ${placeholderContentType} +--- + +` + + await fs.mkdir(absoluteDirPath, { recursive: true }) + await fs.writeFile(indexPath, content, 'utf-8') + newPlaceholders.push(indexPath) + + console.log(chalk.green(`✓ Created ${dirPath}/index.md`)) + } + } + + // ==================== + // 5. GENERATE INTROS + // ==================== + if (newPlaceholders.length > 0) { + console.log(chalk.white('\nGenerating intros for placeholder files...\n')) + + for (const placeholderPath of newPlaceholders) { + try { + const fileContent = await fs.readFile(placeholderPath, 'utf-8') + const { data } = readFrontmatter(fileContent) + + if (data?.intro) continue + + const relativePath = path.relative(process.cwd(), placeholderPath) + console.log(chalk.gray(`Generating intro for ${relativePath}...`)) + + execFileSync( + 'npm', + ['run', 'ai-tools', '--', '--prompt', 'intro', '--files', relativePath, '--write'], + { + cwd: process.cwd(), + stdio: 'inherit', + }, + ) + + console.log(chalk.green(`✓ Generated intro for ${relativePath}`)) + } catch (error) { + if (error instanceof Error) { + console.error( + chalk.yellow( + `⚠ Could not generate intro for ${placeholderPath}: ${error.message}\n${error.stack}`, + ), + ) + } else { + console.error( + chalk.yellow(`⚠ Could not generate intro for ${placeholderPath}: ${String(error)}`), + ) + } + } + } + } + + // ==================== + // 6. MOVE FILES + // ==================== + console.log(chalk.white('\nMoving files...\n')) + + const moved: Array<{ file: string; from: string; to: string }> = [] + + // Categorize files by type for correct move order + const regularFiles = filesToMove.filter((f) => path.basename(f.filePath) !== 'index.md') + const topLevelIndexFiles = filesToMove.filter((f) => { + if (path.basename(f.filePath) !== 'index.md') return false + return ( + path.relative(process.cwd(), f.targetDir).split(path.sep).length === + PRODUCT_LEVEL_PATH_SEGMENTS + ) + }) + const subdirIndexFiles = filesToMove.filter((f) => { + if (path.basename(f.filePath) !== 'index.md') return false + return ( + path.relative(process.cwd(), f.targetDir).split(path.sep).length > + PRODUCT_LEVEL_PATH_SEGMENTS + ) + }) + + // Move subdirectory index files first (copy only, delete later) + const indexFilesToDeleteLater: string[] = [] + for (const file of subdirIndexFiles) { + try { + await fs.mkdir(file.targetDir, { recursive: true }) + + const content = await fs.readFile(file.filePath, 'utf-8') + const { data, content: body } = readFrontmatter(content) + // Clear children array because paths will be invalid in the new content-type directory structure + if (data?.children) data.children = [] + + await fs.writeFile( + file.targetPath, + readFrontmatter.stringify(body || '', data || {}), + 'utf-8', + ) + indexFilesToDeleteLater.push(file.filePath) + + moved.push({ + file: path.relative(process.cwd(), file.filePath), + from: path.relative(process.cwd(), file.filePath), + to: path.relative(process.cwd(), file.targetPath), + }) + + console.log(chalk.green(`✓ Copied ${path.relative(process.cwd(), file.filePath)}`)) + } catch (error) { + skipped.push({ + file: path.relative(process.cwd(), file.filePath), + reason: `Error: ${error}`, + }) + console.log( + chalk.red(`✗ Error copying ${path.relative(process.cwd(), file.filePath)}: ${error}`), + ) + } + } + + // Move regular files + for (const file of regularFiles) { + try { + await fs.mkdir(file.targetDir, { recursive: true }) + + const relativeFilePath = path.relative(process.cwd(), file.filePath) + const relativeTargetPath = path.relative(process.cwd(), file.targetPath) + + execFileSync( + 'npm', + ['run', 'move-content', '--', relativeFilePath, relativeTargetPath, '--no-git'], + { + cwd: process.cwd(), + stdio: 'inherit', + }, + ) + + moved.push({ file: relativeFilePath, from: relativeFilePath, to: relativeTargetPath }) + console.log(chalk.green(`✓ Moved ${relativeFilePath}`)) + } catch (error) { + skipped.push({ + file: path.relative(process.cwd(), file.filePath), + reason: `Error: ${error}`, + }) + console.log( + chalk.red(`✗ Error moving ${path.relative(process.cwd(), file.filePath)}: ${error}`), + ) + } + } + + // Delete source subdirectory index files + for (const sourcePath of indexFilesToDeleteLater) { + try { + await fs.unlink(sourcePath) + console.log(chalk.gray(`✓ Deleted source ${path.relative(process.cwd(), sourcePath)}`)) + } catch (error) { + console.log(chalk.yellow(`⚠ Could not delete ${sourcePath}: ${error}`)) + } + } + + // Move top-level index files + for (const file of topLevelIndexFiles) { + try { + await fs.mkdir(file.targetDir, { recursive: true }) + await fs.copyFile(file.filePath, file.targetPath) + await fs.unlink(file.filePath) + + moved.push({ + file: path.relative(process.cwd(), file.filePath), + from: path.relative(process.cwd(), file.filePath), + to: path.relative(process.cwd(), file.targetPath), + }) + + console.log(chalk.green(`✓ Moved ${path.relative(process.cwd(), file.filePath)}`)) + } catch (error) { + skipped.push({ + file: path.relative(process.cwd(), file.filePath), + reason: `Error: ${error}`, + }) + console.log( + chalk.red(`✗ Error moving ${path.relative(process.cwd(), file.filePath)}: ${error}`), + ) + } + } + + // ==================== + // 7. CLEANUP & UPDATE + // ==================== + console.log( + chalk.white('\nCleaning up old directories and updating parent index.md files...\n'), + ) + + const deletedByProduct = new Map() + + for (const productDir of productDirs) { + const productName = path.basename(productDir) + + try { + const entries = await fs.readdir(productDir, { withFileTypes: true }) + + for (const entry of entries) { + if (entry.isDirectory() && !validContentTypeDirs.has(entry.name)) { + const oldDirPath = path.join(productDir, entry.name) + + try { + await fs.rm(oldDirPath, { recursive: true, force: true }) + console.log( + chalk.gray(`✓ Deleted old directory: ${path.relative(process.cwd(), oldDirPath)}`), + ) + + if (!deletedByProduct.has(productName)) deletedByProduct.set(productName, []) + deletedByProduct.get(productName)!.push(`/${productName}/${entry.name}`) + } catch (error) { + console.log(chalk.yellow(`⚠ Could not delete ${oldDirPath}: ${error}`)) + } + } + } + } catch (error) { + console.log(chalk.yellow(`⚠ Could not read product directory ${productDir}: ${error}`)) + } + + // Update product index.md + const productIndexPath = path.join(productDir, 'index.md') + try { + const content = await fs.readFile(productIndexPath, 'utf-8') + const { data, content: body } = readFrontmatter(content) + + if (data) { + let updated = false + + // Build children array + const productRelativePath = path.relative(process.cwd(), productDir) + const newChildren: string[] = [] + for (const ct of CONTENT_TYPES.map(contentTypeToDir)) { + const dirPath = path.join(productRelativePath, ct) + if (targetDirs.has(dirPath)) newChildren.push(`/${ct}`) + } + + if (newChildren.length > 0) { + data.children = newChildren + updated = true + } + + // Add redirects for deleted directories + const deletedPaths = deletedByProduct.get(productName) || [] + if (deletedPaths.length > 0) { + if (!data.redirect_from) data.redirect_from = [] + else if (!Array.isArray(data.redirect_from)) data.redirect_from = [data.redirect_from] + + for (const deletedPath of deletedPaths) { + if (!data.redirect_from.includes(deletedPath)) { + data.redirect_from.push(deletedPath) + } + } + updated = true + } + + if (updated) { + await fs.writeFile(productIndexPath, readFrontmatter.stringify(body, data), 'utf-8') + const changes = [] + if (newChildren.length > 0) changes.push(`${newChildren.length} children`) + if (deletedPaths.length > 0) changes.push(`${deletedPaths.length} redirects`) + console.log( + chalk.green( + `✓ Updated ${path.relative(process.cwd(), productIndexPath)} (${changes.join(', ')})`, + ), + ) + } + } + } catch (error) { + console.log(chalk.yellow(`⚠ Could not update ${productIndexPath}: ${error}`)) + } + } + + // ==================== + // 8. SORT CHILDREN ARRAYS + // ==================== + console.log(chalk.white('\nSorting children arrays...\n')) + + for (const dirPath of targetDirs) { + const absoluteDirPath = path.join(process.cwd(), dirPath) + const indexPath = path.join(absoluteDirPath, 'index.md') + + try { + const content = await fs.readFile(indexPath, 'utf-8') + const { data, content: body } = readFrontmatter(content) + + if (!data) continue + + // For how-tos, build children from subdirectories + if (path.basename(dirPath) === 'how-tos') { + const entries = await fs.readdir(absoluteDirPath, { withFileTypes: true }) + const subdirs = entries + .filter((e) => e.isDirectory()) + .map((e) => `/${e.name}`) + .sort() + + if (subdirs.length > 0) { + data.children = subdirs + await fs.writeFile(indexPath, readFrontmatter.stringify(body, data), 'utf-8') + console.log( + chalk.green( + `✓ Added children to ${path.relative(process.cwd(), indexPath)} (${subdirs.length} subdirectories)`, + ), + ) + } + } + // For others, sort with about-* first + else if (data.children && Array.isArray(data.children) && data.children.length > 0) { + const sorted = [...data.children].sort((a, b) => { + const aBasename = path.basename(a) + const bBasename = path.basename(b) + const aIsAbout = aBasename.startsWith('about-') + const bIsAbout = bBasename.startsWith('about-') + + if (aIsAbout && !bIsAbout) return -1 + if (!aIsAbout && bIsAbout) return 1 + return aBasename.localeCompare(bBasename) + }) + + if (JSON.stringify(sorted) !== JSON.stringify(data.children)) { + data.children = sorted + await fs.writeFile(indexPath, readFrontmatter.stringify(body, data), 'utf-8') + console.log( + chalk.green(`✓ Sorted children in ${path.relative(process.cwd(), indexPath)}`), + ) + } + } + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { + console.log(chalk.yellow(`⚠ Could not update ${indexPath}: ${error}`)) + } + } + } + + // ==================== + // 9. SUMMARY + // ==================== + console.log(chalk.white(`\n${'='.repeat(60)}`)) + console.log(chalk.white('Summary:')) + console.log(chalk.white(` Moved: ${moved.length} files`)) + console.log(chalk.white(` Skipped: ${skipped.length} files`)) + + if (newPlaceholders.length > 0) { + console.log( + chalk.cyan( + `\nNote: ${newPlaceholders.length} placeholder index.md files were created with`, + ), + ) + console.log(chalk.cyan(`AI-generated intros. Please review before committing.`)) + } + + console.log(chalk.blue('='.repeat(60))) + + if (skipped.length > 0) { + console.log(chalk.yellow('\nSkipped files:')) + for (const skip of skipped) { + console.log(chalk.gray(` ${skip.file}: ${skip.reason}`)) + } + } + }) + +program.parse() diff --git a/src/fixtures/fixtures/content/codespaces/guides.md b/src/fixtures/fixtures/content/codespaces/guides.md new file mode 100644 index 000000000000..e6d2b6800bb4 --- /dev/null +++ b/src/fixtures/fixtures/content/codespaces/guides.md @@ -0,0 +1,14 @@ +--- +title: Guides for GitHub Codespaces +intro: Learn how to make the most of GitHub Codespaces. +layout: product-guides +versions: + fpt: '*' +topics: + - Codespaces + - Developer +includeGuides: + - /get-started/start-your-journey/hello-world +learningTracks: + - foo_bar +--- diff --git a/src/fixtures/fixtures/content/codespaces/index.md b/src/fixtures/fixtures/content/codespaces/index.md new file mode 100644 index 000000000000..d9e241ea294a --- /dev/null +++ b/src/fixtures/fixtures/content/codespaces/index.md @@ -0,0 +1,10 @@ +--- +title: GitHub Codespaces documentation +intro: Develop in a codespace. +versions: + fpt: '*' +children: + - /guides +topics: + - Codespaces +--- diff --git a/src/fixtures/fixtures/content/index.md b/src/fixtures/fixtures/content/index.md index ed523bc00b95..c4fda9c57663 100644 --- a/src/fixtures/fixtures/content/index.md +++ b/src/fixtures/fixtures/content/index.md @@ -29,6 +29,7 @@ children: - early-access - pages - code-security + - codespaces - actions - rest - webhooks diff --git a/src/fixtures/fixtures/data/learning-tracks/codespaces.yml b/src/fixtures/fixtures/data/learning-tracks/codespaces.yml new file mode 100644 index 000000000000..78343b79c7ba --- /dev/null +++ b/src/fixtures/fixtures/data/learning-tracks/codespaces.yml @@ -0,0 +1,6 @@ +# Codespaces learning tracks +foo_bar: + title: Sample learning track + description: A sample track for testing + guides: + - /get-started/start-your-journey/hello-world diff --git a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json index 215267a8434b..29752d97a9a2 100644 --- a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json +++ b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json @@ -1073,30 +1073,6 @@ } ] }, - "custom_properties_for_organizations": { - "title": "Custom properties for organizations", - "displayTitle": "Organization permissions for \"Custom properties for organizations\"", - "permissions": [ - { - "category": "orgs", - "slug": "get-all-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "get", - "requestPath": "/organizations/{org}/org-properties/values", - "additional-permissions": false, - "access": "read" - }, - { - "category": "orgs", - "slug": "create-or-update-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "patch", - "requestPath": "/organizations/{org}/org-properties/values", - "additional-permissions": false, - "access": "write" - } - ] - }, "organization_custom_properties": { "title": "Custom properties", "displayTitle": "Organization permissions for \"Custom properties\"", @@ -2949,6 +2925,15 @@ "additional-permissions": false, "access": "read" }, + { + "category": "actions", + "slug": "get-github-actions-cache-storage-limit-for-a-repository", + "subcategory": "cache", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", + "additional-permissions": false, + "access": "read" + }, { "category": "actions", "slug": "get-github-actions-cache-usage-for-a-repository", @@ -3378,15 +3363,6 @@ "additional-permissions": false, "access": "write" }, - { - "category": "actions", - "slug": "get-github-actions-cache-storage-limit-for-a-repository", - "subcategory": "cache", - "verb": "get", - "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", - "additional-permissions": false, - "access": "read" - }, { "category": "actions", "slug": "set-github-actions-cache-storage-limit-for-a-repository", diff --git a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json index e208eab904c0..99def9bf5407 100644 --- a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json +++ b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json @@ -3070,18 +3070,6 @@ } ], "orgs": [ - { - "slug": "get-all-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "get", - "requestPath": "/organizations/{org}/org-properties/values" - }, - { - "slug": "create-or-update-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "patch", - "requestPath": "/organizations/{org}/org-properties/values" - }, { "slug": "update-an-organization", "subcategory": "orgs", diff --git a/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json b/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json index 2f100d856c92..957c78dd711e 100644 --- a/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json +++ b/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json @@ -1305,34 +1305,6 @@ } ] }, - "custom_properties_for_organizations": { - "title": "Custom properties for organizations", - "displayTitle": "Organization permissions for \"Custom properties for organizations\"", - "permissions": [ - { - "category": "orgs", - "slug": "get-all-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "get", - "requestPath": "/organizations/{org}/org-properties/values", - "access": "read", - "user-to-server": true, - "server-to-server": true, - "additional-permissions": false - }, - { - "category": "orgs", - "slug": "create-or-update-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "patch", - "requestPath": "/organizations/{org}/org-properties/values", - "access": "write", - "user-to-server": true, - "server-to-server": true, - "additional-permissions": false - } - ] - }, "organization_custom_properties": { "title": "Custom properties", "displayTitle": "Organization permissions for \"Custom properties\"", @@ -3673,6 +3645,17 @@ "server-to-server": true, "additional-permissions": false }, + { + "category": "actions", + "slug": "get-github-actions-cache-storage-limit-for-a-repository", + "subcategory": "cache", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", + "access": "read", + "user-to-server": true, + "server-to-server": true, + "additional-permissions": false + }, { "category": "actions", "slug": "get-github-actions-cache-usage-for-a-repository", @@ -4196,17 +4179,6 @@ "server-to-server": true, "additional-permissions": false }, - { - "category": "actions", - "slug": "get-github-actions-cache-storage-limit-for-a-repository", - "subcategory": "cache", - "verb": "get", - "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", - "access": "read", - "user-to-server": true, - "server-to-server": true, - "additional-permissions": false - }, { "category": "actions", "slug": "set-github-actions-cache-storage-limit-for-a-repository", diff --git a/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json b/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json index c2daa311fafc..ef1e3cd4897e 100644 --- a/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json +++ b/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json @@ -3002,18 +3002,6 @@ "verb": "get", "requestPath": "/organizations" }, - { - "slug": "get-all-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "get", - "requestPath": "/organizations/{org}/org-properties/values" - }, - { - "slug": "create-or-update-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "patch", - "requestPath": "/organizations/{org}/org-properties/values" - }, { "slug": "get-an-organization", "subcategory": "orgs", diff --git a/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json b/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json index 6d4a61e6e5dd..b1b05a171c55 100644 --- a/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json +++ b/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json @@ -3476,18 +3476,6 @@ "verb": "get", "requestPath": "/organizations" }, - { - "slug": "get-all-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "get", - "requestPath": "/organizations/{org}/org-properties/values" - }, - { - "slug": "create-or-update-custom-property-values-for-an-organization", - "subcategory": "custom-properties-for-orgs", - "verb": "patch", - "requestPath": "/organizations/{org}/org-properties/values" - }, { "slug": "get-an-organization", "subcategory": "orgs", diff --git a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json index 81ab44080b65..81fbba2e3cb3 100644 --- a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json +++ b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json @@ -3504,6 +3504,15 @@ "additional-permissions": false, "access": "read" }, + { + "category": "actions", + "slug": "get-github-actions-cache-storage-limit-for-a-repository", + "subcategory": "cache", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", + "additional-permissions": false, + "access": "read" + }, { "category": "actions", "slug": "get-github-actions-cache-usage-for-a-repository", @@ -3933,15 +3942,6 @@ "additional-permissions": false, "access": "write" }, - { - "category": "actions", - "slug": "get-github-actions-cache-storage-limit-for-a-repository", - "subcategory": "cache", - "verb": "get", - "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", - "additional-permissions": false, - "access": "read" - }, { "category": "actions", "slug": "set-github-actions-cache-storage-limit-for-a-repository", diff --git a/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json b/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json index 844dcbe023ae..3df12dfce066 100644 --- a/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json +++ b/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json @@ -4978,6 +4978,17 @@ "server-to-server": true, "additional-permissions": false }, + { + "category": "actions", + "slug": "get-github-actions-cache-storage-limit-for-a-repository", + "subcategory": "cache", + "verb": "get", + "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", + "access": "read", + "user-to-server": true, + "server-to-server": true, + "additional-permissions": false + }, { "category": "actions", "slug": "get-github-actions-cache-usage-for-a-repository", @@ -5501,17 +5512,6 @@ "server-to-server": true, "additional-permissions": false }, - { - "category": "actions", - "slug": "get-github-actions-cache-storage-limit-for-a-repository", - "subcategory": "cache", - "verb": "get", - "requestPath": "/repos/{owner}/{repo}/actions/cache/storage-limit", - "access": "read", - "user-to-server": true, - "server-to-server": true, - "additional-permissions": false - }, { "category": "actions", "slug": "set-github-actions-cache-storage-limit-for-a-repository", diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index 4aee23468eff..ec904a9d2371 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -60,5 +60,5 @@ "2022-11-28" ] }, - "sha": "ae839881ba39ea7b4327309048c7d7749a68f5e8" + "sha": "0d9c0e1f5bc68a5b37ed9daf6c6a1f40819b2b14" } \ No newline at end of file diff --git a/src/github-apps/lib/index.ts b/src/github-apps/lib/index.ts index 0aab639fb5c1..98d840ef0a96 100644 --- a/src/github-apps/lib/index.ts +++ b/src/github-apps/lib/index.ts @@ -12,6 +12,7 @@ interface AppsConfig { // Note: Using 'any' for AppsData to maintain compatibility with existing consumers that expect different shapes type AppsData = any +const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1' const ENABLED_APPS_DIR = 'src/github-apps/data' const githubAppsData = new Map>() @@ -29,6 +30,12 @@ export async function getAppsData( docsVersion: string, apiVersion?: string, ): Promise { + if (DEBUG) { + console.log( + `[DEBUG] getAppsData: ROOT=${process.env.ROOT || '(not set)'}, path=${ENABLED_APPS_DIR}`, + ) + } + const pageTypeMap = githubAppsData.get(pageType)! const filename = `${pageType}.json` const openApiVersion = getOpenApiVersion(docsVersion) + (apiVersion ? `-${apiVersion}` : '') diff --git a/src/rest/data/fpt-2022-11-28/schema.json b/src/rest/data/fpt-2022-11-28/schema.json index 7d0cfa774f51..ce7b7741fc4b 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -2073,7 +2073,7 @@ "fineGrainedPat": true, "permissions": [ { - "\"Administration\" repository permissions": "read" + "\"Actions\" repository permissions": "read" } ] } @@ -495427,227 +495427,6 @@ } } ], - "custom-properties-for-orgs": [ - { - "serverUrl": "https://api.github.com", - "verb": "get", - "requestPath": "/organizations/{org}/org-properties/values", - "title": "Get all custom property values for an organization", - "category": "orgs", - "subcategory": "custom-properties-for-orgs", - "parameters": [ - { - "name": "org", - "description": "

The organization name. The name is not case sensitive.

", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "bodyParameters": [], - "descriptionHTML": "

Gets all custom property values that are set for an organization.

\n

The organization must belong to an enterprise.

\n

Access requirements:

\n
    \n
  • Organization admins
  • \n
  • OAuth tokens and personal access tokens (classic) with the read:org scope
  • \n
  • Actors with the organization-level \"read custom properties for an organization\" fine-grained permission or above
  • \n
", - "codeExamples": [ - { - "key": "default", - "request": { - "description": "Example", - "acceptHeader": "application/vnd.github.v3+json", - "parameters": { - "org": "ORG" - } - }, - "response": { - "statusCode": "200", - "contentType": "application/json", - "description": "

Response

", - "example": [ - { - "property_name": "environment", - "value": "production" - }, - { - "property_name": "service", - "value": "web" - }, - { - "property_name": "team", - "value": "octocat" - } - ], - "schema": { - "type": "array", - "items": { - "title": "Custom Property Value", - "description": "Custom property name and associated value", - "type": "object", - "properties": { - "property_name": { - "type": "string", - "description": "The name of the property" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ], - "description": "The value assigned to the property", - "type": [ - "null", - "string", - "array" - ] - } - }, - "required": [ - "property_name", - "value" - ] - } - } - } - } - ], - "statusCodes": [ - { - "httpStatusCode": "200", - "description": "

OK

" - }, - { - "httpStatusCode": "403", - "description": "

Forbidden

" - }, - { - "httpStatusCode": "404", - "description": "

Resource not found

" - } - ], - "previews": [], - "progAccess": { - "userToServerRest": true, - "serverToServer": true, - "fineGrainedPat": true, - "permissions": [ - { - "\"Custom properties for organizations\" organization permissions": "read" - } - ] - } - }, - { - "serverUrl": "https://api.github.com", - "verb": "patch", - "requestPath": "/organizations/{org}/org-properties/values", - "title": "Create or update custom property values for an organization", - "category": "orgs", - "subcategory": "custom-properties-for-orgs", - "parameters": [ - { - "name": "org", - "description": "

The organization name. The name is not case sensitive.

", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "bodyParameters": [ - { - "type": "array of objects", - "name": "properties", - "in": "body", - "description": "

A list of custom property names and associated values to apply to the organization.

", - "isRequired": true, - "childParamsGroups": [ - { - "type": "string", - "name": "property_name", - "description": "

The name of the property

", - "isRequired": true - }, - { - "type": "null or string or array", - "name": "value", - "description": "

The value assigned to the property

", - "isRequired": true - } - ] - } - ], - "descriptionHTML": "

Create new or update existing custom property values for an organization.\nTo remove a custom property value from an organization, set the property value to null.

\n

The organization must belong to an enterprise.

\n

Access requirements:

\n
    \n
  • Organization admins
  • \n
  • OAuth tokens and personal access tokens (classic) with the admin:org scope
  • \n
  • Actors with the organization-level \"edit custom properties for an organization\" fine-grained permission
  • \n
", - "codeExamples": [ - { - "key": "default", - "request": { - "contentType": "application/json", - "description": "Example", - "acceptHeader": "application/vnd.github.v3+json", - "bodyParameters": { - "properties": [ - { - "property_name": "environment", - "value": "production" - }, - { - "property_name": "service", - "value": "web" - }, - { - "property_name": "team", - "value": "octocat" - } - ] - }, - "parameters": { - "org": "ORG" - } - }, - "response": { - "statusCode": "204", - "description": "

No Content when custom property values are successfully created or updated

" - } - } - ], - "statusCodes": [ - { - "httpStatusCode": "204", - "description": "

No Content when custom property values are successfully created or updated

" - }, - { - "httpStatusCode": "403", - "description": "

Forbidden

" - }, - { - "httpStatusCode": "404", - "description": "

Resource not found

" - }, - { - "httpStatusCode": "422", - "description": "

Validation failed, or the endpoint has been spammed.

" - } - ], - "previews": [], - "progAccess": { - "userToServerRest": true, - "serverToServer": true, - "fineGrainedPat": true, - "permissions": [ - { - "\"Custom properties for organizations\" organization permissions": "write" - } - ] - } - } - ], "issue-types": [ { "serverUrl": "https://api.github.com", diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 879e31fcdced..32fc2f8252dc 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -2150,7 +2150,7 @@ "fineGrainedPat": true, "permissions": [ { - "\"Administration\" repository permissions": "read" + "\"Actions\" repository permissions": "read" } ] } @@ -191094,7 +191094,7 @@ }, "enterprise": { "type": "string", - "description": "The unique identifier of the enterprise." + "description": "The name of the enterprise for the usage report." }, "user": { "type": "string", @@ -191578,7 +191578,7 @@ }, "enterprise": { "type": "string", - "description": "The unique identifier of the enterprise." + "description": "The name of the enterprise for the usage report." }, "organization": { "type": "string", @@ -367144,7 +367144,7 @@ } ], "bodyParameters": [], - "descriptionHTML": "

Removes all assigned enterprise roles from a team in an enterprise.

\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission write_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) need the admin:enterprise scope to use this endpoint.

", + "descriptionHTML": "

Removes all assigned enterprise roles from a team in an enterprise.

\n

Warning

\n

\nThis API is not available for Copilot Business for non-GHE.

\n
\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission write_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) need the admin:enterprise scope to use this endpoint.

", "codeExamples": [ { "key": "default", @@ -367230,7 +367230,7 @@ } ], "bodyParameters": [], - "descriptionHTML": "

Assigns an enterprise role to a team in an enterprise.

\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission write_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) need the admin:enterprise scope to use this endpoint.

", + "descriptionHTML": "

Assigns an enterprise role to a team in an enterprise.

\n

Warning

\n

\nThis API is not available for Copilot Business for non-GHE.

\n
\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission write_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) need the admin:enterprise scope to use this endpoint.

", "codeExamples": [ { "key": "default", @@ -367317,7 +367317,7 @@ } ], "bodyParameters": [], - "descriptionHTML": "

Removes an enterprise role from a team in an enterprise.

\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission write_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) need the admin:enterprise scope to use this endpoint.

", + "descriptionHTML": "

Removes an enterprise role from a team in an enterprise.

\n

Warning

\n

\nThis API is not available for Copilot Business for non-GHE.

\n
\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission write_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) need the admin:enterprise scope to use this endpoint.

", "codeExamples": [ { "key": "default", @@ -367919,7 +367919,7 @@ } ], "bodyParameters": [], - "descriptionHTML": "

Lists the teams that are assigned to an enterprise role.

\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission read_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) require the read:enterprise scope to access this endpoint.

", + "descriptionHTML": "

Lists the teams that are assigned to an enterprise role.

\n

Warning

\n

\nThis API is not available for Copilot Business for non-GHE.

\n
\n

To use this endpoint, the authenticated user must be one of:

\n
    \n
  • An administrator for the enterprise.
  • \n
  • A user, or a user on a team, with the fine-grained permission read_enterprise_custom_enterprise_role in the enterprise.
  • \n
\n

OAuth app tokens and personal access tokens (classic) require the read:enterprise scope to access this endpoint.

", "codeExamples": [ { "key": "default", @@ -374044,7 +374044,7 @@ "type": "object", "name": "conditions", "in": "body", - "description": "

Conditions for an enterprise ruleset. The conditions object should contain either the organization_id or organization_name property and the repository_name or repository_property property. For branch and tag rulesets, the conditions object should also contain the ref_name property.

", + "description": "

Conditions for an enterprise ruleset.\nThe conditions object supports either of the following combinations: - organization_id and repository_name - organization_id and repository_property - organization_name and repository_name - organization_name and repository_property - organization_property and repository_name - organization_property and repository_property\nFor branch and tag rulesets, the conditions object should also contain the ref_name property.

", "childParamsGroups": [ { "type": "object", @@ -378397,7 +378397,7 @@ "type": "object", "name": "conditions", "in": "body", - "description": "

Conditions for an enterprise ruleset. The conditions object should contain either the organization_id or organization_name property and the repository_name or repository_property property. For branch and tag rulesets, the conditions object should also contain the ref_name property.

", + "description": "

Conditions for an enterprise ruleset.\nThe conditions object supports either of the following combinations: - organization_id and repository_name - organization_id and repository_property - organization_name and repository_name - organization_name and repository_property - organization_property and repository_name - organization_property and repository_property\nFor branch and tag rulesets, the conditions object should also contain the ref_name property.

", "childParamsGroups": [ { "type": "object", @@ -384414,7 +384414,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -384736,7 +384736,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -385634,7 +385634,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/data/ghes-3.14-2022-11-28/schema.json b/src/rest/data/ghes-3.14-2022-11-28/schema.json index 0ed7d1fc161d..ffcefbd5ab43 100644 --- a/src/rest/data/ghes-3.14-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.14-2022-11-28/schema.json @@ -390997,7 +390997,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -391319,7 +391319,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -392217,7 +392217,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/data/ghes-3.15-2022-11-28/schema.json b/src/rest/data/ghes-3.15-2022-11-28/schema.json index b2de61e991fe..481e32034896 100644 --- a/src/rest/data/ghes-3.15-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.15-2022-11-28/schema.json @@ -393948,7 +393948,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -394270,7 +394270,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -395168,7 +395168,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/data/ghes-3.16-2022-11-28/schema.json b/src/rest/data/ghes-3.16-2022-11-28/schema.json index aaf9d4d633f1..babb328905ac 100644 --- a/src/rest/data/ghes-3.16-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.16-2022-11-28/schema.json @@ -398970,7 +398970,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -399292,7 +399292,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -400190,7 +400190,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/data/ghes-3.17-2022-11-28/schema.json b/src/rest/data/ghes-3.17-2022-11-28/schema.json index b90ea761d7de..af2397f09e1b 100644 --- a/src/rest/data/ghes-3.17-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.17-2022-11-28/schema.json @@ -399941,7 +399941,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -400263,7 +400263,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -401161,7 +401161,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/data/ghes-3.18-2022-11-28/schema.json b/src/rest/data/ghes-3.18-2022-11-28/schema.json index 9052e389152d..b505c74cef08 100644 --- a/src/rest/data/ghes-3.18-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.18-2022-11-28/schema.json @@ -402258,7 +402258,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -402580,7 +402580,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -403478,7 +403478,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/data/ghes-3.19-2022-11-28/schema.json b/src/rest/data/ghes-3.19-2022-11-28/schema.json index 60663e3d90a4..ba24847f43c6 100644 --- a/src/rest/data/ghes-3.19-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.19-2022-11-28/schema.json @@ -413330,7 +413330,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] @@ -413652,7 +413652,7 @@ ], "roles": [ { - "value": "Enterprise Owner", + "value": "enterprise_owner", "primary": false } ] @@ -414550,7 +414550,7 @@ ], "roles": [ { - "value": "User", + "value": "user", "primary": false } ] diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index 40d1fd74b6c4..4f07050d1fb7 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -50,5 +50,5 @@ ] } }, - "sha": "ae839881ba39ea7b4327309048c7d7749a68f5e8" + "sha": "0d9c0e1f5bc68a5b37ed9daf6c6a1f40819b2b14" } \ No newline at end of file diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index 7fbb18ac332c..b47c61261561 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "ae839881ba39ea7b4327309048c7d7749a68f5e8" + "sha": "0d9c0e1f5bc68a5b37ed9daf6c6a1f40819b2b14" } \ No newline at end of file