diff --git a/.github/workflows/sync-codeql-cli.yml b/.github/workflows/sync-codeql-cli.yml
index 479ba17e8282..a8e067ec0e69 100644
--- a/.github/workflows/sync-codeql-cli.yml
+++ b/.github/workflows/sync-codeql-cli.yml
@@ -92,7 +92,7 @@ jobs:
branchCheckout=$(git checkout -b $branchname)
if [[ ! $? -eq 0 ]]; then
- echo "Branch $branchname already exists in `github/docs-internal`. Exiting..."
+ echo "Branch $branchname already exists in 'github/docs-internal'. Exiting..."
exit 0
fi
git add .
diff --git a/assets/images/_fixtures/screenshot.png b/assets/images/_fixtures/screenshot.png
index ea7ede838ceb..6464af82ac75 100644
Binary files a/assets/images/_fixtures/screenshot.png and b/assets/images/_fixtures/screenshot.png differ
diff --git a/assets/images/banner-images/hero-1.png b/assets/images/banner-images/hero-1.png
index 60df8ea86ed2..fc6e97fc7cc2 100644
Binary files a/assets/images/banner-images/hero-1.png and b/assets/images/banner-images/hero-1.png differ
diff --git a/assets/images/banner-images/hero-2.png b/assets/images/banner-images/hero-2.png
index 0d02dfd6c078..be6ce3cf2fdb 100644
Binary files a/assets/images/banner-images/hero-2.png and b/assets/images/banner-images/hero-2.png differ
diff --git a/assets/images/banner-images/hero-3.png b/assets/images/banner-images/hero-3.png
index 7de28041c963..05fa9bb53f83 100644
Binary files a/assets/images/banner-images/hero-3.png and b/assets/images/banner-images/hero-3.png differ
diff --git a/assets/images/banner-images/hero-4.png b/assets/images/banner-images/hero-4.png
index 8d2bcb1ebaf6..d177ffd57c35 100644
Binary files a/assets/images/banner-images/hero-4.png and b/assets/images/banner-images/hero-4.png differ
diff --git a/assets/images/banner-images/hero-5.png b/assets/images/banner-images/hero-5.png
index ef06249436e7..24bd51149d28 100644
Binary files a/assets/images/banner-images/hero-5.png and b/assets/images/banner-images/hero-5.png differ
diff --git a/assets/images/banner-images/hero-6.png b/assets/images/banner-images/hero-6.png
index 3f68a2ebdf33..12e212e8492d 100644
Binary files a/assets/images/banner-images/hero-6.png and b/assets/images/banner-images/hero-6.png differ
diff --git a/assets/images/enterprise/management-console/upload-license.png b/assets/images/enterprise/management-console/upload-license.png
index 4c4362766f9d..31b621f2aac0 100644
Binary files a/assets/images/enterprise/management-console/upload-license.png and b/assets/images/enterprise/management-console/upload-license.png differ
diff --git a/assets/images/help/actions/actions-vnet-injected-larger-runners-architecture.png b/assets/images/help/actions/actions-vnet-injected-larger-runners-architecture.png
index 84515a6bd12b..0042781e8154 100644
Binary files a/assets/images/help/actions/actions-vnet-injected-larger-runners-architecture.png and b/assets/images/help/actions/actions-vnet-injected-larger-runners-architecture.png differ
diff --git a/assets/images/help/billing/copilot-billing-entity-dropdown.png b/assets/images/help/billing/copilot-billing-entity-dropdown.png
index c4964c37a40e..cc8bf89687ee 100644
Binary files a/assets/images/help/billing/copilot-billing-entity-dropdown.png and b/assets/images/help/billing/copilot-billing-entity-dropdown.png differ
diff --git a/assets/images/help/billing/org-budget-example.png b/assets/images/help/billing/org-budget-example.png
index 9b6ba13cf122..21051d85e039 100644
Binary files a/assets/images/help/billing/org-budget-example.png and b/assets/images/help/billing/org-budget-example.png differ
diff --git a/assets/images/help/billing/overview-product-summary.png b/assets/images/help/billing/overview-product-summary.png
index 4e9dc18ce55a..dcc993cfd3b9 100644
Binary files a/assets/images/help/billing/overview-product-summary.png and b/assets/images/help/billing/overview-product-summary.png differ
diff --git a/assets/images/help/billing/premium-request-analytics-chart-download.png b/assets/images/help/billing/premium-request-analytics-chart-download.png
index 23a3ee503c53..f399146ecabe 100644
Binary files a/assets/images/help/billing/premium-request-analytics-chart-download.png and b/assets/images/help/billing/premium-request-analytics-chart-download.png differ
diff --git a/assets/images/help/billing/premium-request-analytics-chart.png b/assets/images/help/billing/premium-request-analytics-chart.png
index 887f04557d9e..fa76097fd89c 100644
Binary files a/assets/images/help/billing/premium-request-analytics-chart.png and b/assets/images/help/billing/premium-request-analytics-chart.png differ
diff --git a/assets/images/help/billing/premium-request-analytics-org-table.png b/assets/images/help/billing/premium-request-analytics-org-table.png
index 301dd6359315..48636f41a9b6 100644
Binary files a/assets/images/help/billing/premium-request-analytics-org-table.png and b/assets/images/help/billing/premium-request-analytics-org-table.png differ
diff --git a/assets/images/help/billing/product-usage-chart.png b/assets/images/help/billing/product-usage-chart.png
index 4381cbd9eeb1..2dceb3579f21 100644
Binary files a/assets/images/help/billing/product-usage-chart.png and b/assets/images/help/billing/product-usage-chart.png differ
diff --git a/assets/images/help/business-accounts/download-invoice.png b/assets/images/help/business-accounts/download-invoice.png
index 86e955b2e78c..3b37bdeabb40 100644
Binary files a/assets/images/help/business-accounts/download-invoice.png and b/assets/images/help/business-accounts/download-invoice.png differ
diff --git a/assets/images/help/business-accounts/pay-invoice-button.png b/assets/images/help/business-accounts/pay-invoice-button.png
index 0ff630bbd774..35dfa78c2820 100644
Binary files a/assets/images/help/business-accounts/pay-invoice-button.png and b/assets/images/help/business-accounts/pay-invoice-button.png differ
diff --git a/assets/images/help/business-accounts/view-invoice-link.png b/assets/images/help/business-accounts/view-invoice-link.png
index e887e43e200b..cc5341fda454 100644
Binary files a/assets/images/help/business-accounts/view-invoice-link.png and b/assets/images/help/business-accounts/view-invoice-link.png differ
diff --git a/assets/images/help/code-quality/ai-suggestions-repo-fixes.png b/assets/images/help/code-quality/ai-suggestions-repo-fixes.png
index 09c174dd99a5..606d1dfea3eb 100644
Binary files a/assets/images/help/code-quality/ai-suggestions-repo-fixes.png and b/assets/images/help/code-quality/ai-suggestions-repo-fixes.png differ
diff --git a/assets/images/help/code-quality/ai-suggestions-repo.png b/assets/images/help/code-quality/ai-suggestions-repo.png
index 021a6291ecc4..746ff5cadf9e 100644
Binary files a/assets/images/help/code-quality/ai-suggestions-repo.png and b/assets/images/help/code-quality/ai-suggestions-repo.png differ
diff --git a/assets/images/help/code-quality/all-findings-overview-repo.png b/assets/images/help/code-quality/all-findings-overview-repo.png
index 9c36414073f8..5578e830c16f 100644
Binary files a/assets/images/help/code-quality/all-findings-overview-repo.png and b/assets/images/help/code-quality/all-findings-overview-repo.png differ
diff --git a/assets/images/help/code-quality/all-findings-rules-repo.png b/assets/images/help/code-quality/all-findings-rules-repo.png
index 9d704ef80fbf..0c83958bf416 100644
Binary files a/assets/images/help/code-quality/all-findings-rules-repo.png and b/assets/images/help/code-quality/all-findings-rules-repo.png differ
diff --git a/assets/images/help/code-quality/cca-pr-ai-findings.png b/assets/images/help/code-quality/cca-pr-ai-findings.png
index 06b78a025e80..c6580f92ff7a 100644
Binary files a/assets/images/help/code-quality/cca-pr-ai-findings.png and b/assets/images/help/code-quality/cca-pr-ai-findings.png differ
diff --git a/assets/images/help/code-quality/click-rule-name.png b/assets/images/help/code-quality/click-rule-name.png
index 4b3c7aecd253..bd9b20696a83 100644
Binary files a/assets/images/help/code-quality/click-rule-name.png and b/assets/images/help/code-quality/click-rule-name.png differ
diff --git a/assets/images/help/code-quality/click-show-more.png b/assets/images/help/code-quality/click-show-more.png
index e34bb914fe1c..d94f98edfa8a 100644
Binary files a/assets/images/help/code-quality/click-show-more.png and b/assets/images/help/code-quality/click-show-more.png differ
diff --git a/assets/images/help/code-quality/code-quality-merge-block.png b/assets/images/help/code-quality/code-quality-merge-block.png
index 3e5dc8694f12..a6b611237ae4 100644
Binary files a/assets/images/help/code-quality/code-quality-merge-block.png and b/assets/images/help/code-quality/code-quality-merge-block.png differ
diff --git a/assets/images/help/code-quality/generate-fix.png b/assets/images/help/code-quality/generate-fix.png
index 1a5c57ae882d..4316fd7c6c11 100644
Binary files a/assets/images/help/code-quality/generate-fix.png and b/assets/images/help/code-quality/generate-fix.png differ
diff --git a/assets/images/help/code-quality/invoke-coding-agent.png b/assets/images/help/code-quality/invoke-coding-agent.png
index ff0c50afe5e1..c88e3582d188 100644
Binary files a/assets/images/help/code-quality/invoke-coding-agent.png and b/assets/images/help/code-quality/invoke-coding-agent.png differ
diff --git a/assets/images/help/code-quality/merge-block-warnings.png b/assets/images/help/code-quality/merge-block-warnings.png
index caf3d0d11b8e..f6e5103c2166 100644
Binary files a/assets/images/help/code-quality/merge-block-warnings.png and b/assets/images/help/code-quality/merge-block-warnings.png differ
diff --git a/assets/images/help/code-quality/standard-findings-filters.png b/assets/images/help/code-quality/standard-findings-filters.png
index eeb34fa47063..5662cbfb1445 100644
Binary files a/assets/images/help/code-quality/standard-findings-filters.png and b/assets/images/help/code-quality/standard-findings-filters.png differ
diff --git a/assets/images/help/code-quality/user-pr-ai-findings.png b/assets/images/help/code-quality/user-pr-ai-findings.png
index 14a25d1a3c0c..b3395ad7ea5e 100644
Binary files a/assets/images/help/code-quality/user-pr-ai-findings.png and b/assets/images/help/code-quality/user-pr-ai-findings.png differ
diff --git a/assets/images/help/codespaces/codespace-annotated-vscode.png b/assets/images/help/codespaces/codespace-annotated-vscode.png
index f89253162b9f..f833fe95003e 100644
Binary files a/assets/images/help/codespaces/codespace-annotated-vscode.png and b/assets/images/help/codespaces/codespace-annotated-vscode.png differ
diff --git a/assets/images/help/codespaces/codespace-overview-annotated.png b/assets/images/help/codespaces/codespace-overview-annotated.png
index bea7ee72287c..ab9f7df30447 100644
Binary files a/assets/images/help/codespaces/codespace-overview-annotated.png and b/assets/images/help/codespaces/codespace-overview-annotated.png differ
diff --git a/assets/images/help/codespaces/jetbrains-checkout-submenu.png b/assets/images/help/codespaces/jetbrains-checkout-submenu.png
index 4e58b110d9b0..41d247975a13 100644
Binary files a/assets/images/help/codespaces/jetbrains-checkout-submenu.png and b/assets/images/help/codespaces/jetbrains-checkout-submenu.png differ
diff --git a/assets/images/help/copilot/activity-report-enterprise.png b/assets/images/help/copilot/activity-report-enterprise.png
index 28a340d04f6b..d559de1f3cae 100644
Binary files a/assets/images/help/copilot/activity-report-enterprise.png and b/assets/images/help/copilot/activity-report-enterprise.png differ
diff --git a/assets/images/help/copilot/activity-report-non-ghe.png b/assets/images/help/copilot/activity-report-non-ghe.png
index ac94003279df..ca83d2f80779 100644
Binary files a/assets/images/help/copilot/activity-report-non-ghe.png and b/assets/images/help/copilot/activity-report-non-ghe.png differ
diff --git a/assets/images/help/copilot/activity-report-org.png b/assets/images/help/copilot/activity-report-org.png
index 9e616c246279..accc31020363 100644
Binary files a/assets/images/help/copilot/activity-report-org.png and b/assets/images/help/copilot/activity-report-org.png differ
diff --git a/assets/images/help/copilot/ask-to-explain.png b/assets/images/help/copilot/ask-to-explain.png
index 91de670e31f7..0a823abae8f6 100644
Binary files a/assets/images/help/copilot/ask-to-explain.png and b/assets/images/help/copilot/ask-to-explain.png differ
diff --git a/assets/images/help/copilot/azure-data-studio-extensions-icon.png b/assets/images/help/copilot/azure-data-studio-extensions-icon.png
index 6a4b67a55d9c..324117edde81 100644
Binary files a/assets/images/help/copilot/azure-data-studio-extensions-icon.png and b/assets/images/help/copilot/azure-data-studio-extensions-icon.png differ
diff --git a/assets/images/help/copilot/code-review/automatic-code-review.png b/assets/images/help/copilot/code-review/automatic-code-review.png
index ecc728796568..49a5283cf131 100644
Binary files a/assets/images/help/copilot/code-review/automatic-code-review.png and b/assets/images/help/copilot/code-review/automatic-code-review.png differ
diff --git a/assets/images/help/copilot/code-review/vscode-review-button.png b/assets/images/help/copilot/code-review/vscode-review-button.png
index 5682f8e10d52..f646f6ca9f30 100644
Binary files a/assets/images/help/copilot/code-review/vscode-review-button.png and b/assets/images/help/copilot/code-review/vscode-review-button.png differ
diff --git a/assets/images/help/copilot/code-review/xcode-ccr-button.png b/assets/images/help/copilot/code-review/xcode-ccr-button.png
index 4d591809a549..e2068c080311 100644
Binary files a/assets/images/help/copilot/code-review/xcode-ccr-button.png and b/assets/images/help/copilot/code-review/xcode-ccr-button.png differ
diff --git a/assets/images/help/copilot/code-review/xcode-review-popup.png b/assets/images/help/copilot/code-review/xcode-review-popup.png
index 8a7b0d608809..1c227b222f77 100644
Binary files a/assets/images/help/copilot/code-review/xcode-review-popup.png and b/assets/images/help/copilot/code-review/xcode-review-popup.png differ
diff --git a/assets/images/help/copilot/coding-agent/assign-to-copilot-dialog.png b/assets/images/help/copilot/coding-agent/assign-to-copilot-dialog.png
index ea7c79eccd87..500aa9a0f15d 100644
Binary files a/assets/images/help/copilot/coding-agent/assign-to-copilot-dialog.png and b/assets/images/help/copilot/coding-agent/assign-to-copilot-dialog.png differ
diff --git a/assets/images/help/copilot/coding-agent/mobile-status-dropdown.png b/assets/images/help/copilot/coding-agent/mobile-status-dropdown.png
index 8a5221d09c18..308a3b5dded8 100644
Binary files a/assets/images/help/copilot/coding-agent/mobile-status-dropdown.png and b/assets/images/help/copilot/coding-agent/mobile-status-dropdown.png differ
diff --git a/assets/images/help/copilot/coding-agent/open-workbench.png b/assets/images/help/copilot/coding-agent/open-workbench.png
index 907af082ec38..59d06a65f67b 100644
Binary files a/assets/images/help/copilot/coding-agent/open-workbench.png and b/assets/images/help/copilot/coding-agent/open-workbench.png differ
diff --git a/assets/images/help/copilot/content-exclusions-last-edited-by.png b/assets/images/help/copilot/content-exclusions-last-edited-by.png
index 914515e0fb85..1945f4454d1a 100644
Binary files a/assets/images/help/copilot/content-exclusions-last-edited-by.png and b/assets/images/help/copilot/content-exclusions-last-edited-by.png differ
diff --git a/assets/images/help/copilot/copilot-chat-dashboard.png b/assets/images/help/copilot/copilot-chat-dashboard.png
index 6852057637bd..3c2c682f15c0 100644
Binary files a/assets/images/help/copilot/copilot-chat-dashboard.png and b/assets/images/help/copilot/copilot-chat-dashboard.png differ
diff --git a/assets/images/help/copilot/copilot-cli-welcome.png b/assets/images/help/copilot/copilot-cli-welcome.png
index 1df1e7c126ad..6cd91c326e01 100644
Binary files a/assets/images/help/copilot/copilot-cli-welcome.png and b/assets/images/help/copilot/copilot-cli-welcome.png differ
diff --git a/assets/images/help/copilot/copilot-creates-sub-issues-workbench.png b/assets/images/help/copilot/copilot-creates-sub-issues-workbench.png
index 97829156af9d..3dad8422d4c5 100644
Binary files a/assets/images/help/copilot/copilot-creates-sub-issues-workbench.png and b/assets/images/help/copilot/copilot-creates-sub-issues-workbench.png differ
diff --git a/assets/images/help/copilot/copilot-creates-sub-issues.png b/assets/images/help/copilot/copilot-creates-sub-issues.png
index 051befcb6b3d..e41eaee81368 100644
Binary files a/assets/images/help/copilot/copilot-creates-sub-issues.png and b/assets/images/help/copilot/copilot-creates-sub-issues.png differ
diff --git a/assets/images/help/copilot/copilot-disabled-for-repo.png b/assets/images/help/copilot/copilot-disabled-for-repo.png
index 7bd72e8c6af5..a2ea04e2a8f8 100644
Binary files a/assets/images/help/copilot/copilot-disabled-for-repo.png and b/assets/images/help/copilot/copilot-disabled-for-repo.png differ
diff --git a/assets/images/help/copilot/copilot-gridtoy-change.png b/assets/images/help/copilot/copilot-gridtoy-change.png
index d2175a1f7aff..948778961748 100644
Binary files a/assets/images/help/copilot/copilot-gridtoy-change.png and b/assets/images/help/copilot/copilot-gridtoy-change.png differ
diff --git a/assets/images/help/copilot/copilot-usage-tab.png b/assets/images/help/copilot/copilot-usage-tab.png
index 1bce1ea57dfc..ffb1a18959e6 100644
Binary files a/assets/images/help/copilot/copilot-usage-tab.png and b/assets/images/help/copilot/copilot-usage-tab.png differ
diff --git a/assets/images/help/copilot/highlight-lines.png b/assets/images/help/copilot/highlight-lines.png
index e3eabbb24d8e..492e44c5471b 100644
Binary files a/assets/images/help/copilot/highlight-lines.png and b/assets/images/help/copilot/highlight-lines.png differ
diff --git a/assets/images/help/copilot/manage-licenses.png b/assets/images/help/copilot/manage-licenses.png
index 61b9cae0b866..0ad762ed306a 100644
Binary files a/assets/images/help/copilot/manage-licenses.png and b/assets/images/help/copilot/manage-licenses.png differ
diff --git a/assets/images/help/copilot/mermaid-gantt-chart-example.png b/assets/images/help/copilot/mermaid-gantt-chart-example.png
index c180eb4acb3d..96291304f034 100644
Binary files a/assets/images/help/copilot/mermaid-gantt-chart-example.png and b/assets/images/help/copilot/mermaid-gantt-chart-example.png differ
diff --git a/assets/images/help/copilot/organization-access-menu.png b/assets/images/help/copilot/organization-access-menu.png
index e28a14320c58..b5223bfd767a 100644
Binary files a/assets/images/help/copilot/organization-access-menu.png and b/assets/images/help/copilot/organization-access-menu.png differ
diff --git a/assets/images/help/copilot/spark-data-access.png b/assets/images/help/copilot/spark-data-access.png
index 2de58a5b29cd..cbb288acd318 100644
Binary files a/assets/images/help/copilot/spark-data-access.png and b/assets/images/help/copilot/spark-data-access.png differ
diff --git a/assets/images/help/copilot/spark-fix-all-errors.png b/assets/images/help/copilot/spark-fix-all-errors.png
index 59a4c05d1276..7bbd4ebfd403 100644
Binary files a/assets/images/help/copilot/spark-fix-all-errors.png and b/assets/images/help/copilot/spark-fix-all-errors.png differ
diff --git a/assets/images/help/copilot/spark-github-user-visibility.png b/assets/images/help/copilot/spark-github-user-visibility.png
index 030d7778d55e..d88f06f9b00b 100644
Binary files a/assets/images/help/copilot/spark-github-user-visibility.png and b/assets/images/help/copilot/spark-github-user-visibility.png differ
diff --git a/assets/images/help/copilot/track-spending-prs.png b/assets/images/help/copilot/track-spending-prs.png
index 7ea9257b7327..4e1dc337f179 100644
Binary files a/assets/images/help/copilot/track-spending-prs.png and b/assets/images/help/copilot/track-spending-prs.png differ
diff --git a/assets/images/help/copilot/track-spending.png b/assets/images/help/copilot/track-spending.png
index 7df7c87a808e..148c391c5f2e 100644
Binary files a/assets/images/help/copilot/track-spending.png and b/assets/images/help/copilot/track-spending.png differ
diff --git a/assets/images/help/copilot/vs-custom-instructions-option.png b/assets/images/help/copilot/vs-custom-instructions-option.png
index abaa6158b726..25296f7ae874 100644
Binary files a/assets/images/help/copilot/vs-custom-instructions-option.png and b/assets/images/help/copilot/vs-custom-instructions-option.png differ
diff --git a/assets/images/help/copilot/vsc-manage-models-list.png b/assets/images/help/copilot/vsc-manage-models-list.png
index 4144779f539e..df4dab9b97bb 100644
Binary files a/assets/images/help/copilot/vsc-manage-models-list.png and b/assets/images/help/copilot/vsc-manage-models-list.png differ
diff --git a/assets/images/help/copilot/vsc-manage-models-option.png b/assets/images/help/copilot/vsc-manage-models-option.png
index bcc1d114b7e8..878a0e843ce6 100644
Binary files a/assets/images/help/copilot/vsc-manage-models-option.png and b/assets/images/help/copilot/vsc-manage-models-option.png differ
diff --git a/assets/images/help/copilot/vscode-current-usage.png b/assets/images/help/copilot/vscode-current-usage.png
index ba22d7fe8890..f2629b0bb428 100644
Binary files a/assets/images/help/copilot/vscode-current-usage.png and b/assets/images/help/copilot/vscode-current-usage.png differ
diff --git a/assets/images/help/copilot/xcode-chat-about-file.png b/assets/images/help/copilot/xcode-chat-about-file.png
index fdcfd08f277b..dc02b3ab5e58 100644
Binary files a/assets/images/help/copilot/xcode-chat-about-file.png and b/assets/images/help/copilot/xcode-chat-about-file.png differ
diff --git a/assets/images/help/dependabot/dependabot-self-hosted-runner-log.png b/assets/images/help/dependabot/dependabot-self-hosted-runner-log.png
index a8f89dce7aec..8f50786404f9 100644
Binary files a/assets/images/help/dependabot/dependabot-self-hosted-runner-log.png and b/assets/images/help/dependabot/dependabot-self-hosted-runner-log.png differ
diff --git a/assets/images/help/dependabot/dependabot-vnet-active-jobs.png b/assets/images/help/dependabot/dependabot-vnet-active-jobs.png
index 4631c6415855..0b940de49b82 100644
Binary files a/assets/images/help/dependabot/dependabot-vnet-active-jobs.png and b/assets/images/help/dependabot/dependabot-vnet-active-jobs.png differ
diff --git a/assets/images/help/desktop/current-branch-menu.png b/assets/images/help/desktop/current-branch-menu.png
index 56e12d6159a8..64cb45b87e1d 100644
Binary files a/assets/images/help/desktop/current-branch-menu.png and b/assets/images/help/desktop/current-branch-menu.png differ
diff --git a/assets/images/help/desktop/publish-branch-button.png b/assets/images/help/desktop/publish-branch-button.png
index 9b345e89eef0..21599d5723ce 100644
Binary files a/assets/images/help/desktop/publish-branch-button.png and b/assets/images/help/desktop/publish-branch-button.png differ
diff --git a/assets/images/help/enterprises/organizations-tab.png b/assets/images/help/enterprises/organizations-tab.png
index 65ab80421bc0..87c6d9645148 100644
Binary files a/assets/images/help/enterprises/organizations-tab.png and b/assets/images/help/enterprises/organizations-tab.png differ
diff --git a/assets/images/help/issues/attach-file.png b/assets/images/help/issues/attach-file.png
index b375c12699ce..2454f3c8dae5 100644
Binary files a/assets/images/help/issues/attach-file.png and b/assets/images/help/issues/attach-file.png differ
diff --git a/assets/images/help/issues/issue-example.png b/assets/images/help/issues/issue-example.png
index c0ddc6f4507c..a17a2d66b214 100644
Binary files a/assets/images/help/issues/issue-example.png and b/assets/images/help/issues/issue-example.png differ
diff --git a/assets/images/help/issues/issue-type.png b/assets/images/help/issues/issue-type.png
index 3da77552cbe0..5c708b8157fe 100644
Binary files a/assets/images/help/issues/issue-type.png and b/assets/images/help/issues/issue-type.png differ
diff --git a/assets/images/help/issues/sub-issue.png b/assets/images/help/issues/sub-issue.png
index 872341db72cf..3ed46ded5bdc 100644
Binary files a/assets/images/help/issues/sub-issue.png and b/assets/images/help/issues/sub-issue.png differ
diff --git a/assets/images/help/profile/profile-block-or-report-button.png b/assets/images/help/profile/profile-block-or-report-button.png
index aa2c62014fcb..d43ff9efea28 100644
Binary files a/assets/images/help/profile/profile-block-or-report-button.png and b/assets/images/help/profile/profile-block-or-report-button.png differ
diff --git a/assets/images/help/profile/profile-unblock-or-report-user.png b/assets/images/help/profile/profile-unblock-or-report-user.png
index 6c61debb1da4..f1780ff8a91c 100644
Binary files a/assets/images/help/profile/profile-unblock-or-report-user.png and b/assets/images/help/profile/profile-unblock-or-report-user.png differ
diff --git a/assets/images/help/projects-v2/example-board.png b/assets/images/help/projects-v2/example-board.png
index 6341281a07d0..bbf96a9a627d 100644
Binary files a/assets/images/help/projects-v2/example-board.png and b/assets/images/help/projects-v2/example-board.png differ
diff --git a/assets/images/help/projects-v2/example-roadmap.png b/assets/images/help/projects-v2/example-roadmap.png
index a2551a1c4330..b1ddb9a72d0e 100644
Binary files a/assets/images/help/projects-v2/example-roadmap.png and b/assets/images/help/projects-v2/example-roadmap.png differ
diff --git a/assets/images/help/projects-v2/example-table.png b/assets/images/help/projects-v2/example-table.png
index c5a3c16f9a1d..12f53f4f66f2 100644
Binary files a/assets/images/help/projects-v2/example-table.png and b/assets/images/help/projects-v2/example-table.png differ
diff --git a/assets/images/help/pull_requests/attach-file.png b/assets/images/help/pull_requests/attach-file.png
index 665723ad821e..4b3112e83efe 100644
Binary files a/assets/images/help/pull_requests/attach-file.png and b/assets/images/help/pull_requests/attach-file.png differ
diff --git a/assets/images/help/pull_requests/checks-summary-for-various-commits.png b/assets/images/help/pull_requests/checks-summary-for-various-commits.png
index 25878c18bb4a..5cd6a1b44368 100644
Binary files a/assets/images/help/pull_requests/checks-summary-for-various-commits.png and b/assets/images/help/pull_requests/checks-summary-for-various-commits.png differ
diff --git a/assets/images/help/pull_requests/merge-pull-request-options.png b/assets/images/help/pull_requests/merge-pull-request-options.png
index 1268b4013764..9d223a43d54c 100644
Binary files a/assets/images/help/pull_requests/merge-pull-request-options.png and b/assets/images/help/pull_requests/merge-pull-request-options.png differ
diff --git a/assets/images/help/repository/code-scanning-branch-filter.png b/assets/images/help/repository/code-scanning-branch-filter.png
index 0a8008046a4d..368b2d3f0578 100644
Binary files a/assets/images/help/repository/code-scanning-branch-filter.png and b/assets/images/help/repository/code-scanning-branch-filter.png differ
diff --git a/assets/images/help/repository/create-repository-name.png b/assets/images/help/repository/create-repository-name.png
index 4e6485c0c1fe..67b6779d13a5 100644
Binary files a/assets/images/help/repository/create-repository-name.png and b/assets/images/help/repository/create-repository-name.png differ
diff --git a/assets/images/help/repository/create-repository-owner.png b/assets/images/help/repository/create-repository-owner.png
index c5f271f1fbba..b39a4688ece5 100644
Binary files a/assets/images/help/repository/create-repository-owner.png and b/assets/images/help/repository/create-repository-owner.png differ
diff --git a/assets/images/help/repository/delete-comment-edit-details.png b/assets/images/help/repository/delete-comment-edit-details.png
index 7c657589c9cc..dbae34d4da50 100644
Binary files a/assets/images/help/repository/delete-comment-edit-details.png and b/assets/images/help/repository/delete-comment-edit-details.png differ
diff --git a/assets/images/help/repository/delete-file-button.png b/assets/images/help/repository/delete-file-button.png
index 7c58920a9a5b..d8d82c943c7b 100644
Binary files a/assets/images/help/repository/delete-file-button.png and b/assets/images/help/repository/delete-file-button.png differ
diff --git a/assets/images/help/repository/filter-code-scanning-alerts.png b/assets/images/help/repository/filter-code-scanning-alerts.png
index 3a852ca67d6e..514d26c4045f 100644
Binary files a/assets/images/help/repository/filter-code-scanning-alerts.png and b/assets/images/help/repository/filter-code-scanning-alerts.png differ
diff --git a/assets/images/help/repository/repos-create-properties.png b/assets/images/help/repository/repos-create-properties.png
index 2421499017fe..5e33b332389d 100644
Binary files a/assets/images/help/repository/repos-create-properties.png and b/assets/images/help/repository/repos-create-properties.png differ
diff --git a/assets/images/help/repository/secret-scanning-dismiss-alert-web-ui-link-partner-documentation.png b/assets/images/help/repository/secret-scanning-dismiss-alert-web-ui-link-partner-documentation.png
index 5b65a1c61c77..15198ed48714 100644
Binary files a/assets/images/help/repository/secret-scanning-dismiss-alert-web-ui-link-partner-documentation.png and b/assets/images/help/repository/secret-scanning-dismiss-alert-web-ui-link-partner-documentation.png differ
diff --git a/assets/images/help/security/security-campaigns-tracking-overview-2tabs.png b/assets/images/help/security/security-campaigns-tracking-overview-2tabs.png
index c9756bc0477b..8399b7833f94 100644
Binary files a/assets/images/help/security/security-campaigns-tracking-overview-2tabs.png and b/assets/images/help/security/security-campaigns-tracking-overview-2tabs.png differ
diff --git a/assets/images/help/security/security-campaigns-tracking-overview-code-only.png b/assets/images/help/security/security-campaigns-tracking-overview-code-only.png
index 9f9d980b5902..f88485a98437 100644
Binary files a/assets/images/help/security/security-campaigns-tracking-overview-code-only.png and b/assets/images/help/security/security-campaigns-tracking-overview-code-only.png differ
diff --git a/assets/images/help/sponsors/delete-stripe-account.png b/assets/images/help/sponsors/delete-stripe-account.png
index cc47bd5d0bf2..024d80ada792 100644
Binary files a/assets/images/help/sponsors/delete-stripe-account.png and b/assets/images/help/sponsors/delete-stripe-account.png differ
diff --git a/assets/images/site/evergreens/boxwood.png b/assets/images/site/evergreens/boxwood.png
index 0c9f1073c9f2..9640fac31337 100644
Binary files a/assets/images/site/evergreens/boxwood.png and b/assets/images/site/evergreens/boxwood.png differ
diff --git a/assets/images/social-cards/code-security.png b/assets/images/social-cards/code-security.png
index be6192f5dbe9..46cfccf5347c 100644
Binary files a/assets/images/social-cards/code-security.png and b/assets/images/social-cards/code-security.png differ
diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment.md
index abdfcdedaf4a..c91f18311cb3 100644
--- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment.md
+++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/about-secret-risk-assessment.md
@@ -56,8 +56,4 @@ Because the {% data variables.product.prodname_secret_risk_assessment %} report
## Next steps
-Now that you know about the {% data variables.product.prodname_secret_risk_assessment %} report, you may want to learn how to:
-
-* Generate the report to see your organization risk. Navigate to {% data reusables.security-overview.navigate-to-risk-assessment %}.
-* Interpret the results of the report. See [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results).
-* Enable {% data variables.product.prodname_GH_secret_protection %} to improve your secret leak footprint. See [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/choosing-github-secret-protection#enabling-secret-protection).
+To start analyzing your organization's secret risk, see [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/assess-your-secret-risk).
diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/assess-your-secret-risk.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/assess-your-secret-risk.md
new file mode 100644
index 000000000000..5891d34fe4ac
--- /dev/null
+++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/assess-your-secret-risk.md
@@ -0,0 +1,42 @@
+---
+title: 'Running the secret risk assessment for your organization'
+shortTitle: 'Assess your secret risk'
+intro: 'Determine your organization''s exposure to leaked secrets by generating a {% data variables.product.prodname_secret_risk_assessment %} report.'
+product: '{% data reusables.gated-features.secret-risk-assessment-report %}'
+permissions: '{% data reusables.permissions.secret-risk-assessment-report-generation %}'
+type: how_to
+versions:
+ feature: secret-risk-assessment
+topics:
+ - Code Security
+ - Secret scanning
+ - Secret Protection
+ - Organizations
+ - Security
+---
+
+## Generating an initial {% data variables.product.prodname_secret_risk_assessment %}
+
+{% data reusables.organizations.navigate-to-org %}
+{% data reusables.organizations.security-overview %}
+{% data reusables.security-overview.open-assessments-view %}
+{% data reusables.security-overview.generate-secret-risk-assessment-report %}
+
+ {% data reusables.secret-risk-assessment.notification-report-ready %}
+
+## Rerunning the {% data variables.product.prodname_secret_risk_assessment %}
+
+> [!NOTE]
+> You can only generate a secret risk assessment report once every 90 days.
+
+{% data reusables.organizations.navigate-to-org %}
+{% data reusables.organizations.security-overview %}
+{% data reusables.security-overview.open-assessments-view %}
+1. Towards the top right side of the existing report, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}.
+1. Select **Rerun scan**.
+
+ {% data reusables.secret-risk-assessment.notification-report-ready %}
+
+## Next steps
+
+Now that you've generated a {% data variables.product.prodname_secret_risk_assessment %} report for your organization, learn how to interpret the results. See [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results).
diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/export-risk-report-csv.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/export-risk-report-csv.md
new file mode 100644
index 000000000000..6fdf4356f217
--- /dev/null
+++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/export-risk-report-csv.md
@@ -0,0 +1,25 @@
+---
+title: 'Exporting the secret risk assessment report to CSV'
+shortTitle: 'Export risk report CSV'
+intro: 'Export the {% data variables.product.prodname_secret_risk_assessment %} report to a CSV file for detailed investigation and stakeholder sharing.'
+product: '{% data reusables.gated-features.secret-risk-assessment-report %}'
+permissions: '{% data reusables.permissions.secret-risk-assessment-report-generation %}'
+type: how_to
+versions:
+ feature: secret-risk-assessment
+topics:
+ - Code Security
+ - Secret scanning
+ - Secret Protection
+ - Organizations
+ - Security
+---
+
+{% data reusables.organizations.navigate-to-org %}
+{% data reusables.organizations.security-overview %}
+{% data reusables.security-overview.open-assessments-view %}
+1. Towards the top-right side of the report, select the {% octicon "kebab-horizontal" aria-label="More options" %} dropdown menu, then click {% octicon "download" aria-hidden="true" aria-label="download" %} **Download CSV**.
+
+## Next steps
+
+To better understand the fields of your CSV file, see [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/risk-report-csv-contents).
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 ec77bf0a7291..9c133af6d461 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
@@ -12,7 +12,10 @@ topics:
- Security
children:
- /about-secret-risk-assessment
+ - /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
- /choosing-github-secret-protection
- /calculating-the-cost-savings-of-push-protection
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/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results.md
index 881b7253df20..90b87d45503f 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/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results.md
@@ -23,7 +23,7 @@ In this tutorial, you'll interpret your secret risk assessment results, and lear
## Prerequisites
-You must generate a {% data variables.product.prodname_secret_risk_assessment %} report and wait for the scan to complete. See [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/viewing-the-secret-risk-assessment-report-for-your-organization#generating-an-initial-secret-risk-assessment).
+You must generate a {% data variables.product.prodname_secret_risk_assessment %} report and wait for the scan to complete. See [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/assess-your-secret-risk).
## Step 1: Understand your dashboard metrics
@@ -71,7 +71,7 @@ If you see **many secrets of the same type** (for example, multiple AWS keys), t
* Developers may not be using environment variables
* Missing documentation on secret management
-## Step 5: Prioritizing remediation and related actions
+## Step 5: Prioritize remediation and related actions
Now that you understand the metrics, prioritize remediation based on risk.
diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/risk-report-csv-contents.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/risk-report-csv-contents.md
new file mode 100644
index 000000000000..bd1cd264107a
--- /dev/null
+++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/risk-report-csv-contents.md
@@ -0,0 +1,32 @@
+---
+title: 'Contents of the secret risk assessment report CSV'
+shortTitle: 'Risk report CSV contents'
+intro: 'Understand the data included in the CSV export of the {% data variables.product.prodname_secret_risk_assessment %} report.'
+product: '{% data reusables.gated-features.secret-risk-assessment-report %}'
+permissions: '{% data reusables.permissions.secret-risk-assessment-report-generation %}'
+type: reference
+versions:
+ feature: secret-risk-assessment
+topics:
+ - Code Security
+ - Secret scanning
+ - Secret Protection
+ - Organizations
+ - Security
+---
+
+The {% data variables.product.prodname_secret_risk_assessment %} report CSV file includes the following information:
+
+| CSV column | Name | Description |
+| ---------- | ---------------------- | --------------------------------------------------------- |
+| A | `Organization Name` | The name of the organization the secret was detected in |
+| B | `Name` | The token name for the type of secret |
+| C | `Slug` | The normalized string for the token. This corresponds to `Token` in the table of supported secrets. See [AUTOTITLE](/code-security/secret-scanning/introduction/supported-secret-scanning-patterns#supported-secrets). |
+| D | `Push Protected` | A `boolean` to indicate whether the secret would be detected and blocked by push protection if it were enabled |
+| E | `Non-Provider Pattern` | A `boolean` to indicate whether the secret matched a non-provider pattern and would generate an alert if {% data variables.product.prodname_secret_scanning %} with non-provider patterns were enabled |
+| F | `Secret Count` | An aggregate count of the active and inactive secrets found for the token type |
+| G | `Repository Count` | An aggregate count of distinct repositories in which the secret type was found, including public, private,{% ifversion ghec or ghes %} internal,{% endif %} and archived repositories |
+
+## Next steps
+
+To learn which secrets you should prioritize for remediation, see [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results#step-5-prioritizing-remediation-and-related-actions).
diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/viewing-the-secret-risk-assessment-report-for-your-organization.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/viewing-the-secret-risk-assessment-report-for-your-organization.md
index 1da3a7007dc4..71ce15a8b456 100644
--- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/viewing-the-secret-risk-assessment-report-for-your-organization.md
+++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/viewing-the-secret-risk-assessment-report-for-your-organization.md
@@ -1,7 +1,7 @@
---
title: 'Viewing the secret risk assessment report for your organization'
-shortTitle: 'View secret risk assessment'
-intro: 'You can generate and view the {% data variables.product.prodname_secret_risk_assessment %} report for your organization from the "Security" tab.'
+shortTitle: 'View risk report'
+intro: 'Understand your organization''s exposure to leaked secrets at a glance by viewing your most recent {% data variables.product.prodname_secret_risk_assessment %} report.'
product: '{% data reusables.gated-features.secret-risk-assessment-report %}'
permissions: '{% data reusables.permissions.secret-risk-assessment-report-generation %}'
allowTitleToDifferFromFilename: true
@@ -16,65 +16,6 @@ topics:
- Security
---
-{% data reusables.secret-risk-assessment.report-intro %} {% data reusables.secret-risk-assessment.link-conceptual-information %}
-
-You can generate the {% data variables.product.prodname_secret_risk_assessment %} report for your organization, review it, and export the results to CSV.
-
-## Generating an initial {% data variables.product.prodname_secret_risk_assessment %}
-
-{% data reusables.organizations.navigate-to-org %}
-{% data reusables.organizations.security-overview %}
-{% data reusables.security-overview.open-assessments-view %}
-{% data reusables.security-overview.generate-secret-risk-assessment-report %}
-
-{% data reusables.secret-risk-assessment.notification-report-ready %}
-
-{% note %}
-
-Did you successfully generate the {% data variables.product.prodname_secret_risk_assessment %} report for your organization?
-
-Yes No
-
-{% endnote %}
-
-## Rerunning the {% data variables.product.prodname_secret_risk_assessment %}
-
-{% data reusables.security-overview.secret-risk-assessment-report-generation-cadence %}
-
-{% data reusables.organizations.navigate-to-org %}
-{% data reusables.organizations.security-overview %}
-{% data reusables.security-overview.open-assessments-view %}
-1. Towards the top right side of the existing report, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}.
-1. Select **Rerun scan**.
-
- {% data reusables.secret-risk-assessment.notification-report-ready %}
-
-## Viewing the {% data variables.product.prodname_secret_risk_assessment %}
-
{% data reusables.organizations.navigate-to-org %}
{% data reusables.organizations.security-overview %}
{% data reusables.security-overview.open-assessments-view %} You can see the most recent report on this page.
-
-## Exporting the {% data variables.product.prodname_secret_risk_assessment %} to CSV
-
-{% data reusables.organizations.navigate-to-org %}
-{% data reusables.organizations.security-overview %}
-{% data reusables.security-overview.open-assessments-view %}
-1. Towards the top right side of the report, click {% octicon "kebab-horizontal" aria-label="More options" %}.
-1. Select **Download CSV**.
-
-The {% data variables.product.prodname_secret_risk_assessment %} CSV file includes the following information.
-
-| CSV column | Name | Description |
-| ---------- | ---------------------- | --------------------------------------------------------- |
-| A | `Organization Name` | The name of the organization the secret was detected in |
-| B | `Name` | The token name for the type of secret |
-| C | `Slug` | The normalized string for the token. This corresponds to `Token` in the table of supported secrets. See [AUTOTITLE](/code-security/secret-scanning/introduction/supported-secret-scanning-patterns#supported-secrets). |
-| D | `Push Protected` | A `boolean` to indicate whether the secret would be detected and blocked by push protection if it were enabled |
-| E | `Non-Provider Pattern` | A `boolean` to indicate whether the secret matched a non-provider pattern and would generate an alert if {% data variables.product.prodname_secret_scanning %} with non-provider patterns were enabled |
-| F | `Secret Count` | An aggregate count of the active and inactive secrets found for the token type |
-| G | `Repository Count` | An aggregate count of distinct repositories in which the secret type was found, including public, private,{% ifversion ghec or ghes %} internal{% endif %}, and archived repositories |
-
-## Next steps
-
-Now that you've generated {% data variables.product.prodname_secret_risk_assessment %} for your organization, learn how to interpret the results. See [AUTOTITLE](/code-security/securing-your-organization/understanding-your-organizations-exposure-to-leaked-secrets/interpreting-secret-risk-assessment-results).
diff --git a/data/reusables/gated-features/secret-risk-assessment-report.md b/data/reusables/gated-features/secret-risk-assessment-report.md
index 35a39767d737..fe8a83263779 100644
--- a/data/reusables/gated-features/secret-risk-assessment-report.md
+++ b/data/reusables/gated-features/secret-risk-assessment-report.md
@@ -1 +1 @@
-{% data variables.product.prodname_secret_risk_assessment_caps %} is available for free in organizations on {% data variables.product.prodname_team %} and {% data variables.product.prodname_enterprise %}
+Free for organizations on {% data variables.product.prodname_team %} and {% data variables.product.prodname_enterprise %}
diff --git a/src/content-linter/lib/linting-rules/table-column-integrity.ts b/src/content-linter/lib/linting-rules/table-column-integrity.ts
index 35a2893bf689..5d9e7bdef91e 100644
--- a/src/content-linter/lib/linting-rules/table-column-integrity.ts
+++ b/src/content-linter/lib/linting-rules/table-column-integrity.ts
@@ -10,8 +10,9 @@ const TABLE_ROW_REGEX = /^\s*\|.*\|\s*$/
// Regex to detect table separator rows (contains only |, :, -, and whitespace)
const TABLE_SEPARATOR_REGEX = /^\s*\|[\s\-:|\s]*\|\s*$/
// Regex to detect Liquid-only cells (whitespace, liquid tag, whitespace)
-const LIQUID_ONLY_CELL_REGEX = /^\s*{%\s*(ifversion|else|endif|elsif).*%}\s*$/
-
+const LIQUID_ONLY_CELL_REGEX = /^\s*{%\s*(ifversion|else|endif|elsif|for|endfor).*%}\s*$/
+// Regex to use for splitting on non-escaped pipes only
+const NON_ESCAPED_PIPE_REGEX = /(? 0 && cells[0].trim() === '') {
@@ -45,7 +47,7 @@ function isLiquidOnlyRow(row: string): boolean {
const trimmed = row.trim()
if (!trimmed.includes('|')) return false
- const cells = trimmed.split('|')
+ const cells = trimmed.split(NON_ESCAPED_PIPE_REGEX)
// Remove empty cells from leading/trailing |
const filteredCells = cells.filter((cell, index) => {
if (index === 0 && cell.trim() === '') return false
@@ -72,10 +74,22 @@ export const tableColumnIntegrity = {
const lines = params.lines
let inTable = false
+ let inCodeFence = false
let expectedColumnCount: number | null = null
for (let i = 0; i < lines.length; i++) {
const line = lines[i]
+
+ // Toggle code fence state
+ if (line.trim().startsWith('```')) {
+ inCodeFence = !inCodeFence
+ continue
+ }
+
+ if (inCodeFence) {
+ continue
+ }
+
const isTableRow = TABLE_ROW_REGEX.test(line)
const isSeparatorRow = TABLE_SEPARATOR_REGEX.test(line)
diff --git a/src/content-linter/tests/unit/table-column-integrity-simple.ts b/src/content-linter/tests/unit/table-column-integrity-simple.ts
index de8eb55724a9..4980fce6f999 100644
--- a/src/content-linter/tests/unit/table-column-integrity-simple.ts
+++ b/src/content-linter/tests/unit/table-column-integrity-simple.ts
@@ -60,4 +60,207 @@ describe(tableColumnIntegrity.names.join(' - '), () => {
const errors = result.markdown
expect(errors.length).toBe(0)
})
+
+ test('Escaped pipes (\\|) are not counted as column separators', async () => {
+ const markdown = [
+ '| Command | Description |',
+ '|---------|-------------|',
+ '| `git log --oneline \\| head` | Shows recent commits |',
+ '| `echo "hello \\| world"` | Prints text with pipe |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Escaped pipes mixed with real separators work correctly', async () => {
+ const markdown = [
+ '| Code | Output | Notes |',
+ '|------|--------|-------|',
+ '| `echo "a \\| b" \\| wc` | 1 | Pipe in string and command |',
+ '| `grep "x" file` | matches | No pipes here |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Liquid for/endfor statements are ignored in table rows', async () => {
+ const markdown = [
+ '| Item | Details |',
+ '|------|---------|',
+ '| {% for item in collection %} |',
+ '| Product A | Available |',
+ '| Product B | Sold out |',
+ '| {% endfor %} |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Mixed liquid statements (ifversion, for, endif) are ignored', async () => {
+ const markdown = [
+ '| Feature | Status | Version |',
+ '|---------|--------|---------|',
+ '| {% ifversion ghes %} |',
+ '| {% for version in site.data.versions %} |',
+ '| Basic | Active | 1.0 |',
+ '| {% endfor %} |',
+ '| {% endif %} |',
+ '| Advanced | Beta | 2.0 |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Tables inside code fences are ignored', async () => {
+ const markdown = [
+ 'Here is some example markdown:',
+ '',
+ '```markdown',
+ '| Name | Age |',
+ '|------|-----|',
+ '| Alice | 25 | Extra column that would normally cause error |',
+ '| Bob |',
+ '```',
+ '',
+ 'But this real table should be validated:',
+ '',
+ '| Product | Price |',
+ '|---------|-------|',
+ '| Widget | $10 |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Tables inside different code fence types are ignored', async () => {
+ const markdown = [
+ '```',
+ '| Malformed | Table |',
+ '|-----------|-------|',
+ '| Too | Many | Columns | Here |',
+ '```',
+ '',
+ '```text',
+ '| Another | Bad |',
+ '|---------|-----|',
+ '| Missing |',
+ '```',
+ '',
+ '```yaml',
+ '| YAML | Example |',
+ '|------|---------|',
+ '| key: | value | extra |',
+ '```',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('File paths with pipes are handled correctly (regression test)', async () => {
+ // This test catches the specific issue from content/actions/tutorials/build-and-test-code/python.md
+ // where the old regex /[^\\]\|/ was consuming characters before pipes and miscounting columns
+ const markdown = [
+ '| Directory | Ubuntu | macOS |',
+ '|-----------|--------|-------|',
+ '|**Tool Cache Directory** |`/opt/hostedtoolcache/*`|`/Users/runner/hostedtoolcache/*`|',
+ '|**Python Tool Cache**|`/opt/hostedtoolcache/Python/*`|`/Users/runner/hostedtoolcache/Python/*`|',
+ '|**PyPy Tool Cache**|`/opt/hostedtoolcache/PyPy/*`|`/Users/runner/hostedtoolcache/PyPy/*`|',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Complex file paths with multiple characters before pipes', async () => {
+ // Additional test to ensure the lookbehind regex works with various characters before pipes
+ const markdown = [
+ '| Pattern | Linux Path | Windows Path |',
+ '|---------|------------|--------------|',
+ '| Cache | `/home/user/.cache/*` | `C:\\Users\\user\\AppData\\*` |',
+ '| Logs | `/var/log/app/*` | `C:\\ProgramData\\logs\\*` |',
+ '| Config | `/etc/myapp/*` | `C:\\Program Files\\MyApp\\*` |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Code fence spanning multiple lines with tables inside', async () => {
+ const markdown = [
+ 'Here is some documentation:',
+ '',
+ '```markdown',
+ '# Example Document',
+ '',
+ '| Bad | Table |',
+ '|-----|-------|',
+ '| Missing | column | here | extra |',
+ '| Another | bad | row |',
+ '',
+ 'More content here',
+ '```',
+ '',
+ 'This real table should be validated:',
+ '',
+ '| Good | Table |',
+ '|------|-------|',
+ '| Valid | Row |',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Multiple code fences with tables between them', async () => {
+ const markdown = [
+ '```js',
+ '| Bad | JS | Table |',
+ '|-----|----|----|',
+ '| Extra | column | here | bad |',
+ '```',
+ '',
+ 'Real table that should be checked:',
+ '',
+ '| Name | Status |',
+ '|------|--------|',
+ '| Test | Pass |',
+ '',
+ '```bash',
+ '| Command | Output |',
+ '|---------|--------|',
+ '| ls | file1.txt | file2.txt | extra |',
+ '```',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
+
+ test('Code fence with language identifier', async () => {
+ const markdown = [
+ '```typescript',
+ 'const badTable = `',
+ '| Name | Age |',
+ '|------|-----|',
+ '| Alice | 25 | Extra |',
+ '`',
+ '```',
+ '',
+ '```yaml',
+ 'table:',
+ ' - name: Bad',
+ ' - age: 30',
+ ' - extra: column',
+ '```',
+ ].join('\n')
+ const result = await runRule(tableColumnIntegrity, { strings: { markdown } })
+ const errors = result.markdown
+ expect(errors.length).toBe(0)
+ })
})
diff --git a/src/content-render/scripts/render-content-markdown.ts b/src/content-render/scripts/render-content-markdown.ts
deleted file mode 100755
index 76e0f7e1f5cf..000000000000
--- a/src/content-render/scripts/render-content-markdown.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-
-import { renderLiquid } from '@/content-render/liquid/index'
-import shortVersionsMiddleware from '@/versions/middleware/short-versions'
-import type { ExtendedRequest } from '@/types'
-
-const { loadPages } = await import('@/frame/lib/page-data')
-const { allVersions } = await import('@/versions/lib/all-versions')
-
-const contentCopilotDir = path.join(process.cwd(), 'content-copilot')
-
-if (!fs.existsSync(contentCopilotDir)) fs.mkdirSync(contentCopilotDir)
-
-// Load all pages
-const allPages = await loadPages()
-const pages = allPages.filter(
- (page) =>
- // Files we want to check: English and FPT only
- // Files we do not want to check:
- // any index.md files
- // /graphql/overview/explorer.md since it's not a real content page
- // /early-access/ since we don't want copilot looking at these
- page.languageCode === 'en' &&
- page.applicableVersions.includes('free-pro-team@latest') &&
- !page.relativePath.endsWith('index.md') &&
- !page.relativePath.endsWith('graphql/overview/explorer.md') &&
- !page.relativePath.includes('/early-access/'),
-)
-
-for (const page of pages) {
- console.log(`---\nStart: Creating directories for: ${page.relativePath}`)
- const dirnames = page.relativePath.substring(0, page.relativePath.lastIndexOf('/'))
-
- fs.mkdirSync(`${contentCopilotDir}/${dirnames}`, { recursive: true })
- // Context needed to render the content liquid
- const req = { language: 'en' } as ExtendedRequest
- const contextualize = (request: ExtendedRequest): void => {
- if (!request.context) return
- if (!request.context.currentVersion) return
- request.context.currentVersionObj =
- request.context.allVersions?.[request.context.currentVersion]
- shortVersionsMiddleware(request, null, () => {})
- }
-
- req.context = {
- currentLanguage: 'en',
- currentVersion: 'free-pro-team@latest',
- page: {} as any, // Empty page object used only for context initialization
- allVersions,
- }
- contextualize(req)
-
- try {
- console.log(`Rendering markdown for: ${page.title}`)
- let frontmatterMarkdown = `# ${await renderLiquid(page.title, req.context)}\n\n`
-
- if (page.intro) {
- frontmatterMarkdown += `${await renderLiquid(page.intro, req.context)}\n\n`
- }
-
- if (page.permissions) {
- frontmatterMarkdown += `**Who can use this feature**: ${await renderLiquid(
- page.permissions,
- req.context,
- )}\n`
- }
-
- if (page.product) {
- frontmatterMarkdown += `${await renderLiquid(page.product, req.context)}\n`
- }
- const rendered = await renderLiquid(page.markdown, req.context)
- console.log('Rendered markdown')
- console.log(`Writing file to: ${contentCopilotDir}/${page.relativePath}`)
- fs.writeFileSync(
- `${contentCopilotDir}/${page.relativePath}`,
- frontmatterMarkdown + rendered,
- 'utf8',
- )
- console.log(`Done: written file\n---`)
- } catch (err: any) {
- // Standard catch-all for error handling in scripts
- console.log(err)
- }
-}
-console.log(`Finished - content is available in: ${contentCopilotDir}`)
diff --git a/src/fixtures/tests/images.ts b/src/fixtures/tests/images.ts
index 7db30efc83ee..876e6902b006 100644
--- a/src/fixtures/tests/images.ts
+++ b/src/fixtures/tests/images.ts
@@ -15,14 +15,16 @@ describe('render Markdown image tags', () => {
const sources = $('source', pictures)
expect(sources.length).toBe(1)
const srcset = sources.attr('srcset')
- expect(srcset).toBe(`/assets/cb-646451/mw-${MAX_WIDTH}/images/_fixtures/screenshot.webp 2x`)
+ expect(srcset).toMatch(
+ new RegExp(`^/assets/cb-\\w+/mw-${MAX_WIDTH}/images/_fixtures/screenshot\\.webp 2x$`),
+ )
const type = sources.attr('type')
expect(type).toBe('image/webp')
const imgs = $('img', pictures)
expect(imgs.length).toBe(1)
const src = imgs.attr('src')
- expect(src).toBe('/assets/cb-646451/images/_fixtures/screenshot.png')
+ expect(src).toMatch(/^\/assets\/cb-\w+\/images\/_fixtures\/screenshot\.png$/)
const alt = imgs.attr('alt')
expect(alt).toBe('This is the alt text')
diff --git a/src/frame/middleware/resolve-recommended.ts b/src/frame/middleware/resolve-recommended.ts
index 81124bf5355f..12d81c9fb864 100644
--- a/src/frame/middleware/resolve-recommended.ts
+++ b/src/frame/middleware/resolve-recommended.ts
@@ -105,17 +105,17 @@ async function resolveRecommended(
const page = req.context?.page
const rawRecommended = (page as any)?.rawRecommended
const spotlight = (page as any)?.spotlight
-
- // Collect article paths from both rawRecommended and spotlight
- const articlePaths: string[] = []
+ // Collect article paths from rawRecommended or spotlight if there are no
+ // recommended articles
+ let articlePaths: string[] = []
// Add paths from rawRecommended
if (rawRecommended && Array.isArray(rawRecommended)) {
articlePaths.push(...rawRecommended)
}
- // Add paths from spotlight (legacy field)
- if (spotlight && Array.isArray(spotlight)) {
+ // Add paths from spotlight (legacy field) if no recommended articles
+ if (articlePaths.length === 0 && spotlight && Array.isArray(spotlight)) {
const spotlightPaths = spotlight
.filter((item: any) => item && typeof item.article === 'string')
.map((item: any) => item.article)
@@ -126,6 +126,8 @@ async function resolveRecommended(
return next()
}
+ // remove duplicate articles
+ articlePaths = [...new Set(articlePaths)]
const resolved: ResolvedArticle[] = []
for (const rawPath of articlePaths) {
diff --git a/src/frame/tests/resolve-recommended.test.ts b/src/frame/tests/resolve-recommended.test.ts
index 05bc6c94280a..a9667a5cd93a 100644
--- a/src/frame/tests/resolve-recommended.test.ts
+++ b/src/frame/tests/resolve-recommended.test.ts
@@ -80,31 +80,10 @@ describe('resolveRecommended middleware', () => {
test('should resolve recommended articles when they exist', async () => {
const testPage: Partial = {
- mtime: Date.now(),
title: 'Test Article',
- rawTitle: 'Test Article',
intro: 'Test intro',
- rawIntro: 'Test intro',
relativePath: 'copilot/tutorials/article.md',
- fullPath: '/full/path/copilot/tutorials/article.md',
- languageCode: 'en',
- documentType: 'article',
- markdown: 'Test content',
- versions: {},
applicableVersions: ['free-pro-team@latest'],
- permalinks: [
- {
- languageCode: 'en',
- pageVersion: 'free-pro-team@latest',
- title: 'Test Article',
- href: '/en/copilot/tutorials/article',
- hrefWithoutLanguage: '/copilot/tutorials/article',
- },
- ],
- renderProp: vi.fn().mockResolvedValue('rendered'),
- renderTitle: vi.fn().mockResolvedValue('Test Article'),
- render: vi.fn().mockResolvedValue('rendered content'),
- buildRedirects: vi.fn().mockReturnValue({}),
}
mockFindPage.mockReturnValue(testPage as any)
@@ -129,6 +108,40 @@ describe('resolveRecommended middleware', () => {
expect(mockNext).toHaveBeenCalled()
})
+ test('should not resolve spotlight articles when there are recommended articles', async () => {
+ const testPage: Partial = {
+ title: 'Test Article',
+ intro: 'Test intro',
+ relativePath: 'copilot/tutorials/article.md',
+ applicableVersions: ['free-pro-team@latest'],
+ }
+
+ mockFindPage.mockReturnValueOnce(testPage as any)
+
+ const req = createMockRequest({
+ rawRecommended: ['/copilot/tutorials/article'],
+ spotlight: [{ article: '/copilot/tutorials/spotlight-article' }],
+ })
+
+ await resolveRecommended(req, mockRes, mockNext)
+
+ expect(mockFindPage).toHaveBeenCalledTimes(1)
+ expect(mockFindPage).toHaveBeenCalledWith(
+ '/en/copilot/tutorials/article',
+ req.context!.pages,
+ req.context!.redirects,
+ )
+ expect((req.context!.page as any).recommended).toEqual([
+ {
+ title: 'Test Article',
+ intro: 'Test intro
',
+ href: '/copilot/tutorials/article',
+ category: ['copilot', 'tutorials'],
+ },
+ ])
+ expect(mockNext).toHaveBeenCalled()
+ })
+
test('should handle articles not found', async () => {
mockFindPage.mockReturnValue(undefined)
@@ -160,31 +173,10 @@ describe('resolveRecommended middleware', () => {
test('should handle mixed valid and invalid articles', async () => {
const testPage: Partial = {
- mtime: Date.now(),
title: 'Valid Article',
- rawTitle: 'Valid Article',
intro: 'Valid intro',
- rawIntro: 'Valid intro',
relativePath: 'test/valid.md',
- fullPath: '/full/path/test/valid.md',
- languageCode: 'en',
- documentType: 'article',
- markdown: 'Valid content',
- versions: {},
applicableVersions: ['free-pro-team@latest'],
- permalinks: [
- {
- languageCode: 'en',
- pageVersion: 'free-pro-team@latest',
- title: 'Valid Article',
- href: '/en/test/valid',
- hrefWithoutLanguage: '/test/valid',
- },
- ],
- renderProp: vi.fn().mockResolvedValue('rendered'),
- renderTitle: vi.fn().mockResolvedValue('Valid Article'),
- render: vi.fn().mockResolvedValue('rendered content'),
- buildRedirects: vi.fn().mockReturnValue({}),
}
mockFindPage.mockReturnValueOnce(testPage as any).mockReturnValueOnce(undefined)
@@ -206,31 +198,10 @@ describe('resolveRecommended middleware', () => {
test('should try page-relative path when content-relative fails', async () => {
const testPage: Partial = {
- mtime: Date.now(),
title: 'Relative Article',
- rawTitle: 'Relative Article',
intro: 'Relative intro',
- rawIntro: 'Relative intro',
relativePath: 'copilot/relative-article.md',
- fullPath: '/full/path/copilot/relative-article.md',
- languageCode: 'en',
- documentType: 'article',
- markdown: 'Relative content',
- versions: {},
applicableVersions: ['free-pro-team@latest'],
- permalinks: [
- {
- languageCode: 'en',
- pageVersion: 'free-pro-team@latest',
- title: 'Relative Article',
- href: '/en/copilot/relative-article',
- hrefWithoutLanguage: '/copilot/relative-article',
- },
- ],
- renderProp: vi.fn().mockResolvedValue('rendered'),
- renderTitle: vi.fn().mockResolvedValue('Relative Article'),
- render: vi.fn().mockResolvedValue('rendered content'),
- buildRedirects: vi.fn().mockReturnValue({}),
}
// Mock findPage to fail on first call (content-relative) and succeed on second (page-relative)
@@ -267,31 +238,10 @@ describe('resolveRecommended middleware', () => {
test('returns paths without language or version prefixes', async () => {
const testPage: Partial = {
- mtime: Date.now(),
title: 'Tutorial Page',
- rawTitle: 'Tutorial Page',
intro: 'Tutorial intro',
- rawIntro: 'Tutorial intro',
relativePath: 'copilot/tutorials/tutorial-page/index.md',
- fullPath: '/full/path/copilot/tutorials/tutorial-page/index.md',
- languageCode: 'en',
- documentType: 'article',
- markdown: 'Tutorial content',
- versions: {},
applicableVersions: ['free-pro-team@latest'],
- permalinks: [
- {
- languageCode: 'en',
- pageVersion: 'free-pro-team@latest',
- title: 'Tutorial Page',
- href: '/en/copilot/tutorials/tutorial-page',
- hrefWithoutLanguage: '/copilot/tutorials/tutorial-page',
- },
- ],
- renderProp: vi.fn().mockResolvedValue('rendered'),
- renderTitle: vi.fn().mockResolvedValue('Tutorial Page'),
- render: vi.fn().mockResolvedValue('rendered content'),
- buildRedirects: vi.fn().mockReturnValue({}),
}
mockFindPage.mockReturnValue(testPage as any)
@@ -322,31 +272,10 @@ describe('resolveRecommended middleware', () => {
test('should filter out articles not available in current version', async () => {
// Create a test page that is only available in fpt, not ghec
const fptOnlyPage: Partial = {
- mtime: Date.now(),
title: 'FPT Only Article',
- rawTitle: 'FPT Only Article',
intro: 'This article is only for FPT',
- rawIntro: 'This article is only for FPT',
relativePath: 'test/fpt-only.md',
- fullPath: '/full/path/test/fpt-only.md',
- languageCode: 'en',
- documentType: 'article',
- markdown: 'FPT only content',
- versions: { fpt: '*' }, // Only available in free-pro-team
applicableVersions: ['free-pro-team@latest'], // Not available in ghec
- permalinks: [
- {
- languageCode: 'en',
- pageVersion: 'free-pro-team@latest',
- title: 'FPT Only Article',
- href: '/en/test/fpt-only',
- hrefWithoutLanguage: '/test/fpt-only',
- },
- ],
- renderProp: vi.fn().mockResolvedValue('rendered'),
- renderTitle: vi.fn().mockResolvedValue('FPT Only Article'),
- render: vi.fn().mockResolvedValue('rendered content'),
- buildRedirects: vi.fn().mockReturnValue({}),
}
mockFindPage.mockReturnValue(fptOnlyPage as any)
diff --git a/src/secret-scanning/data/public-docs.yml b/src/secret-scanning/data/public-docs.yml
index fb3dfdc6abca..f7ac53854689 100644
--- a/src/secret-scanning/data/public-docs.yml
+++ b/src/secret-scanning/data/public-docs.yml
@@ -1974,7 +1974,7 @@
base64Supported: false
isduplicate: false
- provider: Databricks
- supportedSecret: Databricks Access Token
+ supportedSecret: Databricks API Token
secretType: databricks_access_token
versions:
fpt: '*'
@@ -4060,6 +4060,18 @@
hasValidityCheck: false
base64Supported: false
isduplicate: false
+- provider: OneSignal
+ supportedSecret: OneSignal Rich API Key
+ secretType: onesignal_rich_authentication_token
+ versions:
+ fpt: '*'
+ ghec: '*'
+ isPublic: true
+ isPrivateWithGhas: false
+ hasPushProtection: false
+ hasValidityCheck: false
+ base64Supported: false
+ isduplicate: false
- provider: Onfido
supportedSecret: Onfido Live API Token
secretType: onfido_live_api_token
@@ -4253,6 +4265,18 @@
hasValidityCheck: '{% ifversion ghes %}false{% else %}true{% endif %}'
base64Supported: false
isduplicate: false
+- provider: Pineapple Technologies Limited
+ supportedSecret: Pineapple Technologies Incident API Key
+ secretType: pineapple_technologies_incident_api_key
+ versions:
+ fpt: '*'
+ ghec: '*'
+ isPublic: true
+ isPrivateWithGhas: false
+ hasPushProtection: false
+ hasValidityCheck: false
+ base64Supported: false
+ isduplicate: false
- provider: Pinecone
supportedSecret: Pinecone API Key
secretType: pinecone_api_key, pinecone_environment
@@ -4616,6 +4640,30 @@
hasValidityCheck: false
base64Supported: false
isduplicate: false
+- provider: Rainforest Pay
+ supportedSecret: Rainforest API Key
+ secretType: rainforest_api_key
+ versions:
+ fpt: '*'
+ ghec: '*'
+ isPublic: true
+ isPrivateWithGhas: false
+ hasPushProtection: false
+ hasValidityCheck: false
+ base64Supported: false
+ isduplicate: false
+- provider: Rainforest Pay
+ supportedSecret: Rainforest Sandbox API Key
+ secretType: rainforest_sandbox_api_key
+ versions:
+ fpt: '*'
+ ghec: '*'
+ isPublic: true
+ isPrivateWithGhas: false
+ hasPushProtection: false
+ hasValidityCheck: false
+ base64Supported: false
+ isduplicate: false
- provider: Ramp
supportedSecret: Ramp OAuth Client ID
secretType: ramp_client_id
@@ -4655,6 +4703,18 @@
hasValidityCheck: false
base64Supported: false
isduplicate: false
+- provider: Raycast
+ supportedSecret: Raycast Access Token
+ secretType: raycast_access_token
+ versions:
+ fpt: '*'
+ ghec: '*'
+ isPublic: true
+ isPrivateWithGhas: false
+ hasPushProtection: false
+ hasValidityCheck: false
+ base64Supported: false
+ isduplicate: false
- provider: ReadMe
supportedSecret: ReadMe API Key
secretType: readmeio_api_access_token
diff --git a/src/secret-scanning/lib/config.json b/src/secret-scanning/lib/config.json
index c31371ce762e..c27a54dddca6 100644
--- a/src/secret-scanning/lib/config.json
+++ b/src/secret-scanning/lib/config.json
@@ -1,5 +1,5 @@
{
- "sha": "b4cde342632f4327023e8d9b3729bcc5387461bb",
- "blob-sha": "f5614a575d8844d4ba53e0d2704d4feea885ae1e",
+ "sha": "2b0240ae95dae6b0857b3b679d3c01d88da5aa2e",
+ "blob-sha": "60dd4263fa67848500bb3595fff950b7b8b81520",
"targetFilename": "code-security/secret-scanning/introduction/supported-secret-scanning-patterns"
}
\ No newline at end of file