diff --git a/.github/actions-scripts/staging-deploy.js b/.github/actions-scripts/staging-deploy.js new file mode 100755 index 0000000000..4ba5e4a8e7 --- /dev/null +++ b/.github/actions-scripts/staging-deploy.js @@ -0,0 +1,74 @@ +#!/usr/bin/env node + +import parsePrUrl from '../../script/deployment/parse-pr-url.js' +import getOctokit from '../../script/helpers/github.js' +import deployToStaging from '../../script/deployment/deploy-to-staging.js' + +const { GITHUB_TOKEN, HEROKU_API_TOKEN } = process.env + +// Exit if GitHub Actions PAT is not found +if (!GITHUB_TOKEN) { + throw new Error('You must supply a GITHUB_TOKEN environment variable!') +} + +// Exit if Heroku API token is not found +if (!HEROKU_API_TOKEN) { + throw new Error('You must supply a HEROKU_API_TOKEN environment variable!') +} + +// This helper uses the `GITHUB_TOKEN` implicitly! +// We're using our usual version of Octokit vs. the provided `github` +// instance to avoid versioning discrepancies. +const octokit = getOctokit() + +const { RUN_ID, PR_URL, SOURCE_BLOB_URL, CONTEXT_NAME, ACTIONS_RUN_LOG, HEAD_SHA } = process.env +if (!RUN_ID) { + throw new Error('$RUN_ID not set') +} +if (!PR_URL) { + throw new Error('$PR_URL not set') +} +if (!SOURCE_BLOB_URL) { + throw new Error('$SOURCE_BLOB_URL not set') +} +if (!CONTEXT_NAME) { + throw new Error('$CONTEXT_NAME not set') +} +if (!ACTIONS_RUN_LOG) { + throw new Error('$ACTIONS_RUN_LOG not set') +} +if (!HEAD_SHA) { + throw new Error('$HEAD_SHA not set') +} + +const { owner, repo, pullNumber } = parsePrUrl(PR_URL) +if (!owner || !repo || !pullNumber) { + throw new Error( + `'pullRequestUrl' input must match URL format 'https://github.com/github/(docs|docs-internal)/pull/123' but was '${PR_URL}'` + ) +} + +const { data: pullRequest } = await octokit.pulls.get({ + owner, + repo, + pull_number: pullNumber, +}) + +await deployToStaging({ + octokit, + pullRequest, + forceRebuild: false, + // These parameters will ONLY be set by Actions + sourceBlobUrl: SOURCE_BLOB_URL, + runId: RUN_ID, +}) + +await octokit.repos.createCommitStatus({ + owner, + repo, + sha: HEAD_SHA, + context: CONTEXT_NAME, + state: 'success', + description: 'Successfully deployed! See logs.', + target_url: ACTIONS_RUN_LOG, +}) diff --git a/.github/actions-scripts/staging-undeploy.js b/.github/actions-scripts/staging-undeploy.js new file mode 100755 index 0000000000..5704008da8 --- /dev/null +++ b/.github/actions-scripts/staging-undeploy.js @@ -0,0 +1,50 @@ +#!/usr/bin/env node + +import parsePrUrl from '../../script/deployment/parse-pr-url.js' +import getOctokit from '../../script/helpers/github.js' +import undeployFromStaging from '../../script/deployment/undeploy-from-staging.js' + +const { GITHUB_TOKEN, HEROKU_API_TOKEN } = process.env + +// Exit if GitHub Actions PAT is not found +if (!GITHUB_TOKEN) { + throw new Error('You must supply a GITHUB_TOKEN environment variable!') +} + +// Exit if Heroku API token is not found +if (!HEROKU_API_TOKEN) { + throw new Error('You must supply a HEROKU_API_TOKEN environment variable!') +} + +// This helper uses the `GITHUB_TOKEN` implicitly! +// We're using our usual version of Octokit vs. the provided `github` +// instance to avoid versioning discrepancies. +const octokit = getOctokit() + +const { RUN_ID, PR_URL } = process.env + +if (!RUN_ID) { + throw new Error('$RUN_ID not set') +} +if (!PR_URL) { + throw new Error('$PR_URL not set') +} + +const { owner, repo, pullNumber } = parsePrUrl(PR_URL) +if (!owner || !repo || !pullNumber) { + throw new Error( + `'pullRequestUrl' input must match URL format 'https://github.com/github/(docs|docs-internal)/pull/123' but was '${PR_URL}'` + ) +} + +const { data: pullRequest } = await octokit.pulls.get({ + owner, + repo, + pull_number: pullNumber, +}) + +await undeployFromStaging({ + octokit, + pullRequest: pullRequest, + runId: RUN_ID, +}) diff --git a/.github/workflows/prod-build-deploy.yml b/.github/workflows/prod-build-deploy.yml index df42174b41..137c6acfd0 100644 --- a/.github/workflows/prod-build-deploy.yml +++ b/.github/workflows/prod-build-deploy.yml @@ -21,7 +21,7 @@ concurrency: jobs: build-and-deploy: if: ${{ github.repository == 'github/docs-internal'}} - runs-on: ubuntu-latest + runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }} timeout-minutes: 15 steps: - name: Check out repo diff --git a/.github/workflows/staging-deploy-pr.yml b/.github/workflows/staging-deploy-pr.yml index 958e6c2c1e..9d387c63f4 100644 --- a/.github/workflows/staging-deploy-pr.yml +++ b/.github/workflows/staging-deploy-pr.yml @@ -67,6 +67,10 @@ jobs: BUILD_ACTIONS_RUN_ID: ${{ env.BUILD_ACTIONS_RUN_ID }} with: script: | + + // Curious about what version of node you get + console.log('Node version:', process.version) + // In order to find out the PR info for a forked repo, we must query // the API for more info based on the originating workflow run const { BUILD_ACTIONS_RUN_ID } = process.env @@ -482,12 +486,8 @@ jobs: - name: Install dependencies run: npm ci - - name: Install one-off development-only dependencies - run: npm install --no-save --include=optional esm - - name: Deploy id: deploy - uses: actions/github-script@2b34a689ec86a68d8ab9478298f91d5401337b7d env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }} @@ -499,69 +499,8 @@ jobs: ACTIONS_RUN_LOG: ${{ env.ACTIONS_RUN_LOG }} HEAD_SHA: ${{ needs.pr-metadata.outputs.head_sha }} ALLOWED_POLLING_FAILURES_PER_PHASE: '15' - with: - script: | - const { GITHUB_TOKEN, HEROKU_API_TOKEN } = process.env - - // Exit if GitHub Actions PAT is not found - if (!GITHUB_TOKEN) { - throw new Error('You must supply a GITHUB_TOKEN environment variable!') - } - - // Exit if Heroku API token is not found - if (!HEROKU_API_TOKEN) { - throw new Error('You must supply a HEROKU_API_TOKEN environment variable!') - } - - // Workaround to allow us to load ESM files with `require(...)` - const esm = require('esm') - require = esm({}) - - const { default: parsePrUrl } = require('./script/deployment/parse-pr-url') - const { default: getOctokit } = require('./script/helpers/github') - const { default: deployToStaging } = require('./script/deployment/deploy-to-staging') - - // This helper uses the `GITHUB_TOKEN` implicitly! - // We're using our usual version of Octokit vs. the provided `github` - // instance to avoid versioning discrepancies. - const octokit = getOctokit() - - try { - const { PR_URL, SOURCE_BLOB_URL, CONTEXT_NAME, ACTIONS_RUN_LOG, HEAD_SHA } = process.env - const { owner, repo, pullNumber } = parsePrUrl(PR_URL) - if (!owner || !repo || !pullNumber) { - throw new Error(`'pullRequestUrl' input must match URL format 'https://github.com/github/(docs|docs-internal)/pull/123' but was '${PR_URL}'`) - } - - const { data: pullRequest } = await octokit.pulls.get({ - owner, - repo, - pull_number: pullNumber - }) - - await deployToStaging({ - octokit, - pullRequest, - forceRebuild: false, - // These parameters will ONLY be set by Actions - sourceBlobUrl: SOURCE_BLOB_URL, - runId: context.runId - }) - - await github.repos.createCommitStatus({ - owner, - repo, - sha: HEAD_SHA, - context: CONTEXT_NAME, - state: 'success', - description: 'Successfully deployed! See logs.', - target_url: ACTIONS_RUN_LOG - }) - } catch (error) { - console.error(`Failed to deploy to staging: ${error.message}`) - console.error(error) - throw error - } + RUN_ID: ${{ github.run_id }} + run: .github/actions-scripts/staging-deploy.js - name: Mark the deployment as inactive if timed out uses: actions/github-script@2b34a689ec86a68d8ab9478298f91d5401337b7d diff --git a/.github/workflows/staging-undeploy-pr.yml b/.github/workflows/staging-undeploy-pr.yml index d0c3229aa4..bb5bfa2783 100644 --- a/.github/workflows/staging-undeploy-pr.yml +++ b/.github/workflows/staging-undeploy-pr.yml @@ -69,51 +69,13 @@ jobs: - name: Install dependencies run: npm ci - - name: Install one-off development-only dependencies - run: npm install --no-save --include=optional esm - - name: Undeploy - uses: actions/github-script@2b34a689ec86a68d8ab9478298f91d5401337b7d env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }} - with: - script: | - const { GITHUB_TOKEN, HEROKU_API_TOKEN } = process.env - - // Exit if GitHub Actions PAT is not found - if (!GITHUB_TOKEN) { - throw new Error('You must supply a GITHUB_TOKEN environment variable!') - } - - // Exit if Heroku API token is not found - if (!HEROKU_API_TOKEN) { - throw new Error('You must supply a HEROKU_API_TOKEN environment variable!') - } - - // Workaround to allow us to load ESM files with `require(...)` - const esm = require('esm') - require = esm({}) - - const { default: getOctokit } = require('./script/helpers/github') - const { default: undeployFromStaging } = require('./script/deployment/undeploy-from-staging') - - // This helper uses the `GITHUB_TOKEN` implicitly! - // We're using our usual version of Octokit vs. the provided `github` - // instance to avoid versioning discrepancies. - const octokit = getOctokit() - - try { - await undeployFromStaging({ - octokit, - pullRequest: context.payload.pull_request, - runId: context.runId - }) - } catch (error) { - console.error(`Failed to undeploy from staging: ${error.message}`) - console.error(error) - throw error - } + RUN_ID: ${{ github.run_id }} + PR_URL: ${{ github.event.pull_request.html_url }} + run: .github/actions-scripts/staging-undeploy.js - if: ${{ always() }} name: Remove the label from the PR to unblock deployment diff --git a/README.md b/README.md index c57336af62..95c69a293b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# GitHub Docs +# GitHub Docs This repository contains the documentation website code and Markdown source files for [docs.github.com](https://docs.github.com). diff --git a/components/article/ArticlePage.tsx b/components/article/ArticlePage.tsx index f9872a9c0a..086f4cba2a 100644 --- a/components/article/ArticlePage.tsx +++ b/components/article/ArticlePage.tsx @@ -15,6 +15,7 @@ import { MarkdownContent } from 'components/ui/MarkdownContent' import { Lead } from 'components/ui/Lead' import { ArticleGridLayout } from './ArticleGridLayout' import { PlatformPicker } from 'components/article/PlatformPicker' +import { ToolPicker } from 'components/article/ToolPicker' // Mapping of a "normal" article to it's interactive counterpart const interactiveAlternatives: Record = { @@ -52,6 +53,7 @@ export const ArticlePage = () => { contributor, permissions, includesPlatformSpecificContent, + includesToolSpecificContent, product, miniTocItems, currentLearningTrack, @@ -111,6 +113,7 @@ export const ArticlePage = () => { )} {includesPlatformSpecificContent && } + {includesToolSpecificContent && } {product && ( ('.extended-markdown')) markdowns diff --git a/components/article/ToolPicker.tsx b/components/article/ToolPicker.tsx new file mode 100644 index 0000000000..740e5b5042 --- /dev/null +++ b/components/article/ToolPicker.tsx @@ -0,0 +1,117 @@ +import { useEffect, useState } from 'react' +import Cookies from 'js-cookie' +import { UnderlineNav } from '@primer/components' +import { sendEvent, EventType } from 'components/lib/events' +import { preserveAnchorNodePosition } from 'scroll-anchoring' + +import { useArticleContext } from 'components/context/ArticleContext' + +// example: http://localhost:4000/en/codespaces/developing-in-codespaces/creating-a-codespace + +// Nota bene: tool === application +// Nota bene: picker === switcher + +const supportedTools = ['cli', 'desktop', 'webui', 'curl', 'codespaces', 'vscode'] +const toolTitles = { + webui: 'Web browser', + cli: 'GitHub CLI', + curl: 'cURL', + desktop: 'Desktop', + codespaces: 'Codespaces', + vscode: 'Visual Studio Code', +} as Record + +// Imperatively modify article content to show only the selected tool +// find all platform-specific *block* elements and hide or show as appropriate +// example: {% webui %} block content {% endwebui %} +function showToolSpecificContent(tool: string) { + const markdowns = Array.from(document.querySelectorAll('.extended-markdown')) + markdowns + .filter((el) => supportedTools.some((tool) => el.classList.contains(tool))) + .forEach((el) => { + el.style.display = el.classList.contains(tool) ? '' : 'none' + }) + + // find all tool-specific *inline* elements and hide or show as appropriate + // example: inline content + const toolEls = Array.from( + document.querySelectorAll(supportedTools.map((tool) => `.tool-${tool}`).join(', ')) + ) + toolEls.forEach((el) => { + el.style.display = el.classList.contains(`tool-${tool}`) ? '' : 'none' + }) +} + +function getDefaultTool(defaultTool: string | undefined, detectedTools: Array): string { + // If there is a default tool and the tool is present on this page + if (defaultTool && detectedTools.includes(defaultTool)) return defaultTool + + // Default to webui if present (this is generally the case where we show UI/CLI/Desktop info) + if (detectedTools.includes('webui')) return 'webui' + + // Default to cli if present (this is generally the case where we show curl/CLI info) + if (detectedTools.includes('cli')) return 'cli' + + // Otherwise, just choose the first detected tool + return detectedTools[0] +} + +type Props = { + variant?: 'subnav' | 'tabnav' | 'underlinenav' +} +export const ToolPicker = ({ variant = 'subnav' }: Props) => { + const { defaultTool, detectedTools } = useArticleContext() + const [currentTool, setCurrentTool] = useState(getDefaultTool(defaultTool, detectedTools)) + + const sharedContainerProps = { + 'data-testid': 'tool-picker', + 'aria-label': 'Tool picker', + 'data-default-tool': defaultTool, + className: 'mb-4', + } + + // Run on mount for client-side only features + useEffect(() => { + // If the user selected a tool preference and the tool is present on this page + // Has to be client-side only for cookie reading + const cookieValue = Cookies.get('toolPreferred') + if (cookieValue && detectedTools.includes(cookieValue)) { + setCurrentTool(cookieValue) + } + }, []) + + function onClickTool(tool: string) { + setCurrentTool(tool) + preserveAnchorNodePosition(document, () => { + showToolSpecificContent(tool) + }) + sendEvent({ + type: EventType.preference, + preference_name: 'application', + preference_value: tool, + }) + Cookies.set('toolPreferred', tool, { sameSite: 'strict', secure: true }) + } + + if (variant === 'underlinenav') { + return ( + + {detectedTools.map((tool) => ( + { + onClickTool(tool) + }} + > + {toolTitles[tool]} + + ))} + + ) + } + + return null +} diff --git a/components/context/ArticleContext.tsx b/components/context/ArticleContext.tsx index 21160819ee..dd3a6de0e0 100644 --- a/components/context/ArticleContext.tsx +++ b/components/context/ArticleContext.tsx @@ -22,10 +22,13 @@ export type ArticleContextT = { contributor: { name: string; URL: string } | null permissions?: string includesPlatformSpecificContent: boolean + includesToolSpecificContent: boolean defaultPlatform?: string + defaultTool?: string product?: string currentLearningTrack?: LearningTrack detectedPlatforms: Array + detectedTools: Array } export const ArticleContext = createContext(null) @@ -60,9 +63,12 @@ export const getArticleContextFromRequest = (req: any): ArticleContextT => { contributor: page.contributor || null, permissions: page.permissions || '', includesPlatformSpecificContent: page.includesPlatformSpecificContent || false, + includesToolSpecificContent: page.includesToolSpecificContent || false, defaultPlatform: page.defaultPlatform || '', + defaultTool: page.defaultTool || '', product: page.product || '', currentLearningTrack: req.context.currentLearningTrack, detectedPlatforms: page.detectedPlatforms || [], + detectedTools: page.detectedTools || [], } } diff --git a/components/lib/display-tool-specific-content.ts b/components/lib/display-tool-specific-content.ts deleted file mode 100644 index c14de929b0..0000000000 --- a/components/lib/display-tool-specific-content.ts +++ /dev/null @@ -1,100 +0,0 @@ -import Cookies from 'js-cookie' -import { preserveAnchorNodePosition } from 'scroll-anchoring' - -import { sendEvent, EventType } from './events' - -const supportedTools = ['cli', 'desktop', 'webui', 'curl', 'codespaces', 'vscode'] - -export default function displayToolSpecificContent() { - const toolElements = Array.from(document.querySelectorAll('.extended-markdown')).filter((el) => - supportedTools.some((tool) => el.classList.contains(tool)) - ) as Array - - if (!toolElements.length) return - - const detectedTools = toolElements.flatMap((el) => - Array.from(el.classList).filter((className) => supportedTools.includes(className)) - ) as Array - - const tool = getDefaultTool(detectedTools) - - showToolSpecificContent(tool, toolElements) - - hideSwitcherLinks(detectedTools) - - highlightTabForTool(tool) - - // configure links for switching tool content - switcherLinks().forEach((link) => { - link.addEventListener('click', (event) => { - event.preventDefault() - const target = event.target as HTMLElement - highlightTabForTool(target.dataset.tool || '') - preserveAnchorNodePosition(document, () => { - showToolSpecificContent(target.dataset.tool || '', toolElements) - }) - - // Save this preference as a cookie. - Cookies.set('toolPreferred', target.dataset.tool || '', { sameSite: 'strict', secure: true }) - - // Send event data - sendEvent({ - type: EventType.preference, - preference_name: 'application', - preference_value: target.dataset.tool, - }) - }) - }) -} - -function highlightTabForTool(tool: string) { - // (de)activate switcher link appearances - switcherLinks().forEach((link) => { - link.dataset.tool === tool ? link.classList.add('selected') : link.classList.remove('selected') - }) -} - -function showToolSpecificContent(tool: string, toolElements: Array) { - // show the content only for the highlighted tool - toolElements - .filter((el) => supportedTools.some((tool) => el.classList.contains(tool))) - .forEach((el) => { - el.style.display = el.classList.contains(tool) ? '' : 'none' - }) -} - -// hide links for any tool-specific sections that are not present -function hideSwitcherLinks(detectedTools: Array) { - const links = Array.from(document.querySelectorAll('a.tool-switcher')) as Array - links.forEach((link) => { - if (detectedTools.includes(link.dataset.tool || '')) return - link.style.display = 'none' - }) -} - -function getDefaultTool(detectedTools: Array): string { - // If the user selected a tool preference and the tool is present on this page - const cookieValue = Cookies.get('toolPreferred') - if (cookieValue && detectedTools.includes(cookieValue)) return cookieValue - - // If there is a default tool and the tool is present on this page - const defaultToolEl = document.querySelector('[data-default-tool]') as HTMLElement - - const defaultToolValue = defaultToolEl ? defaultToolEl.dataset.defaultTool : '' - if (defaultToolValue && detectedTools.includes(defaultToolValue)) { - return defaultToolValue - } - - // Default to webui if present (this is generally the case where we show UI/CLI/Desktop info) - if (detectedTools.includes('webui')) return 'webui' - - // Default to cli if present (this is generally the case where we show curl/CLI info) - if (detectedTools.includes('cli')) return 'cli' - - // Otherwise, just choose the first detected tool - return detectedTools[0] -} - -function switcherLinks() { - return Array.from(document.querySelectorAll('a.tool-switcher')) as Array -} diff --git a/content/admin/advanced-security/configuring-code-scanning-for-your-appliance.md b/content/admin/advanced-security/configuring-code-scanning-for-your-appliance.md index 6f8771d628..5026c04d1a 100644 --- a/content/admin/advanced-security/configuring-code-scanning-for-your-appliance.md +++ b/content/admin/advanced-security/configuring-code-scanning-for-your-appliance.md @@ -27,6 +27,10 @@ You can configure {% data variables.product.prodname_code_scanning %} to run {% {% data reusables.code-scanning.enabling-options %} +## Checking whether your license includes {% data variables.product.prodname_GH_advanced_security %} + +{% data reusables.advanced-security.check-for-ghas-license %} + ## Prerequisites for {% data variables.product.prodname_code_scanning %} - A license for {% data variables.product.prodname_GH_advanced_security %}{% ifversion ghes > 3.0 %} (see "[About billing for {% data variables.product.prodname_GH_advanced_security %}](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)"){% endif %} diff --git a/content/admin/advanced-security/configuring-secret-scanning-for-your-appliance.md b/content/admin/advanced-security/configuring-secret-scanning-for-your-appliance.md index 9a3036f21a..1ff1342d1f 100644 --- a/content/admin/advanced-security/configuring-secret-scanning-for-your-appliance.md +++ b/content/admin/advanced-security/configuring-secret-scanning-for-your-appliance.md @@ -22,6 +22,10 @@ topics: {% data reusables.secret-scanning.about-secret-scanning %} For more information, see "[About {% data variables.product.prodname_secret_scanning %}](/github/administering-a-repository/about-secret-scanning)." +## Checking whether your license includes {% data variables.product.prodname_GH_advanced_security %} + +{% data reusables.advanced-security.check-for-ghas-license %} + ## Prerequisites for {% data variables.product.prodname_secret_scanning %} @@ -31,33 +35,20 @@ topics: - {% data variables.product.prodname_secret_scanning_caps %} enabled in the management console (see "[Enabling {% data variables.product.prodname_GH_advanced_security %} for your enterprise](/admin/advanced-security/enabling-github-advanced-security-for-your-enterprise)") -## Checking support for the SSSE3 flag on your vCPUs +### Checking support for the SSSE3 flag on your vCPUs The SSSE3 set of instructions is required because {% data variables.product.prodname_secret_scanning %} leverages hardware accelerated pattern matching to find potential credentials committed to your {% data variables.product.prodname_dotcom %} repositories. SSSE3 is enabled for most modern CPUs. You can check whether SSSE3 is enabled for the vCPUs available to your {% data variables.product.prodname_ghe_server %} instance. 1. Connect to the administrative shell for your {% data variables.product.prodname_ghe_server %} instance. For more information, see "[Accessing the administrative shell (SSH)](/admin/configuration/accessing-the-administrative-shell-ssh)." 2. Enter the following command: -```shell -grep -iE '^flags.*ssse3' /proc/cpuinfo >/dev/null | echo $? -``` + ```shell + grep -iE '^flags.*ssse3' /proc/cpuinfo >/dev/null | echo $? + ``` -If this returns the value `0`, it means that the SSSE3 flag is available and enabled. You can now enable {% data variables.product.prodname_secret_scanning %} for {% data variables.product.product_location %}. For more information, see "[Enabling {% data variables.product.prodname_secret_scanning %}](#enabling-secret-scanning)" below. + If this returns the value `0`, it means that the SSSE3 flag is available and enabled. You can now enable {% data variables.product.prodname_secret_scanning %} for {% data variables.product.product_location %}. For more information, see "[Enabling {% data variables.product.prodname_secret_scanning %}](#enabling-secret-scanning)" below. -If this doesn't return `0`, SSSE3 is not enabled on your VM/KVM. You need to refer to the documentation of the hardware/hypervisor on how to enable the flag, or make it available to guest VMs. - -### Checking whether you have an {% data variables.product.prodname_advanced_security %} license - -{% data reusables.enterprise_site_admin_settings.access-settings %} -{% data reusables.enterprise_site_admin_settings.management-console %} -1. Check if there is {% ifversion ghes < 3.2 %}an **{% data variables.product.prodname_advanced_security %}**{% else %}a **Security**{% endif %} entry in the left sidebar. -{% ifversion ghes < 3.2 %} - ![Advanced Security sidebar](/assets/images/enterprise/management-console/sidebar-advanced-security.png) -{% else %} - ![Security sidebar](/assets/images/enterprise/3.2/management-console/sidebar-security.png) -{% endif %} - -{% data reusables.enterprise_management_console.advanced-security-license %} + If this doesn't return `0`, SSSE3 is not enabled on your VM/KVM. You need to refer to the documentation of the hardware/hypervisor on how to enable the flag, or make it available to guest VMs. ## Enabling {% data variables.product.prodname_secret_scanning %} diff --git a/content/admin/advanced-security/enabling-github-advanced-security-for-your-enterprise.md b/content/admin/advanced-security/enabling-github-advanced-security-for-your-enterprise.md index d32b69a028..d2d205a75c 100644 --- a/content/admin/advanced-security/enabling-github-advanced-security-for-your-enterprise.md +++ b/content/admin/advanced-security/enabling-github-advanced-security-for-your-enterprise.md @@ -28,17 +28,6 @@ When you enable {% data variables.product.prodname_GH_advanced_security %} for y For guidance on a phased deployment of GitHub Advanced Security, see "[Deploying GitHub Advanced Security in your enterprise](/admin/advanced-security/deploying-github-advanced-security-in-your-enterprise)." {% endif %} -## Prerequisites for enabling {% data variables.product.prodname_GH_advanced_security %} - -1. Upgrade your license for {% data variables.product.product_name %} to include {% data variables.product.prodname_GH_advanced_security %}.{% ifversion ghes > 3.0 %} For information about licensing, see "[About billing for {% data variables.product.prodname_GH_advanced_security %}](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)."{% endif %} -2. Download the new license file. For more information, see "[Downloading your license for {% data variables.product.prodname_enterprise %}](/billing/managing-your-license-for-github-enterprise/downloading-your-license-for-github-enterprise)." -3. Upload the new license file to {% data variables.product.product_location %}. For more information, see "[Uploading a new license to {% data variables.product.prodname_ghe_server %}](/billing/managing-your-license-for-github-enterprise/uploading-a-new-license-to-github-enterprise-server)."{% ifversion ghes %} -4. Review the prerequisites for the features you plan to enable. - - - {% data variables.product.prodname_code_scanning_capc %}, see "[Configuring {% data variables.product.prodname_code_scanning %} for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#prerequisites-for-code-scanning)." - - {% data variables.product.prodname_secret_scanning_caps %}, see "[Configuring {% data variables.product.prodname_secret_scanning %} for your appliance](/admin/advanced-security/configuring-secret-scanning-for-your-appliance#prerequisites-for-secret-scanning)."{% endif %} - - {% data variables.product.prodname_dependabot %}, see "[Enabling the dependency graph and {% data variables.product.prodname_dependabot_alerts %} on your enterprise account](/admin/configuration/managing-connections-between-your-enterprise-accounts/enabling-the-dependency-graph-and-dependabot-alerts-on-your-enterprise-account)." - ## Checking whether your license includes {% data variables.product.prodname_GH_advanced_security %} {% ifversion ghes > 3.0 %} @@ -58,6 +47,17 @@ For guidance on a phased deployment of GitHub Advanced Security, see "[Deploying {% data reusables.enterprise_management_console.advanced-security-license %} {% endif %} +## Prerequisites for enabling {% data variables.product.prodname_GH_advanced_security %} + +1. Upgrade your license for {% data variables.product.product_name %} to include {% data variables.product.prodname_GH_advanced_security %}.{% ifversion ghes > 3.0 %} For information about licensing, see "[About billing for {% data variables.product.prodname_GH_advanced_security %}](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)."{% endif %} +2. Download the new license file. For more information, see "[Downloading your license for {% data variables.product.prodname_enterprise %}](/billing/managing-your-license-for-github-enterprise/downloading-your-license-for-github-enterprise)." +3. Upload the new license file to {% data variables.product.product_location %}. For more information, see "[Uploading a new license to {% data variables.product.prodname_ghe_server %}](/billing/managing-your-license-for-github-enterprise/uploading-a-new-license-to-github-enterprise-server)."{% ifversion ghes %} +4. Review the prerequisites for the features you plan to enable. + + - {% data variables.product.prodname_code_scanning_capc %}, see "[Configuring {% data variables.product.prodname_code_scanning %} for your appliance](/admin/advanced-security/configuring-code-scanning-for-your-appliance#prerequisites-for-code-scanning)." + - {% data variables.product.prodname_secret_scanning_caps %}, see "[Configuring {% data variables.product.prodname_secret_scanning %} for your appliance](/admin/advanced-security/configuring-secret-scanning-for-your-appliance#prerequisites-for-secret-scanning)."{% endif %} + - {% data variables.product.prodname_dependabot %}, see "[Enabling the dependency graph and {% data variables.product.prodname_dependabot_alerts %} on your enterprise account](/admin/configuration/managing-connections-between-your-enterprise-accounts/enabling-the-dependency-graph-and-dependabot-alerts-on-your-enterprise-account)." + ## Enabling and disabling {% data variables.product.prodname_GH_advanced_security %} features {% data reusables.enterprise_management_console.enable-disable-security-features %} diff --git a/content/admin/configuration/configuring-network-settings/network-ports.md b/content/admin/configuration/configuring-network-settings/network-ports.md index cc08abb8ed..4fcd17c1a7 100644 --- a/content/admin/configuration/configuring-network-settings/network-ports.md +++ b/content/admin/configuration/configuring-network-settings/network-ports.md @@ -26,8 +26,8 @@ Some administrative ports are required to configure {% data variables.product.pr |---|---|---| | 8443 | HTTPS | Secure web-based {% data variables.enterprise.management_console %}. Required for basic installation and configuration. | | 8080 | HTTP | Plain-text web-based {% data variables.enterprise.management_console %}. Not required unless SSL is disabled manually. | -| 122 | SSH | Shell access for {% data variables.product.product_location %}. Required to be open to incoming connections from all other nodes in a High Availability configuration. The default SSH port (22) is dedicated to Git and SSH application network traffic. | -| 1194/UDP | VPN | Secure replication network tunnel in High Availability configuration. Required to be open to all other nodes in the configuration.| +| 122 | SSH | Shell access for {% data variables.product.product_location %}. Required to be open to incoming connections between all nodes in a high availability configuration. The default SSH port (22) is dedicated to Git and SSH application network traffic. | +| 1194/UDP | VPN | Secure replication network tunnel in high availability configuration. Required to be open for communication between all nodes in the configuration.| | 123/UDP| NTP | Required for time protocol operation. | | 161/UDP | SNMP | Required for network monitoring protocol operation. | diff --git a/content/admin/enterprise-management/configuring-high-availability/about-high-availability-configuration.md b/content/admin/enterprise-management/configuring-high-availability/about-high-availability-configuration.md index c5ad5e0895..60b1d3bbae 100644 --- a/content/admin/enterprise-management/configuring-high-availability/about-high-availability-configuration.md +++ b/content/admin/enterprise-management/configuring-high-availability/about-high-availability-configuration.md @@ -186,3 +186,4 @@ The `ghe-repl-teardown` command disables replication mode completely, removing t ## Further reading - "[Creating a high availability replica](/enterprise/{{ currentVersion }}/admin/guides/installation/creating-a-high-availability-replica)" +- "[Network ports](/admin/configuration/configuring-network-settings/network-ports)" \ No newline at end of file diff --git a/content/admin/enterprise-management/configuring-high-availability/creating-a-high-availability-replica.md b/content/admin/enterprise-management/configuring-high-availability/creating-a-high-availability-replica.md index e2c8c3a9ef..31d4dbeb3f 100644 --- a/content/admin/enterprise-management/configuring-high-availability/creating-a-high-availability-replica.md +++ b/content/admin/enterprise-management/configuring-high-availability/creating-a-high-availability-replica.md @@ -19,15 +19,16 @@ shortTitle: Create HA replica ## Creating a high availability replica 1. Set up a new {% data variables.product.prodname_ghe_server %} appliance on your desired platform. The replica appliance should mirror the primary appliance's CPU, RAM, and storage settings. We recommend that you install the replica appliance in an independent environment. The underlying hardware, software, and network components should be isolated from those of the primary appliance. If you are a using a cloud provider, use a separate region or zone. For more information, see ["Setting up a {% data variables.product.prodname_ghe_server %} instance"](/enterprise/{{ currentVersion }}/admin/guides/installation/setting-up-a-github-enterprise-server-instance). -2. In a browser, navigate to the new replica appliance's IP address and upload your {% data variables.product.prodname_enterprise %} license. +1. Ensure that both the primary appliance and the new replica appliance can communicate with each other over ports 122/TCP and 1194/UDP. For more information, see "[Network ports](/admin/configuration/configuring-network-settings/network-ports#administrative-ports)." +1. In a browser, navigate to the new replica appliance's IP address and upload your {% data variables.product.prodname_enterprise %} license. {% data reusables.enterprise_installation.replica-steps %} -6. Connect to the replica appliance's IP address using SSH. +1. Connect to the replica appliance's IP address using SSH. ```shell $ ssh -p 122 admin@REPLICA IP ``` {% data reusables.enterprise_installation.generate-replication-key-pair %} {% data reusables.enterprise_installation.add-ssh-key-to-primary %} -9. To verify the connection to the primary and enable replica mode for the new replica, run `ghe-repl-setup` again. +1. To verify the connection to the primary and enable replica mode for the new replica, run `ghe-repl-setup` again. ```shell $ ghe-repl-setup PRIMARY IP ``` diff --git a/content/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md b/content/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md index 6c2bd6b7ce..99179a580a 100644 --- a/content/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md +++ b/content/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md @@ -69,8 +69,7 @@ You can choose to disable {% data variables.product.prodname_actions %} for all {% data reusables.actions.about-artifact-log-retention %} -{% data reusables.enterprise_site_admin_settings.access-settings %} -{% data reusables.enterprise_site_admin_settings.business %} +{% data reusables.enterprise-accounts.access-enterprise %} {% data reusables.enterprise-accounts.policies-tab %} {% data reusables.enterprise-accounts.actions-tab %} {% data reusables.github-actions.change-retention-period-for-artifacts-logs %} diff --git a/content/organizations/organizing-members-into-teams/managing-code-review-settings-for-your-team.md b/content/organizations/organizing-members-into-teams/managing-code-review-settings-for-your-team.md index 917d782ab2..1430d9a82c 100644 --- a/content/organizations/organizing-members-into-teams/managing-code-review-settings-for-your-team.md +++ b/content/organizations/organizing-members-into-teams/managing-code-review-settings-for-your-team.md @@ -79,7 +79,7 @@ Any team members that have set their status to "Busy" will not be selected for r ![Routing algorithm dropdown](/assets/images/help/teams/review-assignment-algorithm.png) 9. Optionally, to always skip certain members of the team, select **Never assign certain team members**. Then, select one or more team members you'd like to always skip. ![Never assign certain team members checkbox and dropdown](/assets/images/help/teams/review-assignment-skip-members.png) -{% ifversion fpt or ghec or ghae-next or ghes > 3.2 %} +{% ifversion fpt or ghec or ghae-issue-5108 or ghes > 3.2 %} 11. Optionally, to include members of child teams as potential reviewers when assigning requests, select **Child team members**. 12. Optionally, to count any members whose review has already been requested against the total number of members to assign, select **Count existing requests**. 13. Optionally, to remove the review request from the team when assigning team members, select **Team review request**. diff --git a/content/pages/getting-started-with-github-pages/about-github-pages.md b/content/pages/getting-started-with-github-pages/about-github-pages.md index f91b09f0ad..dd40cb5a26 100644 --- a/content/pages/getting-started-with-github-pages/about-github-pages.md +++ b/content/pages/getting-started-with-github-pages/about-github-pages.md @@ -120,6 +120,12 @@ A MIME type is a header that a server sends to a browser, providing information While you can't specify custom MIME types on a per-file or per-repository basis, you can add or modify MIME types for use on {% data variables.product.prodname_pages %}. For more information, see [the mime-db contributing guidelines](https://github.com/jshttp/mime-db#adding-custom-media-types). +{% ifversion fpt %} +## Data collection + +When a {% data variables.product.prodname_pages %} site is visited, the visitor's IP address is logged and stored for security purposes, regardless of whether the visitor has signed into {% data variables.product.prodname_dotcom %} or not. For more information about {% data variables.product.prodname_dotcom %}'s security practices, see {% data variables.product.prodname_dotcom %} Privacy Statement. +{% endif %} + ## Further reading - [{% data variables.product.prodname_pages %}](https://lab.github.com/githubtraining/github-pages) on {% data variables.product.prodname_learning %} diff --git a/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches.md b/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches.md index 6353932fb4..c4be3a9f2a 100644 --- a/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches.md +++ b/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches.md @@ -42,7 +42,7 @@ By default, the restrictions of a branch protection rule don't apply to people w For each branch protection rule, you can choose to enable or disable the following settings. - [Require pull request reviews before merging](#require-pull-request-reviews-before-merging) - [Require status checks before merging](#require-status-checks-before-merging) -{% ifversion fpt or ghes > 3.1 or ghae-issue-4382 or ghec %} +{% ifversion fpt or ghes > 3.1 or ghae-next or ghec %} - [Require conversation resolution before merging](#require-conversation-resolution-before-merging){% endif %} - [Require signed commits](#require-signed-commits) - [Require linear history](#require-linear-history) @@ -99,7 +99,7 @@ You can set up required status checks to either be "loose" or "strict." The type For troubleshooting information, see "[Troubleshooting required status checks](/github/administering-a-repository/troubleshooting-required-status-checks)." -{% ifversion fpt or ghes > 3.1 or ghae-issue-4382 or ghec %} +{% ifversion fpt or ghes > 3.1 or ghae-next or ghec %} ### Require conversation resolution before merging Requires all comments on the pull request to be resolved before it can be merged to a protected branch. This ensures that all comments are addressed or acknowledged before merge. diff --git a/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule.md b/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule.md index af1d2efaca..0209187eda 100644 --- a/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule.md +++ b/content/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule.md @@ -80,7 +80,7 @@ When you create a branch rule, the branch you specify doesn't have to exist yet ![Loose or strict required status checkbox](/assets/images/help/repository/protecting-branch-loose-status.png) - Search for status checks, selecting the checks you want to require. ![Search interface for available status checks, with list of required checks](/assets/images/help/repository/required-statuses-list.png) -{%- ifversion fpt or ghes > 3.1 or ghae-issue-4382 %} +{%- ifversion fpt or ghes > 3.1 or ghae-next %} 1. Optionally, select **Require conversation resolution before merging**. ![Require conversation resolution before merging option](/assets/images/help/repository/require-conversation-resolution.png) {%- endif %} diff --git a/content/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners.md b/content/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners.md index be05049a7c..0371d81e62 100644 --- a/content/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners.md +++ b/content/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners.md @@ -37,7 +37,7 @@ Each CODEOWNERS file assigns the code owners for a single branch in the reposito For code owners to receive review requests, the CODEOWNERS file must be on the base branch of the pull request. For example, if you assign `@octocat` as the code owner for *.js* files on the `gh-pages` branch of your repository, `@octocat` will receive review requests when a pull request with changes to *.js* files is opened between the head branch and `gh-pages`. -{% ifversion fpt or ghae or ghes > 3.2 or ghec %} +{% ifversion fpt or ghec or ghes > 3.2 or ghae-issue-9273 %} ## CODEOWNERS file size CODEOWNERS files must be under 3 MB in size. A CODEOWNERS file over this limit will not be loaded, which means that code owner information is not shown and the appropriate code owners will not be requested to review changes in a pull request. diff --git a/content/rest/reference/repos.md b/content/rest/reference/repos.md index 2c1c4fa314..ca85509c37 100644 --- a/content/rest/reference/repos.md +++ b/content/rest/reference/repos.md @@ -21,12 +21,6 @@ miniTocMaxHeadingLevel: 3 {% ifversion fpt or ghec or ghes > 3.2 or ghae-issue-4742 %} ## Autolinks -{% tip %} - -**Note:** The Autolinks API is in beta and may change. - -{% endtip %} - To help streamline your workflow, you can use the API to add autolinks to external resources like JIRA issues and Zendesk tickets. For more information, see "[Configuring autolinks to reference external resources](/github/administering-a-repository/configuring-autolinks-to-reference-external-resources)." {% data variables.product.prodname_github_apps %} require repository administration permissions with read or write access to use the Autolinks API. diff --git a/data/reusables/advanced-security/check-for-ghas-license.md b/data/reusables/advanced-security/check-for-ghas-license.md new file mode 100644 index 0000000000..bc8a36a0fc --- /dev/null +++ b/data/reusables/advanced-security/check-for-ghas-license.md @@ -0,0 +1 @@ +You can identify if your enterprise has a {% data variables.product.prodname_GH_advanced_security %} license by reviewing {% ifversion ghes = 3.0 %}the {% data variables.enterprise.management_console %}{% elsif ghes > 3.0 %}your enterprise settings{% endif %}. For more information, see "[Enabling GitHub Advanced Security for your enterprise](/admin/advanced-security/enabling-github-advanced-security-for-your-enterprise#checking-whether-your-license-includes-github-advanced-security)." diff --git a/data/reusables/enterprise_management_console/advanced-security-license.md b/data/reusables/enterprise_management_console/advanced-security-license.md index 00dc9b6e0d..c7ff288cf3 100644 --- a/data/reusables/enterprise_management_console/advanced-security-license.md +++ b/data/reusables/enterprise_management_console/advanced-security-license.md @@ -1 +1 @@ -If you can't see {% ifversion ghes < 3.2 %}**{% data variables.product.prodname_advanced_security %}**{% else %}**Security**{% endif %} in the sidebar, it means that your license doesn't include support for {% data variables.product.prodname_advanced_security %} features, including {% data variables.product.prodname_code_scanning %} and {% data variables.product.prodname_secret_scanning %}. The {% data variables.product.prodname_advanced_security %} license gives you and your users access to features that help you make your repositories and code more secure. {% ifversion ghes %}For more information, see "[About GitHub Advanced Security](/github/getting-started-with-github/about-github-advanced-security)" or contact {% data variables.contact.contact_enterprise_sales %}.{% endif %} +If you can't see **{% data variables.product.prodname_advanced_security %}** in the sidebar, it means that your license doesn't include support for {% data variables.product.prodname_advanced_security %} features, including {% data variables.product.prodname_code_scanning %} and {% data variables.product.prodname_secret_scanning %}. The {% data variables.product.prodname_advanced_security %} license gives you and your users access to features that help you make your repositories and code more secure. For more information, see "[About GitHub Advanced Security](/github/getting-started-with-github/about-github-advanced-security)" or contact {% data variables.contact.contact_enterprise_sales %}. diff --git a/data/reusables/secret-scanning/partner-secret-list-private-repo.md b/data/reusables/secret-scanning/partner-secret-list-private-repo.md index c563d6aee3..01d3dd502f 100644 --- a/data/reusables/secret-scanning/partner-secret-list-private-repo.md +++ b/data/reusables/secret-scanning/partner-secret-list-private-repo.md @@ -100,6 +100,8 @@ Google | Google Cloud Storage Service Account Access Key ID | google_cloud_stora {%- ifversion fpt or ghec or ghes > 3.2 %} Google | Google Cloud Storage User Access Key ID | google_cloud_storage_user_access_key_id{% endif %} {%- ifversion fpt or ghec or ghes > 3.3 %} +Google | Google OAuth Access Token | google_oauth_access_token{% endif %} +{%- ifversion fpt or ghec or ghes > 3.3 %} Google | Google OAuth Client ID | google_oauth_client_id{% endif %} {%- ifversion fpt or ghec or ghes > 3.3 %} Google | Google OAuth Client Secret | google_oauth_client_secret{% endif %} diff --git a/data/variables/contact.yml b/data/variables/contact.yml index 9e20f160e5..3155f0435d 100644 --- a/data/variables/contact.yml +++ b/data/variables/contact.yml @@ -15,7 +15,7 @@ contact_dmca: >- contact_privacy: >- {% ifversion fpt or ghec %}[Privacy contact form](https://github.com/contact/privacy){% endif %} -contact_enterprise_sales: "[GitHub's Sales team](https://enterprise.github.com/contact)" +contact_enterprise_sales: "[GitHub's Sales team](https://github.com/enterprise/contact)" contact_feedback_actions: '[Feedback form for GitHub Actions](https://support.github.com/contact/feedback?contact[category]=actions)' diff --git a/includes/tool-switcher.html b/includes/tool-switcher.html index 17e8afbb47..960b79b44d 100644 --- a/includes/tool-switcher.html +++ b/includes/tool-switcher.html @@ -1,11 +1 @@ - \ No newline at end of file + diff --git a/lib/page.js b/lib/page.js index d16e543ee4..a5249db0f9 100644 --- a/lib/page.js +++ b/lib/page.js @@ -250,16 +250,19 @@ class Page { }) } - this.detectedPlatforms = [ - (html.includes('extended-markdown mac') || html.includes('platform-mac')) && 'mac', - (html.includes('extended-markdown windows') || html.includes('platform-windows')) && - 'windows', - (html.includes('extended-markdown linux') || html.includes('platform-linux')) && 'linux', - ].filter(Boolean) - // set a flag so layout knows whether to render a mac/windows/linux switcher element + this.detectedPlatforms = ['mac', 'windows', 'linux'].filter( + (platform) => + html.includes(`extended-markdown ${platform}`) || html.includes(`platform-${platform}`) + ) this.includesPlatformSpecificContent = this.detectedPlatforms.length > 0 + // set flags for webui, cli, etc switcher element + this.detectedTools = ['cli', 'desktop', 'webui', 'curl', 'codespaces', 'vscode'].filter( + (tool) => html.includes(`extended-markdown ${tool}`) || html.includes(`tool-${tool}`) + ) + this.includesToolSpecificContent = this.detectedTools.length > 0 + return html } diff --git a/lib/search/indexes/github-docs-3.0-cn-records.json.br b/lib/search/indexes/github-docs-3.0-cn-records.json.br index 64d824bf57..e0e3018629 100644 --- a/lib/search/indexes/github-docs-3.0-cn-records.json.br +++ b/lib/search/indexes/github-docs-3.0-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4049476895fb239bc51e71ebd336338d41529afc67d2098dce429533dc003237 -size 641041 +oid sha256:02c3be78802a671eff62246867201005f2f32b4ba378ca9a23f66b110bb2c90e +size 641026 diff --git a/lib/search/indexes/github-docs-3.0-cn.json.br b/lib/search/indexes/github-docs-3.0-cn.json.br index fd5b74ae38..7a1f06b18d 100644 --- a/lib/search/indexes/github-docs-3.0-cn.json.br +++ b/lib/search/indexes/github-docs-3.0-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0b2a1a218d1543eb344ae20b572c55b3e95859c5f6418dca4f7738ea730489c -size 1111649 +oid sha256:abfce0aa6237573b2d15bdf2941e313989eb32da3777cd1ab8ca60657064ee1b +size 1111794 diff --git a/lib/search/indexes/github-docs-3.0-en-records.json.br b/lib/search/indexes/github-docs-3.0-en-records.json.br index 27d7caf1fe..3f8af6141c 100644 --- a/lib/search/indexes/github-docs-3.0-en-records.json.br +++ b/lib/search/indexes/github-docs-3.0-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7166c39064400d935ff68fd4194d024349115b4015d7584f63a14e571b80f113 -size 944974 +oid sha256:4a7f59af0d3fbee3c53ef01010bc5059573f584ccbfd912507f5123f5fb35aab +size 945496 diff --git a/lib/search/indexes/github-docs-3.0-en.json.br b/lib/search/indexes/github-docs-3.0-en.json.br index 951a697dfe..25dd653126 100644 --- a/lib/search/indexes/github-docs-3.0-en.json.br +++ b/lib/search/indexes/github-docs-3.0-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ab881358f1b65eafb4780c410dc4cd0252cd02171e3faf47c0d8938e930bbfa -size 3858188 +oid sha256:860cc4ca7ff227dbffb82fb5525c8700bec3d193ac1539ced3b9147462555ea4 +size 3859340 diff --git a/lib/search/indexes/github-docs-3.0-es-records.json.br b/lib/search/indexes/github-docs-3.0-es-records.json.br index f89420a06f..38cb76e680 100644 --- a/lib/search/indexes/github-docs-3.0-es-records.json.br +++ b/lib/search/indexes/github-docs-3.0-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f88d199c16319f387dc7befa2247fdf161a1ff43c149ecb1474f68da324a301 -size 584420 +oid sha256:3423d63b344891401efff747430cc01519476a492bfd0bbab55244c08448fdcd +size 584470 diff --git a/lib/search/indexes/github-docs-3.0-es.json.br b/lib/search/indexes/github-docs-3.0-es.json.br index 535b4a2da0..4ad49c1d24 100644 --- a/lib/search/indexes/github-docs-3.0-es.json.br +++ b/lib/search/indexes/github-docs-3.0-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2034c5b57c8f2fa0e1c49c827a213b0472109bff6cdf11067bf58912b0698e6a -size 2455540 +oid sha256:64ca706f3feb4fca88f9e45898867dd15ec8f82d8db1a6c95271743ad92d212b +size 2455391 diff --git a/lib/search/indexes/github-docs-3.0-ja-records.json.br b/lib/search/indexes/github-docs-3.0-ja-records.json.br index c998a601d0..c12bf661fb 100644 --- a/lib/search/indexes/github-docs-3.0-ja-records.json.br +++ b/lib/search/indexes/github-docs-3.0-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:995025c3a0e1fdda18833647304d9eae5b457f3858a8dffa41b47424105b94e1 -size 666491 +oid sha256:52d6a3098b658b332e9f4dd9a8d619a80425bf62ffb342feb8a2ee6735be5467 +size 666559 diff --git a/lib/search/indexes/github-docs-3.0-ja.json.br b/lib/search/indexes/github-docs-3.0-ja.json.br index 03927a0d03..86ccfcd3c3 100644 --- a/lib/search/indexes/github-docs-3.0-ja.json.br +++ b/lib/search/indexes/github-docs-3.0-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0a5ee449971aad8ba85fb09e59062fee537eaea68340681c2966fb4f41752df -size 3450524 +oid sha256:cb4b451212a3cf883e153033eafcb2dbc5fc2eaecd82a7a322f8ff704fa8c480 +size 3451262 diff --git a/lib/search/indexes/github-docs-3.0-pt-records.json.br b/lib/search/indexes/github-docs-3.0-pt-records.json.br index 88bc7c6a69..09d93153c5 100644 --- a/lib/search/indexes/github-docs-3.0-pt-records.json.br +++ b/lib/search/indexes/github-docs-3.0-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea29db113ce85355e408b98557371bd7a31d53f4762a12a5c21e39fc9f305aca -size 544965 +oid sha256:489455dfad2f6a267a997ca518fd02740340222a804e36c54519542f5e98baaf +size 544853 diff --git a/lib/search/indexes/github-docs-3.0-pt.json.br b/lib/search/indexes/github-docs-3.0-pt.json.br index ba420f8d55..d08df6e079 100644 --- a/lib/search/indexes/github-docs-3.0-pt.json.br +++ b/lib/search/indexes/github-docs-3.0-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84c39d3b1c41752c800066cb8a5edcb17958c47a285c55e4ce04640babb70294 -size 2233851 +oid sha256:4a03d9a2ade87a3bc1c28cba5aef90120264ee468efd5c2e26145a821ee25ecb +size 2234137 diff --git a/lib/search/indexes/github-docs-3.1-cn-records.json.br b/lib/search/indexes/github-docs-3.1-cn-records.json.br index 7a41541163..65ff771750 100644 --- a/lib/search/indexes/github-docs-3.1-cn-records.json.br +++ b/lib/search/indexes/github-docs-3.1-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cb5ad2c1880cfa82c66379bd78ecb662809dd42df225f42c2ef5fa1a56a3932 -size 655625 +oid sha256:4b7474ce5591f7903eb808da630adecb47737693ea70e1a8c21f954b64cac6ae +size 655479 diff --git a/lib/search/indexes/github-docs-3.1-cn.json.br b/lib/search/indexes/github-docs-3.1-cn.json.br index bf7d4dc890..9431e0a8fd 100644 --- a/lib/search/indexes/github-docs-3.1-cn.json.br +++ b/lib/search/indexes/github-docs-3.1-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aaaaa5076b294583fae46c0e057558041cb0d804800dc9f18c604f8cabbc02c6 -size 1144090 +oid sha256:c9225a66d8cb707e460f02a601f7b580ec4c9002f7527c006b22e5e7615335a2 +size 1144121 diff --git a/lib/search/indexes/github-docs-3.1-en-records.json.br b/lib/search/indexes/github-docs-3.1-en-records.json.br index dff9b56c40..4b6824ad87 100644 --- a/lib/search/indexes/github-docs-3.1-en-records.json.br +++ b/lib/search/indexes/github-docs-3.1-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a8af3d531106d3f834ec517068786b91dd52cb9caf1c2fb8d06acf50c1d4643 -size 970024 +oid sha256:339b28f50c2d5db04e2a6636e82a33df02cc0f2d61fc581caf9cf8d0b235a8ba +size 969801 diff --git a/lib/search/indexes/github-docs-3.1-en.json.br b/lib/search/indexes/github-docs-3.1-en.json.br index 7b2e8d62b4..a156b130da 100644 --- a/lib/search/indexes/github-docs-3.1-en.json.br +++ b/lib/search/indexes/github-docs-3.1-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a52ee2080910250bde000300baf084993d065171a5591f2b369bf867f31f7bae -size 3951668 +oid sha256:12b2a6782483ec1b53b9152351178732bda03f46ae97bdb30448b6338525eafc +size 3950447 diff --git a/lib/search/indexes/github-docs-3.1-es-records.json.br b/lib/search/indexes/github-docs-3.1-es-records.json.br index 731e6d1d73..bc90079690 100644 --- a/lib/search/indexes/github-docs-3.1-es-records.json.br +++ b/lib/search/indexes/github-docs-3.1-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:241912f2b98df27791f1aae857b74571e7ef08fb9b745b10ec8ea61f61dc20dd -size 597228 +oid sha256:cad54cfc5eeadbe70b88be68966515be532b933fc9e3d5f1d549d9fa23fdc61a +size 597186 diff --git a/lib/search/indexes/github-docs-3.1-es.json.br b/lib/search/indexes/github-docs-3.1-es.json.br index ec95fcf0c4..26e696f2c4 100644 --- a/lib/search/indexes/github-docs-3.1-es.json.br +++ b/lib/search/indexes/github-docs-3.1-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23d4b5c4f3ed1c7ec69d038c5ca55fd5886d9baf932c00699ccfa995d4595e90 -size 2514879 +oid sha256:e0300ece82e027b0b0c7e871c5473a2bb2b3bd6c4bbb1a89a671a81bc5fed0ac +size 2513922 diff --git a/lib/search/indexes/github-docs-3.1-ja-records.json.br b/lib/search/indexes/github-docs-3.1-ja-records.json.br index 879478ddbc..079280e740 100644 --- a/lib/search/indexes/github-docs-3.1-ja-records.json.br +++ b/lib/search/indexes/github-docs-3.1-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e520026797499331e24221d53fd73c24fcf935225aeb4c548613b366748adfc4 -size 681223 +oid sha256:297b3700b84e17f8b26e41e3987021eec9bfc07923f81faf5d92f96caeddbeb0 +size 681262 diff --git a/lib/search/indexes/github-docs-3.1-ja.json.br b/lib/search/indexes/github-docs-3.1-ja.json.br index 58e9f26394..ccc5f58610 100644 --- a/lib/search/indexes/github-docs-3.1-ja.json.br +++ b/lib/search/indexes/github-docs-3.1-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77a9b49b1b495ffd78c382b9325ad5d58d819577c4ab14533861826f476de0f6 -size 3533386 +oid sha256:48683320e1c9c829ea8ecc16bfba5f946403c7b3ed878d24b5aae87860b4af14 +size 3533506 diff --git a/lib/search/indexes/github-docs-3.1-pt-records.json.br b/lib/search/indexes/github-docs-3.1-pt-records.json.br index 2e02a45dc5..9da61ccb46 100644 --- a/lib/search/indexes/github-docs-3.1-pt-records.json.br +++ b/lib/search/indexes/github-docs-3.1-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:264928ca75f4ac57c795299d25af5ca67d9240baa9918377831f552c33e3eda7 -size 557069 +oid sha256:506a753f2870e3d7ada7962747925b66930b74ca9feb6fe078fc3de2b66ca23a +size 557092 diff --git a/lib/search/indexes/github-docs-3.1-pt.json.br b/lib/search/indexes/github-docs-3.1-pt.json.br index baf8ff7235..0fe580a5c3 100644 --- a/lib/search/indexes/github-docs-3.1-pt.json.br +++ b/lib/search/indexes/github-docs-3.1-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67aad2a80ed7724c9f58a7daf685a33abbefd97f9f0c2ec21529db1eb1d5a649 -size 2289490 +oid sha256:cebeb0f6aedd93c789b1b8c3570532702a0dcfb02f6b0a2498a9c5d40caf224c +size 2288779 diff --git a/lib/search/indexes/github-docs-3.2-cn-records.json.br b/lib/search/indexes/github-docs-3.2-cn-records.json.br index c6dcd6ce80..8c1d68ce01 100644 --- a/lib/search/indexes/github-docs-3.2-cn-records.json.br +++ b/lib/search/indexes/github-docs-3.2-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f2aa508681440af8d93fc5b4f10ef5753627be6f80c1c2c08b89c35c40e11b0 -size 668718 +oid sha256:5427a56d953176defbf12f79e9b9cb487f17e609767044bc164f9c88ebbfe5a2 +size 668659 diff --git a/lib/search/indexes/github-docs-3.2-cn.json.br b/lib/search/indexes/github-docs-3.2-cn.json.br index 0806428b88..6148573f6b 100644 --- a/lib/search/indexes/github-docs-3.2-cn.json.br +++ b/lib/search/indexes/github-docs-3.2-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d832c1719ed684a7f5b35953d50d7250a5938c021c7829989e5e0393160b908 -size 1169094 +oid sha256:9ed8d110afb28d07b8795aa95746635c50f6a06e914fbd873589f2a6065686ab +size 1168626 diff --git a/lib/search/indexes/github-docs-3.2-en-records.json.br b/lib/search/indexes/github-docs-3.2-en-records.json.br index 9affb8d1ea..0014986e0f 100644 --- a/lib/search/indexes/github-docs-3.2-en-records.json.br +++ b/lib/search/indexes/github-docs-3.2-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c60fd8d5dce9adf6c582b098427b9509ee3dbf5241d4310ca7fc94ae7fc88483 -size 1000821 +oid sha256:d758d337e3e1b15fe5b019eb4b77575b02da10b6a1bc710bfbe1e1a02f52928f +size 1000495 diff --git a/lib/search/indexes/github-docs-3.2-en.json.br b/lib/search/indexes/github-docs-3.2-en.json.br index 5be3802aff..19a4b9300e 100644 --- a/lib/search/indexes/github-docs-3.2-en.json.br +++ b/lib/search/indexes/github-docs-3.2-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac61b65215de8922fe562b8bd49306d518d11e52c5807b166386716194a67295 -size 4070323 +oid sha256:6cfc6671eb9eb7b94c2829c63502dd254cf75a39721889a8435cf6d3ed5be680 +size 4070638 diff --git a/lib/search/indexes/github-docs-3.2-es-records.json.br b/lib/search/indexes/github-docs-3.2-es-records.json.br index e9877658d5..0202af376f 100644 --- a/lib/search/indexes/github-docs-3.2-es-records.json.br +++ b/lib/search/indexes/github-docs-3.2-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f62f8658e0c0c2b0495a1a39bfd342e9159a5653d3e384942b7af8b9971b7ab5 -size 608258 +oid sha256:be88ed4dcba4f9a729d38b77bac9c682518402874d537aa6dde19c38d1e5884b +size 607985 diff --git a/lib/search/indexes/github-docs-3.2-es.json.br b/lib/search/indexes/github-docs-3.2-es.json.br index dcbef2600b..73838e9997 100644 --- a/lib/search/indexes/github-docs-3.2-es.json.br +++ b/lib/search/indexes/github-docs-3.2-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0871545c7f18518daa953bcba6292e5637272ffce62b9bcd681f21688d87fde6 -size 2565982 +oid sha256:3bbc0a92643a1ec81d187bf2d3d9deb97d52e9c28c5db7e2916e137afc293931 +size 2565445 diff --git a/lib/search/indexes/github-docs-3.2-ja-records.json.br b/lib/search/indexes/github-docs-3.2-ja-records.json.br index 7872e85093..6bedae04e8 100644 --- a/lib/search/indexes/github-docs-3.2-ja-records.json.br +++ b/lib/search/indexes/github-docs-3.2-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:522045dfc163bf0c1c07650b75fec174dc9e51f0171e46a07d4b9a06d91192db -size 693703 +oid sha256:002dd0691c18413d96a0a4b3b33a40ac81359b14e1891e1453a5a437bb5f29f2 +size 693734 diff --git a/lib/search/indexes/github-docs-3.2-ja.json.br b/lib/search/indexes/github-docs-3.2-ja.json.br index fc841d9462..f5c9a4867e 100644 --- a/lib/search/indexes/github-docs-3.2-ja.json.br +++ b/lib/search/indexes/github-docs-3.2-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd516842b0faff9a784672ae5e3a6b73401d0322260275f0ccb235065bc17b34 -size 3605119 +oid sha256:314aec3ca0e34fd19ab0861336596ea10e9fd1d87e1d985dcb5fc3ad6e329da8 +size 3604684 diff --git a/lib/search/indexes/github-docs-3.2-pt-records.json.br b/lib/search/indexes/github-docs-3.2-pt-records.json.br index c08d27c1de..e3d8cc898c 100644 --- a/lib/search/indexes/github-docs-3.2-pt-records.json.br +++ b/lib/search/indexes/github-docs-3.2-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e59ad385a800b9a365266e860ccdeae0821ee015aa70c556cbbb7d14119b47c1 -size 567333 +oid sha256:00699716566e801796126e7558b529b17f94c7cb2ff8dbc2f5825d0de84a3e2e +size 567467 diff --git a/lib/search/indexes/github-docs-3.2-pt.json.br b/lib/search/indexes/github-docs-3.2-pt.json.br index bd86c7149c..250bca374c 100644 --- a/lib/search/indexes/github-docs-3.2-pt.json.br +++ b/lib/search/indexes/github-docs-3.2-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ef9cf8810cb83d8c70bd329adf8dd6ba7c9524de2a90a1e3390b958b5fa4a37 -size 2331617 +oid sha256:f6575a86cddfbb9f8718a6d78d2bd372c2708627fae77c83d8f03d0b0ed42f6f +size 2331721 diff --git a/lib/search/indexes/github-docs-3.3-cn-records.json.br b/lib/search/indexes/github-docs-3.3-cn-records.json.br index d8870ff84b..e07aec9bda 100644 --- a/lib/search/indexes/github-docs-3.3-cn-records.json.br +++ b/lib/search/indexes/github-docs-3.3-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83d0f55f34c14378cfc55869db81d610e4e82ec44c6e3654a39735f0c69fcef6 -size 691539 +oid sha256:7f1ea773f839b3b61daaa9f69ca3415e4c0130a30eca0b7f960cfea2905bf8f4 +size 691373 diff --git a/lib/search/indexes/github-docs-3.3-cn.json.br b/lib/search/indexes/github-docs-3.3-cn.json.br index 4f6c3d4900..8da19f89a7 100644 --- a/lib/search/indexes/github-docs-3.3-cn.json.br +++ b/lib/search/indexes/github-docs-3.3-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55918d08e38df87aab5502ae5389233815f720405e90f3d876f7d27fdd47722e -size 1226449 +oid sha256:76ab10ab4bf43ec717cf80e9241384ab14b7a62edfd6372a83f650e89c88df59 +size 1226577 diff --git a/lib/search/indexes/github-docs-3.3-en-records.json.br b/lib/search/indexes/github-docs-3.3-en-records.json.br index b6846c3b88..5675e4a23a 100644 --- a/lib/search/indexes/github-docs-3.3-en-records.json.br +++ b/lib/search/indexes/github-docs-3.3-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14f9c12a3c7ad88c0bf99ac93153af53cb0464b863c78a624064e3c580c4efb2 -size 1034557 +oid sha256:71a85824e91fd1693ae349749c193f53fbfd9fee10a998540683267970a5dd1e +size 1034322 diff --git a/lib/search/indexes/github-docs-3.3-en.json.br b/lib/search/indexes/github-docs-3.3-en.json.br index 82f0e180f9..153dfef859 100644 --- a/lib/search/indexes/github-docs-3.3-en.json.br +++ b/lib/search/indexes/github-docs-3.3-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa363ef21cf719ecef4ba4b13ecf2f6c642fbc4aebdc086640f766c89c5ec171 -size 4166266 +oid sha256:11a19c08b2512d0644ac7725bca2070fce4c19ccf40374964710eb28a56b433e +size 4167514 diff --git a/lib/search/indexes/github-docs-3.3-es-records.json.br b/lib/search/indexes/github-docs-3.3-es-records.json.br index f8d303d0b2..80875226da 100644 --- a/lib/search/indexes/github-docs-3.3-es-records.json.br +++ b/lib/search/indexes/github-docs-3.3-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e20a7f3795818920308100b30595796c4c170eba4c62680f4b70d577a3be3765 -size 626610 +oid sha256:439f3d96b062c9aaa65aa3c7485036f49fb7d2e0fe254fcb34f8bbbf24319a7e +size 626746 diff --git a/lib/search/indexes/github-docs-3.3-es.json.br b/lib/search/indexes/github-docs-3.3-es.json.br index 7bda1548d8..eb8a0acaf4 100644 --- a/lib/search/indexes/github-docs-3.3-es.json.br +++ b/lib/search/indexes/github-docs-3.3-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f9a60b978506e84f321d83607e682bfb86fcbeaea57d74325fb8b16efa0bb8c -size 2665818 +oid sha256:3bb69092c364b0676d32fca3636965a672961385d97ce3278e93387c35e24e6f +size 2666511 diff --git a/lib/search/indexes/github-docs-3.3-ja-records.json.br b/lib/search/indexes/github-docs-3.3-ja-records.json.br index f6f3e98cf0..606eb026c5 100644 --- a/lib/search/indexes/github-docs-3.3-ja-records.json.br +++ b/lib/search/indexes/github-docs-3.3-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d307f62694f67f388457f9cd9c9c8b81256dfe1d22c0b7eed1a6a3d5f25030d9 -size 716392 +oid sha256:13fdeb841ef34e183086e61258b548c7192a0a2158f8d4ae6c799e1ff3964b81 +size 716476 diff --git a/lib/search/indexes/github-docs-3.3-ja.json.br b/lib/search/indexes/github-docs-3.3-ja.json.br index 64529fee61..29ac6db015 100644 --- a/lib/search/indexes/github-docs-3.3-ja.json.br +++ b/lib/search/indexes/github-docs-3.3-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5bd3ae3940aac2a77a39e70e80c63d32c6a014466ac15a0df3be62a0cc152e8 -size 3733744 +oid sha256:46074ff9fb253c5d0cbaae64383d08b6dfd114ae0a522bd6464bfcd484c9b9ac +size 3733335 diff --git a/lib/search/indexes/github-docs-3.3-pt-records.json.br b/lib/search/indexes/github-docs-3.3-pt-records.json.br index 3f04421a10..f8d5b1217a 100644 --- a/lib/search/indexes/github-docs-3.3-pt-records.json.br +++ b/lib/search/indexes/github-docs-3.3-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a96cdb2a0f76e6e2d02006795d695e6fa54b98d883bfc0926fafbd18fd7fba3 -size 585848 +oid sha256:7e3e12531e152929be6dc90e64345b4930814111e8a5e43d0ec6f91283f921a3 +size 585857 diff --git a/lib/search/indexes/github-docs-3.3-pt.json.br b/lib/search/indexes/github-docs-3.3-pt.json.br index fff2e0bbe0..7f90a373ea 100644 --- a/lib/search/indexes/github-docs-3.3-pt.json.br +++ b/lib/search/indexes/github-docs-3.3-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34f9a77a145aded15cfbf0f4bd7ea996e170f89f8111f7524abca045b63ed390 -size 2415923 +oid sha256:fbf9ed32498bc544a062e737f45cf1387ca770c7bb7b0e642dcc3b1e4773f135 +size 2415645 diff --git a/lib/search/indexes/github-docs-dotcom-cn-records.json.br b/lib/search/indexes/github-docs-dotcom-cn-records.json.br index dc65bb129e..80c65ad380 100644 --- a/lib/search/indexes/github-docs-dotcom-cn-records.json.br +++ b/lib/search/indexes/github-docs-dotcom-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd0f19fbb1a0fe94594749382b08227d0720c7fd26f90c1451f567a2b5864968 -size 903714 +oid sha256:f5dceb291cc2ff5c59f53ec7977f060cb33c430e9537d4332f066ff2084a1af0 +size 903811 diff --git a/lib/search/indexes/github-docs-dotcom-cn.json.br b/lib/search/indexes/github-docs-dotcom-cn.json.br index e4709a59e8..fdf11ce3a5 100644 --- a/lib/search/indexes/github-docs-dotcom-cn.json.br +++ b/lib/search/indexes/github-docs-dotcom-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70d146912a0976fadf6880d4839bcd4a0801703a8584f8599eada139b41911cd -size 1446676 +oid sha256:31b4a56ad4608cd3b512152f1e9ab858f1c84019b5da14f58e3d2eaeb591dc48 +size 1446506 diff --git a/lib/search/indexes/github-docs-dotcom-en-records.json.br b/lib/search/indexes/github-docs-dotcom-en-records.json.br index 82db48f119..823e7dd294 100644 --- a/lib/search/indexes/github-docs-dotcom-en-records.json.br +++ b/lib/search/indexes/github-docs-dotcom-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee29a9792b9205015d2e476f547546ddb99228bef87ff7e2c2a7cfccac455fcf -size 1328029 +oid sha256:eb241b3ce4a2aaa0a9a04c0947e54df2d0b4f38ad5838e99f9548a9288d66ca9 +size 1320807 diff --git a/lib/search/indexes/github-docs-dotcom-en.json.br b/lib/search/indexes/github-docs-dotcom-en.json.br index 1185836d2e..e6a117ebcb 100644 --- a/lib/search/indexes/github-docs-dotcom-en.json.br +++ b/lib/search/indexes/github-docs-dotcom-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:251d45bfc7553c51b6b065b102d41a6122bd6590d3ce39d858953658354d2d46 -size 5057097 +oid sha256:e203dee96492179092f625fffea1ad454d7671f4fd0ea171051f283ade981c3e +size 5057795 diff --git a/lib/search/indexes/github-docs-dotcom-es-records.json.br b/lib/search/indexes/github-docs-dotcom-es-records.json.br index 281a842e81..d2cad9acdc 100644 --- a/lib/search/indexes/github-docs-dotcom-es-records.json.br +++ b/lib/search/indexes/github-docs-dotcom-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a51cbbeb667b81bcbf3df02c1de62690586cd66d9bda264634b679f1542bc8c -size 804554 +oid sha256:4ea7c1c8d6fe77d1bd6d9b33ffe834935b8cf2bec37dfea468b16b8eb86aa70a +size 804358 diff --git a/lib/search/indexes/github-docs-dotcom-es.json.br b/lib/search/indexes/github-docs-dotcom-es.json.br index 36f414bcf0..7ba8065f88 100644 --- a/lib/search/indexes/github-docs-dotcom-es.json.br +++ b/lib/search/indexes/github-docs-dotcom-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef1843d8e80f292d84b8944d605965a12ce952701213691ab188cc8ac486e83c -size 3257274 +oid sha256:fe624647cc71f0a823ee2d9207efa6f2afd5fbd424b3602e96337a08d472c7cd +size 3257618 diff --git a/lib/search/indexes/github-docs-dotcom-ja-records.json.br b/lib/search/indexes/github-docs-dotcom-ja-records.json.br index 0a3728fc45..011d1d9177 100644 --- a/lib/search/indexes/github-docs-dotcom-ja-records.json.br +++ b/lib/search/indexes/github-docs-dotcom-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc3d32dca890327d675fd37e55f5cfbffd0733ed654815dd2f45bc9edbd81584 -size 929964 +oid sha256:c0c4465da82fc8ef6f98f5cd38f0a37e0027d1d88b9aebdc6ff2fcf3cc3286a1 +size 930176 diff --git a/lib/search/indexes/github-docs-dotcom-ja.json.br b/lib/search/indexes/github-docs-dotcom-ja.json.br index f4be94cee1..cfea7e2836 100644 --- a/lib/search/indexes/github-docs-dotcom-ja.json.br +++ b/lib/search/indexes/github-docs-dotcom-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1ffbb4c18a7620c87b401b25ef7ed0327b4238c9ab3e8456400a25ba29972d9 -size 4684151 +oid sha256:93917d3818cab17fe7c948a086f43b4a1e073c4ff216d588eb0a0c9987184a9c +size 4682871 diff --git a/lib/search/indexes/github-docs-dotcom-pt-records.json.br b/lib/search/indexes/github-docs-dotcom-pt-records.json.br index f00156ec34..f847fc5beb 100644 --- a/lib/search/indexes/github-docs-dotcom-pt-records.json.br +++ b/lib/search/indexes/github-docs-dotcom-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7c54cb25b72eae9f4ee1f47191ed603eb8e9f349f2faae85fb9fce5092f58bd -size 767565 +oid sha256:4bc16329d51ce76fb4f3bd5b5393ad960afdf8e5429e68454c3db9a5ef7e9c2b +size 767593 diff --git a/lib/search/indexes/github-docs-dotcom-pt.json.br b/lib/search/indexes/github-docs-dotcom-pt.json.br index 6ff6ca48ce..cd645089f8 100644 --- a/lib/search/indexes/github-docs-dotcom-pt.json.br +++ b/lib/search/indexes/github-docs-dotcom-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc01b486d49a5b787a57371687c20ba33885ec7c721bf12442357e112fb38eef -size 3040552 +oid sha256:6cafd3ec08d6ab40be5b06b9f4efb7802eb6a82c29d21d4e15bd99a839577120 +size 3040789 diff --git a/lib/search/indexes/github-docs-ghae-cn-records.json.br b/lib/search/indexes/github-docs-ghae-cn-records.json.br index 091f849384..f4cfd840d5 100644 --- a/lib/search/indexes/github-docs-ghae-cn-records.json.br +++ b/lib/search/indexes/github-docs-ghae-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0ccfacb0470c2d3bada0d1780e49b508ab0b4b80f11f15e6b043ab10b427bff -size 518860 +oid sha256:6333fe71df532bda0dedb37120f9634cbbfa8462d21c07859444e1cf25359634 +size 518857 diff --git a/lib/search/indexes/github-docs-ghae-cn.json.br b/lib/search/indexes/github-docs-ghae-cn.json.br index 619c39baae..92c67a0e95 100644 --- a/lib/search/indexes/github-docs-ghae-cn.json.br +++ b/lib/search/indexes/github-docs-ghae-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef23b630e10b8714b0efa9af50c8084dbc4c338111ab377e7878dbd5ecab5028 -size 880326 +oid sha256:89c48a904fa53661be399e141da337a3490c38c5951b73e803014ee9c8b95fa0 +size 879729 diff --git a/lib/search/indexes/github-docs-ghae-en-records.json.br b/lib/search/indexes/github-docs-ghae-en-records.json.br index 450d7575ee..31a3084ef6 100644 --- a/lib/search/indexes/github-docs-ghae-en-records.json.br +++ b/lib/search/indexes/github-docs-ghae-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8958acc20c35b5347bd5aaefd6423fb7bde1991e1e7daaab1b0dab4e5f132795 -size 801401 +oid sha256:423226ab6e8767968465ab6a79b4fb3f453088a1c83c1ffbac40bbf61ebdc853 +size 801059 diff --git a/lib/search/indexes/github-docs-ghae-en.json.br b/lib/search/indexes/github-docs-ghae-en.json.br index 366fb6beb3..0f7f5fbf74 100644 --- a/lib/search/indexes/github-docs-ghae-en.json.br +++ b/lib/search/indexes/github-docs-ghae-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:209be38a3e7f71bbca95b88cfbc018f57d6ee6d4eda3cc1a050e73f86a5061de -size 3214584 +oid sha256:7845996320dea0c5007e3965955ec878ebf50544b3812715b594c9f5d6eee63f +size 3214634 diff --git a/lib/search/indexes/github-docs-ghae-es-records.json.br b/lib/search/indexes/github-docs-ghae-es-records.json.br index 6785cdab9c..51a9bbe77b 100644 --- a/lib/search/indexes/github-docs-ghae-es-records.json.br +++ b/lib/search/indexes/github-docs-ghae-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce52fdbe18a6f0ad892c34ac05c1c53462c4a6f377c4141fba4b59145aa7f22c -size 473569 +oid sha256:72ff4efe2af24699fb99978f5bc53c4847a35a4c79ca8a516fc392f804a6fe3e +size 473549 diff --git a/lib/search/indexes/github-docs-ghae-es.json.br b/lib/search/indexes/github-docs-ghae-es.json.br index 1723ae8e4c..c935a022f7 100644 --- a/lib/search/indexes/github-docs-ghae-es.json.br +++ b/lib/search/indexes/github-docs-ghae-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0148640cccc9c0a279c753009b9dcfe99b0a04684b0ff0c22617367d3975c8c5 -size 1924896 +oid sha256:e90d208aacf5c4cc470355879f8e4bd08740b9328a55368f21a3c7854f053e73 +size 1924411 diff --git a/lib/search/indexes/github-docs-ghae-ja-records.json.br b/lib/search/indexes/github-docs-ghae-ja-records.json.br index 50cc0fa743..2c25ba0d0d 100644 --- a/lib/search/indexes/github-docs-ghae-ja-records.json.br +++ b/lib/search/indexes/github-docs-ghae-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f99cd290b8b9015551e095e883cdb8375a258a4ae7e6d1309f3b589e43b3d63 -size 539340 +oid sha256:3776eea6509ceec824251493e55aaffe151af016683f2ed96a7ac64e22fc83fb +size 539152 diff --git a/lib/search/indexes/github-docs-ghae-ja.json.br b/lib/search/indexes/github-docs-ghae-ja.json.br index 24433ed1ba..ecf17e78f0 100644 --- a/lib/search/indexes/github-docs-ghae-ja.json.br +++ b/lib/search/indexes/github-docs-ghae-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd4877cc043e5a4317063118d2ac4c5ef6f1cff4ac4360d197d4be7926e9034e -size 2696219 +oid sha256:f4896e5f65979865696d8768f745ee344f2ac3b4a434fe63ad1f0a3b90354c53 +size 2694992 diff --git a/lib/search/indexes/github-docs-ghae-pt-records.json.br b/lib/search/indexes/github-docs-ghae-pt-records.json.br index ef1a2df2c6..e243735653 100644 --- a/lib/search/indexes/github-docs-ghae-pt-records.json.br +++ b/lib/search/indexes/github-docs-ghae-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:729daf37f30f609328ed5062ae84a20303fb36679d54a7342ca05e8afd10d3e7 -size 441730 +oid sha256:2357a5bd42d601b17cf75b690bbd2455b53ac59c0204b2f01f26f5e0d4059ae2 +size 441898 diff --git a/lib/search/indexes/github-docs-ghae-pt.json.br b/lib/search/indexes/github-docs-ghae-pt.json.br index c8a2aeb9b1..bb51330eda 100644 --- a/lib/search/indexes/github-docs-ghae-pt.json.br +++ b/lib/search/indexes/github-docs-ghae-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2822461d4e9f0bd3a7e6091c4236e29dd44bff3c1811af1c4897e205ea0bb2da -size 1753555 +oid sha256:7eb3748be348e01e4286342da967d5bfcb19a4877f195ded0666127bbfaa76d4 +size 1753075 diff --git a/lib/search/indexes/github-docs-ghec-cn-records.json.br b/lib/search/indexes/github-docs-ghec-cn-records.json.br index a37e77d505..7090b3af7e 100644 --- a/lib/search/indexes/github-docs-ghec-cn-records.json.br +++ b/lib/search/indexes/github-docs-ghec-cn-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ad550fccae88cd6439678ccbe7493b8b7b25b928bf65fbc41f170cff7e220fd -size 801555 +oid sha256:71be4fdff8bb7944d518360465646a34588979dbd5fce84620e3e48aaf002a91 +size 801617 diff --git a/lib/search/indexes/github-docs-ghec-cn.json.br b/lib/search/indexes/github-docs-ghec-cn.json.br index e8dd8382c3..cf2fefade3 100644 --- a/lib/search/indexes/github-docs-ghec-cn.json.br +++ b/lib/search/indexes/github-docs-ghec-cn.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4da3dd920cca01a205f80fcd173caeae7a3bb73f707a44a688e22381350710ed -size 1447663 +oid sha256:a83dcb561b524df42c6a13b66ffaae1cad26806ef31dd0704d99b9d4b35a0cc2 +size 1447099 diff --git a/lib/search/indexes/github-docs-ghec-en-records.json.br b/lib/search/indexes/github-docs-ghec-en-records.json.br index e5d239a2dc..093d3e51e0 100644 --- a/lib/search/indexes/github-docs-ghec-en-records.json.br +++ b/lib/search/indexes/github-docs-ghec-en-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6fb971d6435dd6ea697a30c977a641794f583d3f9f77824f80c2cf08667c7bb -size 1175104 +oid sha256:e989e9583754725b3e7dcb56abd29a7eea026cdf5760020d6c7a3aede37ff4fd +size 1175692 diff --git a/lib/search/indexes/github-docs-ghec-en.json.br b/lib/search/indexes/github-docs-ghec-en.json.br index ef0f66353e..57a23a30c4 100644 --- a/lib/search/indexes/github-docs-ghec-en.json.br +++ b/lib/search/indexes/github-docs-ghec-en.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:964a4e2594a2f525069a529c8ba2915a3fcc51fb91b742a3d3216c70f3f4844d -size 4727788 +oid sha256:53f7589a100bd260cc36ada335e86c5ff2b85b848737d9874590da0a63e44be8 +size 4729554 diff --git a/lib/search/indexes/github-docs-ghec-es-records.json.br b/lib/search/indexes/github-docs-ghec-es-records.json.br index 56a9d45e96..51e4ca61e5 100644 --- a/lib/search/indexes/github-docs-ghec-es-records.json.br +++ b/lib/search/indexes/github-docs-ghec-es-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:929ae4b019083381064094638d0458e7ed101319829f9951ae72f7b2f8509e48 -size 736375 +oid sha256:3c926f7f0ca604c79c965fb7f6018add00456b5b15381e667c4534ae62febcd6 +size 736390 diff --git a/lib/search/indexes/github-docs-ghec-es.json.br b/lib/search/indexes/github-docs-ghec-es.json.br index d683d2616e..ca9bb39f39 100644 --- a/lib/search/indexes/github-docs-ghec-es.json.br +++ b/lib/search/indexes/github-docs-ghec-es.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0ce99de2b32d50d67ad42474530816cd0c9f87a8e4ad1fd4bd0964d4e6b9ae3 -size 3133761 +oid sha256:1bd35ef02d185e40ecbd09c10df16acc34514c039e9f33e172d7679980b73098 +size 3134004 diff --git a/lib/search/indexes/github-docs-ghec-ja-records.json.br b/lib/search/indexes/github-docs-ghec-ja-records.json.br index 10923f2e32..d4886c52d8 100644 --- a/lib/search/indexes/github-docs-ghec-ja-records.json.br +++ b/lib/search/indexes/github-docs-ghec-ja-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c6b06174df3b0eefe24f5254333a7370d3b724b4ffbee108ee4477cfd3a3606 -size 831633 +oid sha256:12ae1eb68ad142af3cfe9c3b64c7edd92ec131642bedcc8c8d7ba119c67fb78d +size 831415 diff --git a/lib/search/indexes/github-docs-ghec-ja.json.br b/lib/search/indexes/github-docs-ghec-ja.json.br index 1bf797bb3b..3049f05d28 100644 --- a/lib/search/indexes/github-docs-ghec-ja.json.br +++ b/lib/search/indexes/github-docs-ghec-ja.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84ac8f110a88e55f4f4f6b0c2964c34d2766a446d0eeed7156caa9727cbe6d62 -size 4394083 +oid sha256:a4baf9353f396addef46b2520c5bb2884b0f3d8a5bff17cdf05859cafacd34f8 +size 4393755 diff --git a/lib/search/indexes/github-docs-ghec-pt-records.json.br b/lib/search/indexes/github-docs-ghec-pt-records.json.br index 352ab56997..a20f9c841f 100644 --- a/lib/search/indexes/github-docs-ghec-pt-records.json.br +++ b/lib/search/indexes/github-docs-ghec-pt-records.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9e2c76af3bf9296b6ab7230ef2205a1598edde4984e836a2b0ec299c32afe44 -size 706733 +oid sha256:59b896ccf232cc7e1ec9c522b65ee8d4eb993d2eacce9ecbaab23eb0516a06a1 +size 706894 diff --git a/lib/search/indexes/github-docs-ghec-pt.json.br b/lib/search/indexes/github-docs-ghec-pt.json.br index eb13c07200..06bbb3f01f 100644 --- a/lib/search/indexes/github-docs-ghec-pt.json.br +++ b/lib/search/indexes/github-docs-ghec-pt.json.br @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8b89cc136a3e40a481cd893478401ab7d744e6cac46652e82bce6d6254c2404 -size 2943592 +oid sha256:5941aeb01bafc85393a0b0e19b46e4a8fc7676bb5c29a945a1ae94136c08365a +size 2944565 diff --git a/middleware/archived-enterprise-versions.js b/middleware/archived-enterprise-versions.js index 75426f768f..9473ff522f 100644 --- a/middleware/archived-enterprise-versions.js +++ b/middleware/archived-enterprise-versions.js @@ -16,6 +16,16 @@ const archivedFrontmatterFallbacks = readJsonFile( './lib/redirects/static/archived-frontmatter-fallbacks.json' ) +async function getRemoteJSON(url) { + if (_getRemoteJSONCache.has(url)) { + return _getRemoteJSONCache.get(url) + } + const body = await got(url).json() + _getRemoteJSONCache.set(url, body) + return body +} +const _getRemoteJSONCache = new Map() + // This module handles requests for deprecated GitHub Enterprise versions // by routing them to static content in help-docs-archived-enterprise-versions @@ -49,8 +59,7 @@ export default async function archivedEnterpriseVersions(req, res, next) { if (versionSatisfiesRange(requestedVersion, `>${lastVersionWithoutArchivedRedirectsFile}`)) { try { - const r = await got(getProxyPath('redirects.json', requestedVersion)) - const redirectJson = JSON.parse(r.body) + const redirectJson = await getRemoteJSON(getProxyPath('redirects.json', requestedVersion)) // make redirects found via redirects.json redirect with a 301 if (redirectJson[req.path]) { diff --git a/pages/[versionId]/[productId]/index.tsx b/pages/[versionId]/[productId]/index.tsx index 75a73e2b1a..93e39b85e4 100644 --- a/pages/[versionId]/[productId]/index.tsx +++ b/pages/[versionId]/[productId]/index.tsx @@ -4,7 +4,6 @@ import { useRouter } from 'next/router' // "legacy" javascript needed to maintain existing functionality // typically operating on elements **within** an article. import copyCode from 'components/lib/copy-code' -import displayToolSpecificContent from 'components/lib/display-tool-specific-content' import localization from 'components/lib/localization' import wrapCodeTerms from 'components/lib/wrap-code-terms' @@ -40,7 +39,6 @@ import { useEffect } from 'react' function initiateArticleScripts() { copyCode() - displayToolSpecificContent() localization() wrapCodeTerms() } diff --git a/tests/browser/browser.js b/tests/browser/browser.js index dc6c67fe48..a9179f4485 100644 --- a/tests/browser/browser.js +++ b/tests/browser/browser.js @@ -2,7 +2,7 @@ import { jest } from '@jest/globals' import { latest } from '../../lib/enterprise-server-releases.js' import languages from '../../lib/languages.js' -jest.useFakeTimers() +jest.useFakeTimers('legacy') /* global page, browser */ describe('homepage', () => { @@ -292,44 +292,38 @@ describe('tool specific content', () => { it('should have a tool switcher if a tool switcher is included', async () => { await page.goto(pageWithSingleSwitcher) - const nav = await page.$$('nav#tool-switcher') - const switches = await page.$$('a.tool-switcher') - const selectedSwitch = await page.$$('a.tool-switcher.selected') + const nav = await page.$$('[data-testid="tool-picker"]') + const switches = await page.$$('[data-testid="tool-picker"] button') + const selectedSwitch = await page.$$('[data-testid="tool-picker"] button.selected') expect(nav).toHaveLength(1) expect(switches.length).toBeGreaterThan(1) expect(selectedSwitch).toHaveLength(1) }) - it('should have multiple tool switchers if multiple tools switchers are included', async () => { - await page.goto(pageWithMultipleSwitcher) - const toolSelector = await page.$$('nav#tool-switcher') - const switches = await page.$$('a.tool-switcher') - const selectedSwitch = await page.$$('a.tool-switcher.selected') - expect(toolSelector.length).toBeGreaterThan(1) - expect(switches.length).toBeGreaterThan(1) - expect(selectedSwitch.length).toEqual(toolSelector.length) - }) - it('should NOT have a tool switcher if no tool switcher is included', async () => { await page.goto(pageWithoutSwitcher) - const toolSelector = await page.$$('nav#tool-switcher') - const switches = await page.$$('a.tool-switcher') - const selectedSwitch = await page.$$('a.tool-switcher.selected') - expect(toolSelector).toHaveLength(0) + const nav = await page.$$('[data-testid="tool-picker"]') + const switches = await page.$$('[data-testid="tool-picker"] button') + const selectedSwitch = await page.$$('[data-testid="tool-picker"] button.selected') + expect(nav).toHaveLength(0) expect(switches).toHaveLength(0) expect(selectedSwitch).toHaveLength(0) }) it('should use cli if no defaultTool is specified and if webui is not one of the tools', async () => { await page.goto(pageWithMultipleSwitcher) - const selectedToolElement = await page.waitForSelector('a.tool-switcher.selected') + const selectedToolElement = await page.waitForSelector( + '[data-testid="tool-picker"] button.selected' + ) const selectedTool = await page.evaluate((el) => el.textContent, selectedToolElement) expect(selectedTool).toBe('GitHub CLI') }) it('should use webui if no defaultTool is specified and if webui is one of the tools', async () => { await page.goto(pageWithSingleSwitcher) - const selectedToolElement = await page.waitForSelector('a.tool-switcher.selected') + const selectedToolElement = await page.waitForSelector( + '[data-testid="tool-picker"] button.selected' + ) const selectedTool = await page.evaluate((el) => el.textContent, selectedToolElement) expect(selectedTool).toBe('Web browser') }) @@ -337,15 +331,17 @@ describe('tool specific content', () => { it('should use the recorded user selection', async () => { // With no user data, the selected tool is GitHub.com await page.goto(pageWithSingleSwitcher) - let selectedToolElement = await page.waitForSelector('a.tool-switcher.selected') + let selectedToolElement = await page.waitForSelector( + '[data-testid="tool-picker"] button.selected' + ) let selectedTool = await page.evaluate((el) => el.textContent, selectedToolElement) expect(selectedTool).toBe('Web browser') - await page.click(`.tool-switcher[data-tool="cli"]`) + await page.click('[data-testid="tool-picker"] [data-tool="cli"]') // Revisiting the page after CLI is selected results in CLI as the selected tool await page.goto(pageWithSingleSwitcher) - selectedToolElement = await page.waitForSelector('a.tool-switcher.selected') + selectedToolElement = await page.waitForSelector('[data-testid="tool-picker"] button.selected') selectedTool = await page.evaluate((el) => el.textContent, selectedToolElement) expect(selectedTool).toBe('GitHub CLI') }) @@ -355,13 +351,13 @@ describe('tool specific content', () => { const tools = ['webui', 'cli'] for (const tool of tools) { - await page.click(`.tool-switcher[data-tool="${tool}"]`) + await page.click(`[data-tool="${tool}"]`) // content for selected tool is expected to become visible await page.waitForSelector(`.extended-markdown.${tool}`, { visible: true, timeout: 3000 }) // only a single tab should be selected - const selectedSwitch = await page.$$('a.tool-switcher.selected') + const selectedSwitch = await page.$$('[data-testid="tool-picker"] button.selected') expect(selectedSwitch).toHaveLength(1) // content for NOT selected tools is expected to become hidden @@ -371,27 +367,6 @@ describe('tool specific content', () => { } } }) - - it('selecting a tool in one switcher will control all tool switchers on the page', async () => { - await page.goto(pageWithMultipleSwitcher) - - const tools = { cli: 'GitHub CLI', curl: 'cURL' } - for (const [tool, toolName] of Object.entries(tools)) { - await page.click(`.tool-switcher[data-tool="${tool}"]`) - - // content for selected tool is expected to become visible - await page.waitForSelector(`.extended-markdown.${tool}`, { visible: true, timeout: 3000 }) - - // all tabs should be selected - const toolSelector = await page.$$('nav#tool-switcher') - const selectedSwitch = await page.$$('a.tool-switcher.selected') - expect(selectedSwitch).toHaveLength(toolSelector.length) - - const selectedToolElement = await page.waitForSelector('a.tool-switcher.selected') - const selectedTool = await page.evaluate((el) => el.textContent, selectedToolElement) - expect(selectedTool).toBe(toolName) - } - }) }) describe('code examples', () => { diff --git a/tests/rendering/events.js b/tests/rendering/events.js index 42361f57ef..524b20d9e7 100644 --- a/tests/rendering/events.js +++ b/tests/rendering/events.js @@ -4,7 +4,7 @@ import cheerio from 'cheerio' import createApp from '../../lib/app.js' import { jest } from '@jest/globals' -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('POST /events', () => { jest.setTimeout(60 * 1000) diff --git a/tests/rendering/head.js b/tests/rendering/head.js index 5e6946a604..8d3fdfd1b3 100644 --- a/tests/rendering/head.js +++ b/tests/rendering/head.js @@ -2,7 +2,7 @@ import { getDOM } from '../helpers/supertest.js' import languages from '../../lib/languages.js' import { jest } from '@jest/globals' -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('', () => { jest.setTimeout(5 * 60 * 1000) diff --git a/tests/rendering/server.js b/tests/rendering/server.js index bd66edfc46..025b7477c0 100644 --- a/tests/rendering/server.js +++ b/tests/rendering/server.js @@ -12,7 +12,7 @@ const activeProducts = Object.values(productMap).filter( (product) => !product.wip && !product.hidden ) -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('server', () => { jest.setTimeout(60 * 1000) diff --git a/tests/routing/deprecated-enterprise-versions.js b/tests/routing/deprecated-enterprise-versions.js index 90c5cf31b9..ff6cc1bdc3 100644 --- a/tests/routing/deprecated-enterprise-versions.js +++ b/tests/routing/deprecated-enterprise-versions.js @@ -4,7 +4,7 @@ import { get, getDOM } from '../helpers/supertest.js' import supertest from 'supertest' import { jest } from '@jest/globals' -jest.useFakeTimers() +jest.useFakeTimers('legacy') const app = createApp() diff --git a/tests/routing/developer-site-redirects.js b/tests/routing/developer-site-redirects.js index 256f8d638c..f44d958162 100644 --- a/tests/routing/developer-site-redirects.js +++ b/tests/routing/developer-site-redirects.js @@ -10,7 +10,7 @@ const developerRedirectFixtures = readJsonFile('./tests/fixtures/developer-redir const MAX_CONCURRENT_REQUESTS = 50 -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('developer redirects', () => { jest.setTimeout(4 * 60 * 1000) diff --git a/tests/routing/release-notes.js b/tests/routing/release-notes.js index 6404fb0e75..df16f9332d 100644 --- a/tests/routing/release-notes.js +++ b/tests/routing/release-notes.js @@ -1,7 +1,7 @@ import { get, getDOM } from '../helpers/supertest.js' import { jest } from '@jest/globals' -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('release notes', () => { jest.setTimeout(60 * 1000) diff --git a/tests/routing/top-developer-site-path-redirects.js b/tests/routing/top-developer-site-path-redirects.js index 63de24ad40..0ea5ba2e39 100644 --- a/tests/routing/top-developer-site-path-redirects.js +++ b/tests/routing/top-developer-site-path-redirects.js @@ -4,7 +4,7 @@ import { jest } from '@jest/globals' const topOldDeveloperSitePaths = readJsonFile('tests/fixtures/top-old-developer-site-paths.json') -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('developer.github.com redirects', () => { jest.setTimeout(30 * 60 * 1000) diff --git a/tests/unit/early-access.js b/tests/unit/early-access.js index b7f985874b..05c70589bc 100644 --- a/tests/unit/early-access.js +++ b/tests/unit/early-access.js @@ -5,7 +5,7 @@ import { testViaActionsOnly } from '../helpers/conditional-runs.js' import { getDOM } from '../helpers/supertest.js' import got from 'got' -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('cloning early-access', () => { testViaActionsOnly('the content directory exists', async () => { diff --git a/tests/unit/products.js b/tests/unit/products.js index 36054ebbee..9e4bea220e 100644 --- a/tests/unit/products.js +++ b/tests/unit/products.js @@ -5,7 +5,7 @@ import schema from '../helpers/schemas/products-schema.js' import { getDOM, getJSON } from '../helpers/supertest.js' import nonEnterpriseDefaultVersion from '../../lib/non-enterprise-default-version.js' -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('products module', () => { test('is an object with product ids as keys', () => { diff --git a/tests/unit/versions.js b/tests/unit/versions.js index 2814c881a1..96c78e9c6d 100644 --- a/tests/unit/versions.js +++ b/tests/unit/versions.js @@ -6,7 +6,7 @@ import schema from '../helpers/schemas/versions-schema.js' import { getJSON } from '../helpers/supertest.js' import nonEnterpriseDefaultVersion from '../../lib/non-enterprise-default-version.js' -jest.useFakeTimers() +jest.useFakeTimers('legacy') describe('versions module', () => { test('is an object with versions as keys', () => {