diff --git a/.github/workflows/sync-secret-scanning.yml b/.github/workflows/sync-secret-scanning.yml index a51bdfc881db..5a78633eeb33 100644 --- a/.github/workflows/sync-secret-scanning.yml +++ b/.github/workflows/sync-secret-scanning.yml @@ -72,13 +72,27 @@ jobs: --title "Sync secret scanning data" \ --body 'đź‘‹ humans. This PR updates the secret scanning data with the latest changes from github/token-scanning-service. - /cc @github/docs-content-security-products + If CI passes, this PR will be auto-merged. :green_heart: If CI does not pass or other problems arise, contact #docs-engineering on Slack.' \ --repo github/docs-internal \ - --label secret-scanning-pipeline,'skip FR board',ready-for-doc-review,workflow-generated \ + --label secret-scanning-pipeline,'skip FR board',workflow-generated \ --head=$branchname + # can't approve your own PR, approve with Actions + echo "Approving pull request..." + unset GITHUB_TOKEN + gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}" + gh pr review --approve + echo "Approved pull request" + + # Actions can't merge the PR so back to docs-bot to merge + echo "Setting pull request to auto merge..." + unset GITHUB_TOKEN + gh auth login --with-token <<< "${{ secrets.DOCS_BOT_PAT_BASE }}" + gh pr merge --auto --merge + echo "Set pull request to auto merge" + - uses: ./.github/actions/slack-alert if: ${{ failure() && github.event_name != 'workflow_dispatch' }} with: diff --git a/assets/images/help/repository/multiple-paths-available.png b/assets/images/help/repository/multiple-paths-available.png new file mode 100644 index 000000000000..b2cea13df9e5 Binary files /dev/null and b/assets/images/help/repository/multiple-paths-available.png differ diff --git a/content/billing/how-tos/products/manage-ghas-licenses.md b/content/billing/how-tos/products/manage-ghas-licenses.md index 3090f59071ad..2dbe381a2605 100644 --- a/content/billing/how-tos/products/manage-ghas-licenses.md +++ b/content/billing/how-tos/products/manage-ghas-licenses.md @@ -40,10 +40,6 @@ For information about using policies to control use of licenses in your enterpri 1. To the right of "{% data variables.product.prodname_AS %}", select {% octicon "kebab-horizontal" aria-label="Open menu" %}, then click **Cancel subscription**. 1. To confirm your cancellation, click **I understand, cancel {% data variables.product.prodname_AS %}**. -{% ifversion disable-ghas-button %} - ## Disabling {% data variables.product.prodname_GHAS %} in an enterprise Enterprise owners can disable {% data variables.product.prodname_GHAS %} completely and set a policy to prevent future re-enablement. See [AUTOTITLE](/billing/how-tos/products/disable-ghas-for-enterprise). - -{% endif %} diff --git a/content/code-security/concepts/code-scanning/about-code-scanning-alerts.md b/content/code-security/concepts/code-scanning/about-code-scanning-alerts.md index 244ed74374fe..7a550e913d7b 100644 --- a/content/code-security/concepts/code-scanning/about-code-scanning-alerts.md +++ b/content/code-security/concepts/code-scanning/about-code-scanning-alerts.md @@ -64,6 +64,8 @@ If you configure {% data variables.product.prodname_code_scanning %} using {% da When {% data variables.product.prodname_code_scanning %} reports data-flow alerts, {% data variables.product.prodname_dotcom %} shows you how data moves through the code. {% data variables.product.prodname_code_scanning_caps %} allows you to identify the areas of your code that leak sensitive information, and that could be the entry point for attacks by malicious users. +In some cases, the same vulnerability can be reached through multiple code paths, for example, when several different functions pass user input to the same unsafe operation. {% data variables.product.prodname_code_scanning_caps %} groups these related paths under a single alert rather than creating separate alerts for each path, so you can see the full scope of the vulnerability in one place. + {% data reusables.code-scanning.track-alert-in-issue %} ### About alerts from multiple configurations diff --git a/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/assessing-code-scanning-alerts-for-your-repository.md b/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/assessing-code-scanning-alerts-for-your-repository.md index e604c43d557d..1e7333a33f0c 100644 --- a/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/assessing-code-scanning-alerts-for-your-repository.md +++ b/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/assessing-code-scanning-alerts-for-your-repository.md @@ -31,10 +31,14 @@ By default, the {% data variables.product.prodname_code_scanning %} alerts page {% data reusables.code-scanning.explore-alert %} {% data reusables.code-scanning.alert-default-branch %} -1. Optionally, if the alert highlights a problem with data flow, click **Show paths** to display the path from the data source to the sink where it's used. +1. Optionally, if the alert highlights a problem with data flow, click **Show paths** to display the path from the data source to the sink where it's used. The path view shows each step in the data flow as a numbered list, from the point where user-provided data enters the code (the source) to the point where it's used in a potentially unsafe operation (the sink). ![Screenshot of a {% data variables.product.prodname_code_scanning %} alert. The "Show paths" and "Show more" links are outlined in dark orange.](/assets/images/help/repository/code-scanning-alert-details.png) + Some alerts identify multiple paths through the code that could trigger the same vulnerability. When an alert has multiple paths, a dropdown appears above the path view showing the number of paths available. You can select each path from the dropdown to review it individually. + + ![Screenshot of a {% data variables.product.prodname_code_scanning %} alert detail page showing the paths dropdown with "3 paths available".](/assets/images/help/repository/multiple-paths-available.png) + 1. Alerts from {% data variables.product.prodname_codeql %} analysis include a description of the problem. Click **Show more** for guidance on how to fix your code. {% data reusables.security.alert-assignee-step %} diff --git a/content/code-security/reference/supply-chain-security/dependabot-options-reference.md b/content/code-security/reference/supply-chain-security/dependabot-options-reference.md index 68c7ab10a858..f154cf80631d 100644 --- a/content/code-security/reference/supply-chain-security/dependabot-options-reference.md +++ b/content/code-security/reference/supply-chain-security/dependabot-options-reference.md @@ -218,42 +218,58 @@ You can specify the duration of the cooldown using the options below. | `include` | List of dependencies to **apply cooldown** (up to **150 items**). Supports wildcards (`*`). | | `exclude` | List of dependencies **excluded from cooldown** (up to **150 items**). Supports wildcards (`*`). | -The table below shows the package managers for which SemVer is supported. +The table below shows the package managers that support `cooldown`. The `default-days` option is supported for all package managers listed, while `semver-major-days`, `semver-minor-days`, and `semver-patch-days` are supported only where indicated. -| Package manager | SemVer supported | -|-----------------------|------------------| +| Package manager | Default days supported | SemVer-bump days supported | +|-----------------------|:----------------------:|:--------------------------:| | {% ifversion dependabot-bazel-support %} | -| Bazel | {% octicon "x" aria-label="Not supported" %} | +| Bazel | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | | {% endif %} | -| Bundler | {% octicon "check" aria-label="Supported" %} | -| Bun | {% octicon "check" aria-label="Supported" %} | -| Cargo | {% octicon "check" aria-label="Supported" %} | -| Composer | {% octicon "check" aria-label="Supported" %} | -| Devcontainers | {% octicon "x" aria-label="Not supported" %} | -| Docker | {% octicon "x" aria-label="Not supported" %} | -| Docker Compose | {% octicon "x" aria-label="Not supported" %} | -| Dotnet SDK | {% octicon "check" aria-label="Supported" %} | -| Elm | {% octicon "check" aria-label="Supported" %} | -| {% data variables.product.prodname_actions %} | {% octicon "x" aria-label="Not supported" %} | -| Gitsubmodule | {% octicon "x" aria-label="Not supported" %} | -| Gomod (Go Modules) | {% octicon "check" aria-label="Supported" %} | -| Gradle | {% octicon "check" aria-label="Supported" %} | -| Helm | {% octicon "x" aria-label="Not supported" %} | -| Hex (Hex) | {% octicon "check" aria-label="Supported" %} | +| Bundler | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Bun | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Cargo | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Composer | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% ifversion dependabot-conda-support %} | +| Conda | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% endif %} | +| Deno | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Devcontainers | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| Docker | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| Docker Compose | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| Dotnet SDK | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Elm | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% data variables.product.prodname_actions %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| Gitsubmodule | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| Gomod (Go Modules) | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Gradle | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Helm | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| Hex (Hex) | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | | {% ifversion dependabot-julia-support %} | -| Julia | {% octicon "check" aria-label="Supported" %} | +| Julia | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | | {% endif %} | -| Maven | {% octicon "check" aria-label="Supported" %} | -| NPM and Yarn | {% octicon "check" aria-label="Supported" %} | -| NuGet | {% octicon "check" aria-label="Supported" %} | +| Maven | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% ifversion dependabot-nix-support %} | +| Nix flakes | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| {% endif %} | +| NPM and Yarn | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| NuGet | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | | {% ifversion dependabot-opentofu-support %} | -| OpenTofu | {% octicon "check" aria-label="Supported" %} | +| OpenTofu | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| {% endif %} | +| Pip | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% ifversion dependabot-pre-commit-support %} | +| pre-commit | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| {% endif %} | +| Pub | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% ifversion dependabot-rust-toolchain-support %} | +| Rust toolchain | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% endif %} | +| Swift | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| Terraform | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | +| UV | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% ifversion dependabot-vcpkg-support %} | +| vcpkg | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | | {% endif %} | -| Pip | {% octicon "check" aria-label="Supported" %} | -| Pub | {% octicon "check" aria-label="Supported" %} | -| Swift | {% octicon "check" aria-label="Supported" %} | -| Terraform | {% octicon "x" aria-label="Not supported" %} | -| UV | {% octicon "check" aria-label="Supported" %} | > [!NOTE] > diff --git a/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md b/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md index 6f8747759a6e..df7f243e639f 100644 --- a/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md +++ b/content/copilot/reference/copilot-usage-metrics/copilot-usage-metrics.md @@ -80,6 +80,7 @@ For example schemas of the data returned by the APIs, see [AUTOTITLE](/copilot/r | `chat_panel_ask_mode` | Captures user-initiated interactions in the chat panel with ask mode selected. | | `chat_panel_custom_mode` | Captures user-initiated interactions in the chat panel with a custom agent selected. | | `chat_panel_edit_mode` | Captures user-initiated interactions in the chat panel with edit mode selected. | +| `chat_panel_plan_mode` | Captures user-initiated interactions in the chat panel with plan mode selected. | | `chat_panel_unknown_mode` | Captures user-initiated interactions in the chat panel where the mode is unknown. | | `code_generation_activity_count` | Number of distinct {% data variables.product.prodname_copilot_short %} output events generated.

