diff --git a/.gitattributes b/.gitattributes index e79d2f565574..8ccce16005f2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ # Set default behavior, in case users don't have core.autocrlf set. * text=auto -# Explicitly declare text files we want to always be normalized and converted -# to native line endings on checkout. -*.md text diff=markdown +# Explicitly declare text files we want to always be normalized, and for +# Markdown files, enforce LF line endings on checkout. +*.md text eol=lf diff=markdown *.json.br filter=lfs diff=lfs merge=lfs -text .github/workflows/*.lock.yml linguist-generated=true merge=ours diff --git a/Dockerfile b/Dockerfile index 6a9179f4b081..6fbbf5de0859 100644 --- a/Dockerfile +++ b/Dockerfile @@ -155,9 +155,11 @@ ENV BUILD_SHA=$BUILD_SHA # V8 heap limit as a percentage of the container cgroup memory limit. # Uses --max-old-space-size-percentage (Node 24+) so the heap adapts -# automatically when K8s memory limits change. 75% leaves ~25% headroom +# automatically when K8s memory limits change. 80% leaves ~20% headroom # for off-heap memory (Buffers, V8 code cache, libuv) and OS overhead. -ENV NODE_OPTIONS="--max-old-space-size-percentage=75" +# Raised from 75% on advice from performance engineering to reduce GC +# pressure during traffic spikes. +ENV NODE_OPTIONS="--max-old-space-size-percentage=80" # Entrypoint to start the server CMD ["node_modules/.bin/tsx", "src/frame/server.ts"] diff --git a/config/moda/configuration/default/env.yaml b/config/moda/configuration/default/env.yaml index fd28256d4dd1..fb0e6d7f06f4 100644 --- a/config/moda/configuration/default/env.yaml +++ b/config/moda/configuration/default/env.yaml @@ -3,7 +3,7 @@ data: NODE_ENV: production # Matches the Dockerfile ENV. Both set the same value so that # the heap limit is correct regardless of config-layering order. - NODE_OPTIONS: '--max-old-space-size-percentage=75' + NODE_OPTIONS: '--max-old-space-size-percentage=80' PORT: '4000' ENABLED_LANGUAGES: 'en,es,ja,pt,zh,ru,fr,ko,de' RATE_LIMIT_MAX: '21' diff --git a/config/moda/configuration/production/env.yaml b/config/moda/configuration/production/env.yaml index dae252096588..3ec81a4433f8 100644 --- a/config/moda/configuration/production/env.yaml +++ b/config/moda/configuration/production/env.yaml @@ -3,7 +3,7 @@ data: NODE_ENV: production # Matches the Dockerfile ENV. Both set the same value so that # the heap limit is correct regardless of config-layering order. - NODE_OPTIONS: '--max-old-space-size-percentage=75' + NODE_OPTIONS: '--max-old-space-size-percentage=80' PORT: '4000' ENABLED_LANGUAGES: 'en,es,ja,pt,zh,ru,fr,ko,de' RATE_LIMIT_MAX: '21' diff --git a/content/codespaces/about-codespaces/codespaces-features.md b/content/codespaces/about-codespaces/codespaces-features.md index c737dd7f04b2..a0e7a8e45482 100644 --- a/content/codespaces/about-codespaces/codespaces-features.md +++ b/content/codespaces/about-codespaces/codespaces-features.md @@ -7,6 +7,8 @@ versions: fpt: '*' ghec: '*' contentType: concepts +category: + - Get started --- ## {% data variables.product.prodname_github_codespaces %} features diff --git a/content/codespaces/about-codespaces/deep-dive.md b/content/codespaces/about-codespaces/deep-dive.md index 1e64d6569485..feeeefb1cd0e 100644 --- a/content/codespaces/about-codespaces/deep-dive.md +++ b/content/codespaces/about-codespaces/deep-dive.md @@ -9,6 +9,8 @@ versions: redirect_from: - /codespaces/getting-started/deep-dive contentType: get-started +category: + - Get started --- {% data variables.product.prodname_github_codespaces %} is an instant, cloud-based development environment that uses a container to provide you with common languages, tools, and utilities for development. {% data variables.product.prodname_github_codespaces %} is also configurable, allowing you to create a customized development environment for your project. By configuring a custom development environment for your project, you can have a repeatable codespace configuration for all users of your project. diff --git a/content/codespaces/about-codespaces/understanding-the-codespace-lifecycle.md b/content/codespaces/about-codespaces/understanding-the-codespace-lifecycle.md index ec19ed93d366..43760af6bcd8 100644 --- a/content/codespaces/about-codespaces/understanding-the-codespace-lifecycle.md +++ b/content/codespaces/about-codespaces/understanding-the-codespace-lifecycle.md @@ -11,6 +11,8 @@ redirect_from: - /codespaces/about-codespaces/the-codespace-lifecycle - /codespaces/getting-started/understanding-the-codespace-lifecycle contentType: concepts +category: + - Get started --- > [!NOTE] diff --git a/content/codespaces/about-codespaces/what-are-codespaces.md b/content/codespaces/about-codespaces/what-are-codespaces.md index 900a9f3f9e94..7482e7a2daa8 100644 --- a/content/codespaces/about-codespaces/what-are-codespaces.md +++ b/content/codespaces/about-codespaces/what-are-codespaces.md @@ -9,6 +9,8 @@ versions: redirect_from: - /codespaces/overview contentType: concepts +category: + - Get started --- ## Introduction diff --git a/content/codespaces/customizing-your-codespace/changing-the-machine-type-for-your-codespace.md b/content/codespaces/customizing-your-codespace/changing-the-machine-type-for-your-codespace.md index 00a5ce137ebc..5e9f62b824d0 100644 --- a/content/codespaces/customizing-your-codespace/changing-the-machine-type-for-your-codespace.md +++ b/content/codespaces/customizing-your-codespace/changing-the-machine-type-for-your-codespace.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/developing-in-codespaces/changing-the-machine-type-for-your-codespace contentType: how-tos +category: + - Customize your codespace --- ## About machine types diff --git a/content/codespaces/customizing-your-codespace/changing-the-shell-in-a-codespace.md b/content/codespaces/customizing-your-codespace/changing-the-shell-in-a-codespace.md index 95af563298a2..026654febe63 100644 --- a/content/codespaces/customizing-your-codespace/changing-the-shell-in-a-codespace.md +++ b/content/codespaces/customizing-your-codespace/changing-the-shell-in-a-codespace.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Customize your codespace --- When you're working in a codespace, you can open a new terminal window with a shell of your choice, change your default shell for new terminal windows, or install a new shell. You can also use dotfiles to configure your shell. diff --git a/content/codespaces/customizing-your-codespace/renaming-a-codespace.md b/content/codespaces/customizing-your-codespace/renaming-a-codespace.md index 5812dcf62bb8..6fd7732720e7 100644 --- a/content/codespaces/customizing-your-codespace/renaming-a-codespace.md +++ b/content/codespaces/customizing-your-codespace/renaming-a-codespace.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Rename a codespace contentType: how-tos +category: + - Create and manage codespaces --- ## About renaming a codespace diff --git a/content/codespaces/developing-in-a-codespace/connecting-to-a-private-network.md b/content/codespaces/developing-in-a-codespace/connecting-to-a-private-network.md index e294c14f7c25..7af5ab686a1e 100644 --- a/content/codespaces/developing-in-a-codespace/connecting-to-a-private-network.md +++ b/content/codespaces/developing-in-a-codespace/connecting-to-a-private-network.md @@ -7,6 +7,8 @@ versions: redirect_from: - /codespaces/developing-in-codespaces/connecting-to-a-private-network contentType: how-tos +category: + - Create and manage codespaces --- ## About codespace networking diff --git a/content/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository.md b/content/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository.md index df04c9d53a4f..e4dcbc530d7f 100644 --- a/content/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository.md +++ b/content/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository.md @@ -11,6 +11,8 @@ versions: ghec: '*' shortTitle: Create a codespace for a repo contentType: how-tos +category: + - Create and manage codespaces --- ## About creating a codespace for a repository diff --git a/content/codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template.md b/content/codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template.md index e5856836ecdc..6ea31fcbcb44 100644 --- a/content/codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template.md +++ b/content/codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template.md @@ -8,6 +8,8 @@ shortTitle: Create a codespace from a template redirect_from: - /codespaces/developing-in-codespaces/creating-a-codespace-from-a-template contentType: how-tos +category: + - Create and manage codespaces --- # About templates for {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace.md b/content/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace.md index 327bf4c1ae8c..3886c57cdefe 100644 --- a/content/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace.md +++ b/content/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/developing-in-codespaces/default-environment-variables-for-your-codespace contentType: concepts +category: + - Write code in a codespace --- ## About default environment variables diff --git a/content/codespaces/developing-in-a-codespace/deleting-a-codespace.md b/content/codespaces/developing-in-a-codespace/deleting-a-codespace.md index a5de19f56594..28cbb771a1cb 100644 --- a/content/codespaces/developing-in-a-codespace/deleting-a-codespace.md +++ b/content/codespaces/developing-in-a-codespace/deleting-a-codespace.md @@ -10,6 +10,8 @@ versions: ghec: '*' shortTitle: Delete a codespace contentType: how-tos +category: + - Create and manage codespaces --- ## Overview diff --git a/content/codespaces/developing-in-a-codespace/developing-in-a-codespace.md b/content/codespaces/developing-in-a-codespace/developing-in-a-codespace.md index 24a85148689f..3352b032935d 100644 --- a/content/codespaces/developing-in-a-codespace/developing-in-a-codespace.md +++ b/content/codespaces/developing-in-a-codespace/developing-in-a-codespace.md @@ -10,6 +10,8 @@ versions: ghec: '*' shortTitle: Develop in a codespace contentType: how-tos +category: + - Create and manage codespaces --- ## About development with {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace.md b/content/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace.md index c011845c402a..41881844256b 100644 --- a/content/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace.md +++ b/content/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace.md @@ -9,6 +9,8 @@ redirect_from: - /github/developing-online-with-codespaces/forwarding-ports-in-your-codespace - /codespaces/developing-in-codespaces/forwarding-ports-in-your-codespace contentType: how-tos +category: + - Write code in a codespace --- ## About forwarded ports diff --git a/content/codespaces/developing-in-a-codespace/getting-started-with-github-codespaces-for-machine-learning.md b/content/codespaces/developing-in-a-codespace/getting-started-with-github-codespaces-for-machine-learning.md index 6fd4ef153dc9..09ac98da3782 100644 --- a/content/codespaces/developing-in-a-codespace/getting-started-with-github-codespaces-for-machine-learning.md +++ b/content/codespaces/developing-in-a-codespace/getting-started-with-github-codespaces-for-machine-learning.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/developing-in-codespaces/getting-started-with-github-codespaces-for-machine-learning contentType: tutorials +category: + - Write code in a codespace --- ## Introduction diff --git a/content/codespaces/developing-in-a-codespace/opening-an-existing-codespace.md b/content/codespaces/developing-in-a-codespace/opening-an-existing-codespace.md index acf6006c5bc7..fb4d86758198 100644 --- a/content/codespaces/developing-in-a-codespace/opening-an-existing-codespace.md +++ b/content/codespaces/developing-in-a-codespace/opening-an-existing-codespace.md @@ -8,6 +8,8 @@ shortTitle: Open an existing codespace redirect_from: - /codespaces/developing-in-codespaces/opening-an-existing-codespace contentType: how-tos +category: + - Create and manage codespaces --- You can reopen any of your active or stopped codespaces on {% data variables.product.github %}, in {% data variables.product.prodname_vscode %}, or by using {% data variables.product.prodname_cli %}. You can't reopen a codespace that has been deleted. See [AUTOTITLE](/codespaces/about-codespaces/understanding-the-codespace-lifecycle). diff --git a/content/codespaces/developing-in-a-codespace/persisting-environment-variables-and-temporary-files.md b/content/codespaces/developing-in-a-codespace/persisting-environment-variables-and-temporary-files.md index fbb924b188a1..39b66a0b4720 100644 --- a/content/codespaces/developing-in-a-codespace/persisting-environment-variables-and-temporary-files.md +++ b/content/codespaces/developing-in-a-codespace/persisting-environment-variables-and-temporary-files.md @@ -8,6 +8,8 @@ shortTitle: Persist variables and files redirect_from: - /codespaces/developing-in-codespaces/persisting-environment-variables-and-temporary-files contentType: how-tos +category: + - Customize your codespace --- ## Setting persistent environment variables diff --git a/content/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace.md b/content/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace.md index b599f89bec09..ae347051ffa1 100644 --- a/content/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace.md +++ b/content/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace.md @@ -9,6 +9,8 @@ redirect_from: - /codespaces/codespaces-reference/performing-a-full-rebuild-of-a-container - /codespaces/developing-in-codespaces/rebuilding-the-container-in-a-codespace contentType: how-tos +category: + - Write code in a codespace --- ## About rebuilding the dev container diff --git a/content/codespaces/developing-in-a-codespace/stopping-and-starting-a-codespace.md b/content/codespaces/developing-in-a-codespace/stopping-and-starting-a-codespace.md index 96a8fbc59564..3fdac1a8134c 100644 --- a/content/codespaces/developing-in-a-codespace/stopping-and-starting-a-codespace.md +++ b/content/codespaces/developing-in-a-codespace/stopping-and-starting-a-codespace.md @@ -8,6 +8,8 @@ shortTitle: Stop a codespace redirect_from: - /codespaces/developing-in-codespaces/stopping-and-starting-a-codespace contentType: how-tos +category: + - Create and manage codespaces --- ## About stopping and starting a codespace diff --git a/content/codespaces/developing-in-a-codespace/using-github-codespaces-for-pull-requests.md b/content/codespaces/developing-in-a-codespace/using-github-codespaces-for-pull-requests.md index e5fcbaf42edd..f385602bd46c 100644 --- a/content/codespaces/developing-in-a-codespace/using-github-codespaces-for-pull-requests.md +++ b/content/codespaces/developing-in-a-codespace/using-github-codespaces-for-pull-requests.md @@ -9,6 +9,8 @@ redirect_from: - /codespaces/developing-in-codespaces/using-codespaces-for-pull-requests - /codespaces/developing-in-codespaces/using-github-codespaces-for-pull-requests contentType: how-tos +category: + - Write code in a codespace --- Using a codespace to work on a pull request gives you all the benefits of {% data variables.product.prodname_github_codespaces %}. For more information, see [AUTOTITLE](/codespaces/about-codespaces/codespaces-features). diff --git a/content/codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code.md b/content/codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code.md index 180233a3bf87..10b31d5f7015 100644 --- a/content/codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code.md +++ b/content/codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code.md @@ -12,6 +12,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Write code in a codespace --- ## About {% data variables.product.prodname_github_codespaces %} in {% data variables.product.prodname_vscode %} diff --git a/content/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli.md b/content/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli.md index 7225d72e6f0c..e710ff56a99b 100644 --- a/content/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli.md +++ b/content/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli.md @@ -9,6 +9,8 @@ redirect_from: - /codespaces/developing-in-codespaces/using-codespaces-with-github-cli - /codespaces/developing-in-codespaces/using-github-codespaces-with-github-cli contentType: how-tos +category: + - Write code in a codespace --- ## About {% data variables.product.prodname_cli %} diff --git a/content/codespaces/developing-in-a-codespace/using-source-control-in-your-codespace.md b/content/codespaces/developing-in-a-codespace/using-source-control-in-your-codespace.md index a8b973b1a814..15f310bb160a 100644 --- a/content/codespaces/developing-in-a-codespace/using-source-control-in-your-codespace.md +++ b/content/codespaces/developing-in-a-codespace/using-source-control-in-your-codespace.md @@ -8,6 +8,8 @@ shortTitle: Source control redirect_from: - /codespaces/developing-in-codespaces/using-source-control-in-your-codespace contentType: how-tos +category: + - Write code in a codespace --- ## About source control in {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace.md b/content/codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace.md index ea9755d6ef89..eed7aba912c8 100644 --- a/content/codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace.md +++ b/content/codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/developing-in-codespaces/working-collaboratively-in-a-codespace contentType: how-tos +category: + - Write code in a codespace --- {% data variables.product.prodname_vs %} Live Share lets you collaboratively edit and debug with others in real time, within a codespace. You can securely share your current codespace, or access a codespace created by someone else. diff --git a/content/codespaces/guides.md b/content/codespaces/guides.md deleted file mode 100644 index 16e057bf7ddd..000000000000 --- a/content/codespaces/guides.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Guides for Codespaces -shortTitle: Guides -intro: Learn how to make the most of GitHub -allowTitleToDifferFromFilename: true -layout: product-guides -versions: - fpt: '*' - ghec: '*' -includeGuides: - - /codespaces/quickstart - - /codespaces/about-codespaces/deep-dive - - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers - - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces - - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-python-project-for-codespaces - - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-dotnet-project-for-codespaces - - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-java-project-for-codespaces - - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-php-project-for-codespaces - - /codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/setting-a-minimum-specification-for-codespace-machines - - /codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/adding-features-to-a-devcontainer-file - - /codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository - - /codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/specifying-recommended-secrets-for-a-repository - - /codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces - - /codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/setting-up-a-template-repository-for-github-codespaces - - /codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account - - /codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository - - /codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template - - /codespaces/developing-in-a-codespace/developing-in-a-codespace - - /codespaces/developing-in-a-codespace/deleting-a-codespace - - /codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace - - /codespaces/developing-in-a-codespace/opening-an-existing-codespace - - /codespaces/developing-in-a-codespace/stopping-and-starting-a-codespace - - /codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace - - /codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code - - /codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli - - /codespaces/developing-in-a-codespace/using-source-control-in-your-codespace - - /codespaces/developing-in-a-codespace/using-github-codespaces-for-pull-requests - - /codespaces/customizing-your-codespace/changing-the-machine-type-for-your-codespace - - /codespaces/setting-your-user-preferences/configuring-automatic-deletion-of-your-codespaces - - /codespaces/setting-your-user-preferences/setting-your-default-editor-for-github-codespaces - - /codespaces/setting-your-user-preferences/setting-your-default-region-for-github-codespaces - - /codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces - - /codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces - - /codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces - - /codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces - - /codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization - - /codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization - - /codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization - - /codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types - - /codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces - - /codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period - - /codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces - - /codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports - - /codespaces/managing-codespaces-for-your-organization/reviewing-your-organizations-audit-logs-for-github-codespaces - - /billing/concepts/product-billing/github-codespaces - - /codespaces/reference/using-the-vs-code-command-palette-in-codespaces - - /codespaces/reference/disaster-recovery-for-github-codespaces - - /codespaces/reference/security-in-github-codespaces ---- diff --git a/content/codespaces/index.md b/content/codespaces/index.md index 59251dc3f442..0ab123a1bce5 100644 --- a/content/codespaces/index.md +++ b/content/codespaces/index.md @@ -7,38 +7,27 @@ intro: >- introLinks: overview: /codespaces/about-codespaces/what-are-codespaces quickstart: /codespaces/quickstart -featuredLinks: - startHere: - - >- - /codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization +layout: discovery-landing +includedCategories: + - Get started + - Create and manage codespaces + - Write code in a codespace + - Customize your codespace + - Set up dev containers for a project + - Speed up codespace creation with prebuilds + - Manage codespaces for your organization + - Troubleshoot codespaces +carousels: + recommended: + - /codespaces/quickstart + - /codespaces/about-codespaces/what-are-codespaces - /codespaces/about-codespaces/understanding-the-codespace-lifecycle - - >- - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers - - >- - /codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces - - /billing/concepts/product-billing/github-codespaces - guideCards: - - /codespaces/about-codespaces/deep-dive - - >- - /codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository + - /codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository - /codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template - - /codespaces/developing-in-a-codespace/opening-an-existing-codespace - - >- - /codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account - - >- - /codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code - popular: - - >- - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces - - >- - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-python-project-for-codespaces - - >- - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-java-project-for-codespaces - - >- - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-dotnet-project-for-codespaces - - >- - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-php-project-for-codespaces - popularHeading: Set up your project + - /codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers + - /codespaces/developing-in-a-codespace/using-source-control-in-your-codespace + - /codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization + - /codespaces/reference/security-in-github-codespaces changelog: label: codespaces product_video: 'https://www.youtube-nocookie.com/embed/_W9B7qc9lVc' @@ -52,7 +41,7 @@ redirect_from: - >- /codespaces/developing-in-a-codespace/using-github-codespaces-in-your-jetbrains-ide - /codespaces/reference/using-the-github-codespaces-plugin-for-jetbrains -layout: product-landing + - /codespaces/guides versions: fpt: '*' ghec: '*' @@ -69,6 +58,4 @@ children: - /reference - /troubleshooting - /the-githubdev-web-based-editor - - /guides --- - diff --git a/content/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization.md b/content/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization.md index 7c315c7e35e3..9d90fa31490e 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: Organizations on {% data variables.product.prodname_team %} and {% data variables.product.prodname_enterprise %} plans can pay for their members' use of {% data variables.product.prodname_github_codespaces %}. These organizations can then access policies that apply to codespaces paid for by the organization. See [AUTOTITLE](/get-started/learning-about-github/githubs-products). contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization.md b/content/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization.md index e383c9fc4a6a..26a08d0034d5 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization.md @@ -12,6 +12,8 @@ versions: ghec: '*' product: '{% data variables.product.prodname_team %} and {% data variables.product.prodname_enterprise %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## About enabling and disabling {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md b/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md index 9315ddfa8697..92784e1bd408 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization.md b/content/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization.md index 448c3f246cfb..dc7175ffbd40 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization.md @@ -11,6 +11,8 @@ redirect_from: - /codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-codespaces - /codespaces/managing-codespaces-for-your-organization/managing-encrypted-secrets-for-your-repository-and-organization-for-github-codespaces product: 'Development environment secrets are available in all public repositories, in private repositories owned by personal accounts, and in private repositories owned by organizations on {% data variables.product.prodname_team %} or {% data variables.product.prodname_enterprise %} plans. For more information, see [AUTOTITLE](/get-started/learning-about-github/githubs-plans).' +category: + - Manage codespaces for your organization --- ## About secrets diff --git a/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md b/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md index 86d61be08f3e..55ddbf1ab626 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md @@ -11,6 +11,8 @@ redirect_from: - /codespaces/managing-codespaces-for-your-organization/managing-billing-for-github-codespaces-in-your-organization product: '{% data reusables.gated-features.codespaces-org %}' contentType: reference +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md index b47c3077a562..a3c33a941fe5 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md index 643cf1883a40..58120df4e085 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md index 2e2dd2a7feba..fbb9d8aefd6e 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md index a10cdfc8c9f0..ff7ef6080077 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md index 4b8ea67552a5..e7837a38c56d 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md index e4b5bfd1b37b..bbda1ab41470 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md @@ -8,6 +8,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- ## Overview diff --git a/content/codespaces/managing-codespaces-for-your-organization/reviewing-your-organizations-audit-logs-for-github-codespaces.md b/content/codespaces/managing-codespaces-for-your-organization/reviewing-your-organizations-audit-logs-for-github-codespaces.md index 67030e500528..d636df0f1e09 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/reviewing-your-organizations-audit-logs-for-github-codespaces.md +++ b/content/codespaces/managing-codespaces-for-your-organization/reviewing-your-organizations-audit-logs-for-github-codespaces.md @@ -9,6 +9,8 @@ redirect_from: - /codespaces/managing-codespaces-for-your-organization/reviewing-your-organizations-audit-logs-for-codespaces product: '{% data reusables.gated-features.codespaces-org %}' contentType: how-tos +category: + - Manage codespaces for your organization --- When any member of your organization performs an action related to {% data variables.product.prodname_github_codespaces %}, you can review the actions in the audit log. For information about accessing the log, see [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#accessing-the-audit-log). diff --git a/content/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces.md b/content/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces.md index eccf83c81174..53a0c3051142 100644 --- a/content/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces.md +++ b/content/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/managing-your-codespaces/managing-gpg-verification-for-codespaces shortTitle: GPG verification contentType: how-tos +category: + - Customize your codespace --- ## About GPG verification in {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces.md b/content/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces.md index acbe42331e1f..84dd39c3e63e 100644 --- a/content/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces.md +++ b/content/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces.md @@ -9,6 +9,8 @@ versions: redirect_from: - /codespaces/managing-your-codespaces/managing-access-and-security-for-your-codespaces - /codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces +category: + - Customize your codespace --- ## Overview diff --git a/content/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces.md b/content/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces.md index 656df7fb7065..f62bb248d062 100644 --- a/content/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces.md +++ b/content/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces.md @@ -11,6 +11,8 @@ redirect_from: - /codespaces/working-with-your-codespace/managing-encrypted-secrets-for-codespaces - /codespaces/managing-your-codespaces/managing-encrypted-secrets-for-your-codespaces contentType: how-tos +category: + - Customize your codespace --- ## About secrets for {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/managing-your-codespaces/reviewing-your-security-logs-for-github-codespaces.md b/content/codespaces/managing-your-codespaces/reviewing-your-security-logs-for-github-codespaces.md index 1bcb1e9a9599..758b7c69727d 100644 --- a/content/codespaces/managing-your-codespaces/reviewing-your-security-logs-for-github-codespaces.md +++ b/content/codespaces/managing-your-codespaces/reviewing-your-security-logs-for-github-codespaces.md @@ -7,6 +7,8 @@ versions: ghec: '*' redirect_from: - /codespaces/managing-your-codespaces/reviewing-your-security-logs-for-codespaces +category: + - Customize your codespace --- ## About security logs for {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds.md b/content/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds.md index 0ac8cc7e50d5..3224c9928fb3 100644 --- a/content/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds.md +++ b/content/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/prebuilding-your-codespaces/about-codespaces-prebuilds product: 'You create and configure prebuilds in your repository''s settings. {% data reusables.gated-features.codespaces-repo %}' +category: + - Speed up codespace creation with prebuilds --- ## Overview diff --git a/content/codespaces/prebuilding-your-codespaces/allowing-a-prebuild-to-access-other-repositories.md b/content/codespaces/prebuilding-your-codespaces/allowing-a-prebuild-to-access-other-repositories.md index 8895ec55dc1a..9b00b2847baa 100644 --- a/content/codespaces/prebuilding-your-codespaces/allowing-a-prebuild-to-access-other-repositories.md +++ b/content/codespaces/prebuilding-your-codespaces/allowing-a-prebuild-to-access-other-repositories.md @@ -8,6 +8,8 @@ versions: permissions: People with admin access to a repository can configure prebuilds for the repository. product: '{% data reusables.gated-features.codespaces-repo %}' contentType: how-tos +category: + - Speed up codespace creation with prebuilds --- By default, the {% data variables.product.prodname_actions %} workflow for a prebuild configuration can only access its own repository contents. Your project may use additional resources, located elsewhere, to build the development environment. diff --git a/content/codespaces/prebuilding-your-codespaces/configuring-prebuilds.md b/content/codespaces/prebuilding-your-codespaces/configuring-prebuilds.md index 226ea852962a..df0451772197 100644 --- a/content/codespaces/prebuilding-your-codespaces/configuring-prebuilds.md +++ b/content/codespaces/prebuilding-your-codespaces/configuring-prebuilds.md @@ -8,6 +8,8 @@ versions: permissions: People with admin access to a repository can configure prebuilds for the repository. product: '{% data reusables.gated-features.codespaces-repo %}' contentType: how-tos +category: + - Speed up codespace creation with prebuilds --- You can set up a prebuild configuration for the combination of a specific branch of your repository with a specific dev container configuration file. diff --git a/content/codespaces/prebuilding-your-codespaces/managing-prebuilds.md b/content/codespaces/prebuilding-your-codespaces/managing-prebuilds.md index 60db732b3311..c14994b44fbd 100644 --- a/content/codespaces/prebuilding-your-codespaces/managing-prebuilds.md +++ b/content/codespaces/prebuilding-your-codespaces/managing-prebuilds.md @@ -7,6 +7,8 @@ versions: ghec: '*' product: '{% data reusables.gated-features.codespaces-repo %}' contentType: how-tos +category: + - Speed up codespace creation with prebuilds --- ## About managing prebuilds diff --git a/content/codespaces/prebuilding-your-codespaces/testing-dev-container-changes.md b/content/codespaces/prebuilding-your-codespaces/testing-dev-container-changes.md index 293ff2194a58..307cc1d23486 100644 --- a/content/codespaces/prebuilding-your-codespaces/testing-dev-container-changes.md +++ b/content/codespaces/prebuilding-your-codespaces/testing-dev-container-changes.md @@ -8,6 +8,8 @@ versions: ghec: '*' permissions: People with write permissions to a repository can create or edit the dev container configuration for a branch. contentType: how-tos +category: + - Speed up codespace creation with prebuilds --- Any changes you make to the dev container configuration for a prebuild-enabled branch will result in an update to the codespace configuration and the associated prebuild. It’s therefore important to test such changes in a codespace from a test branch before committing your changes to a branch of your repository that's actively used. This will ensure you’re not introducing breaking changes for your team. diff --git a/content/codespaces/quickstart.md b/content/codespaces/quickstart.md index 394c107a0c66..1f187d3e4e4b 100644 --- a/content/codespaces/quickstart.md +++ b/content/codespaces/quickstart.md @@ -12,6 +12,8 @@ redirect_from: versions: fpt: '*' ghec: '*' +category: + - Get started --- ## Introduction diff --git a/content/codespaces/reference/allowing-your-codespace-to-access-a-private-registry.md b/content/codespaces/reference/allowing-your-codespace-to-access-a-private-registry.md index 9e3e2f676e93..33954c4f447e 100644 --- a/content/codespaces/reference/allowing-your-codespace-to-access-a-private-registry.md +++ b/content/codespaces/reference/allowing-your-codespace-to-access-a-private-registry.md @@ -8,6 +8,8 @@ redirect_from: - /codespaces/codespaces-reference/allowing-your-codespace-to-access-a-private-image-registry - /codespaces/codespaces-reference/allowing-your-codespace-to-access-a-private-registry shortTitle: Access a private registry +category: + - Set up dev containers for a project --- ## About private registries and {% data variables.product.prodname_github_codespaces %} diff --git a/content/codespaces/reference/disaster-recovery-for-github-codespaces.md b/content/codespaces/reference/disaster-recovery-for-github-codespaces.md index 6e3fb90617d6..768c173c4763 100644 --- a/content/codespaces/reference/disaster-recovery-for-github-codespaces.md +++ b/content/codespaces/reference/disaster-recovery-for-github-codespaces.md @@ -8,6 +8,8 @@ shortTitle: Disaster recovery redirect_from: - /codespaces/codespaces-reference/disaster-recovery-for-codespaces - /codespaces/codespaces-reference/disaster-recovery-for-github-codespaces +category: + - Create and manage codespaces --- We work hard to make sure that {% data variables.product.prodname_github_codespaces %} is always available to you. However, forces beyond our control sometimes impact the service in ways that can cause unplanned service disruptions. diff --git a/content/codespaces/reference/security-in-github-codespaces.md b/content/codespaces/reference/security-in-github-codespaces.md index 8a6721adc40e..51141f19c1c9 100644 --- a/content/codespaces/reference/security-in-github-codespaces.md +++ b/content/codespaces/reference/security-in-github-codespaces.md @@ -9,6 +9,8 @@ redirect_from: - /codespaces/codespaces-reference/security-in-codespaces - /codespaces/codespaces-reference/security-in-github-codespaces contentType: reference +category: + - Get started --- ## Overview of codespace security diff --git a/content/codespaces/reference/using-github-copilot-in-github-codespaces.md b/content/codespaces/reference/using-github-copilot-in-github-codespaces.md index 1986f3ac58bf..732fe0ea21e8 100644 --- a/content/codespaces/reference/using-github-copilot-in-github-codespaces.md +++ b/content/codespaces/reference/using-github-copilot-in-github-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/codespaces-reference/using-github-copilot-in-codespaces - /codespaces/codespaces-reference/using-github-copilot-in-github-codespaces contentType: reference +category: + - Write code in a codespace --- [{% data variables.product.prodname_copilot %}](https://copilot.github.com/) is an AI pair programmer that you can use in any codespace that you open in the {% data variables.product.prodname_vscode_shortname %} web client or desktop application. For more information about {% data variables.product.prodname_copilot %}, see [AUTOTITLE](/copilot/about-github-copilot/what-is-github-copilot). diff --git a/content/codespaces/reference/using-the-vs-code-command-palette-in-codespaces.md b/content/codespaces/reference/using-the-vs-code-command-palette-in-codespaces.md index 3f218bd146cc..82d64709ed48 100644 --- a/content/codespaces/reference/using-the-vs-code-command-palette-in-codespaces.md +++ b/content/codespaces/reference/using-the-vs-code-command-palette-in-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/codespaces-reference/using-the-command-palette-in-codespaces - /codespaces/codespaces-reference/using-the-vs-code-command-palette-in-codespaces contentType: reference +category: + - Write code in a codespace --- ## About the {% data variables.product.prodname_vscode_command_palette %} diff --git a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers.md b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers.md index 945c38df18a4..dbb143fc4c3a 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers.md @@ -13,6 +13,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Set up dev containers for a project --- ## About dev containers diff --git a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-dotnet-project-for-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-dotnet-project-for-codespaces.md index ecf2fe7f5c18..28bf51f973d9 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-dotnet-project-for-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-dotnet-project-for-codespaces.md @@ -10,6 +10,8 @@ versions: fpt: '*' ghec: '*' contentType: tutorials +category: + - Set up dev containers for a project --- ## Introduction diff --git a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-java-project-for-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-java-project-for-codespaces.md index b195dffb695f..fe2cb196e522 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-java-project-for-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-java-project-for-codespaces.md @@ -10,6 +10,8 @@ versions: fpt: '*' ghec: '*' contentType: tutorials +category: + - Set up dev containers for a project --- ## Introduction diff --git a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces.md index 92b4c7fe3079..0a0a9f340739 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-nodejs-project-for-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/getting-started-with-codespaces/getting-started-with-your-nodejs-project-in-codespaces - /codespaces/setting-up-your-project-for-codespaces/setting-up-your-nodejs-project-for-codespaces contentType: tutorials +category: + - Set up dev containers for a project --- ## Introduction diff --git a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-php-project-for-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-php-project-for-codespaces.md index ffaac73372db..e97b6d72a3e5 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-php-project-for-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-php-project-for-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/getting-started-with-codespaces/getting-started-with-your-php-project-in-codespaces - /codespaces/setting-up-your-project-for-codespaces/setting-up-your-php-project-for-codespaces contentType: tutorials +category: + - Set up dev containers for a project --- ## Introduction diff --git a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-python-project-for-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-python-project-for-codespaces.md index 12154df3a1e3..338f95f75b1e 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-python-project-for-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/setting-up-your-python-project-for-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/getting-started-with-codespaces/getting-started-with-your-python-project-in-codespaces - /codespaces/setting-up-your-project-for-codespaces/setting-up-your-python-project-for-codespaces contentType: tutorials +category: + - Set up dev containers for a project --- ## Introduction diff --git a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/adding-features-to-a-devcontainer-file.md b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/adding-features-to-a-devcontainer-file.md index a837c5b0e3dc..d531dc779cc6 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/adding-features-to-a-devcontainer-file.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/adding-features-to-a-devcontainer-file.md @@ -9,6 +9,8 @@ versions: redirect_from: - /codespaces/setting-up-your-project-for-codespaces/adding-features-to-a-devcontainer-file contentType: how-tos +category: + - Set up dev containers for a project --- {% data reusables.codespaces.about-features %} Use the tabs in this article to display instructions for each of these ways of adding features. diff --git a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository.md b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository.md index d3c4017de646..315e1cc1fff3 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository.md @@ -9,6 +9,8 @@ versions: redirect_from: - /codespaces/setting-up-your-project-for-codespaces/automatically-opening-files-in-the-codespaces-for-a-repository contentType: how-tos +category: + - Set up dev containers for a project --- ## Overview diff --git a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/setting-a-minimum-specification-for-codespace-machines.md b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/setting-a-minimum-specification-for-codespace-machines.md index 67c767f618bc..79beb908f02c 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/setting-a-minimum-specification-for-codespace-machines.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/setting-a-minimum-specification-for-codespace-machines.md @@ -9,6 +9,8 @@ versions: redirect_from: - /codespaces/setting-up-your-project-for-codespaces/setting-a-minimum-specification-for-codespace-machines contentType: how-tos +category: + - Set up dev containers for a project --- ## Overview diff --git a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/specifying-recommended-secrets-for-a-repository.md b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/specifying-recommended-secrets-for-a-repository.md index fe33b1cb67ef..b6142ccf1529 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/specifying-recommended-secrets-for-a-repository.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/specifying-recommended-secrets-for-a-repository.md @@ -7,6 +7,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Set up dev containers for a project --- ## About recommended secrets diff --git a/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces.md index 006da3e95f5b..69368485df3d 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/setting-up-your-project-for-codespaces/adding-a-codespaces-badge - /codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/adding-a-codespaces-badge contentType: how-tos +category: + - Set up dev containers for a project --- ## Overview diff --git a/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/setting-up-a-template-repository-for-github-codespaces.md b/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/setting-up-a-template-repository-for-github-codespaces.md index b1bc475286f2..060a55a5245d 100644 --- a/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/setting-up-a-template-repository-for-github-codespaces.md +++ b/content/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/setting-up-a-template-repository-for-github-codespaces.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/setting-up-your-project-for-codespaces/setting-up-a-template-repository-for-github-codespaces contentType: how-tos +category: + - Set up dev containers for a project --- ## Introduction diff --git a/content/codespaces/setting-your-user-preferences/choosing-the-stable-or-beta-host-image.md b/content/codespaces/setting-your-user-preferences/choosing-the-stable-or-beta-host-image.md index eab498141a5a..55bd713aa62e 100644 --- a/content/codespaces/setting-your-user-preferences/choosing-the-stable-or-beta-host-image.md +++ b/content/codespaces/setting-your-user-preferences/choosing-the-stable-or-beta-host-image.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Customize your codespace --- ## About the virtual machine host image diff --git a/content/codespaces/setting-your-user-preferences/configuring-automatic-deletion-of-your-codespaces.md b/content/codespaces/setting-your-user-preferences/configuring-automatic-deletion-of-your-codespaces.md index 2f44d50f0941..3c30a2967100 100644 --- a/content/codespaces/setting-your-user-preferences/configuring-automatic-deletion-of-your-codespaces.md +++ b/content/codespaces/setting-your-user-preferences/configuring-automatic-deletion-of-your-codespaces.md @@ -8,6 +8,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Customize your codespace --- By default, {% data variables.product.prodname_github_codespaces %} are automatically deleted after they have been stopped and have remained inactive for 30 days. diff --git a/content/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account.md b/content/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account.md index 9af46383b542..75ee8b8624ec 100644 --- a/content/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account.md +++ b/content/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account.md @@ -12,6 +12,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Customize your codespace --- diff --git a/content/codespaces/setting-your-user-preferences/setting-your-default-editor-for-github-codespaces.md b/content/codespaces/setting-your-user-preferences/setting-your-default-editor-for-github-codespaces.md index df5eb3101f9e..2dbc800676de 100644 --- a/content/codespaces/setting-your-user-preferences/setting-your-default-editor-for-github-codespaces.md +++ b/content/codespaces/setting-your-user-preferences/setting-your-default-editor-for-github-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/customizing-your-codespace/setting-your-default-editor-for-codespaces - /codespaces/customizing-your-codespace/setting-your-default-editor-for-github-codespaces contentType: how-tos +category: + - Customize your codespace --- On the settings page, you can set your editor preference so that when you create a codespace, or open an existing codespace, it is opened in your choice of: diff --git a/content/codespaces/setting-your-user-preferences/setting-your-default-region-for-github-codespaces.md b/content/codespaces/setting-your-user-preferences/setting-your-default-region-for-github-codespaces.md index ec72a20c7799..44fdc23e3f3f 100644 --- a/content/codespaces/setting-your-user-preferences/setting-your-default-region-for-github-codespaces.md +++ b/content/codespaces/setting-your-user-preferences/setting-your-default-region-for-github-codespaces.md @@ -10,6 +10,8 @@ redirect_from: - /codespaces/customizing-your-codespace/setting-your-default-region-for-codespaces - /codespaces/customizing-your-codespace/setting-your-default-region-for-github-codespaces contentType: how-tos +category: + - Customize your codespace --- You can manually select the region that your codespaces will be created in, allowing you to meet stringent security and compliance requirements. By default, your region is set automatically, based on your location. diff --git a/content/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces.md b/content/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces.md index 1548d96ebc7b..a8c12d0d0762 100644 --- a/content/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces.md +++ b/content/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces.md @@ -9,6 +9,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Customize your codespace --- ## About the idle timeout diff --git a/content/codespaces/the-githubdev-web-based-editor.md b/content/codespaces/the-githubdev-web-based-editor.md index 49e373ba868c..faa8c6eaf151 100644 --- a/content/codespaces/the-githubdev-web-based-editor.md +++ b/content/codespaces/the-githubdev-web-based-editor.md @@ -7,6 +7,8 @@ versions: redirect_from: - /codespaces/developing-in-codespaces/web-based-editor contentType: how-tos +category: + - Get started --- >[!NOTE] The {% data variables.codespaces.serverless %} editor is currently in {% data variables.release-phases.public_preview %}. You can provide feedback [in our Discussions](https://github.com/community/community/discussions/categories/codespaces).{% ifversion ghec %} Additionally, the {% data variables.codespaces.serverless %} editor is not available on subdomains of {% data variables.enterprise.data_residency_site %}, such as `octocorp.ghe.com`.{% endif %} diff --git a/content/codespaces/troubleshooting/exporting-changes-to-a-branch.md b/content/codespaces/troubleshooting/exporting-changes-to-a-branch.md index 9f68f0c72914..30b1e0bc2b4b 100644 --- a/content/codespaces/troubleshooting/exporting-changes-to-a-branch.md +++ b/content/codespaces/troubleshooting/exporting-changes-to-a-branch.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Exporting changes contentType: reference +category: + - Troubleshoot codespaces --- ## About exporting changes diff --git a/content/codespaces/troubleshooting/github-codespaces-logs.md b/content/codespaces/troubleshooting/github-codespaces-logs.md index d78c1d53a62b..d6bb83a1b83a 100644 --- a/content/codespaces/troubleshooting/github-codespaces-logs.md +++ b/content/codespaces/troubleshooting/github-codespaces-logs.md @@ -8,6 +8,8 @@ shortTitle: Codespaces logs redirect_from: - /codespaces/troubleshooting/codespaces-logs contentType: reference +category: + - Troubleshoot codespaces --- Information on {% data variables.product.prodname_github_codespaces %} is output to various logs: diff --git a/content/codespaces/troubleshooting/troubleshooting-authentication-to-a-repository.md b/content/codespaces/troubleshooting/troubleshooting-authentication-to-a-repository.md index 2bb55d1725fd..bb680c2ef7e1 100644 --- a/content/codespaces/troubleshooting/troubleshooting-authentication-to-a-repository.md +++ b/content/codespaces/troubleshooting/troubleshooting-authentication-to-a-repository.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Authenticating to repositories contentType: reference +category: + - Troubleshoot codespaces --- When you create a codespace for a repository, you can generally use `git pull` and `git push` to pull and push changes to that repository without any additional authentication. However, occasionally you may see authentication errors when trying to run these operations. diff --git a/content/codespaces/troubleshooting/troubleshooting-creation-and-deletion-of-codespaces.md b/content/codespaces/troubleshooting/troubleshooting-creation-and-deletion-of-codespaces.md index fb507b4b389c..7bcceea7b381 100644 --- a/content/codespaces/troubleshooting/troubleshooting-creation-and-deletion-of-codespaces.md +++ b/content/codespaces/troubleshooting/troubleshooting-creation-and-deletion-of-codespaces.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Creation and deletion contentType: reference +category: + - Troubleshoot codespaces --- ## Creating codespaces diff --git a/content/codespaces/troubleshooting/troubleshooting-github-codespaces-clients.md b/content/codespaces/troubleshooting/troubleshooting-github-codespaces-clients.md index c90dbb92f2b2..9edf07522f2e 100644 --- a/content/codespaces/troubleshooting/troubleshooting-github-codespaces-clients.md +++ b/content/codespaces/troubleshooting/troubleshooting-github-codespaces-clients.md @@ -8,6 +8,8 @@ versions: redirect_from: - /codespaces/troubleshooting/troubleshooting-codespaces-clients contentType: reference +category: + - Troubleshoot codespaces --- {% webui %} diff --git a/content/codespaces/troubleshooting/troubleshooting-gpg-verification-for-github-codespaces.md b/content/codespaces/troubleshooting/troubleshooting-gpg-verification-for-github-codespaces.md index 72379e930b9c..16b70b9f8649 100644 --- a/content/codespaces/troubleshooting/troubleshooting-gpg-verification-for-github-codespaces.md +++ b/content/codespaces/troubleshooting/troubleshooting-gpg-verification-for-github-codespaces.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' contentType: reference +category: + - Troubleshoot codespaces --- If you enable GPG verification, {% data variables.product.prodname_github_codespaces %} automatically signs your commits in codespaces that you create from selected repositories. For more information, see [AUTOTITLE](/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces). diff --git a/content/codespaces/troubleshooting/troubleshooting-included-usage.md b/content/codespaces/troubleshooting/troubleshooting-included-usage.md index 47d1e998f36c..0aa4ac320c34 100644 --- a/content/codespaces/troubleshooting/troubleshooting-included-usage.md +++ b/content/codespaces/troubleshooting/troubleshooting-included-usage.md @@ -7,6 +7,8 @@ versions: fpt: '*' ghec: '*' contentType: reference +category: + - Get started --- Personal {% data variables.product.prodname_dotcom %} accounts include a quota of free use of {% data variables.product.prodname_github_codespaces %} every month. diff --git a/content/codespaces/troubleshooting/troubleshooting-personalization-for-codespaces.md b/content/codespaces/troubleshooting/troubleshooting-personalization-for-codespaces.md index 14e7dbce4c93..0fcd794f1525 100644 --- a/content/codespaces/troubleshooting/troubleshooting-personalization-for-codespaces.md +++ b/content/codespaces/troubleshooting/troubleshooting-personalization-for-codespaces.md @@ -9,6 +9,8 @@ shortTitle: Personalization redirect_from: - /codespaces/troubleshooting/troubleshooting-dotfiles-for-codespaces contentType: reference +category: + - Troubleshoot codespaces --- You can personalize {% data variables.product.prodname_github_codespaces %} by using a `dotfiles` repository on {% data variables.product.github %} or by using Settings Sync. For more information, see [AUTOTITLE](/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account). diff --git a/content/codespaces/troubleshooting/troubleshooting-port-forwarding-for-github-codespaces.md b/content/codespaces/troubleshooting/troubleshooting-port-forwarding-for-github-codespaces.md index 04d0304ad779..81a21b5cfae5 100644 --- a/content/codespaces/troubleshooting/troubleshooting-port-forwarding-for-github-codespaces.md +++ b/content/codespaces/troubleshooting/troubleshooting-port-forwarding-for-github-codespaces.md @@ -8,6 +8,8 @@ shortTitle: Port forwarding redirect_from: - /codespaces/troubleshooting/troubleshooting-port-forwarding-for-codespaces contentType: reference +category: + - Troubleshoot codespaces --- When an application running inside a codespace outputs a port to the console, {% data variables.product.prodname_github_codespaces %} detects the localhost URL pattern and automatically forwards the port. For more information, see [AUTOTITLE](/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace). diff --git a/content/codespaces/troubleshooting/troubleshooting-prebuilds.md b/content/codespaces/troubleshooting/troubleshooting-prebuilds.md index 05395a725c10..5486e0bbc715 100644 --- a/content/codespaces/troubleshooting/troubleshooting-prebuilds.md +++ b/content/codespaces/troubleshooting/troubleshooting-prebuilds.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' contentType: reference +category: + - Troubleshoot codespaces --- For more information about {% data variables.product.prodname_github_codespaces %} prebuilds, see [AUTOTITLE](/codespaces/prebuilding-your-codespaces). diff --git a/content/codespaces/troubleshooting/troubleshooting-your-connection-to-github-codespaces.md b/content/codespaces/troubleshooting/troubleshooting-your-connection-to-github-codespaces.md index 07f0417c6ede..569c9d73f5f0 100644 --- a/content/codespaces/troubleshooting/troubleshooting-your-connection-to-github-codespaces.md +++ b/content/codespaces/troubleshooting/troubleshooting-your-connection-to-github-codespaces.md @@ -8,6 +8,8 @@ shortTitle: Connection redirect_from: - /codespaces/troubleshooting/troubleshooting-your-connection-to-codespaces contentType: reference +category: + - Troubleshoot codespaces --- ## 503 codespace service unavailable diff --git a/content/codespaces/troubleshooting/working-with-support-for-github-codespaces.md b/content/codespaces/troubleshooting/working-with-support-for-github-codespaces.md index 06e74d697958..b8d0654dcec8 100644 --- a/content/codespaces/troubleshooting/working-with-support-for-github-codespaces.md +++ b/content/codespaces/troubleshooting/working-with-support-for-github-codespaces.md @@ -8,6 +8,8 @@ shortTitle: Working with support redirect_from: - /codespaces/troubleshooting/working-with-support-for-codespaces contentType: reference +category: + - Troubleshoot codespaces --- Before support can help you with problems with codespaces, you need to know the permanent name of the codespace and its codespaces ID (identifier). In addition, support may ask you to share some logs with them. For more information, see [AUTOTITLE](/codespaces/troubleshooting/github-codespaces-logs) and [AUTOTITLE](/support/learning-about-github-support/about-github-support). diff --git a/content/contributing/collaborating-on-github-docs/about-contributing-to-github-docs.md b/content/contributing/collaborating-on-github-docs/about-contributing-to-github-docs.md index b2b7f29d8d09..050ae2200f6d 100644 --- a/content/contributing/collaborating-on-github-docs/about-contributing-to-github-docs.md +++ b/content/contributing/collaborating-on-github-docs/about-contributing-to-github-docs.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- {% data variables.product.prodname_dotcom %} documentation is open source. Anyone can contribute to the docs in the public `docs` repository: https://github.com/github/docs. {% data variables.product.prodname_dotcom %} employees work on the documentation in a copy of this repository called `docs-internal`. The two repositories are automatically synced to keep them both up to date with changes merged into the `main` branch of either repository. For simplicity, we'll refer to "the documentation repository" in the articles about contributing to {% data variables.product.prodname_docs %}. diff --git a/content/contributing/collaborating-on-github-docs/label-reference.md b/content/contributing/collaborating-on-github-docs/label-reference.md index 35d937646649..cea6c0010877 100644 --- a/content/contributing/collaborating-on-github-docs/label-reference.md +++ b/content/contributing/collaborating-on-github-docs/label-reference.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- You can use labels to locate a particular type of issue. The examples below show some commonly used labels that can help you get started. Each label links to a filtered list of open issues in the github/docs repository. diff --git a/content/contributing/collaborating-on-github-docs/using-git-on-github-docs.md b/content/contributing/collaborating-on-github-docs/using-git-on-github-docs.md index ce987d00af70..6e08769174ef 100644 --- a/content/contributing/collaborating-on-github-docs/using-git-on-github-docs.md +++ b/content/contributing/collaborating-on-github-docs/using-git-on-github-docs.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- This article describes the process of creating a topic branch for the documentation repository, committing changes, and pushing your changes back up to the remote repository. diff --git a/content/contributing/collaborating-on-github-docs/using-the-content-linter.md b/content/contributing/collaborating-on-github-docs/using-the-content-linter.md index b9194efcdce3..96ae70481b39 100644 --- a/content/contributing/collaborating-on-github-docs/using-the-content-linter.md +++ b/content/contributing/collaborating-on-github-docs/using-the-content-linter.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- ## About the {% data variables.product.prodname_docs %} content linter diff --git a/content/contributing/collaborating-on-github-docs/using-the-todocs-placeholder-to-leave-notes.md b/content/contributing/collaborating-on-github-docs/using-the-todocs-placeholder-to-leave-notes.md index 56f69a40e487..0a3760c2acd1 100644 --- a/content/contributing/collaborating-on-github-docs/using-the-todocs-placeholder-to-leave-notes.md +++ b/content/contributing/collaborating-on-github-docs/using-the-todocs-placeholder-to-leave-notes.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- diff --git a/content/contributing/index.md b/content/contributing/index.md index 380738e37f35..91632945da15 100644 --- a/content/contributing/index.md +++ b/content/contributing/index.md @@ -2,20 +2,31 @@ title: Contributing to GitHub Docs documentation shortTitle: Contribute to GitHub Docs intro: 'Learn about how the {% data variables.product.prodname_docs %} team creates documentation and how you can contribute.' -layout: product-landing -versions: - feature: 'contributing' -featuredLinks: - startHere: +introLinks: + overview: /contributing/collaborating-on-github-docs/about-contributing-to-github-docs + quickstart: /contributing/writing-for-github-docs/best-practices-for-github-docs +changelog: + label: docs +layout: discovery-landing +includedCategories: + - Understand the GitHub approach to docs + - Follow the style guide and content model + - Write and format content + - Get set up to contribute +carousels: + recommended: + - /contributing/collaborating-on-github-docs/about-contributing-to-github-docs - /contributing/writing-for-github-docs/best-practices-for-github-docs - /contributing/style-guide-and-content-model/style-guide - /contributing/style-guide-and-content-model/about-the-content-model - - /contributing/collaborating-on-github-docs/about-contributing-to-github-docs -changelog: - label: docs + - /contributing/writing-for-github-docs/using-markdown-and-liquid-in-github-docs + - /contributing/writing-for-github-docs/templates +versions: + feature: 'contributing' children: - /writing-for-github-docs - /style-guide-and-content-model - /collaborating-on-github-docs - /setting-up-your-environment-to-work-on-github-docs +contentType: landing --- diff --git a/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md b/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md index 5fa3d6cd934b..c0a9c80fe2a7 100644 --- a/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md +++ b/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- ## About {% data variables.product.prodname_docs %} site structure diff --git a/content/contributing/setting-up-your-environment-to-work-on-github-docs/troubleshooting-your-environment.md b/content/contributing/setting-up-your-environment-to-work-on-github-docs/troubleshooting-your-environment.md index b2020611c9b7..1687db39a66c 100644 --- a/content/contributing/setting-up-your-environment-to-work-on-github-docs/troubleshooting-your-environment.md +++ b/content/contributing/setting-up-your-environment-to-work-on-github-docs/troubleshooting-your-environment.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- ## Troubleshooting tests that fail locally but pass in CI diff --git a/content/contributing/setting-up-your-environment-to-work-on-github-docs/working-on-github-docs-in-a-codespace.md b/content/contributing/setting-up-your-environment-to-work-on-github-docs/working-on-github-docs-in-a-codespace.md index e162ca75d180..53e3e975a1fe 100644 --- a/content/contributing/setting-up-your-environment-to-work-on-github-docs/working-on-github-docs-in-a-codespace.md +++ b/content/contributing/setting-up-your-environment-to-work-on-github-docs/working-on-github-docs-in-a-codespace.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get set up to contribute --- ## About {% data variables.product.prodname_github_codespaces %} diff --git a/content/contributing/style-guide-and-content-model/about-combining-multiple-content-types.md b/content/contributing/style-guide-and-content-model/about-combining-multiple-content-types.md index 30530621dcd5..0d38df9ed72f 100644 --- a/content/contributing/style-guide-and-content-model/about-combining-multiple-content-types.md +++ b/content/contributing/style-guide-and-content-model/about-combining-multiple-content-types.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- Often, it's helpful to group information in context to help people complete a complex task, understand a set of related tasks, or illustrate an entire workflow. Use longer articles combining content types to ensure people find contextual content in the right place. Longer articles also help eliminate duplication of content and prepare content to scale as more options are added to the product. People most often need longer articles while actively using the product, and they may need to consult the article at different points on their journey. diff --git a/content/contributing/style-guide-and-content-model/about-the-content-model.md b/content/contributing/style-guide-and-content-model/about-the-content-model.md index 85736888bc74..e3826af47cb8 100644 --- a/content/contributing/style-guide-and-content-model/about-the-content-model.md +++ b/content/contributing/style-guide-and-content-model/about-the-content-model.md @@ -8,6 +8,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- Our content model explains the purpose of each type of content we create within {% data variables.product.prodname_docs %}, and what to include when you write or update an article. We use a content model to ensure that our content consistently, clearly, and comprehensively communicates the information that people need to achieve their goals with {% data variables.product.prodname_dotcom %}. diff --git a/content/contributing/style-guide-and-content-model/conceptual-content-type.md b/content/contributing/style-guide-and-content-model/conceptual-content-type.md index 01644aa69f7a..9d1d311d9e70 100644 --- a/content/contributing/style-guide-and-content-model/conceptual-content-type.md +++ b/content/contributing/style-guide-and-content-model/conceptual-content-type.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- Conceptual content helps people understand a feature or topic by providing a clear, high-level overview, explanation of how the feature or topic can help them on their journey, and context like use cases or examples. diff --git a/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md b/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md index 4ebaeb0c69d2..bb76fc80cf0d 100644 --- a/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md +++ b/content/contributing/style-guide-and-content-model/contents-of-a-github-docs-article.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- ## About the structure of an article diff --git a/content/contributing/style-guide-and-content-model/procedural-content-type.md b/content/contributing/style-guide-and-content-model/procedural-content-type.md index 5bed0faaac2c..0d0e44221db1 100644 --- a/content/contributing/style-guide-and-content-model/procedural-content-type.md +++ b/content/contributing/style-guide-and-content-model/procedural-content-type.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- Procedural content helps people complete a task from start to finish while they are using {% data variables.product.prodname_dotcom %}. diff --git a/content/contributing/style-guide-and-content-model/quickstart-content-type.md b/content/contributing/style-guide-and-content-model/quickstart-content-type.md index f6bf43ba7014..a3ff5925456a 100644 --- a/content/contributing/style-guide-and-content-model/quickstart-content-type.md +++ b/content/contributing/style-guide-and-content-model/quickstart-content-type.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- Quickstarts enable people to quickly complete a discrete, focused task by illustrating a workflow with only essential steps, in about five minutes or 600 words. Quickstarts can be used for quickly getting set up with a new tool, or for quickly completing another task. For more complex tasks, use a tutorial. diff --git a/content/contributing/style-guide-and-content-model/referential-content-type.md b/content/contributing/style-guide-and-content-model/referential-content-type.md index 33295a5af844..28763a11023b 100644 --- a/content/contributing/style-guide-and-content-model/referential-content-type.md +++ b/content/contributing/style-guide-and-content-model/referential-content-type.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- We create referential articles and referential sections within other articles. diff --git a/content/contributing/style-guide-and-content-model/release-note-content-type.md b/content/contributing/style-guide-and-content-model/release-note-content-type.md index ed0465b4f404..9a6cbec11777 100644 --- a/content/contributing/style-guide-and-content-model/release-note-content-type.md +++ b/content/contributing/style-guide-and-content-model/release-note-content-type.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Follow the style guide and content model --- Good release notes provide administrators the necessary information to plan system upgrades in environments that require change control, and support end users who want to understand and prepare to use new {% data variables.product.prodname_dotcom %} features and functionality. diff --git a/content/contributing/style-guide-and-content-model/style-guide.md b/content/contributing/style-guide-and-content-model/style-guide.md index 40475487708c..ae2dbdfdc2c9 100644 --- a/content/contributing/style-guide-and-content-model/style-guide.md +++ b/content/contributing/style-guide-and-content-model/style-guide.md @@ -7,6 +7,8 @@ versions: ghes: '*' redirect_from: - /contributing/writing-for-github-docs/style-guide +category: + - Follow the style guide and content model --- \ No newline at end of file + diff --git a/content/graphql/overview/changelog.md b/content/graphql/overview/changelog.md index 14f9a546256a..11f8acc59920 100644 --- a/content/graphql/overview/changelog.md +++ b/content/graphql/overview/changelog.md @@ -6,6 +6,8 @@ redirect_from: versions: fpt: '*' autogenerated: graphql +category: + - Understand API changes and limits --- Breaking changes include changes that will break existing queries or could affect the runtime behavior of clients. For a list of breaking changes and when they will occur, see our [breaking changes log](/graphql/overview/breaking-changes). diff --git a/content/graphql/overview/public-schema.md b/content/graphql/overview/public-schema.md index 46787e8e2fd9..77f709057625 100644 --- a/content/graphql/overview/public-schema.md +++ b/content/graphql/overview/public-schema.md @@ -7,6 +7,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Get started and make API calls --- You can [perform introspection](/graphql/guides/introduction-to-graphql#discovering-the-graphql-api) against the GraphQL API directly. diff --git a/content/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api.md b/content/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api.md index 2440bd221b7d..ced0dded7b16 100644 --- a/content/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api.md +++ b/content/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api.md @@ -10,6 +10,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Understand API changes and limits --- ## Primary rate limit diff --git a/content/graphql/reference/enums.md b/content/graphql/reference/enums.md index 15636f738c27..d04dd153d9c3 100644 --- a/content/graphql/reference/enums.md +++ b/content/graphql/reference/enums.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About enums diff --git a/content/graphql/reference/input-objects.md b/content/graphql/reference/input-objects.md index 72c668252f44..6bd3d115eef7 100644 --- a/content/graphql/reference/input-objects.md +++ b/content/graphql/reference/input-objects.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About input objects diff --git a/content/graphql/reference/interfaces.md b/content/graphql/reference/interfaces.md index ca434debe741..f3ed03616a9d 100644 --- a/content/graphql/reference/interfaces.md +++ b/content/graphql/reference/interfaces.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About interfaces diff --git a/content/graphql/reference/mutations.md b/content/graphql/reference/mutations.md index d2426ff8092e..475402c1bd7a 100644 --- a/content/graphql/reference/mutations.md +++ b/content/graphql/reference/mutations.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About mutations diff --git a/content/graphql/reference/objects.md b/content/graphql/reference/objects.md index a47b68f2924b..6b5d7acae666 100644 --- a/content/graphql/reference/objects.md +++ b/content/graphql/reference/objects.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About objects diff --git a/content/graphql/reference/queries.md b/content/graphql/reference/queries.md index 6cbce2c391f7..40ee86b582f9 100644 --- a/content/graphql/reference/queries.md +++ b/content/graphql/reference/queries.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About queries diff --git a/content/graphql/reference/scalars.md b/content/graphql/reference/scalars.md index 24f6bdb50ec5..7ff9cd072004 100644 --- a/content/graphql/reference/scalars.md +++ b/content/graphql/reference/scalars.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About scalars diff --git a/content/graphql/reference/unions.md b/content/graphql/reference/unions.md index 36b46b46e8c3..904dbe3861bf 100644 --- a/content/graphql/reference/unions.md +++ b/content/graphql/reference/unions.md @@ -9,6 +9,8 @@ versions: ghec: '*' ghes: '*' autogenerated: graphql +category: + - Explore the schema reference --- ## About unions diff --git a/content/sponsors/getting-started-with-github-sponsors/about-github-sponsors.md b/content/sponsors/getting-started-with-github-sponsors/about-github-sponsors.md index 9b7d0ca644b4..b334311a7d5e 100644 --- a/content/sponsors/getting-started-with-github-sponsors/about-github-sponsors.md +++ b/content/sponsors/getting-started-with-github-sponsors/about-github-sponsors.md @@ -8,6 +8,8 @@ versions: fpt: '*' ghec: '*' contentType: concepts +category: + - Understand sponsorships --- ## About {% data variables.product.prodname_sponsors %} diff --git a/content/sponsors/getting-started-with-github-sponsors/navigating-your-sponsors-dashboard.md b/content/sponsors/getting-started-with-github-sponsors/navigating-your-sponsors-dashboard.md index de31d0d75f2d..5bacedc0844f 100644 --- a/content/sponsors/getting-started-with-github-sponsors/navigating-your-sponsors-dashboard.md +++ b/content/sponsors/getting-started-with-github-sponsors/navigating-your-sponsors-dashboard.md @@ -5,6 +5,8 @@ versions: fpt: '*' ghec: '*' contentType: concepts +category: + - Understand sponsorships --- ## About your Sponsors dashboard diff --git a/content/sponsors/getting-started-with-github-sponsors/quickstart-for-finding-contributors-to-sponsor.md b/content/sponsors/getting-started-with-github-sponsors/quickstart-for-finding-contributors-to-sponsor.md index d9dfd59ca8c0..b02e1bec9ceb 100644 --- a/content/sponsors/getting-started-with-github-sponsors/quickstart-for-finding-contributors-to-sponsor.md +++ b/content/sponsors/getting-started-with-github-sponsors/quickstart-for-finding-contributors-to-sponsor.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Quickstart contentType: get-started +category: + - Fund open source work --- ## Explore projects you depend on diff --git a/content/sponsors/index.md b/content/sponsors/index.md index b2e8294b773b..fae7d5208c38 100644 --- a/content/sponsors/index.md +++ b/content/sponsors/index.md @@ -3,35 +3,34 @@ title: "{% data variables.product.prodname_sponsors %} documentation" shortTitle: "{% data variables.product.prodname_sponsors %}" intro: 'Invest in the open source projects you depend on, support digital infrastructure, and make open source careers possible by sponsoring open source contributors and their projects. Build a {% data variables.product.prodname_sponsors %} profile and receive compensation for your open source work.' introLinks: + overview: /sponsors/getting-started-with-github-sponsors/about-github-sponsors quickstart: /sponsors/getting-started-with-github-sponsors/quickstart-for-finding-contributors-to-sponsor redirect_from: - /categories/supporting-the-open-source-community-with-github-sponsors - /github/supporting-the-open-source-community-with-github-sponsors changelog: label: sponsors -examples_source: data/product-examples/sponsors/user-examples.yml -featuredLinks: - startHere: - - /sponsors/sponsoring-open-source-contributors/managing-your-sponsorship - - /sponsors/sponsoring-open-source-contributors/attributing-sponsorships-to-your-organization - - /sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors - guideCards: - - /sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account - - /sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-organization - - /sponsors/integrating-with-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account - popular: - - /sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github - - /sponsors/getting-started-with-github-sponsors/about-github-sponsors - - /sponsors/receiving-sponsorships-through-github-sponsors/tax-information-for-github-sponsors - - /sponsors/sponsoring-open-source-contributors - - /sponsors/receiving-sponsorships-through-github-sponsors/about-github-sponsors-for-open-source-contributors -layout: product-landing +layout: discovery-landing +contentType: landing versions: fpt: '*' ghec: '*' communityRedirect: name: Provide GitHub Feedback href: 'https://github.com/orgs/community/discussions/categories/sponsors' +includedCategories: + - Understand sponsorships + - Fund open source work + - Set up to receive sponsorships + - Manage your sponsored account +carousels: + recommended: + - /sponsors/getting-started-with-github-sponsors/about-github-sponsors + - /sponsors/getting-started-with-github-sponsors/quickstart-for-finding-contributors-to-sponsor + - /sponsors/receiving-sponsorships-through-github-sponsors/about-github-sponsors-for-open-source-contributors + - /sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github + - /sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account + - /sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors children: - /getting-started-with-github-sponsors - /sponsoring-open-source-contributors @@ -39,7 +38,3 @@ children: - /integrating-with-github-sponsors - /guides --- - - - - diff --git a/content/sponsors/integrating-with-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account.md b/content/sponsors/integrating-with-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account.md index e683bd8b59e4..2ffd830047aa 100644 --- a/content/sponsors/integrating-with-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account.md +++ b/content/sponsors/integrating-with-github-sponsors/configuring-webhooks-for-events-in-your-sponsored-account.md @@ -8,6 +8,8 @@ versions: ghec: '*' shortTitle: Webhooks for events contentType: how-tos +category: + - Manage your sponsored account --- ## About webhooks for events in your sponsored account diff --git a/content/sponsors/integrating-with-github-sponsors/getting-started-with-the-sponsors-graphql-api.md b/content/sponsors/integrating-with-github-sponsors/getting-started-with-the-sponsors-graphql-api.md index a4fda4a49295..be0a41af622f 100644 --- a/content/sponsors/integrating-with-github-sponsors/getting-started-with-the-sponsors-graphql-api.md +++ b/content/sponsors/integrating-with-github-sponsors/getting-started-with-the-sponsors-graphql-api.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Sponsors GraphQL API contentType: concepts +category: + - Manage your sponsored account --- To get started with the GraphQL API, see [AUTOTITLE](/graphql/guides/introduction-to-graphql). diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/about-github-sponsors-for-open-source-contributors.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/about-github-sponsors-for-open-source-contributors.md index e8067844190f..7be536756e1c 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/about-github-sponsors-for-open-source-contributors.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/about-github-sponsors-for-open-source-contributors.md @@ -9,6 +9,8 @@ versions: ghec: '*' shortTitle: Open source contributors contentType: concepts +category: + - Understand sponsorships --- ## Joining {% data variables.product.prodname_sponsors %} diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors.md index 3d4c7ede551a..a3bb20e8424a 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors.md @@ -8,6 +8,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Manage your sponsored account --- ## About sponsorship updates diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/delete-stripe-account.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/delete-stripe-account.md index 76541c27087a..3e563708aabf 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/delete-stripe-account.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/delete-stripe-account.md @@ -5,6 +5,8 @@ intro: 'Learn how to delete a Stripe Connect account that you connected to {% da versions: fpt: '*' ghec: '*' +category: + - Manage your sponsored account --- ## Prerequisites diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/disabling-your-github-sponsors-account.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/disabling-your-github-sponsors-account.md index e2954ce3e9cd..f8c715e07432 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/disabling-your-github-sponsors-account.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/disabling-your-github-sponsors-account.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Disable your account contentType: how-tos +category: + - Manage your sponsored account --- If you are receiving sponsorship payments, you'll need to contact GitHub Support to disable your {% data variables.product.prodname_sponsors %} account. diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors.md index 60648c9331c9..3ef412da0c95 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors.md @@ -10,6 +10,8 @@ versions: ghec: '*' shortTitle: Edit profile details contentType: how-tos +category: + - Set up to receive sponsorships --- ## About sponsor profiles diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon.md index 8216617c9d61..a3bafb61cc14 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Enable Patreon sponsorships contentType: how-tos +category: + - Set up to receive sponsorships --- ## Prerequisites diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors.md index c6df6935f284..ebc338b7b1bc 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-payouts-from-github-sponsors.md @@ -9,6 +9,8 @@ versions: ghec: '*' shortTitle: Manage payouts contentType: how-tos +category: + - Manage your sponsored account --- ## About payouts from {% data variables.product.prodname_sponsors %} diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-goal.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-goal.md index f7fbf729bde2..616627a0a7b7 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-goal.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-goal.md @@ -9,6 +9,8 @@ versions: ghec: '*' shortTitle: Manage sponsor goals contentType: how-tos +category: + - Manage your sponsored account --- ## About sponsorship goals diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers.md index f1abc3dd8ef7..0fc68545aefc 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers.md @@ -10,6 +10,8 @@ versions: ghec: '*' shortTitle: Manage payment tiers contentType: how-tos +category: + - Set up to receive sponsorships --- ## About sponsorship tiers diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-organization.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-organization.md index fa8b7007cb4a..afcadb7bec5c 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-organization.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-organization.md @@ -11,6 +11,8 @@ versions: ghec: '*' shortTitle: Set up for organization contentType: how-tos +category: + - Set up to receive sponsorships --- ## Joining {% data variables.product.prodname_sponsors %} diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account.md index c3ad50e94b0e..c81068bc0ce8 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account.md @@ -11,6 +11,8 @@ versions: ghec: '*' shortTitle: Set up for personal account contentType: how-tos +category: + - Set up to receive sponsorships --- ## Joining {% data variables.product.prodname_sponsors %} diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/tax-information-for-github-sponsors.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/tax-information-for-github-sponsors.md index 1599a4cd77ff..de791ddf63c0 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/tax-information-for-github-sponsors.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/tax-information-for-github-sponsors.md @@ -9,6 +9,8 @@ versions: ghec: '*' shortTitle: Tax information contentType: concepts +category: + - Understand sponsorships --- ## W-9/W-8 tax forms diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/unlinking-your-patreon-account-from-your-github-sponsors-profile.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/unlinking-your-patreon-account-from-your-github-sponsors-profile.md index 951245185148..328064271294 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/unlinking-your-patreon-account-from-your-github-sponsors-profile.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/unlinking-your-patreon-account-from-your-github-sponsors-profile.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Unlink Patreon contentType: how-tos +category: + - Manage your sponsored account --- > [!NOTE] diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/unpublishing-your-github-sponsors-profile.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/unpublishing-your-github-sponsors-profile.md index bd743427b4c2..3c55676ccce4 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/unpublishing-your-github-sponsors-profile.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/unpublishing-your-github-sponsors-profile.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Unpublish your profile contentType: how-tos +category: + - Manage your sponsored account --- If you have sponsors, you'll need to contact GitHub Support to help you unpublish your {% data variables.product.prodname_sponsors %} account. diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md index d5f701cee4c3..3007268aa3d4 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md @@ -6,6 +6,8 @@ versions: ghec: '*' shortTitle: Using a fiscal host contentType: how-tos +category: + - Set up to receive sponsorships --- ## About using a fiscal host to receive {% data variables.product.prodname_sponsors %} payouts diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/viewing-your-sponsors-and-sponsorships.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/viewing-your-sponsors-and-sponsorships.md index c6d2490fcbe0..a26a6a051730 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/viewing-your-sponsors-and-sponsorships.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/viewing-your-sponsors-and-sponsorships.md @@ -9,6 +9,8 @@ versions: ghec: '*' shortTitle: View sponsors & sponsorships contentType: how-tos +category: + - Manage your sponsored account --- ## About sponsors and sponsorships diff --git a/content/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes.md b/content/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes.md index 0903eaa3b047..86b167cd5144 100644 --- a/content/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes.md +++ b/content/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes.md @@ -7,6 +7,8 @@ versions: shortTitle: About sponsorships allowTitleToDifferFromFilename: true contentType: concepts +category: + - Understand sponsorships --- ## About sponsorships diff --git a/content/sponsors/sponsoring-open-source-contributors/attributing-sponsorships-to-your-organization.md b/content/sponsors/sponsoring-open-source-contributors/attributing-sponsorships-to-your-organization.md index 5652ccdc501e..fec35495b9b2 100644 --- a/content/sponsors/sponsoring-open-source-contributors/attributing-sponsorships-to-your-organization.md +++ b/content/sponsors/sponsoring-open-source-contributors/attributing-sponsorships-to-your-organization.md @@ -9,6 +9,8 @@ versions: permissions: People who are organization owners of both organizations can attribute one organization's sponsorships to another organization. shortTitle: Attribute sponsorships contentType: how-tos +category: + - Fund open source work --- 1. Navigate to the organization whose sponsorships you want to attribute to another organization. diff --git a/content/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship.md b/content/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship.md index 3b760b320cf8..a3c562704e9b 100644 --- a/content/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship.md +++ b/content/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship.md @@ -8,6 +8,8 @@ versions: fpt: '*' ghec: '*' contentType: how-tos +category: + - Manage your sponsored account --- ## Managing the privacy setting for your sponsorship diff --git a/content/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice.md b/content/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice.md index bceecbe3febc..68f45fb26457 100644 --- a/content/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice.md +++ b/content/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice.md @@ -8,6 +8,8 @@ versions: redirect_from: - /sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-via-invoice contentType: how-tos +category: + - Fund open source work --- ## About paying for {% data variables.product.prodname_sponsors %} by invoice diff --git a/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github.md b/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github.md index 929b34c18a89..8d95bbbdbe8d 100644 --- a/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github.md +++ b/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-github.md @@ -13,6 +13,8 @@ versions: permissions: '{% data reusables.sponsors.sponsorship-permissions %}' shortTitle: Sponsor through {% data variables.product.prodname_dotcom %} contentType: how-tos +category: + - Fund open source work --- ## About sponsorships with payments through {% data variables.product.prodname_dotcom %} diff --git a/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-patreon.md b/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-patreon.md index 75d16a74be60..b4ece992dedc 100644 --- a/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-patreon.md +++ b/content/sponsors/sponsoring-open-source-contributors/sponsoring-an-open-source-contributor-through-patreon.md @@ -7,6 +7,8 @@ versions: permissions: '{% data reusables.sponsors.sponsorship-permissions %}' shortTitle: Sponsor through Patreon contentType: how-tos +category: + - Fund open source work --- ## About sponsoring through Patreon diff --git a/content/sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-github.md b/content/sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-github.md index a6cdc93299b4..2b230e18a8f6 100644 --- a/content/sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-github.md +++ b/content/sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-github.md @@ -8,6 +8,8 @@ shortTitle: Unlink Patreon redirect_from: - /sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-your-github-account contentType: how-tos +category: + - Fund open source work --- > [!NOTE] diff --git a/content/subscriptions-and-notifications/concepts/about-notifications.md b/content/subscriptions-and-notifications/concepts/about-notifications.md index 0b7b61087117..04d635b9179a 100644 --- a/content/subscriptions-and-notifications/concepts/about-notifications.md +++ b/content/subscriptions-and-notifications/concepts/about-notifications.md @@ -14,6 +14,8 @@ versions: ghes: '*' ghec: '*' contentType: concepts +category: + - Understand notifications --- ## Notifications and subscriptions diff --git a/content/subscriptions-and-notifications/concepts/scheduled-reminders.md b/content/subscriptions-and-notifications/concepts/scheduled-reminders.md index b42375658721..6b392a175907 100644 --- a/content/subscriptions-and-notifications/concepts/scheduled-reminders.md +++ b/content/subscriptions-and-notifications/concepts/scheduled-reminders.md @@ -7,6 +7,8 @@ versions: contentType: concepts redirect_from: - /account-and-profile/concepts/scheduled-reminders +category: + - Understand notifications --- Scheduled reminders are used to make sure that users focus on the most important review requests that require their attention. Scheduled reminders for pull requests will send a message to you in Slack with open pull requests needing your review at a specified time. For example, you can setup scheduled reminders to send you a message in Slack every morning at 10 AM with pull requests needing to be reviewed by you or one of your teams. diff --git a/content/subscriptions-and-notifications/get-started/configuring-notifications.md b/content/subscriptions-and-notifications/get-started/configuring-notifications.md index 8e7e997153a5..ab676afa3370 100644 --- a/content/subscriptions-and-notifications/get-started/configuring-notifications.md +++ b/content/subscriptions-and-notifications/get-started/configuring-notifications.md @@ -22,6 +22,8 @@ versions: ghes: '*' ghec: '*' contentType: get-started +category: + - Set up and customize delivery --- ## Notification delivery options diff --git a/content/subscriptions-and-notifications/how-tos/managing-github-actions-notifications.md b/content/subscriptions-and-notifications/how-tos/managing-github-actions-notifications.md index 99cbb9257a00..a263a4d15e2b 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-github-actions-notifications.md +++ b/content/subscriptions-and-notifications/how-tos/managing-github-actions-notifications.md @@ -7,6 +7,8 @@ versions: ghes: '*' shortTitle: Manage Actions notifications contentType: how-tos +category: + - Set up and customize delivery --- For repositories that are set up with {% data variables.product.prodname_actions %} and that you are watching, you can choose how you want to receive workflow run updates. diff --git a/content/subscriptions-and-notifications/how-tos/managing-marketing-emails-from-github.md b/content/subscriptions-and-notifications/how-tos/managing-marketing-emails-from-github.md index 2d7ae4f8350e..ff57cf804220 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-marketing-emails-from-github.md +++ b/content/subscriptions-and-notifications/how-tos/managing-marketing-emails-from-github.md @@ -14,6 +14,8 @@ versions: ghec: '*' shortTitle: Manage marketing emails contentType: how-tos +category: + - Set up and customize delivery --- ## Managing {% data variables.product.prodname_dotcom %} marketing emails diff --git a/content/subscriptions-and-notifications/how-tos/managing-organization-notifications.md b/content/subscriptions-and-notifications/how-tos/managing-organization-notifications.md index 03d6e9bc8ee8..94f96550cde4 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-organization-notifications.md +++ b/content/subscriptions-and-notifications/how-tos/managing-organization-notifications.md @@ -7,6 +7,8 @@ versions: ghes: '*' shortTitle: Manage organization notifications contentType: how-tos +category: + - Set up and customize delivery --- ## Organization alerts notification options diff --git a/content/subscriptions-and-notifications/how-tos/managing-security-notifications.md b/content/subscriptions-and-notifications/how-tos/managing-security-notifications.md index ba7343e3bd38..8bc38d3ad566 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-security-notifications.md +++ b/content/subscriptions-and-notifications/how-tos/managing-security-notifications.md @@ -7,6 +7,8 @@ versions: ghes: '*' shortTitle: Manage security notifications contentType: how-tos +category: + - Set up and customize delivery --- ## {% data variables.product.prodname_dependabot_alerts %} notification options diff --git a/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/managing-your-subscriptions.md b/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/managing-your-subscriptions.md index 8262fde9f917..9b96b83281ba 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/managing-your-subscriptions.md +++ b/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/managing-your-subscriptions.md @@ -12,6 +12,8 @@ redirect_from: - /subscriptions-and-notifications/managing-subscriptions-for-activity-on-github/managing-your-subscriptions shortTitle: Manage your subscriptions contentType: how-tos +category: + - Manage subscriptions and triage your inbox --- To help you understand your subscriptions and decide whether to unsubscribe, see [AUTOTITLE](/subscriptions-and-notifications/managing-subscriptions-for-activity-on-github/viewing-your-subscriptions). diff --git a/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/viewing-your-subscriptions.md b/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/viewing-your-subscriptions.md index c58116cfb039..f347890ab8ca 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/viewing-your-subscriptions.md +++ b/content/subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/viewing-your-subscriptions.md @@ -24,6 +24,8 @@ versions: ghec: '*' shortTitle: View subscriptions contentType: how-tos +category: + - Manage subscriptions and triage your inbox --- You receive notifications for your subscriptions of ongoing activity on {% data variables.product.github %}. There are many reasons you can be subscribed to a conversation. For more information, see [AUTOTITLE](/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/about-notifications#notifications-and-subscriptions). diff --git a/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md b/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md index c7c84f70946b..b82d356d8cd9 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md +++ b/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md @@ -13,6 +13,8 @@ redirect_from: - /account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/managing-your-scheduled-reminders shortTitle: Manage scheduled reminders contentType: how-tos +category: + - Set up and customize delivery --- ## Creating scheduled reminders for your personal account diff --git a/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-notifications-from-your-inbox.md b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-notifications-from-your-inbox.md index e59e9a5a0ae5..d8bf6f273d84 100644 --- a/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-notifications-from-your-inbox.md +++ b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-notifications-from-your-inbox.md @@ -14,6 +14,8 @@ versions: ghec: '*' shortTitle: Manage from your inbox contentType: how-tos +category: + - Manage subscriptions and triage your inbox --- ## Prerequisites diff --git a/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/triaging-a-single-notification.md b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/triaging-a-single-notification.md index 367c6915e49c..f9140e65356c 100644 --- a/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/triaging-a-single-notification.md +++ b/content/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/triaging-a-single-notification.md @@ -12,6 +12,8 @@ redirect_from: - /subscriptions-and-notifications/viewing-and-triaging-notifications/triaging-a-single-notification shortTitle: Triage a notification contentType: how-tos +category: + - Manage subscriptions and triage your inbox --- ## Saving a single notification diff --git a/content/subscriptions-and-notifications/index.md b/content/subscriptions-and-notifications/index.md index 3d116b9742a5..d8ef25c0e18d 100644 --- a/content/subscriptions-and-notifications/index.md +++ b/content/subscriptions-and-notifications/index.md @@ -7,14 +7,24 @@ redirect_from: - /categories/receiving-notifications-about-activity-on-github - /github/managing-subscriptions-and-notifications-on-github - /account-and-profile/managing-subscriptions-and-notifications-on-github -layout: product-landing -featuredLinks: - startHere: - - /subscriptions-and-notifications/concepts/about-notifications - popular: - - /subscriptions-and-notifications/get-started/configuring-notifications +introLinks: + overview: /subscriptions-and-notifications/concepts/about-notifications + quickstart: /subscriptions-and-notifications/get-started/configuring-notifications changelog: label: notifications +layout: discovery-landing +includedCategories: + - Understand notifications + - Set up and customize delivery + - Manage subscriptions and triage your inbox +carousels: + recommended: + - /subscriptions-and-notifications/concepts/about-notifications + - /subscriptions-and-notifications/get-started/configuring-notifications + - /subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-notifications-from-your-inbox + - /subscriptions-and-notifications/how-tos/managing-subscriptions-for-activity-on-github/managing-your-subscriptions + - /subscriptions-and-notifications/tutorials/customizing-a-workflow-for-triaging-your-notifications + - /subscriptions-and-notifications/how-tos/managing-security-notifications versions: fpt: '*' ghes: '*' @@ -28,4 +38,3 @@ children: shortTitle: Subscriptions & notifications contentType: landing --- - diff --git a/content/subscriptions-and-notifications/reference/email-notification-headers.md b/content/subscriptions-and-notifications/reference/email-notification-headers.md index 146f7b1cdc09..87e74c3fd209 100644 --- a/content/subscriptions-and-notifications/reference/email-notification-headers.md +++ b/content/subscriptions-and-notifications/reference/email-notification-headers.md @@ -6,6 +6,8 @@ versions: ghes: '*' ghec: '*' contentType: reference +category: + - Understand notifications --- Each email notification that {% data variables.product.prodname_dotcom %} sends contains header information. The header information in every email is consistent, so you can use it in your email client to filter or forward all {% data variables.product.prodname_dotcom %} notifications, or certain types of {% data variables.product.prodname_dotcom %} notifications. diff --git a/content/subscriptions-and-notifications/reference/inbox-filters.md b/content/subscriptions-and-notifications/reference/inbox-filters.md index 51239439fbd3..c7f19d1b934e 100644 --- a/content/subscriptions-and-notifications/reference/inbox-filters.md +++ b/content/subscriptions-and-notifications/reference/inbox-filters.md @@ -6,6 +6,8 @@ versions: ghes: '*' ghec: '*' contentType: reference +category: + - Understand notifications --- You can create custom filters for your inbox using the following supported filters. For more information about creating custom filters, see [AUTOTITLE](/subscriptions-and-notifications/how-tos/viewing-and-triaging-notifications/managing-notifications-from-your-inbox#customizing-your-inbox-with-custom-filters). diff --git a/content/subscriptions-and-notifications/reference/types-of-emails-github-sends.md b/content/subscriptions-and-notifications/reference/types-of-emails-github-sends.md index 03f44d2942e1..2106c828a0a1 100644 --- a/content/subscriptions-and-notifications/reference/types-of-emails-github-sends.md +++ b/content/subscriptions-and-notifications/reference/types-of-emails-github-sends.md @@ -13,6 +13,8 @@ versions: ghec: '*' shortTitle: Emails from GitHub contentType: reference +category: + - Understand notifications --- ## Notification emails diff --git a/content/subscriptions-and-notifications/tutorials/customizing-a-workflow-for-triaging-your-notifications.md b/content/subscriptions-and-notifications/tutorials/customizing-a-workflow-for-triaging-your-notifications.md index 5e21cf7d47ab..0a65f3dbae31 100644 --- a/content/subscriptions-and-notifications/tutorials/customizing-a-workflow-for-triaging-your-notifications.md +++ b/content/subscriptions-and-notifications/tutorials/customizing-a-workflow-for-triaging-your-notifications.md @@ -12,6 +12,8 @@ redirect_from: - /subscriptions-and-notifications/viewing-and-triaging-notifications/customizing-a-workflow-for-triaging-your-notifications shortTitle: Triage your notifications contentType: tutorials +category: + - Manage subscriptions and triage your inbox --- ## Starting your inbox triage diff --git a/content/support/contacting-github-support/creating-a-support-ticket.md b/content/support/contacting-github-support/creating-a-support-ticket.md index 6b7968e7552b..ff0a6b40bbf7 100644 --- a/content/support/contacting-github-support/creating-a-support-ticket.md +++ b/content/support/contacting-github-support/creating-a-support-ticket.md @@ -19,6 +19,8 @@ redirect_from: - /admin/enterprise-support/receiving-help-from-github-support/submitting-a-ticket - /articles/submitting-a-ticket - /github/working-with-github-support/submitting-a-ticket +category: + - Contact GitHub --- ## About support tickets diff --git a/content/support/contacting-github-support/getting-your-enterprise-started-with-the-github-support-portal.md b/content/support/contacting-github-support/getting-your-enterprise-started-with-the-github-support-portal.md index 7595a1aca607..e2fad09fbccf 100644 --- a/content/support/contacting-github-support/getting-your-enterprise-started-with-the-github-support-portal.md +++ b/content/support/contacting-github-support/getting-your-enterprise-started-with-the-github-support-portal.md @@ -7,6 +7,8 @@ versions: ghes: '*' redirect_from: - /support/contacting-github-support/getting-started-with-the-github-support-portal +category: + - Contact GitHub --- ## About the {% data variables.contact.enterprise_portal %} for enterprises diff --git a/content/support/contacting-github-support/providing-data-to-github-support.md b/content/support/contacting-github-support/providing-data-to-github-support.md index eb74fd14a450..6921766c8d28 100644 --- a/content/support/contacting-github-support/providing-data-to-github-support.md +++ b/content/support/contacting-github-support/providing-data-to-github-support.md @@ -12,6 +12,8 @@ redirect_from: - /enterprise/admin/enterprise-support/providing-data-to-github-support - /admin/enterprise-support/providing-data-to-github-support - /admin/enterprise-support/receiving-help-from-github-support/providing-data-to-github-support +category: + - Contact GitHub --- ## About diagnostic files and support bundles diff --git a/content/support/contacting-github-support/using-copilot-in-github-support.md b/content/support/contacting-github-support/using-copilot-in-github-support.md index 3d7cd4678c6f..6817fe7c76ff 100644 --- a/content/support/contacting-github-support/using-copilot-in-github-support.md +++ b/content/support/contacting-github-support/using-copilot-in-github-support.md @@ -8,6 +8,8 @@ versions: ghec: '*' ghes: '*' shortTitle: Using Copilot in GitHub Support +category: + - Contact GitHub --- ## About {% data variables.copilot.copilot_in_support %} diff --git a/content/support/contacting-github-support/viewing-and-updating-support-tickets.md b/content/support/contacting-github-support/viewing-and-updating-support-tickets.md index 9026479ccafd..07bfd4b8a0bf 100644 --- a/content/support/contacting-github-support/viewing-and-updating-support-tickets.md +++ b/content/support/contacting-github-support/viewing-and-updating-support-tickets.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghec: '*' ghes: '*' +category: + - Contact GitHub --- ## About ticket management diff --git a/content/support/index.md b/content/support/index.md index 3f6fcc0e90a0..6975849a269b 100644 --- a/content/support/index.md +++ b/content/support/index.md @@ -1,7 +1,7 @@ --- title: GitHub Support documentation shortTitle: GitHub Support -layout: product-landing +layout: discovery-landing intro: 'GitHub offers different levels of support with each product, including community forum support and limited email support for everyone, full email support for all paid products, and 24/7 email and callback support with a service level agreement (SLA) if your account includes {% data variables.contact.premium_support %}.' versions: fpt: '*' @@ -19,14 +19,15 @@ children: - sharing-feedback-with-github introLinks: overview: /support/learning-about-github-support/about-github-support -featuredLinks: - startHere: - - /support/contacting-github-support/creating-a-support-ticket - - /support/contacting-github-support/viewing-and-updating-support-tickets - - '{% ifversion ghes or ghec %}/support/learning-about-github-support/about-ticket-priority{% endif %}' - - '{% ifversion ghes %}/support/contacting-github-support/providing-data-to-github-support{% endif %}' - popular: +includedCategories: + - Understand your support options + - Contact GitHub +carousels: + recommended: - /support/learning-about-github-support/about-github-support - /support/contacting-github-support/creating-a-support-ticket + - /support/contacting-github-support/using-copilot-in-github-support + - /support/learning-about-github-support/about-github-premium-support + - /support/contacting-github-support/getting-your-enterprise-started-with-the-github-support-portal + - /support/contacting-github-support/viewing-and-updating-support-tickets --- - diff --git a/content/support/learning-about-github-support/about-copilot-in-github-support.md b/content/support/learning-about-github-support/about-copilot-in-github-support.md index c14651b60c1e..5d226c33284b 100644 --- a/content/support/learning-about-github-support/about-copilot-in-github-support.md +++ b/content/support/learning-about-github-support/about-copilot-in-github-support.md @@ -7,6 +7,8 @@ versions: ghes: '*' shortTitle: About Copilot in GitHub Support contentType: rai +category: + - Understand your support options --- ## About {% data variables.copilot.copilot_in_support %} diff --git a/content/support/learning-about-github-support/about-github-premium-support.md b/content/support/learning-about-github-support/about-github-premium-support.md index 05eec2aa7347..7c0c2028ce5a 100644 --- a/content/support/learning-about-github-support/about-github-premium-support.md +++ b/content/support/learning-about-github-support/about-github-premium-support.md @@ -18,6 +18,8 @@ redirect_from: - /admin/enterprise-support/overview/about-github-premium-support-for-github-enterprise-server - /admin/enterprise-support/overview/about-github-premium-support-for-github-enterprise - /support/about-github-support/about-github-premium-support +category: + - Understand your support options --- > [!NOTE] diff --git a/content/support/learning-about-github-support/about-github-special-events-support.md b/content/support/learning-about-github-support/about-github-special-events-support.md index b3cacd6574c0..2cf39a6a67e1 100644 --- a/content/support/learning-about-github-support/about-github-special-events-support.md +++ b/content/support/learning-about-github-support/about-github-special-events-support.md @@ -5,6 +5,8 @@ intro: '{% data variables.contact.special_events_support %} is an optional suppo versions: ghec: '*' ghes: '*' +category: + - Understand your support options --- ## About {% data variables.contact.special_events_support %} diff --git a/content/support/learning-about-github-support/about-github-support.md b/content/support/learning-about-github-support/about-github-support.md index 2957a59a7833..b3acb51c421a 100644 --- a/content/support/learning-about-github-support/about-github-support.md +++ b/content/support/learning-about-github-support/about-github-support.md @@ -18,6 +18,8 @@ redirect_from: - /articles/github-business-cloud-support - /admin/enterprise-support/about-support-for-advanced-security - /enterprise-server/admin/enterprise-support/about-support-for-advanced-security +category: + - Understand your support options --- ## About {% data variables.contact.github_support %} diff --git a/content/support/learning-about-github-support/about-ticket-priority.md b/content/support/learning-about-github-support/about-ticket-priority.md index 24cc252fb92e..5c50a97e298c 100644 --- a/content/support/learning-about-github-support/about-ticket-priority.md +++ b/content/support/learning-about-github-support/about-ticket-priority.md @@ -5,6 +5,8 @@ shortTitle: Ticket priority versions: ghec: '*' ghes: '*' +category: + - Understand your support options --- ## About ticket priorities diff --git a/content/support/learning-about-github-support/github-marketplace-support.md b/content/support/learning-about-github-support/github-marketplace-support.md index abfca43b934c..0ca3f48ad74c 100644 --- a/content/support/learning-about-github-support/github-marketplace-support.md +++ b/content/support/learning-about-github-support/github-marketplace-support.md @@ -8,6 +8,8 @@ versions: redirect_from: - /articles/github-marketplace-support - /github/working-with-github-support/github-marketplace-support +category: + - Understand your support options --- ## Contacting your app's provider for support diff --git a/content/support/sharing-feedback-with-github.md b/content/support/sharing-feedback-with-github.md index 661d0acb11b6..36a3019d5627 100644 --- a/content/support/sharing-feedback-with-github.md +++ b/content/support/sharing-feedback-with-github.md @@ -4,6 +4,8 @@ intro: "You can share your ideas, thoughts, and feedback with {% data variables. versions: fpt: '*' shortTitle: Sharing feedback +category: + - Contact GitHub --- > [!IMPORTANT] diff --git a/content/webhooks/about-webhooks.md b/content/webhooks/about-webhooks.md index d197860e4792..fd4e6bc33499 100644 --- a/content/webhooks/about-webhooks.md +++ b/content/webhooks/about-webhooks.md @@ -19,6 +19,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## About webhooks diff --git a/content/webhooks/index.md b/content/webhooks/index.md index b90bb1e1dda6..f7fc4af5fd40 100644 --- a/content/webhooks/index.md +++ b/content/webhooks/index.md @@ -5,19 +5,6 @@ intro: 'Webhooks can let your integrations take an action in response to events introLinks: overview: /webhooks/about-webhooks reference: /webhooks/webhook-events-and-payloads -featuredLinks: - startHere: - - /webhooks/using-webhooks/creating-webhooks - - /webhooks/using-webhooks/handling-webhook-deliveries - - /webhooks/using-webhooks/validating-webhook-deliveries - popular: - - /webhooks/webhook-events-and-payloads - - /webhooks/using-webhooks/best-practices-for-using-webhooks - - /webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks - guideCards: - - /webhooks/using-webhooks/handling-webhook-deliveries - - /webhooks/using-webhooks/handling-failed-webhook-deliveries - - /webhooks/testing-and-troubleshooting-webhooks/testing-webhooks versions: fpt: '*' ghes: '*' @@ -30,11 +17,22 @@ children: - /testing-and-troubleshooting-webhooks changelog: label: webhooks -layout: product-landing +layout: discovery-landing redirect_from: - /developers/webhooks-and-events - /webhooks-and-events - /developers/webhooks-and-events/webhooks - /webhooks-and-events/webhooks +includedCategories: + - Set up and manage webhooks + - Handle webhook deliveries + - Test and troubleshoot +carousels: + recommended: + - /webhooks/about-webhooks + - /webhooks/using-webhooks/creating-webhooks + - /webhooks/using-webhooks/handling-webhook-deliveries + - /webhooks/using-webhooks/best-practices-for-using-webhooks + - /webhooks/webhook-events-and-payloads + - /webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks --- - diff --git a/content/webhooks/testing-and-troubleshooting-webhooks/redelivering-webhooks.md b/content/webhooks/testing-and-troubleshooting-webhooks/redelivering-webhooks.md index 877560d1d550..6ae463e4fada 100644 --- a/content/webhooks/testing-and-troubleshooting-webhooks/redelivering-webhooks.md +++ b/content/webhooks/testing-and-troubleshooting-webhooks/redelivering-webhooks.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Test and troubleshoot --- ## About redelivering webhooks diff --git a/content/webhooks/testing-and-troubleshooting-webhooks/testing-webhooks.md b/content/webhooks/testing-and-troubleshooting-webhooks/testing-webhooks.md index bf58ee1f2f57..ad6323f9164a 100644 --- a/content/webhooks/testing-and-troubleshooting-webhooks/testing-webhooks.md +++ b/content/webhooks/testing-and-troubleshooting-webhooks/testing-webhooks.md @@ -14,6 +14,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Test and troubleshoot --- ## About testing webhooks diff --git a/content/webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks.md b/content/webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks.md index 51a118fdd3b8..46221783659c 100644 --- a/content/webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks.md +++ b/content/webhooks/testing-and-troubleshooting-webhooks/troubleshooting-webhooks.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Test and troubleshoot --- ## Missing webhook deliveries diff --git a/content/webhooks/testing-and-troubleshooting-webhooks/using-the-github-cli-to-forward-webhooks-for-testing.md b/content/webhooks/testing-and-troubleshooting-webhooks/using-the-github-cli-to-forward-webhooks-for-testing.md index 2b213ea539c0..6b99d146b5ec 100644 --- a/content/webhooks/testing-and-troubleshooting-webhooks/using-the-github-cli-to-forward-webhooks-for-testing.md +++ b/content/webhooks/testing-and-troubleshooting-webhooks/using-the-github-cli-to-forward-webhooks-for-testing.md @@ -10,6 +10,8 @@ redirect_from: - /webhooks/webhooks/receiving-webhooks-with-the-github-cli - /webhooks/receiving-webhooks-with-the-github-cli - /webhooks/testing-and-troubleshooting-webhooks/receiving-webhooks-with-the-github-cli +category: + - Test and troubleshoot --- ## About receiving webhooks with {% data variables.product.prodname_cli %} diff --git a/content/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries.md b/content/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries.md index 4331a7ef2e3f..acecd2893f87 100644 --- a/content/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries.md +++ b/content/webhooks/testing-and-troubleshooting-webhooks/viewing-webhook-deliveries.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Test and troubleshoot --- ## About webhook deliveries diff --git a/content/webhooks/types-of-webhooks.md b/content/webhooks/types-of-webhooks.md index 96da429a5e77..d34e68c4c183 100644 --- a/content/webhooks/types-of-webhooks.md +++ b/content/webhooks/types-of-webhooks.md @@ -9,6 +9,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## About webhook types diff --git a/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-github-app-webhook.md b/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-github-app-webhook.md index 9d6b99c5afa9..641474fabfb7 100644 --- a/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-github-app-webhook.md +++ b/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-github-app-webhook.md @@ -9,6 +9,8 @@ versions: layout: inline redirect_from: - /webhooks/using-webhooks/creating-a-script-to-automatically-redeliver-failed-deliveries-for-a-github-app-webhook +category: + - Handle webhook deliveries --- ## About automatically redelivering failed deliveries diff --git a/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-repository-webhook.md b/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-repository-webhook.md index 9329cb0086c5..df94c434f684 100644 --- a/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-repository-webhook.md +++ b/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-a-repository-webhook.md @@ -9,6 +9,8 @@ versions: layout: inline redirect_from: - /webhooks/using-webhooks/creating-a-script-to-automatically-redeliver-failed-deliveries-for-a-repository-webhook +category: + - Handle webhook deliveries --- ## About automatically redelivering failed deliveries diff --git a/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-an-organization-webhook.md b/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-an-organization-webhook.md index 1aa1a7e995cd..e84bee84a45b 100644 --- a/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-an-organization-webhook.md +++ b/content/webhooks/using-webhooks/automatically-redelivering-failed-deliveries-for-an-organization-webhook.md @@ -9,6 +9,8 @@ versions: layout: inline redirect_from: - /webhooks/using-webhooks/creating-a-script-to-automatically-redeliver-failed-deliveries-for-an-organization-webhook +category: + - Handle webhook deliveries --- ## About automatically redelivering failed deliveries diff --git a/content/webhooks/using-webhooks/best-practices-for-using-webhooks.md b/content/webhooks/using-webhooks/best-practices-for-using-webhooks.md index a77434251ce5..2f83bc5923ee 100644 --- a/content/webhooks/using-webhooks/best-practices-for-using-webhooks.md +++ b/content/webhooks/using-webhooks/best-practices-for-using-webhooks.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## Subscribe to the minimum number of events diff --git a/content/webhooks/using-webhooks/creating-webhooks.md b/content/webhooks/using-webhooks/creating-webhooks.md index 70abf812dd5e..65e992c25a0b 100644 --- a/content/webhooks/using-webhooks/creating-webhooks.md +++ b/content/webhooks/using-webhooks/creating-webhooks.md @@ -13,6 +13,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## About creating webhooks diff --git a/content/webhooks/using-webhooks/delivering-webhooks-to-private-systems.md b/content/webhooks/using-webhooks/delivering-webhooks-to-private-systems.md index 44206adac6fd..0643c017e0a6 100644 --- a/content/webhooks/using-webhooks/delivering-webhooks-to-private-systems.md +++ b/content/webhooks/using-webhooks/delivering-webhooks-to-private-systems.md @@ -5,6 +5,8 @@ shortTitle: Deliver to private systems versions: fpt: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## About integrating with private systems via reverse proxy diff --git a/content/webhooks/using-webhooks/disabling-webhooks.md b/content/webhooks/using-webhooks/disabling-webhooks.md index a8823cafac99..73e2f33b7d73 100644 --- a/content/webhooks/using-webhooks/disabling-webhooks.md +++ b/content/webhooks/using-webhooks/disabling-webhooks.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## About disabling webhooks diff --git a/content/webhooks/using-webhooks/editing-webhooks.md b/content/webhooks/using-webhooks/editing-webhooks.md index 05a69edaac12..a3d07f52153a 100644 --- a/content/webhooks/using-webhooks/editing-webhooks.md +++ b/content/webhooks/using-webhooks/editing-webhooks.md @@ -6,6 +6,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Set up and manage webhooks --- ## About editing webhooks diff --git a/content/webhooks/using-webhooks/handling-failed-webhook-deliveries.md b/content/webhooks/using-webhooks/handling-failed-webhook-deliveries.md index 6826bc920fb7..bd278efe4fa9 100644 --- a/content/webhooks/using-webhooks/handling-failed-webhook-deliveries.md +++ b/content/webhooks/using-webhooks/handling-failed-webhook-deliveries.md @@ -7,6 +7,8 @@ versions: ghes: '*' ghec: '*' layout: inline +category: + - Handle webhook deliveries --- ## About webhook delivery failures diff --git a/content/webhooks/using-webhooks/handling-webhook-deliveries.md b/content/webhooks/using-webhooks/handling-webhook-deliveries.md index 78150f068492..540a07695f15 100644 --- a/content/webhooks/using-webhooks/handling-webhook-deliveries.md +++ b/content/webhooks/using-webhooks/handling-webhook-deliveries.md @@ -15,6 +15,8 @@ versions: ghes: '*' ghec: '*' layout: inline +category: + - Handle webhook deliveries --- ## Introduction diff --git a/content/webhooks/using-webhooks/validating-webhook-deliveries.md b/content/webhooks/using-webhooks/validating-webhook-deliveries.md index 5aac71a8fd45..1b73ae122e53 100644 --- a/content/webhooks/using-webhooks/validating-webhook-deliveries.md +++ b/content/webhooks/using-webhooks/validating-webhook-deliveries.md @@ -14,6 +14,8 @@ versions: fpt: '*' ghes: '*' ghec: '*' +category: + - Handle webhook deliveries --- ## About validating webhook deliveries diff --git a/content/webhooks/webhook-events-and-payloads.md b/content/webhooks/webhook-events-and-payloads.md index 1eebb34fa951..0c7034c56aab 100644 --- a/content/webhooks/webhook-events-and-payloads.md +++ b/content/webhooks/webhook-events-and-payloads.md @@ -15,6 +15,8 @@ versions: ghec: '*' shortTitle: Webhook events & payloads autogenerated: webhooks +category: + - Handle webhook deliveries --- ## About webhook events and payloads diff --git a/data/reusables/repositories/actions-scheduled-workflow-example.md b/data/reusables/repositories/actions-scheduled-workflow-example.md index 1a58a12baa5c..60d73a5daab9 100644 --- a/data/reusables/repositories/actions-scheduled-workflow-example.md +++ b/data/reusables/repositories/actions-scheduled-workflow-example.md @@ -1,4 +1,7 @@ -Use [POSIX cron syntax](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07) to schedule workflows to run at specific UTC times. Scheduled workflows run on the latest commit on the default branch. The shortest interval you can run scheduled workflows is once every 5 minutes. +Use [POSIX cron syntax](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07) to schedule workflows to run at specific times. By default, scheduled workflows run in UTC. You can optionally specify a timezone using an [IANA timezone string](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for timezone-aware scheduling. Scheduled workflows run on the latest commit on the default branch. The shortest interval you can run scheduled workflows is once every 5 minutes. + +> [!NOTE] +> For schedules that set `timezone` to a time zone that observes daylight saving time (DST), during DST spring-forward transitions, scheduled workflows in skipped hours advance to the next valid time. For example, a 2:30 AM schedule advances to 3:00 AM. {% data reusables.repositories.cron %} @@ -11,6 +14,15 @@ You can use these operators in any of the five fields: | - | Range of values | `30 4-6 * * *` runs at minute 30 of the 4th, 5th, and 6th hour. | | / | Step values | `20/15 * * * *` runs every 15 minutes starting from minute 20 through 59 (minutes 20, 35, and 50). | +This example triggers the workflow to run at 5:30 AM in the America/New_York timezone every Monday through Friday: + +```yaml +on: + schedule: + - cron: '30 5 * * 1-5' + timezone: "America/New_York" +``` + A single workflow can be triggered by multiple `schedule` events. Access the `schedule` event that triggered the workflow through the `github.event.schedule` context. This example triggers the workflow to run at 5:30 UTC every Monday-Thursday, and 17:30 UTC on Tuesdays and Thursdays, but skips the `Not on Monday or Wednesday` step on Monday and Wednesday. ```yaml diff --git a/src/archives/middleware/archived-enterprise-versions.ts b/src/archives/middleware/archived-enterprise-versions.ts index 051f2e11d90f..b3897f12f73c 100644 --- a/src/archives/middleware/archived-enterprise-versions.ts +++ b/src/archives/middleware/archived-enterprise-versions.ts @@ -16,6 +16,7 @@ import { setFastlySurrogateKey, SURROGATE_ENUMS } from '@/frame/middleware/set-f import { readCompressedJsonFileFallbackLazily } from '@/frame/lib/read-json-file' import { archivedCacheControl, languageCacheControl } from '@/frame/middleware/cache-control' import { pathLanguagePrefixed, languagePrefixPathRegex } from '@/languages/lib/languages-server' +import { languages as allLanguages } from '@/languages/lib/languages' import getRedirect, { splitPathByLanguage } from '@/redirects/lib/get-redirect' import getRemoteJSON from '@/frame/lib/get-remote-json' import { ExtendedRequest } from '@/types' @@ -214,6 +215,29 @@ export default async function archivedEnterpriseVersions( return res.safeRedirect(redirectCode, redirectJson[req.path]) } } + // Short-circuit requests that will never resolve on the upstream + // GitHub Pages repos, avoiding unnecessary network requests. + const earlyNotFound = getEarlyNotFoundReason(req.path, requestedVersion) + if (earlyNotFound) { + statsd.increment('middleware.archived_early_not_found', 1, [ + `reason:${earlyNotFound}`, + `version:${requestedVersion}`, + ]) + cacheAggressively(res) + return res.status(404).type('text').send('Page not found') + } + + // Requests without a language prefix for versions > 2.17 will always + // 404 upstream (the archive repos store pages under /en/, /zh/, etc.). + // Skip the fetch and let downstream middleware handle the redirect. + if ( + versionSatisfiesRange(requestedVersion, `>${lastVersionWithoutArchivedRedirectsFile}`) && + !pathLanguagePrefixed(req.path) + ) { + statsd.increment('middleware.archived_skip_no_language', 1, [`version:${requestedVersion}`]) + return next() + } + // Retrieve the page from the archived repo const doGet = () => fetchWithRetry( @@ -246,7 +270,8 @@ export default async function archivedEnterpriseVersions( }) } - // Log errors for non-200 responses to help identify issues with archived content + // Log non-200 responses — use warn for 404s (expected for missing archived + // pages) and error for genuine upstream failures (5xx, timeouts). if (r.status !== 200) { let upstreamBody: string | undefined try { @@ -254,7 +279,8 @@ export default async function archivedEnterpriseVersions( } catch { // ignore — body reading failure shouldn't affect error handling } - logger.error('Failed to fetch archived enterprise content', { + const level = r.status === 404 ? 'warn' : 'error' + logger[level]('Failed to fetch archived enterprise content', { version: requestedVersion, path: req.path, status: r.status, @@ -502,3 +528,49 @@ function splitByLanguage(uri: string) { } return [language, withoutLanguage] } + +// Regex to extract any language-like prefix from the path, including +// "cn" which was the old Chinese language code used in archives ≤3.2. +const archiveLanguagePrefixRegex = new RegExp(`^/(${Object.keys(allLanguages).join('|')}|cn)(/|$)`) + +// Detects request paths that will never resolve on the upstream GitHub +// Pages archive repos, so we can 404 immediately without making a +// network request. Returns a short reason string, or null if the +// request looks plausible. +function getEarlyNotFoundReason(reqPath: string, version: string): string | null { + // Double slashes in the path never resolve (e.g. ".../about-2fa//index.html") + if (reqPath.includes('//')) { + return 'double-slash' + } + + // Duplicated "/developer/developer/" segment — these are broken + // crawler URLs from the old developer.github.com site. + if (reqPath.includes('/developer/developer/')) { + return 'developer-developer' + } + + // Check if the language in the path actually exists in this version's + // archive. Each language has a `firstArchivedVersion` indicating when + // it was first included in the GHES archives. + const langMatch = reqPath.match(archiveLanguagePrefixRegex) + if (langMatch) { + const lang = langMatch[1] + + // "cn" was the old Chinese language code; those archives are ancient + // and effectively dead traffic. Always 404. + if (lang === 'cn') { + return 'language-not-in-version' + } + + const langDef = allLanguages[lang] + if (langDef?.firstArchivedVersion) { + // 404 if the requested version is older than when this language + // was first archived (e.g. /zh/ on v3.0 → 404 because zh started in 3.3) + if (!versionSatisfiesRange(version, `>=${langDef.firstArchivedVersion}`)) { + return 'language-not-in-version' + } + } + } + + return null +} diff --git a/src/frame/lib/get-remote-json.ts b/src/frame/lib/get-remote-json.ts index e8cd761adcd9..d3d0c8e1a8d8 100644 --- a/src/frame/lib/get-remote-json.ts +++ b/src/frame/lib/get-remote-json.ts @@ -1,13 +1,16 @@ import path from 'path' import fs from 'fs' import crypto from 'crypto' +import zlib from 'zlib' import { fetchWithRetry } from './fetch-utils' import statsd from '@/observability/lib/statsd' -// The only reason this is exported is for the sake of the unit tests' -// ability to test in-memory miss after purging this with a mutation -export const cache = new Map() +// Store compressed Buffers instead of parsed JSON objects. +// Redirect JSON files are 5-10 MB each when parsed but compress +// to ~1-2 MB with deflate. We decompress on each access (~1 ms) +// which is negligible compared to the memory savings. +export const cache = new Map() const inProd = process.env.NODE_ENV === 'production' @@ -20,6 +23,16 @@ interface GetRemoteJSONConfig { } } +function compressStringToCache(cacheKey: string, jsonString: string): void { + cache.set(cacheKey, zlib.deflateSync(Buffer.from(jsonString))) +} + +function decompressFromCache(cacheKey: string): unknown { + const compressed = cache.get(cacheKey) + if (!compressed) return undefined + return JSON.parse(zlib.inflateSync(compressed).toString()) +} + // Wrapper on `got()` that is able to both cache in memory and on disk. // The on-disk caching is in `.remotejson/`. // We use this for downloading `redirects.json` files from one of the @@ -60,8 +73,10 @@ export default async function getRemoteJSON( // It might exist on disk, but it could be empty if (body) { try { - // It might be corrupted JSON. - cache.set(cacheKey, JSON.parse(body)) + // Validate JSON, then compress the raw string directly + // instead of parse → stringify → compress + JSON.parse(body) + compressStringToCache(cacheKey, body) fromCache = 'disk' foundOnDisk = true } catch (error) { @@ -107,7 +122,9 @@ export default async function getRemoteJSON( } const body = await res.text() - cache.set(cacheKey, JSON.parse(body)) + // Validate JSON, then compress raw string directly + JSON.parse(body) + compressStringToCache(cacheKey, body) // Only write to disk for testing and local review. // In production, we never write to disk. Only in-memory. @@ -119,5 +136,5 @@ export default async function getRemoteJSON( } const tags = [`from_cache:${fromCache}`] statsd.increment('middleware.get_remote_json', 1, tags) - return cache.get(cacheKey) + return decompressFromCache(cacheKey) } diff --git a/src/languages/lib/correct-translation-content.ts b/src/languages/lib/correct-translation-content.ts index 583757441142..429851b8211b 100644 --- a/src/languages/lib/correct-translation-content.ts +++ b/src/languages/lib/correct-translation-content.ts @@ -207,8 +207,10 @@ export function correctTranslatedContentStrings( if (context.code === 'zh') { content = content.replaceAll('{% 数据variables', '{% data variables') content = content.replaceAll('{% 数据 variables', '{% data variables') - content = content.replaceAll('{% 数据可重用', '{% data reusables') + // Order matters: the more specific `s.` variant must run first to + // avoid the broader rule producing a double-s (`reusabless`). content = content.replaceAll('{% 数据可重用s.', '{% data reusables.') + content = content.replaceAll('{% 数据可重用', '{% data reusables') content = content.replaceAll('{% 其他 %}', '{% else %}') content = content.replaceAll('{% 原始 %}', '{% raw %}') // Chinese `如果` = "if": `{ 如果 X %}` → `{% if X %}` @@ -224,6 +226,7 @@ export function correctTranslatedContentStrings( if (context.code === 'ru') { content = content.replaceAll('[«AUTOTITLE»](', '[AUTOTITLE](') + content = content.replaceAll('[АВТОЗАГОЛОВОК](', '[AUTOTITLE](') content = content.replaceAll('{% данных variables', '{% data variables') content = content.replaceAll('{% данных, variables', '{% data variables') content = content.replaceAll('{% данными variables', '{% data variables') @@ -265,7 +268,15 @@ export function correctTranslatedContentStrings( content = content.replaceAll('{% конечным %}', '{% endif %}') // `{% конец %}` after `{% raw %}` means `{% endraw %}`, not `{% endif %}`. // Handle this BEFORE the generic `{% конец %}` → `{% endif %}` fallback. - content = content.replace(/(\{% raw %\}[^]*?)\{% конец %\}/g, '$1{% endraw %}') + // We use a split-based approach instead of `[^]*?` regex to avoid + // catastrophic backtracking on large content (~20s on 150KB inputs). + if (content.includes('{% конец %}') && content.includes('{% raw %}')) { + const parts = content.split('{% raw %}') + for (let i = 1; i < parts.length; i++) { + parts[i] = parts[i].replace('{% конец %}', '{% endraw %}') + } + content = parts.join('{% raw %}') + } content = content.replaceAll('{% конец %}', '{% endif %}') // Cyrillic transliteration of `elsif` (lossy → else, since version param is lost) content = content.replaceAll('{% Эльсиф %}', '{% else %}') @@ -314,11 +325,21 @@ export function correctTranslatedContentStrings( // Rearranged `{% data VARIABLE_PATH %}` → `VARIABLE_PATH %данн... {% }` // The translation moved `data` (as `данных`/`данными`/`данные`) after the path // and split `%}` into `{% }` or `{% }`. Reconstruct the original tag. - content = content.replace(/([\w.-]+\.[\w.-]+\.[\w_]+) %данн\w*[^{]*\{%\s+\}/g, '{% data $1 %}') - // Variant where `%}` appears BEFORE `данных`: `PATH %}данных {% .` - content = content.replace(/([\w.-]+\.[\w.-]+\.[\w_]+) %\}данн\w*\s*\{%\s*\./g, '{% data $1 %}.') - // Variant where path precedes `%{% data }`: `PATH %{% data }.` - content = content.replace(/([\w.-]+\.[\w.-]+\.[\w_]+) %\{% data\s+\}/g, '{% data $1 %}') + // Guard: these regexes start with [\w.-]+ which backtracks O(n²) on large word-char strings. + if (content.includes('%данн')) { + content = content.replace( + /([\w.-]+\.[\w.-]+\.[\w_]+) %данн\w*[^{]*\{%\s+\}/g, + '{% data $1 %}', + ) + content = content.replace( + /([\w.-]+\.[\w.-]+\.[\w_]+) %\}данн\w*\s*\{%\s*\./g, + '{% data $1 %}.', + ) + } + if (content.includes('%{% data')) { + // Variant where path precedes `%{% data }`: `PATH %{% data }.` + content = content.replace(/([\w.-]+\.[\w.-]+\.[\w_]+) %\{% data\s+\}/g, '{% data $1 %}') + } // Translated octicon names content = content.replaceAll( @@ -340,6 +361,10 @@ export function correctTranslatedContentStrings( content = content.replace(/\{%-? (?:ifversion|elsif) [^%]*?ou [^%]*?%\}/g, (match) => { return match.replace(/ ou /g, ' or ') }) + // French decimal comma in version numbers: `3,16` → `3.16` + content = content.replace(/\{%-? (?:ifversion|elsif) [^%]*?%\}/g, (match) => { + return match.replace(/(\d),(\d)/g, '$1.$2') + }) // Translated block tags content = content.replaceAll('{% remarque %}', '{% note %}') content = content.replaceAll('{%- remarque %}', '{%- note %}') @@ -396,6 +421,10 @@ export function correctTranslatedContentStrings( content = content.replaceAll('{% Tipp %}', '{% tip %}') content = content.replaceAll('{%- Tipp %}', '{%- tip %}') content = content.replaceAll('{%- Tipp -%}', '{%- tip -%}') + // Translated for-loop keywords: `für VARNAME in COLLECTION` + content = content.replace(/\{%-? für (\w+) in /g, (match) => { + return match.replace('für', 'for') + }) } // --- Generic fixes (all languages) --- @@ -460,6 +489,7 @@ export function correctTranslatedContentStrings( // Common Latin-script typos across multiple languages. content = content.replaceAll('{% variables.', '{% data variables.') + content = content.replaceAll('{% reusables.', '{% data reusables.') content = content.replaceAll('{% datavariables', '{% data variables') // Empty `{% %}` corruptions where the tag name was removed. @@ -467,7 +497,15 @@ export function correctTranslatedContentStrings( content = content.replaceAll('{% %} de dados variables.', '{% data variables.') // Fix `{% %}` used as `{% endraw %}` (follows raw content with Liquid expressions). - content = content.replace(/(\{% raw %\}[^]*?)\{% %\}/g, '$1{% endraw %}') + // We use a split-based approach instead of `[^]*?` regex to avoid + // catastrophic backtracking on large content (~20s on 150KB inputs). + if (content.includes('{% %}') && content.includes('{% raw %}')) { + const parts = content.split('{% raw %}') + for (let i = 1; i < parts.length; i++) { + parts[i] = parts[i].replace('{% %}', '{% endraw %}') + } + content = parts.join('{% raw %}') + } // Fix `{% %}` used as `{% else %}` when it appears between ifversion and // endif on the same line: `{% ifversion X %}A{% %}B{% endif %}`. @@ -504,22 +542,30 @@ export function correctTranslatedContentStrings( // Recover linebreaks that translations lose after Liquid closing tags. // Compares each `{% ... %} ` in the translation against the English // to see if it should be `{% ... %}\n` instead. - content = content.replace(/\{%(.+?)%\} /g, (match) => { - if (match.lastIndexOf('{%') > 0) return match - const withLinebreak = `${match.slice(0, -1)}\n` - if (englishContent.includes(withLinebreak) && !englishContent.includes(match)) { - return withLinebreak + // Pre-build a Set of English Liquid-tag-with-linebreak strings so we + // avoid O(tags × contentLength) repeated `String.includes()` scans. + if (englishContent) { + const englishLinebreaks = new Set() + const englishSpaces = new Set() + for (const m of englishContent.matchAll(/\{%.+?%\}[\n ]/g)) { + if (m[0].endsWith('\n')) englishLinebreaks.add(m[0]) + else englishSpaces.add(m[0]) } - return match - }) - // Special case: `{% endif %} | ` → `{% endif %}\n| ` when English has it. - content = content.replace(/\{% endif %\} \| /g, (match) => { - const potentiallyBetter = '{% endif %}\n| ' - if (englishContent.includes(potentiallyBetter)) { - return potentiallyBetter + if (englishLinebreaks.size > 0) { + content = content.replace(/\{%(.+?)%\} /g, (match) => { + if (match.lastIndexOf('{%') > 0) return match + const withLinebreak = `${match.slice(0, -1)}\n` + if (englishLinebreaks.has(withLinebreak) && !englishSpaces.has(match)) { + return withLinebreak + } + return match + }) + // Special case: `{% endif %} | ` → `{% endif %}\n| ` when English has it. + if (englishContent.includes('{% endif %}\n| ')) { + content = content.replace(/\{% endif %\} \| /g, '{% endif %}\n| ') + } } - return match - }) + } // Collapsed Markdown table rows — restore linebreaks between `|` cells. content = content.replaceAll(' | | ', ' |\n| ') @@ -527,10 +573,18 @@ export function correctTranslatedContentStrings( // Final catch-all: earlier normalizations (e.g. space-in-braces regex) can // recreate `{{% KEYWORD` patterns after the per-keyword fixes already ran. // Strip the extra `{` for known Liquid tag names. + // Note: keywords without a trailing space (e.g. `raw`, `endif`) need `\b` + // to ensure a space is not required, while still matching correctly. content = content.replace( - /\{\{(%\s*(?:data |ifversion |elsif |endif|else |else\b|octicon |note|endnote|tip|endtip|raw|endraw|comment|endcomment|for |endfor|assign |vscode|endvscode|visualstudio|endvisualstudio|rowheaders|endrowheaders))/g, + /\{\{(%\s*(?:data |ifversion |elsif |endif\b|else\b|octicon |note\b|endnote\b|tip\b|endtip\b|raw\b|endraw\b|comment\b|endcomment\b|for |endfor\b|assign |vscode\b|endvscode\b|visualstudio\b|endvisualstudio\b|rowheaders\b|endrowheaders\b))/g, '{$1', ) + // After the catch-all, `{%raw` (no space) can appear. Normalize to `{% raw`. + content = content.replaceAll('{%raw %}', '{% raw %}') + content = content.replaceAll('{%raw -%}', '{% raw -%}') + content = content.replaceAll('{%endraw %}', '{% endraw %}') + content = content.replaceAll('{%endraw -%}', '{% endraw -%}') + return content } diff --git a/src/languages/lib/languages.ts b/src/languages/lib/languages.ts index 049b03224190..ba319f697b4b 100644 --- a/src/languages/lib/languages.ts +++ b/src/languages/lib/languages.ts @@ -27,6 +27,10 @@ export interface Language { locale: LocaleCode redirectPatterns?: RegExp[] dir?: string + // The earliest archived GHES version that includes this language. + // Used to short-circuit requests for translations that don't exist + // in a given archive. English is always available so it has no value. + firstArchivedVersion?: string } export interface Languages { @@ -48,6 +52,7 @@ export const languages: Languages = { code: 'es', hreflang: 'es', locale: 'es-es', + firstArchivedVersion: '3.0', }, ja: { name: 'Japanese', @@ -56,6 +61,7 @@ export const languages: Languages = { hreflang: 'ja', redirectPatterns: [/^\/jp/], locale: 'ja-jp', + firstArchivedVersion: '3.0', }, pt: { name: 'Portuguese', @@ -64,6 +70,7 @@ export const languages: Languages = { hreflang: 'pt', redirectPatterns: [/^\/br/], locale: 'pt-br', + firstArchivedVersion: '3.0', }, zh: { name: 'Simplified Chinese', @@ -72,6 +79,7 @@ export const languages: Languages = { hreflang: 'zh-Hans', redirectPatterns: [/^\/cn/, /^\/zh-\w{2}/], locale: 'zh-cn', + firstArchivedVersion: '3.3', }, ru: { name: 'Russian', @@ -79,6 +87,7 @@ export const languages: Languages = { code: 'ru', hreflang: 'ru', locale: 'ru-ru', + firstArchivedVersion: '3.3', }, fr: { name: 'French', @@ -86,6 +95,7 @@ export const languages: Languages = { code: 'fr', hreflang: 'fr', locale: 'fr-fr', + firstArchivedVersion: '3.3', }, ko: { name: 'Korean', @@ -94,6 +104,7 @@ export const languages: Languages = { hreflang: 'ko', redirectPatterns: [/^\/kr/], locale: 'ko-kr', + firstArchivedVersion: '3.3', }, de: { name: 'German', @@ -101,6 +112,7 @@ export const languages: Languages = { code: 'de', hreflang: 'de', locale: 'de-de', + firstArchivedVersion: '3.3', }, } diff --git a/src/languages/tests/correct-translation-content.ts b/src/languages/tests/correct-translation-content.ts index 66ab8c8502df..717e1f366290 100644 --- a/src/languages/tests/correct-translation-content.ts +++ b/src/languages/tests/correct-translation-content.ts @@ -1,4 +1,5 @@ import { describe, expect, test } from 'vitest' +import { performance } from 'perf_hooks' import { correctTranslatedContentStrings } from '@/languages/lib/correct-translation-content' @@ -10,27 +11,150 @@ function fix(content: string, code: string, englishContent = '') { } describe('correctTranslatedContentStrings', () => { + // ─── SPANISH (es) ─────────────────────────────────────────────────── + describe('Spanish (es)', () => { test('fixes colon-prefix tags', () => { expect(fix('{%: ifversion ghec %}', 'es')).toBe('{% ifversion ghec %}') }) + test('fixes translated data tag variants', () => { + expect(fix('{% vulnerables variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% datos variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% de datos variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% datos reusables.foo.bar %}', 'es')).toBe('{% data reusables.foo.bar %}') + expect(fix('{% data reutilizables.foo.bar %}', 'es')).toBe('{% data reusables.foo.bar %}') + }) + + test('fixes translated comment keyword', () => { + expect(fix('{% comentario %}', 'es')).toBe('{% comment %}') + }) + + test('fixes translated if keyword', () => { + expect(fix('{% si ghec %}', 'es')).toBe('{% if ghec %}') + }) + + test('fixes translated raw keyword variants', () => { + expect(fix('{% sin procesar %}', 'es')).toBe('{% raw %}') + expect(fix('{% %} sin procesar', 'es')).toBe('{% raw %}') + expect(fix('{% sin formato }', 'es')).toBe('{% raw %}') + expect(fix('{%sin formato}', 'es')).toBe('{% raw %}') + expect(fix('{% %sin formato }', 'es')).toBe('{% raw %}') + }) + + test('fixes translated glossary template', () => { + expect(fix('{% para glosario en glosarios %}', 'es')).toBe('{% for glossary in glossaries %}') + expect(fix('{{ glosario.term }}', 'es')).toBe('{{ glossary.term }}') + expect(fix('{{ glosario.description }}', 'es')).toBe('{{ glossary.description }}') + }) + + test('fixes o and y/o → or in ifversion tags', () => { + expect(fix('{% ifversion fpt o ghec %}', 'es')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{% ifversion fpt y/o ghec %}', 'es')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{%- ifversion fpt o ghec %}', 'es')).toBe('{%- ifversion fpt or ghec %}') + expect(fix('{% elsif fpt o ghec %}', 'es')).toBe('{% elsif fpt or ghec %}') + }) + + test('fixes no → not in ifversion tags', () => { + expect(fix('{% ifversion no ghes %}', 'es')).toBe('{% ifversion not ghes %}') + expect(fix('{%- ifversion no ghes %}', 'es')).toBe('{%- ifversion not ghes %}') + }) + + test('fixes translated for-loop keywords', () => { + expect(fix('{%- para entrada en list %}', 'es')).toBe('{%- for entry in list %}') + expect(fix('{%- para la entrada en list %}', 'es')).toBe('{%- for entry in list %}') + }) + test('translates cuando → when in case statements', () => { expect(fix('{%- cuando "supported" %}', 'es')).toBe('{%- when "supported" %}') }) + + test('fixes translated note block tags', () => { + expect(fix('{% nota %}', 'es')).toBe('{% note %}') + expect(fix('{%- nota %}', 'es')).toBe('{%- note %}') + expect(fix('{%- nota -%}', 'es')).toBe('{%- note -%}') + }) + + test('fixes multiple or-translations in single ifversion', () => { + expect(fix('{% ifversion fpt o ghec o ghes %}', 'es')).toBe( + '{% ifversion fpt or ghec or ghes %}', + ) + }) }) + // ─── JAPANESE (ja) ────────────────────────────────────────────────── + describe('Japanese (ja)', () => { + test('fixes translated data tags', () => { + expect(fix('{% データ variables.product.github %}', 'ja')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% データvariables.product.github %}', 'ja')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% データ reusables.foo %}', 'ja')).toBe('{% data reusables.foo %}') + expect(fix('{% データ変数.product.github %}', 'ja')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% データ再利用可能な.foo %}', 'ja')).toBe('{% data reusables.foo %}') + expect(fix('{% データ再利用可能.foo %}', 'ja')).toBe('{% data reusables.foo %}') + expect(fix('{% データ再利用.foo %}', 'ja')).toBe('{% data reusables.foo %}') + }) + + test('fixes double-brace data corruption', () => { + expect(fix('{% {{データ}} variables.product.github %}', 'ja')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes note keyword', () => { + expect(fix('{% メモ %}', 'ja')).toBe('{% note %}') + }) + + test('fixes Japanese or (または) in ifversion tags', () => { + expect(fix('{% ifversion fpt または ghec %}', 'ja')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{%- ifversion fpt または ghec %}', 'ja')).toBe('{%- ifversion fpt or ghec %}') + }) + + test('fixes trailing quote on YAML value', () => { + expect(fix(' asked_too_many_times: some value" ', 'ja')).toBe( + ' asked_too_many_times: some value', + ) + }) + test('fixes translated endcase', () => { expect(fix('{%- エンドケース -%}', 'ja')).toBe('{%- endcase -%}') + expect(fix('{% エンドケース %}', 'ja')).toBe('{% endcase %}') + }) + + test('fixes translated else', () => { + expect(fix('{%- それ以外の場合 %}', 'ja')).toBe('{%- else %}') + expect(fix('{% それ以外の場合 %}', 'ja')).toBe('{% else %}') + }) + + test('fixes translated comment/endcomment', () => { + expect(fix('{%- コメント %}', 'ja')).toBe('{%- comment %}') + expect(fix('{% コメント %}', 'ja')).toBe('{% comment %}') + expect(fix('{%- 終了コメント %}', 'ja')).toBe('{%- endcomment %}') + expect(fix('{% 終了コメント %}', 'ja')).toBe('{% endcomment %}') }) test('adds missing when keyword for English strings', () => { expect(fix('{%- "supported" %}', 'ja')).toBe('{%- when "supported" %}') + expect(fix('{% "not_supported" %}', 'ja')).toBe('{% when "not_supported" %}') + expect(fix('{%- "preview" %}', 'ja')).toBe('{%- when "preview" %}') }) test('adds missing when keyword for Japanese strings', () => { expect(fix('{%- "サポートされている" %}', 'ja')).toBe('{%- when "supported" %}') + expect(fix('{%- "サポートされていません" %}', 'ja')).toBe('{%- when "not_supported" %}') + expect(fix('{%- "プレビュー" %}', 'ja')).toBe('{%- when "preview" %}') }) test('preserves trim syntax when adding when keyword', () => { @@ -42,88 +166,484 @@ describe('correctTranslatedContentStrings', () => { expect(fix('{%- %}C', 'ja')).toBe('{%- when "closing-down" %}C') }) - test('fixes translated for-loops', () => { - const input = '{%- tables.copilot.ides の version -%}' - const output = fix(input, 'ja') - expect(output).toBe('{%- for version in tables.copilot.ides -%}') + test('fixes translated for-loops with の', () => { + expect(fix('{%- tables.copilot.ides の version -%}', 'ja')).toBe( + '{%- for version in tables.copilot.ides -%}', + ) + expect(fix('{% groupVersions の ver %}', 'ja')).toBe('{% for ver in groupVersions %}') }) - test('fixes translated else', () => { - expect(fix('{% それ以外の場合 %}', 'ja')).toBe('{% else %}') + test('fixes for-loop variant with の outside tag', () => { + expect(fix('{%- tables.copilot.ides %} のversionの場合', 'ja')).toBe( + '{%- for version in tables.copilot.ides %}', + ) + }) + + test('fixes translated variable names', () => { + expect(fix('{{ バージョン }}', 'ja')).toBe('{{ version }}') + expect(fix('{{ 言語 }}', 'ja')).toBe('{{ language }}') + }) + + test('fixes translated assign keyword', () => { + expect(fix('{%- 言語を割り当てる = "ja" %}', 'ja')).toBe('{%- assign language = "ja" %}') + }) + + test('fixes rearranged assign with を割り当てる', () => { + expect(fix('{%- featureData = entry.features %} を割り当てる', 'ja')).toBe( + '{%- assign featureData = entry.features %}', + ) + }) + + test('strips stray の割り当て and の場合', () => { + expect(fix('{%- assign x = y -%} の割り当て', 'ja')).toBe('{%- assign x = y -%}') + }) + + test('adds missing if keyword', () => { + expect(fix('{%- featureData.overview %}', 'ja')).toBe('{%- if featureData.overview %}') + expect(fix('{% entry.hasNote %}', 'ja')).toBe('{% if entry.hasNote %}') + }) + + test('adds missing assign keyword', () => { + expect(fix('{%- featureKey = "copilot" %}', 'ja')).toBe( + '{%- assign featureKey = "copilot" %}', + ) + expect(fix('{%- supportLevel = entry.support -%}', 'ja')).toBe( + '{%- assign supportLevel = entry.support -%}', + ) }) }) - describe('Russian (ru)', () => { + // ─── PORTUGUESE (pt) ─────────────────────────────────────────────── + + describe('Portuguese (pt)', () => { test('fixes translated data tags', () => { + expect(fix('{% dados variables.product.github %}', 'pt')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% de dados variables.product.github %}', 'pt')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% dados reusables.foo %}', 'pt')).toBe('{% data reusables.foo %}') + expect(fix('{{% dados variables.product.github %}', 'pt')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{{% datas variables.product.github %}', 'pt')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes translated else variants', () => { + expect(fix('{% senão %}', 'pt')).toBe('{% else %}') + expect(fix('{% mais %}', 'pt')).toBe('{% else %}') + }) + + test('fixes translated if keyword', () => { + expect(fix('{% se ghec %}', 'pt')).toBe('{% if ghec %}') + }) + + test('fixes translated assign keyword', () => { + expect(fix('{% atribuir x = y %}', 'pt')).toBe('{% assign x = y %}') + }) + + test('fixes translated raw keyword', () => { + expect(fix('{% %} bruto', 'pt')).toBe('{% raw %}') + }) + + test('fixes %de dados patterns', () => { + expect(fix('{% %de dados reusables.foo %}', 'pt')).toBe('{% data reusables.foo %}') + expect(fix('{% %de dados variables.product.github %}', 'pt')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes móvel keyword', () => { + expect(fix('{% %móvel }', 'pt')).toBe('{% mobile %}') + }) + + test('fixes ou → or in ifversion tags', () => { + expect(fix('{% ifversion fpt ou ghec %}', 'pt')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{%- elsif fpt ou ghec %}', 'pt')).toBe('{%- elsif fpt or ghec %}') + }) + }) + + // ─── CHINESE (zh) ────────────────────────────────────────────────── + + describe('Chinese (zh)', () => { + test('fixes translated data tags', () => { + expect(fix('{% 数据variables.product.github %}', 'zh')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% 数据 variables.product.github %}', 'zh')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% 数据可重用s.foo %}', 'zh')).toBe('{% data reusables.foo %}') + }) + + test('fixes translated else and raw', () => { + expect(fix('{% 其他 %}', 'zh')).toBe('{% else %}') + expect(fix('{% 原始 %}', 'zh')).toBe('{% raw %}') + }) + + test('fixes Chinese if keyword', () => { + expect(fix('{ 如果 ghec %}', 'zh')).toBe('{% if ghec %}') + }) + + test('fixes stray Chinese then merged with HTML', () => { + expect(fix(',则为 {%
', 'zh')).toBe('
') + }) + + test('fixes 或 → or in ifversion tags', () => { + expect(fix('{% ifversion fpt 或 ghec %}', 'zh')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{%- elsif fpt 或 ghec %}', 'zh')).toBe('{%- elsif fpt or ghec %}') + }) + }) + + // ─── RUSSIAN (ru) ────────────────────────────────────────────────── + + describe('Russian (ru)', () => { + test('fixes AUTOTITLE with guillemets', () => { + expect(fix('[«AUTOTITLE»](/path)', 'ru')).toBe('[AUTOTITLE](/path)') + }) + + test('fixes АВТОЗАГОЛОВОК (translated AUTOTITLE)', () => { + expect(fix('[АВТОЗАГОЛОВОК](/path/to/article)', 'ru')).toBe('[AUTOTITLE](/path/to/article)') + }) + + test('fixes translated data tag variants', () => { expect(fix('{% данных variables.product.github %}', 'ru')).toBe( '{% data variables.product.github %}', ) + expect(fix('{% данных, variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% данными variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% данных организации variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% данным variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% данные variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% данных reusables.foo %}', 'ru')).toBe('{% data reusables.foo %}') + expect(fix('{% данные reusables.foo %}', 'ru')).toBe('{% data reusables.foo %}') }) - test('fixes translated else', () => { - expect(fix('{% ещё %}', 'ru')).toBe('{% else %}') - expect(fix('{% еще %}', 'ru')).toBe('{% else %}') + test('fixes broadened данных. pattern', () => { + expect(fix('{% данных.product.github %}', 'ru')).toBe('{% data variables.product.github %}') }) - test('fixes translated or in ifversion', () => { - expect(fix('{% ifversion fpt или ghec %}', 'ru')).toBe('{% ifversion fpt or ghec %}') + test('fixes переменных данных pattern', () => { + expect(fix('{% переменных данных.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% data переменных.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) }) - test('fixes translated not in ifversion', () => { - expect(fix('{% ifversion не ghes %}', 'ru')).toBe('{% ifversion not ghes %}') + test('fixes dot-prefix paths', () => { + expect(fix('{% .dependency-review.foo %}', 'ru')).toBe( + '{% data variables.dependency-review.foo %}', + ) + expect(fix('{% .code-scanning.foo %}', 'ru')).toBe('{% data variables.code-scanning.foo %}') + expect(fix('{%.dependency-review.foo %}', 'ru')).toBe( + '{% data variables.dependency-review.foo %}', + ) + expect(fix('{%.copilot.foo %}', 'ru')).toBe('{% data variables.copilot.foo %}') + }) + + test('fixes stray punctuation in data tags', () => { + expect(fix('{% данных" variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{%" variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{%, variables.product.github %}', 'ru')).toBe( + '{% data variables.product.github %}', + ) }) test('fixes translated raw/endraw', () => { + expect(fix('{% необработанного %}', 'ru')).toBe('{% raw %}') + expect(fix('{% необработанные %}', 'ru')).toBe('{% raw %}') expect(fix('{% необработанный %}', 'ru')).toBe('{% raw %}') + expect(fix('{% сырой %}', 'ru')).toBe('{% raw %}') expect(fix('{% нарисовать %}', 'ru')).toBe('{% endraw %}') + expect(fix('{% запроса %}', 'ru')).toBe('{% endraw %}') + }) + + test('fixes translated or (или) in ifversion tags', () => { + expect(fix('{%- ifversion fpt или ghec %}', 'ru')).toBe('{%- ifversion fpt or ghec %}') + expect(fix('{% ifversion fpt или ghec %}', 'ru')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{% ifversion ghec или fpt %}', 'ru')).toBe('{% ifversion ghec or fpt %}') + expect(fix('{% elsif ghec или ghes %}', 'ru')).toBe('{% elsif ghec or ghes %}') + expect(fix('{% ghes или ghec %}', 'ru')).toBe('{% ifversion ghes or ghec %}') }) - test('handles конец after raw as endraw', () => { - const input = '{% raw %}some content{% конец %}' - expect(fix(input, 'ru')).toBe('{% raw %}some content{% endraw %}') + test('fixes translated not (не)', () => { + expect(fix('{% ifversion не ghes %}', 'ru')).toBe('{% ifversion not ghes %}') + }) + + test('fixes translated else variants', () => { + expect(fix('{% еще %}', 'ru')).toBe('{% else %}') + expect(fix('{% ещё %}', 'ru')).toBe('{% else %}') }) - test('handles конец without raw as endif', () => { + test('fixes конец as context-aware end tag', () => { + expect(fix('{% raw %}some content{% конец %}', 'ru')).toBe( + '{% raw %}some content{% endraw %}', + ) expect(fix('{% конец %}', 'ru')).toBe('{% endif %}') }) - test('fixes translated feature flags', () => { + test('fixes translated feature flag names', () => { expect(fix('обязательный-2fa-dotcom-участник', 'ru')).toBe( 'mandatory-2fa-dotcom-contributors', ) + expect(fix('обязательный-2fa-участник-2023', 'ru')).toBe('mandatory-2fa-contributors-2023') + }) + + test('fixes other translated keywords', () => { + expect(fix('{% конечным %}', 'ru')).toBe('{% endif %}') + expect(fix('{% endif _%}', 'ru')).toBe('{% endif %}') + expect(fix('{% примечание %}', 'ru')).toBe('{% note %}') + expect(fix('{% конечных головщиков %}', 'ru')).toBe('{% endrowheaders %}') + expect(fix('{% эндкёрл %}', 'ru')).toBe('{% endcurl %}') + expect(fix('{% Эльсиф %}', 'ru')).toBe('{% else %}') + }) + + test('fixes translated reusable paths', () => { + expect(fix('{% повторно используемых данных.foo %}', 'ru')).toBe('{% data reusables.foo %}') + expect(fix('{% данных для повторного использования.foo %}', 'ru')).toBe( + '{% data reusables.foo %}', + ) + }) + + test('fixes double quotes in Russian YAML', () => { + expect(fix('href=""https://example.com"', 'ru')).toBe('href="https://example.com"') + }) + + test('fixes empty HTML tags', () => { + expect(fix('some text', 'ru')).toBe('some text') + expect(fix('some text', 'ru')).toBe('some text') + }) + + test('fixes Russian glossary template', () => { + expect(fix('{% для глоссария в глоссариях %}', 'ru')).toBe('{% for glossary in glossaries %}') + expect(fix('{{ глоссарий.term }}', 'ru')).toBe('{{ glossary.term }}') + expect(fix('{{ глоссарий.description }}', 'ru')).toBe('{{ glossary.description }}') + }) + + test('fixes rearranged data tag patterns', () => { + expect(fix('variables.product.github %данных {% }', 'ru')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes translated octicon names', () => { + expect( + fix('{% octicon "организация" aria-hidden="true" aria-label="organization" %}', 'ru'), + ).toBe('{% octicon "organization" aria-hidden="true" aria-label="organization" %}') + }) + }) + + // ─── FRENCH (fr) ─────────────────────────────────────────────────── + + describe('French (fr)', () => { + test('fixes translated data tags', () => { + expect(fix('{% données variables.product.github %}', 'fr')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% données réutilisables.foo %}', 'fr')).toBe('{% data reusables.foo %}') + expect(fix('{% variables de données.product.github %}', 'fr')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% données reusables.foo %}', 'fr')).toBe('{% data reusables.foo %}') + }) + + test('fixes translated else', () => { + expect(fix('{% autre %}', 'fr')).toBe('{% else %}') + }) + + test('fixes translated raw/endraw', () => { + expect(fix('{% brut %}', 'fr')).toBe('{% raw %}') + expect(fix('{% %brut }', 'fr')).toBe('{% raw %}') + expect(fix('{% redessiner %}', 'fr')).toBe('{% endraw %}') + }) + + test('fixes ou → or in ifversion tags', () => { + expect(fix('{% ifversion fpt ou ghec %}', 'fr')).toBe('{% ifversion fpt or ghec %}') + expect(fix('{%- elsif fpt ou ghec %}', 'fr')).toBe('{%- elsif fpt or ghec %}') + }) + + test('fixes translated block tags', () => { + expect(fix('{% remarque %}', 'fr')).toBe('{% note %}') + expect(fix('{%- remarque %}', 'fr')).toBe('{%- note %}') + expect(fix('{%- remarque -%}', 'fr')).toBe('{%- note -%}') + expect(fix('{% avertissement %}', 'fr')).toBe('{% warning %}') + expect(fix('{%- avertissement %}', 'fr')).toBe('{%- warning %}') + expect(fix('{%- avertissement -%}', 'fr')).toBe('{%- warning -%}') + expect(fix('{% conseil %}', 'fr')).toBe('{% tip %}') + expect(fix('{%- conseil %}', 'fr')).toBe('{%- tip %}') + expect(fix('{%- conseil -%}', 'fr')).toBe('{%- tip -%}') }) }) - describe('Chinese (zh)', () => { - test('fixes translated if', () => { - expect(fix('{ 如果 ghec %}', 'zh')).toBe('{% if ghec %}') + // ─── KOREAN (ko) ────────────────────────────────────────────────── + + describe('Korean (ko)', () => { + test('fixes AUTOTITLE with Korean suffix', () => { + expect(fix('[AUTOTITLE"을 참조하세요]', 'ko')).toBe('[AUTOTITLE]') }) - test('fixes stray Chinese then merged with HTML', () => { - expect(fix(',则为 {%
', 'zh')).toBe('
') + test('fixes translated data tags', () => { + expect(fix('{% 데이터 variables.product.github %}', 'ko')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% 데이터 reusables.foo %}', 'ko')).toBe('{% data reusables.foo %}') + expect(fix('{% 데이터 변수.product.github %}', 'ko')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% 데이터 변숫값.product.github %}', 'ko')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% dada variables.product.github %}', 'ko')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes extra percent before data', () => { + expect(fix('{% % data variables.product.github %}', 'ko')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes translated keywords', () => { + expect(fix('{% 기타 %}', 'ko')).toBe('{% else %}') + expect(fix('{% 참고 %}', 'ko')).toBe('{% note %}') + expect(fix('{% 원시 %}', 'ko')).toBe('{% raw %}') + }) + + test('fixes 또는 → or in ifversion tags', () => { + expect(fix('{% ifversion fpt 또는 ghec %}', 'ko')).toBe('{% ifversion fpt or ghec %}') + }) + + test('fixes Korean glossary template', () => { + expect(fix('{{ 용어집.term }}', 'ko')).toBe('{{ glossary.term }}') }) }) - describe('Generic fixes', () => { - test('fixes double braces', () => { + // ─── GERMAN (de) ────────────────────────────────────────────────── + + describe('German (de)', () => { + test('fixes translated data tags', () => { + expect(fix('{% Daten variables.product.github %}', 'de')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% daten variables.product.github %}', 'de')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% Data variables.product.github %}', 'de')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% Daten reusables.foo %}', 'de')).toBe('{% data reusables.foo %}') + }) + + test('fixes hyphenated data tags without space', () => { + expect(fix('{%-Daten variables.product.github %}', 'de')).toBe( + '{%- data variables.product.github %}', + ) + expect(fix('{%-Daten-variables.product.github %}', 'de')).toBe( + '{%- data variables.product.github %}', + ) + }) + + test('fixes oder → or in ifversion tags', () => { + expect(fix('{%- ifversion fpt oder ghec %}', 'de')).toBe('{%- ifversion fpt or ghec %}') + expect(fix('{% ifversion fpt oder ghec %}', 'de')).toBe('{% ifversion fpt or ghec %}') + }) + + test('fixes translated block tags', () => { + expect(fix('{% Hinweis %}', 'de')).toBe('{% note %}') + expect(fix('{%- Hinweis %}', 'de')).toBe('{%- note %}') + expect(fix('{%- Hinweis -%}', 'de')).toBe('{%- note -%}') + expect(fix('{% Warnung %}', 'de')).toBe('{% warning %}') + expect(fix('{%- Warnung %}', 'de')).toBe('{%- warning %}') + expect(fix('{%- Warnung -%}', 'de')).toBe('{%- warning -%}') + expect(fix('{% Tipp %}', 'de')).toBe('{% tip %}') + expect(fix('{%- Tipp %}', 'de')).toBe('{%- tip %}') + expect(fix('{%- Tipp -%}', 'de')).toBe('{%- tip -%}') + }) + + test('fixes für → for in for-loops', () => { + expect(fix('{%- für version in tables.copilot.ides -%}', 'de')).toBe( + '{%- for version in tables.copilot.ides -%}', + ) + expect(fix('{% für entry in list %}', 'de')).toBe('{% for entry in list %}') + }) + }) + + // ─── GENERIC FIXES ──────────────────────────────────────────────── + + describe('Generic fixes (all languages)', () => { + test('fixes AUTOTITLE corruption patterns', () => { + expect(fix('["AUTOTITLE](/path)', 'es')).toBe('"[AUTOTITLE](/path)') + expect(fix('[ AUTOTITLE](/path)', 'es')).toBe('[AUTOTITLE](/path)') + expect(fix('[ "AUTOTITLE](/path)', 'es')).toBe('[AUTOTITLE](/path)') + }) + + test('fixes double-brace Liquid tag corruptions', () => { + expect(fix('{{% octicon "gear" %}', 'es')).toBe('{% octicon "gear" %}') + expect(fix('{{% endif %}}', 'es')).toBe('{% endif %}') + expect(fix('{{% endif %}', 'es')).toBe('{% endif %}') + expect(fix('{{%endif %}', 'es')).toBe('{% endif %}') expect(fix('{{% data variables.product.github %}', 'es')).toBe( '{% data variables.product.github %}', ) + expect(fix('{{% data reusables.foo %}', 'es')).toBe('{% data reusables.foo %}') + expect(fix('{{% ifversion ghec %}', 'es')).toBe('{% ifversion ghec %}') + expect(fix('{{% else %}}', 'es')).toBe('{% else %}') + expect(fix('{{% elsif ghes %}', 'es')).toBe('{% elsif ghes %}') + expect(fix('{{% vscode %}}', 'es')).toBe('{% vscode %}') + expect(fix('{{% endvscode %}}', 'es')).toBe('{% endvscode %}') + expect(fix('{{% endvisualstudio %}}', 'es')).toBe('{% endvisualstudio %}') + }) + + test('fixes duplicated tag openers', () => { + expect(fix('{% {% data variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{%{% data variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) }) - test('fixes double percent in opening', () => { + test('fixes multiple-percent corruptions', () => { expect(fix('{%% data variables.product.github %}', 'es')).toBe( '{% data variables.product.github %}', ) + expect(fix('{%%% data variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% data variables.product.github %%}', 'es')).toBe( + '{% data variables.product.github %}', + ) }) - test('fixes missing percent after brace', () => { - expect(fix('{else %}', 'es')).toBe('{% else %}') - expect(fix('{endif %}', 'es')).toBe('{% endif %}') + test('fixes stray percent before tag open', () => { + expect(fix('%{% data variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('%{% ifversion ghec %}', 'es')).toBe('{% ifversion ghec %}') }) - test('fixes missing space after {%', () => { - expect(fix('{%else %}', 'es')).toBe('{% else %}') + test('fixes corrupted endif delimiter', () => { + expect(fix('{ endif %}%', 'es')).toBe('{% endif %}') }) test('fixes empty tag as else', () => { @@ -132,18 +652,92 @@ describe('correctTranslatedContentStrings', () => { test('fixes empty tag with space as endif', () => { expect(fix('{% }', 'es')).toBe('{% endif %}') + expect(fix('{% }', 'es')).toBe('{% endif %}') }) - test('fixes bold markup injected in closing', () => { - expect(fix('%**}', 'es')).toBe('%}**') + test('fixes missing percent after brace', () => { + expect(fix('{else %}', 'es')).toBe('{% else %}') + expect(fix('{endif %}', 'es')).toBe('{% endif %}') + }) + + test('fixes missing space after {%', () => { + expect(fix('{%else %}', 'es')).toBe('{% else %}') }) - test('fixes {%** as else with bold', () => { + test('fixes bold markup injected in tag', () => { + expect(fix('%**}', 'es')).toBe('%}**') expect(fix('{%**text**{% endif %}', 'es')).toBe('{% else %}**text**{% endif %}') }) + test('fixes double-brace with missing data', () => { + expect(fix('{{% variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes extra closing brace', () => { + expect(fix('{% data variables.product.github %}}', 'es')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes common Latin-script typos', () => { + expect(fix('{% variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{% datavariables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes empty tag corruptions with Portuguese remnants', () => { + expect(fix('{% %} de dados reusables.foo %}', 'pt')).toBe('{% data reusables.foo %}') + expect(fix('{% %} de dados variables.product.github %}', 'pt')).toBe( + '{% data variables.product.github %}', + ) + }) + + test('fixes {% %} as endraw when following raw', () => { + expect(fix('{% raw %}some content{% %}', 'es')).toBe('{% raw %}some content{% endraw %}') + }) + + test('fixes {% %} as else between ifversion and endif', () => { + expect(fix('{% ifversion ghec %}A{% %}B{% endif %}', 'es')).toBe( + '{% ifversion ghec %}A{% else %}B{% endif %}', + ) + }) + + test('fixes remaining {% %} as endif', () => { + expect(fix('{% %}', 'es')).toBe('{% endif %}') + }) + + test('fixes spaces inside Liquid tag delimiters', () => { + expect(fix('{ % endif % }', 'es')).toBe('{% endif %}') + expect(fix('{ % data variables.product.github % }', 'es')).toBe( + '{% data variables.product.github %}', + ) + }) + test('strips stray {% before non-ASCII text', () => { expect(fix('{% Привет мир', 'ru')).toBe('Привет мир') + expect(fix('{% 你好世界', 'zh')).toBe('你好世界') + expect(fix('{% こんにちは', 'ja')).toBe('こんにちは') + }) + + test('strips stray {% . pattern', () => { + expect(fix('{% . product.github %}', 'es')).toBe('product.github %}') + }) + + test('fixes unclosed data tags with translated text', () => { + expect(fix('{% data variables.product.github %las herramientas}', 'es')).toBe( + '{% data variables.product.github %}las herramientas}', + ) + }) + + test('fixes unclosed data tags with non-ASCII following', () => { + expect(fix('{% data variables.product.github Привет', 'ru')).toBe( + '{% data variables.product.github %} Привет', + ) }) test('recovers linebreaks from English', () => { @@ -151,5 +745,172 @@ describe('correctTranslatedContentStrings', () => { const translated = '{% endif %} Some text' expect(fix(translated, 'es', en)).toBe('{% endif %}\nSome text') }) + + test('does not change linebreaks when English has same pattern', () => { + const en = '{% endif %} Some text' + const translated = '{% endif %} Some text' + expect(fix(translated, 'es', en)).toBe('{% endif %} Some text') + }) + + test('recovers linebreaks for endif-pipe table patterns', () => { + const en = '{% endif %}\n| Column |' + const translated = '{% endif %} | Column |' + expect(fix(translated, 'es', en)).toBe('{% endif %}\n| Column |') + }) + + test('fixes collapsed Markdown table rows', () => { + expect(fix('Cell1 | | Cell2', 'es')).toBe('Cell1 |\n| Cell2') + }) + + test('fixes final catch-all double-brace patterns', () => { + expect(fix('{{% data variables.product.github %}', 'es')).toBe( + '{% data variables.product.github %}', + ) + expect(fix('{{% ifversion ghec %}', 'es')).toBe('{% ifversion ghec %}') + expect(fix('{{%endif %}', 'es')).toBe('{% endif %}') + expect(fix('{{%else %}', 'es')).toBe('{% else %}') + expect(fix('{{%raw %}', 'es')).toBe('{% raw %}') + expect(fix('{{% raw %}', 'es')).toBe('{% raw %}') + }) + }) + + // ─── EDGE CASES ──────────────────────────────────────────────────── + + describe('Edge cases', () => { + test('handles empty string', () => { + expect(fix('', 'es')).toBe('') + expect(fix('', 'ja')).toBe('') + expect(fix('', 'ru')).toBe('') + }) + + test('handles content with no Liquid tags', () => { + const plain = 'This is plain text with no Liquid tags at all.' + expect(fix(plain, 'es')).toBe(plain) + expect(fix(plain, 'ja')).toBe(plain) + }) + + test('handles content with only valid Liquid tags', () => { + const valid = + '{% data variables.product.github %} is great. {% ifversion ghec %}Yes{% endif %}' + expect(fix(valid, 'es')).toBe(valid) + }) + + test('handles multiple corruptions in same line', () => { + const input = '{{% данных variables.product.github %}} и {{% данных reusables.foo %}}' + const result = fix(input, 'ru') + expect(result).toContain('{% data variables.product.github %}') + expect(result).toContain('{% data reusables.foo %}') + }) + + test('handles unknown language code gracefully', () => { + const input = '{% data variables.product.github %}' + expect(fix(input, 'xx')).toBe(input) + }) + + test('handles missing context gracefully', () => { + const result = correctTranslatedContentStrings('{% data variables.product.github %}', '', {}) + expect(result).toBe('{% data variables.product.github %}') + }) + + test('preserves valid HTML within content', () => { + const input = '

{% data variables.product.github %}

' + expect(fix(input, 'es')).toBe(input) + }) + + test('handles very long single lines', () => { + const longLine = '{% data variables.product.github %} '.repeat(500) + const result = fix(longLine, 'es') + expect(result).not.toBe('') + expect(result).toContain('{% data variables.product.github %}') + }) + + test('combined corruptions chain correctly', () => { + const input = '{{% данных variables.product.github %}}' + const result = fix(input, 'ru') + expect(result).toBe('{% data variables.product.github %}') + }) + + test('Russian rearranged elsif', () => { + const input = '{% ifversion ghec %}content{% Эльсиф %}other{% endif %}' + const result = fix(input, 'ru') + expect(result).toContain('{% else %}') + }) + }) + + // ─── PERFORMANCE REGRESSION ──────────────────────────────────────── + + describe('Performance regression', () => { + test('linebreak recovery does not degrade quadratically on large content', () => { + const tagCount = 500 + const content = Array(tagCount).fill('{% endif %} ').join('some text ') + const english = content.replace(/\} /g, '}\n') + + const start = performance.now() + fix(content, 'es', english) + const elapsed = performance.now() - start + + // Generous threshold to avoid CI flakiness; the real concern is + // O(n²) regression which would push this into multi-second territory. + expect(elapsed).toBeLessThan(500) + }) + + test('handles large real-world page content efficiently', () => { + const block = ` +{% ifversion ghec %} +{% data variables.product.prodname_copilot %} está disponible. +{% else %} +Solo para enterprise. +{% endif %} + +Para más información, consulta "[AUTOTITLE](/path)". + +| Columna | Descripción | +|---|---| +| {% data variables.product.prodname_copilot_short %} | Herramienta de IA | +` + const largeContent = block.repeat(100) + const largeEnglish = largeContent + .replace(/está disponible/g, 'is available') + .replace(/Solo para enterprise/g, 'Enterprise only') + + const start = performance.now() + for (let i = 0; i < 10; i++) { + fix(largeContent, 'es', largeEnglish) + } + const elapsed = performance.now() - start + + // 10 iterations of ~50KB content; generous threshold to avoid CI flakiness. + // O(n²) regression would push this into multi-second territory. + expect(elapsed).toBeLessThan(2000) + }) + + test('split-based raw→endraw does not backtrack on large content', () => { + // Before the fix, `[^]*?` regex caused ~20s backtracking on this. + // Split-based approach is O(n) — should be <50ms. + const prefix = `{% raw %}${'a'.repeat(50000)}` + const suffix = `{% конец %}{% raw %}${'b'.repeat(25000)}` + const content = prefix + suffix + + const start = performance.now() + const result = fix(content, 'ru') + const elapsed = performance.now() - start + + expect(result).toContain('{% endraw %}') + // Before the fix this took ~20s. Generous threshold for CI; the real + // concern is catastrophic backtracking, not marginal speed. + expect(elapsed).toBeLessThan(2000) + }) + + test('large content without raw tags is not penalized', () => { + // 75KB of content with no {% raw %} should be fast + const content = '{% ifversion ghec %}hello{% endif %}\n'.repeat(2000) + + const start = performance.now() + fix(content, 'ru') + const elapsed = performance.now() - start + + // Generous threshold; regression would be multi-second. + expect(elapsed).toBeLessThan(2000) + }) }) })