**Includes:** All generated content, including comments and docstrings.
**Multiple blocks:** Each distinct code block from a single user prompt counts as a separate generation.
**Note:** This metric is not directly comparable to `user_initiated_interaction_count`, since one prompt can produce multiple generations. | | `code_acceptance_activity_count` | Number of suggestions or code blocks accepted by users.

**Counts:** All built-in accept actions, such as “apply to file,” “insert at cursor,” “insert into terminal,” and use of the **Copy** button.
**Does not count:** Manual OS clipboard actions (for example, Ctrl+C).
**Granularity:** Each acceptance action increments the count once, regardless of how many code blocks were generated by the initial prompt. | diff --git a/content/copilot/tutorials/use-an-ai-sme.md b/content/copilot/tutorials/use-an-ai-sme.md index 9ab4edb553ed..0ce79949340b 100644 --- a/content/copilot/tutorials/use-an-ai-sme.md +++ b/content/copilot/tutorials/use-an-ai-sme.md @@ -20,7 +20,7 @@ When you start work on an unfamiliar codebase, or you're asked to change a part When you need to understand an unfamiliar codebase, you usually rely on a teammate who knows the code. When that person isn't available, {% data variables.copilot.copilot_cli_short %} can fill the gap. In this tutorial, you'll ask {% data variables.copilot.copilot_cli_short %} questions about a repository's code, learn prompting techniques that produce code-grounded answers, and build the confidence to start making changes. -## When to use an AI SME (or even When do I use an AI SME?) +## When to use an AI SME This tutorial is useful any time you need to understand a codebase faster. For example: diff --git a/data/features/disable-ghas-button.yml b/data/features/disable-ghas-button.yml index f1ba0ba79b37..d8d41a993f6f 100644 --- a/data/features/disable-ghas-button.yml +++ b/data/features/disable-ghas-button.yml @@ -3,4 +3,4 @@ versions: fpt: '*' ghec: '*' - ghes: '>= 3.21' + ghes: '>= 3.22' diff --git a/src/languages/lib/correct-translation-content.ts b/src/languages/lib/correct-translation-content.ts index 5662d8e69cc8..f90bba6b81c2 100644 --- a/src/languages/lib/correct-translation-content.ts +++ b/src/languages/lib/correct-translation-content.ts @@ -58,13 +58,13 @@ export function correctTranslatedContentStrings( ) // The translation pipeline frequently splits Markdown bullet markers - // (`*`) and table-cell pipes (`|`) onto their own line, with the - // actual content pushed to the next line as deeply indented text. + // (`*` and `-`) and table-cell pipes (`|`) onto their own line, with + // the actual content pushed to the next line as deeply indented text. // This breaks list and table rendering and leaves `[AUTOTITLE]` links // unexpanded. Rejoin the marker with its content. This corruption - // affects every translated language (~47k bullets and ~11k cells in - // total), so it lives in the universal pre-fixes block. - content = content.replace(/^([ \t]*)\* ?\n[ \t]+/gm, '$1* ') + // affects every translated language, so it lives in the universal + // pre-fixes block. + content = content.replace(/^([ \t]*)([*-]) ?\n[ \t]+/gm, '$1$2 ') content = content.replace(/^\|[ \t]*\n[ \t]+/gm, '| ') // The same translator wrapping habit also strands heading markers diff --git a/src/languages/tests/correct-translation-content.ts b/src/languages/tests/correct-translation-content.ts index a46fc7d30c53..bcf19ea12698 100644 --- a/src/languages/tests/correct-translation-content.ts +++ b/src/languages/tests/correct-translation-content.ts @@ -1595,6 +1595,19 @@ describe('correctTranslatedContentStrings', () => { expect(fix('* \n one\n* \n two', 'fr')).toBe('* one\n* two') // Valid bullets are not modified expect(fix('* normal\n* another', 'de')).toBe('* normal\n* another') + + // Lone `-` (hyphen) bullet markers are also rejoined (same corruption) + const brokenHyphen = '- \n [AUTOTITLE](/orgs/transfer)' + const expectedHyphen = '- [AUTOTITLE](/orgs/transfer)' + for (const lang of ['ja', 'de', 'es', 'fr', 'ko', 'pt', 'ru', 'zh']) { + expect(fix(brokenHyphen, lang)).toBe(expectedHyphen) + } + // No trailing space variant + expect(fix('-\n [AUTOTITLE](/path)', 'ko')).toBe('- [AUTOTITLE](/path)') + // Multiple consecutive broken hyphen bullets + expect(fix('- \n one\n- \n two', 'fr')).toBe('- one\n- two') + // Valid hyphen bullets are not modified + expect(fix('- normal\n- another', 'de')).toBe('- normal\n- another') }) test('rejoins broken table cells split across lines (all languages)', () => {