1
0
mirror of synced 2025-12-22 03:16:52 -05:00

Remove versions feature flag code (#15793)

* remove FEATURE_NEW_VERSIONS from feature-flags.json

* remove process.env.FEATURE_NEW_VERSIONS from include files

* remove process.env.FEATURE_NEW_VERSIONS from lib files

* remove process.env.FEATURE_NEW_VERSIONS from middleware files

* remove process.env.FEATURE_NEW_VERSIONS from script files

* remove process.env.FEATURE_NEW_VERSIONS from test files

* update test fixtures to use new versions as canonical fixtures
This commit is contained in:
Sarah Schneider
2020-09-29 13:36:07 -04:00
committed by GitHub
parent 6762f8c1b7
commit aa5a62d49d
95 changed files with 1333 additions and 3965 deletions

View File

@@ -1,5 +1,4 @@
{
"FEATURE_TEST_TRUE": true,
"FEATURE_TEST_FALSE": false,
"FEATURE_NEW_VERSIONS": true
"FEATURE_TEST_FALSE": false
}

View File

@@ -2,11 +2,7 @@
<details class="dropdown-withArrow d-inline-block details details-reset mb-4 position-relative close-when-clicked-outside article-versions">
<summary class="d-flex flex-items-center flex-justify-between f4 h5-mktg btn-outline-mktg btn-mktg p-2">
<!-- GitHub.com, Enterprise Server 2.16, etc -->
{% if process.env.FEATURE_NEW_VERSIONS %}
<span class="d-md-none d-xl-inline-block mr-1">{{ site.data.ui.pages.article_version }}</span> {{ allVersions[currentVersion].versionTitle }}
{% else %}
<span class="d-md-none d-xl-inline-block mr-1">{{ site.data.ui.pages.article_version }}</span> {{ productNames[currentVersion] }}
{% endif %}
<svg class="arrow ml-1" width="14px" height="8px" viewBox="0 0 14 8" xml:space="preserve" fill="none" stroke="#1277eb"><path d="M1,1l6.2,6L13,1"></path></svg>
</summary>
@@ -16,11 +12,7 @@
href="{{ permalink.href }}"
class="d-block py-2 {% if currentPath == permalink.href %}link-blue active{% else %}link-gray-dark no-underline{% endif %}"
>
{% if process.env.FEATURE_NEW_VERSIONS %}
{{ allVersions[permalink.pageVersion].versionTitle }}</a>
{% else %}
{{ productNames[permalink.pageVersion] }}</a>
{% endif %}
{% endfor %}
</div>
</details>

View File

@@ -1,6 +1,3 @@
{% unless process.env.FEATURE_NEW_VERSIONS %}
{% assign enterpriseServerReleases = enterpriseVersions %}
{% endunless %}
{% if currentVersion contains enterpriseServerReleases.oldestSupported %}
<div class="deprecation-banner border rounded-1 mb-2 bg-yellow-light p-3 border-yellow f5">
<p>

View File

@@ -44,11 +44,7 @@
<div id="current-product" class="d-flex flex-items-center flex-justify-between" style="padding-top: 2px;">
<!-- Product switcher - GitHub.com, Enterprise Server, etc -->
<!-- 404 and 500 error layouts are not real pages so we need to hardcode the name for those -->
{% if process.env.FEATURE_NEW_VERSIONS %}
{{ allProducts[currentProduct].name }}
{% else %}
{{ currentProduct.name }}
{% endif %}
<svg class="arrow ml-md-1" width="14px" height="8px" viewBox="0 0 14 8" xml:space="preserve" fill="none" stroke="#1277eb"><path d="M1,1l6.2,6L13,1"></path></svg>
</div>
</summary>
@@ -57,7 +53,7 @@
{% for product in activeProducts %}
<a href="{% unless product.external %}/{{ currentLanguage }}{% endunless %}{{ product.href }}"
class="d-block py-2
{% if process.env.FEATURE_NEW_VERSIONS and product.id == currentProduct %}text-blue-mktg text-underline active{% elsif product.id == currentProduct.id %}text-blue-mktg text-underline active{% else %}link-gray-dark no-underline{% endif %}">
{% if product.id == currentProduct %}text-blue-mktg text-underline active{% elsif product.id == currentProduct.id %}text-blue-mktg text-underline active{% else %}link-gray-dark no-underline{% endif %}">
{{ product.name }}
{% if product.external %}
<span class="ml-1"><svg width="9" height="10" viewBox="0 0 9 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path stroke="#24292e" d="M.646 8.789l8-8M8.5 9V1M1 .643h8"/></svg></span>
@@ -68,10 +64,8 @@
</details>
</div>
{% if process.env.FEATURE_NEW_VERSIONS %}
<!-- Versions picker that only appears in the header on homepage/versioned homepages -->
{% include homepage-version-switcher %}
{% endif %}
<div class="d-md-inline-block">

View File

@@ -20,12 +20,7 @@
<h3 class="text-mono f5 text-normal text-gray text-md-center mb-4">{{ site.data.ui.homepage.explore_by_product }}</h3>
<div class="d-flex flex-wrap gutter gutter-xl-spacious">
{% for product in activeProducts %}
{% if process.env.FEATURE_NEW_VERSIONS %}
{% assign productVersions = product.versions %}
{% else %}
{% assign productVersions = currentVersion %}
{% endif %}
{% if productVersions contains currentVersion or currentVersion == 'homepage' %}
{% if product.versions contains currentVersion or currentVersion == 'homepage' %}
<div class="d-flex flex-column col-12 col-sm-6 col-lg-3 pb-4">
<a class="btn-mktg flex-auto d-flex flex-items-center btn-outline-mktg btn-large-mktg ws-normal " href="{% unless product.external %}/{{ currentLanguage }}{% endunless %}{% if product.versions contains currentVersion %}/{{currentVersion}}/{{product.id}}{% else %}{{product.href}}{% endif %}">{{ product.name }}
{% if product.external %}

View File

@@ -1,25 +1,12 @@
{% if process.env.FEATURE_NEW_VERSIONS %}
{% include all-products-link %}
{% endif %}
{% for product in activeProducts %}
{% if process.env.FEATURE_NEW_VERSIONS %}
{% assign productVersions = product.versions %}
{% else %}
{% assign productVersions = currentVersion %}
{% endif %}
{% if productVersions contains currentVersion or currentVersion == 'homepage' %}
{% if product.versions contains currentVersion or currentVersion == 'homepage' %}
<li
title="{{product.name}}{% if product.external %} (External Site){% endif %}"
class="sidebar-product"
>
{% if process.env.FEATURE_NEW_VERSIONS %}
<a href="{% unless product.external %}/{{currentLanguage}}{% endunless %}{% if product.versions contains currentVersion %}/{{currentVersion}}/{{product.id}}{% else %}{{product.href}}{% endif %}" class="f4 pl-4 pr-5 py-2">
{% else %}
<a href="{% unless product.external %}/{{currentLanguage}}{% endunless %}{{product.href}}" class="f4 pl-4 pr-5 py-2">
{% endif %}
{{ product.name }}
{% if product.external %}
<span class="ml-1"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="octicon" width="16" height="16"> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.75 1C14.8163 1 14.8799 1.02634 14.9268 1.07322C14.9737 1.12011 15 1.1837 15 1.25V5.396C15.0001 5.44551 14.9855 5.49393 14.958 5.53513C14.9305 5.57632 14.8915 5.60843 14.8457 5.62739C14.8 5.64635 14.7497 5.6513 14.7011 5.64162C14.6525 5.63194 14.608 5.60805 14.573 5.573L13.03 4.03L8.53 8.53C8.38783 8.66248 8.19978 8.7346 8.00548 8.73118C7.81118 8.72775 7.62579 8.64903 7.48838 8.51162C7.35097 8.37421 7.27225 8.18882 7.26883 7.99452C7.2654 7.80022 7.33752 7.61217 7.47 7.47L11.97 2.97L10.427 1.427C10.3919 1.39204 10.3681 1.34745 10.3584 1.2989C10.3487 1.25034 10.3536 1.20001 10.3726 1.15427C10.3916 1.10853 10.4237 1.06945 10.4649 1.04199C10.5061 1.01453 10.5545 0.999912 10.604 1H14.75ZM2.75 2C2.28587 2 1.84075 2.18437 1.51256 2.51256C1.18437 2.84075 1 3.28587 1 3.75V13.25C1 14.216 1.784 15 2.75 15H12.25C12.7141 15 13.1592 14.8156 13.4874 14.4874C13.8156 14.1592 14 13.7141 14 13.25V9.75C14 9.55109 13.921 9.36032 13.7803 9.21967C13.6397 9.07902 13.4489 9 13.25 9C13.0511 9 12.8603 9.07902 12.7197 9.21967C12.579 9.36032 12.5 9.55109 12.5 9.75V13.25C12.5 13.3163 12.4737 13.3799 12.4268 13.4268C12.3799 13.4737 12.3163 13.5 12.25 13.5H2.75C2.6837 13.5 2.62011 13.4737 2.57322 13.4268C2.52634 13.3799 2.5 13.3163 2.5 13.25V3.75C2.5 3.6837 2.52634 3.62011 2.57322 3.57322C2.62011 3.52634 2.6837 3.5 2.75 3.5H6.25C6.44891 3.5 6.63968 3.42098 6.78033 3.28033C6.92098 3.13968 7 2.94891 7 2.75C7 2.55109 6.92098 2.36032 6.78033 2.21967C6.63968 2.07902 6.44891 2 6.25 2H2.75Z"></path></svg></span>

View File

@@ -6,11 +6,7 @@
also gets an `is-current-page` class.
-->
{% if process.env.FEATURE_NEW_VERSIONS %}
{% assign product = siteTree[currentLanguage][currentVersion].products[currentProduct] %}
{% else %}
{% assign product = siteTree[currentLanguage][currentVersion].products[currentProduct.id] %}
{% endif %}
{% include all-products-link %}
<li title="{{product.title}}" class="sidebar-product mb-2">
<a href="/{{currentLanguage}}{{product.href}}" class="pl-4 pr-5 pb-1 f4">{{ product.title }}</a>

View File

@@ -4,11 +4,7 @@
<h4 class="mb-3">
{{ site.data.ui.support.still_need_help }}
</h4>
{% if process.env.FEATURE_NEW_VERSIONS %}
{% if currentVersion contains 'enterprise' %}{% assign isEnterprise = true %}{% else %}{% assign isEnterprise = false %}{% endif %}
{% else %}
{% if currentVersion != 'dotcom' %}{% assign isEnterprise = true %}{% else %}{% assign isEnterprise = false %}{% endif %}
{% endif %}
<a id="ask-community" href="https://github.community" class="btn btn-outline">
{% octicon "people" width="16" %}
{{ site.data.ui.support.ask_community }}

View File

@@ -5,47 +5,29 @@ const { difference } = require('lodash')
const yaml = require('js-yaml')
const contentDir = path.join(process.cwd(), 'content')
const frontmatter = require('@github-docs/frontmatter')
const getApplicableVersions = require('./get-applicable-versions')
let getApplicableVersions
if (process.env.FEATURE_NEW_VERSIONS) {
getApplicableVersions = require('./get-applicable-versions')
}
// the product order is determined by a yml file
// the product order is determined by data/products.yml
const productsFile = path.join(process.cwd(), 'data/products.yml')
const productsYml = yaml.load(fs.readFileSync(productsFile, 'utf8'))
const sortedProductIds = productsYml.productsInOrder
let contentProductIds = fs.readdirSync(contentDir, { withFileTypes: true })
const contentProductIds = fs.readdirSync(contentDir, { withFileTypes: true })
.filter(entry => entry.isDirectory())
.map(entry => entry.name)
// TODO this can be removed when we replace content/enterprise/admin with content/admin
if (!process.env.FEATURE_NEW_VERSIONS) {
contentProductIds = contentProductIds.map(id => id.replace('enterprise', 'enterpriseServer'))
}
assert(difference(sortedProductIds, contentProductIds).length === 0)
assert(difference(contentProductIds, sortedProductIds).length === 0)
const internalProducts = {}
sortedProductIds.forEach(productId => {
const relPath = process.env.FEATURE_NEW_VERSIONS
? productId
: productId === 'enterpriseServer' ? 'enterprise/admin' : productId
const relPath = productId
const dir = path.join('content', relPath)
const toc = path.join(dir, 'index.md')
const { data } = frontmatter(fs.readFileSync(toc, 'utf8'))
let applicableVersions, href
if (process.env.FEATURE_NEW_VERSIONS) {
applicableVersions = getApplicableVersions(data.versions, toc)
href = path.join('/', applicableVersions[0], productId)
} else {
href = path.join('/', relPath)
}
const applicableVersions = getApplicableVersions(data.versions, toc)
const href = path.join('/', applicableVersions[0], productId)
internalProducts[productId] = {
id: productId,
@@ -56,11 +38,7 @@ sortedProductIds.forEach(productId => {
wip: data.wip || false
}
if (process.env.FEATURE_NEW_VERSIONS) {
internalProducts[productId].versions = applicableVersions
} else {
internalProducts[productId].hasEnterpriseUserVersions = productsYml.hasEnterpriseUserVersions.some(id => id === productId)
}
})
const externalProducts = {
@@ -78,10 +56,6 @@ const externalProducts = {
}
}
if (!process.env.FEATURE_NEW_VERSIONS) {
Object.keys(externalProducts).forEach(id => { externalProducts[id].hasEnterpriseUserVersions = false })
}
const allProducts = Object.assign({}, internalProducts, externalProducts)
module.exports = allProducts

View File

@@ -1,17 +1,12 @@
const enterpriseServerReleases = require('./enterprise-server-releases')
if (!process.env.FEATURE_NEW_VERSIONS) {
module.exports = ['dotcom'].concat(enterpriseServerReleases.supported)
}
// version = "plan"@"release"
// example: enterprise-server@2.21
// where "enterprise-server" is the plan and "2.21" is the release
const versionDelimiter = '@'
const latestNonNumberedRelease = 'latest'
if (process.env.FEATURE_NEW_VERSIONS) {
// version = "plan"@"release"
// example: enterprise-server@2.21
// where "enterprise-server" is the plan and "2.21" is the release
const versionDelimiter = '@'
const latestNonNumberedRelease = 'latest'
const plans = [
const plans = [
{
plan: 'free-pro-team',
planTitle: 'Free, Pro, and Team',
@@ -26,13 +21,13 @@ if (process.env.FEATURE_NEW_VERSIONS) {
latestRelease: enterpriseServerReleases.latest,
hasNumberedReleases: true
}
]
]
const allVersions = {}
const allVersions = {}
// combine the plans and releases to get allVersions object
// e.g. free-pro-team@latest, enterprise-server@2.21, enterprise-server@2.20, etc.
plans.forEach(planObj => {
// combine the plans and releases to get allVersions object
// e.g. free-pro-team@latest, enterprise-server@2.21, enterprise-server@2.20, etc.
plans.forEach(planObj => {
planObj.releases.forEach(release => {
const version = `${planObj.plan}${versionDelimiter}${release}`
@@ -45,7 +40,6 @@ if (process.env.FEATURE_NEW_VERSIONS) {
allVersions[version] = Object.assign(versionObj, planObj)
})
})
})
module.exports = allVersions
}
module.exports = allVersions

View File

@@ -79,9 +79,7 @@ module.exports = async function checkLinks ($, page, context, version, checkedLi
// finding the linked page isn't enough if it's a github.com page; also need to check versions
if (linkedPage.relativePath.startsWith('github')) {
const linkedPageVersions = process.env.FEATURE_NEW_VERSIONS
? getApplicableVersions(linkedPage.versions, linkedPage.relativePath)
: getApplicableVersions(linkedPage.productVersions, linkedPage.relativePath)
const linkedPageVersions = getApplicableVersions(linkedPage.versions, linkedPage.relativePath)
if (!linkedPageVersions.includes(version) && $(internalLink).attr('class') !== 'dotcom-only') {
brokenLinks.links.push({ 'broken link': link, reason: `${version} not found in linked page versions`, 'linked page': linkedPage.fullPath })

View File

@@ -68,9 +68,7 @@ module.exports = async function checkLinks ($, page, context, version, checkedLi
// finding the linked page isn't enough if it's a github.com page; also need to check versions
if (linkedPage.relativePath.startsWith('github')) {
const linkedPageVersions = process.env.FEATURE_NEW_VERSIONS
? getApplicableVersions(linkedPage.versions, linkedPage.relativePath)
: getApplicableVersions(linkedPage.productVersions, linkedPage.relativePath)
const linkedPageVersions = getApplicableVersions(linkedPage.versions, linkedPage.relativePath)
if (!linkedPageVersions.includes(version) && $(internalLink).attr('class') !== 'dotcom-only') {
brokenLinks.links.push({ 'broken link': link, reason: `${version} not found in linked page versions`, 'linked page': linkedPage.fullPath })

View File

@@ -1,8 +1,6 @@
const slash = require('slash')
const patterns = require('./patterns')
const allVersions = process.env.FEATURE_NEW_VERSIONS
? Object.keys(require('./all-versions'))
: require('./all-versions')
const allVersions = Object.keys(require('./all-versions'))
const { getVersionedPathWithLanguage } = require('./path-utils')
module.exports = function findPage (href, pages, redirects = {}, languageCode = 'en', sourceLanguage = null) {

View File

@@ -5,7 +5,6 @@ const semverRange = {
conform: require('semver').validRange,
message: 'Must be a valid SemVer range'
}
const productIds = Object.keys(require('./all-products'))
const versionIds = Object.keys(require('./all-versions'))
const schema = {
@@ -68,30 +67,13 @@ const schema = {
}
}
if (process.env.FEATURE_NEW_VERSIONS) {
schema.properties.versions = {
schema.properties.versions = {
type: ['object', 'string'], // allow a '*' string to indicate all versions
required: true,
properties: versionIds.reduce((acc, versionId) => {
acc[versionId] = semverRange
return acc
}, {})
}
}
if (!process.env.FEATURE_NEW_VERSIONS) {
schema.properties.productVersions = {
type: 'object',
required: true,
properties: productIds.reduce((acc, productId) => {
// github used to be called dotcom
// TODO: rename `dotcom` to `github` in all the markdown files' frontmatter
if (productId === 'github') productId = 'dotcom'
acc[productId] = semverRange
return acc
}, {})
}
}
function frontmatter (markdown, opts = {}) {

View File

@@ -1,36 +1,12 @@
const allVersions = require('./all-versions')
const versionSatisifiesRange = require('./version-satisfies-range')
let nonEnterpriseProductVersions
if (!process.env.FEATURE_NEW_VERSIONS) {
nonEnterpriseProductVersions = Object.keys(require('./frontmatter').schema.properties.productVersions.properties)
.filter(prop => prop !== 'enterprise')
}
// return an array of versions that an article's product versions encompasses
function getApplicableVersions (frontmatterVersions, filepath) {
if (typeof frontmatterVersions === 'undefined') {
throw new Error(`No \`versions\` frontmatter found in ${filepath}`)
}
if (!process.env.FEATURE_NEW_VERSIONS) {
const applicableVersions = allVersions.filter(version => {
if (version === 'dotcom') {
// find any non-Enterprise product versions that apply
return nonEnterpriseProductVersions.some(version => version in frontmatterVersions)
} else {
return versionSatisifiesRange(version, frontmatterVersions.enterprise)
}
})
if (!applicableVersions.length) {
throw new Error(`No applicable product versions found for file ${filepath}. Please double-check the page's \`productVersions\` frontmatter.`)
}
return applicableVersions
}
if (process.env.FEATURE_NEW_VERSIONS) {
// all versions are applicable!
if (frontmatterVersions === '*') {
return Object.keys(allVersions)
@@ -71,7 +47,6 @@ function getApplicableVersions (frontmatterVersions, filepath) {
}
return applicableVersions
}
}
module.exports = getApplicableVersions

View File

@@ -7,8 +7,6 @@ const LiquidTag = require('./liquid-tag')
const findPage = require('../find-page')
const getApplicableVersions = require('../get-applicable-versions')
const versionsProp = process.env.FEATURE_NEW_VERSIONS ? 'versions' : 'productVersions'
// This class supports a set of link tags. Each tag expects one parameter, a language-agnostic href:
//
// {% link /articles/set-up-git %}
@@ -64,7 +62,7 @@ module.exports = class Link extends LiquidTag {
if (!page) return ''
// get versions of the found page
const applicableVersions = getApplicableVersions(page[versionsProp], fullPath)
const applicableVersions = getApplicableVersions(page.versions, fullPath)
// check whether the page versions include the current version
const shouldLinkRenderInCurrentVersion = applicableVersions.includes(ctx.currentVersion)

View File

@@ -1,6 +1,4 @@
if (process.env.FEATURE_NEW_VERSIONS) {
const nonEnterpriseDefaultVersion = Object.values(require('../lib/all-versions'))
const nonEnterpriseDefaultVersion = Object.values(require('../lib/all-versions'))
.find(version => version.nonEnterpriseDefault).version
module.exports = nonEnterpriseDefaultVersion
}
module.exports = nonEnterpriseDefaultVersion

View File

@@ -19,10 +19,6 @@ const frontmatter = require('./frontmatter')
const products = require('./all-products')
const slash = require('slash')
const versionsProp = process.env.FEATURE_NEW_VERSIONS
? 'versions'
: 'productVersions'
class Page {
constructor (opts) {
assert(opts.relativePath, 'relativePath is required')
@@ -72,7 +68,7 @@ class Page {
delete this.guideLinks
// derive array of Permalink objects
this.permalinks = Permalink.derive(this.languageCode, this.relativePath, this.title, this[versionsProp])
this.permalinks = Permalink.derive(this.languageCode, this.relativePath, this.title, this.versions)
// create backwards-compatible old paths for page permalinks and frontmatter redirects
this.redirects = generateRedirectsForPermalinks(this.permalinks, this.redirect_from)
@@ -93,16 +89,11 @@ class Page {
// Infer the parent product ID from the page's relative file path
get parentProductId () {
// Each page's top-level content directory matches its product ID
let id = this.relativePath.split('/')[0]
const id = this.relativePath.split('/')[0]
// ignore top-level content/index.md
if (id === 'index.md') return null
if (!process.env.FEATURE_NEW_VERSIONS) {
// make an exception of GitHub Enterprise
if (id === 'enterprise') id = 'enterpriseServer'
}
// make sure the ID is valid
assert(
Object.keys(products).includes(id),

View File

@@ -1,75 +1,16 @@
const slash = require('slash')
const path = require('path')
const patterns = require('./patterns')
const { latest, deprecated } = require('./enterprise-server-releases')
const internalProducts = Object.values(require('./all-products'))
.filter(prod => !prod.external)
const { deprecated } = require('./enterprise-server-releases')
const allProducts = require('./all-products')
const allVersions = require('./all-versions')
const { getNewVersionedPath } = require('./old-versions-utils')
let pathsThatHaveEnterpriseUserVersions, pathsThatDoNotHaveEnterpriseUserVersions
if (!process.env.FEATURE_NEW_VERSIONS) {
pathsThatHaveEnterpriseUserVersions = internalProducts
.filter(prod => prod.hasEnterpriseUserVersions)
.map(prod => prod.href)
.concat(['/articles', '/categories'])
pathsThatDoNotHaveEnterpriseUserVersions = internalProducts
.filter(prod => !prod.hasEnterpriseUserVersions)
.map(prod => prod.href)
.concat(['/enterprise'])
}
// construct appropriate versioned path for any given HREF
function getVersionedPathWithoutLanguage (href, version) {
// start clean without language code or trailing slash
href = getPathWithoutLanguage(href.replace(patterns.trailingSlash, '$1'))
if (!process.env.FEATURE_NEW_VERSIONS) {
// does href need an enterprise user path?
// e.g., /articles/foo -> /en/enterprise/2.15/user/articles/foo
// also redirects like /common-issues-and-questions
// but NOT /actions, /desktop, /enterprise, etc.
const needsEnterpriseUserPath = (
pathsThatHaveEnterpriseUserVersions.some(path => href.startsWith(path)) ||
!pathsThatDoNotHaveEnterpriseUserVersions.some(path => href.startsWith(path))
)
// construct enterprise user path
if (needsEnterpriseUserPath && version !== 'dotcom') {
href = `/enterprise/${version}/user/${href}`
}
// hack fix for double slash bug
href = href.replace('//', '/')
// does href need an enterprise version added to path?
const needsEnterpriseVersion = (
href.match(patterns.enterprise) &&
href.match(patterns.getEnterpriseVersionNumber) === null
)
// add the enterprise version
if (needsEnterpriseVersion) {
// if current page version is dotcom, use the latest version of enterprise
href = version === 'dotcom'
? href.replace(/(\/enterprise)/, `$1/${latest}`)
: href.replace(/(\/enterprise)/, `$1/${version}`)
}
// is this an enterprise user path on dotcom?
const isEnterpriseUsePath = href.match(patterns.enterprise) && !href.match(patterns.admin)
// if so, replace enterprise user part of path with /github/
if (isEnterpriseUsePath && version === 'dotcom') {
href = href.replace(/\/enterprise\/.+?\/user\//, '')
}
return slash(href.replace(patterns.trailingSlash, '$1'))
}
if (process.env.FEATURE_NEW_VERSIONS) {
// if this is an old versioned path that includes a deprecated version, do not change!
// example: /enterprise/11.10.340/admin/articles/upgrading-to-the-latest-release
const oldEnterpriseVersionNumber = href.match(patterns.getEnterpriseVersionNumber)
@@ -101,7 +42,6 @@ function getVersionedPathWithoutLanguage (href, version) {
// update the version
return slash(href.replace(versionFromPath, version))
}
}
// add language code
@@ -127,16 +67,7 @@ function getPathWithoutLanguage (href) {
}
function getPathWithoutVersion (href) {
if (!process.env.FEATURE_NEW_VERSIONS) {
const number = href.match(patterns.getEnterpriseVersionNumber)
if (!number) return href
return slash(href.replace('/' + number[1], ''))
}
if (process.env.FEATURE_NEW_VERSIONS) {
return href.replace(`/${getVersionStringFromPath(href)}`, '')
}
}
function getVersionStringFromPath (href) {

View File

@@ -16,9 +16,7 @@ class Permalink {
this.href = pathUtils.getVersionedPathWithLanguage(permalinkSuffix, pageVersion, languageCode)
this.pageVersionTitle = process.env.FEATURE_NEW_VERSIONS
? allVersions[pageVersion].versionTitle
: pageVersion === 'dotcom' ? 'GitHub.com' : `Enterprise Server ${pageVersion}`
this.pageVersionTitle = allVersions[pageVersion].versionTitle
return this
}
@@ -33,7 +31,6 @@ class Permalink {
})
// special permalink for homepage
if (process.env.FEATURE_NEW_VERSIONS) {
if (relativePath === 'index.md') {
const homepagePermalink = {
...permalinks[0],
@@ -44,7 +41,6 @@ class Permalink {
}
permalinks.push(homepagePermalink)
}
}
return permalinks
}

View File

@@ -1,7 +1,6 @@
const patterns = require('../patterns')
const { latest } = require('../enterprise-server-releases')
const { getVersionedPathWithLanguage } = require('../path-utils')
const latestEnterpriseRestPath = `/enterprise/${latest}/user/rest/`
// This function takes a known pre-migration path from developer.github.com and
// infers and returns a current, correct docs.github.com path.
@@ -48,14 +47,8 @@ module.exports = function getDocsPathFromDeveloperPath (oldDeveloperPath, allRed
newPath = allRedirects[newPath] || newPath
// old developer routes that include 'enterprise-admin' should always redirect to enterprise server
const enterpriseRegex = process.env.FEATURE_NEW_VERSIONS
? patterns.enterpriseServer
: patterns.enterprise
if (fragment && newPath.includes('/rest/reference/enterprise-admin') && !enterpriseRegex.test(newPath)) {
newPath = process.env.FEATURE_NEW_VERSIONS
? getVersionedPathWithLanguage(newPath, `enterprise-server@${latest}`, 'en')
: newPath.replace('/rest/', latestEnterpriseRestPath)
if (fragment && newPath.includes('/rest/reference/enterprise-admin') && !patterns.enterpriseServer.test(newPath)) {
newPath = getVersionedPathWithLanguage(newPath, `enterprise-server@${latest}`, 'en')
}
// show an error if the page to be redirected to doesn't exist

View File

@@ -55,7 +55,6 @@ module.exports = function getOldPathsFromPath (currentPath, languageCode, curren
// ------ END LEGACY VERSION FORMAT REPLACEMENTS ------//
// ------ BEGIN MODERN VERSION FORMAT REPLACEMENTS ------//
if (process.env.FEATURE_NEW_VERSIONS) {
if (currentlySupportedVersions.includes(currentVersion) || versionSatisifiesRange(currentVersion, `>${lastReleaseWithLegacyFormat}`)) {
oldPaths.forEach(oldPath => {
// create old path /github from new path /free-pro-team@latest/github
@@ -105,7 +104,6 @@ module.exports = function getOldPathsFromPath (currentPath, languageCode, curren
}
})
}
}
// ------ END MODERN VERSION FORMAT REPLACEMENTS ------//
// For each old path added to the set above, do the following...

View File

@@ -52,9 +52,7 @@ module.exports = async function precompileRedirects (pages) {
// although we only support developer Enterprise paths up to 2.21, we make
// an exception to always redirect versionless paths to the latest version
if (developerRoute.includes('/2.21/')) {
const newPathOnLatestVersion = process.env.FEATURE_NEW_VERSIONS
? newPath.replace('@2.21/', `@${latest}/`)
: newPath.replace('/2.21/', `/${latest}/`)
const newPathOnLatestVersion = newPath.replace('@2.21/', `@${latest}/`)
const developerRouteWithoutVersion = developerRoute.replace('/2.21/', '/')
const developerRouteWithLanguageWithoutVersion = `/en${developerRouteWithoutVersion}`
allRedirects[developerRouteWithoutVersion] = newPathOnLatestVersion
@@ -65,9 +63,7 @@ module.exports = async function precompileRedirects (pages) {
// we should eventually yank this block because 2.22 never existed on developer site
// the better solution is to change `/v3` and `/v4` links in content to `/rest` and `/graphql`
if (developerRoute.includes('/2.21/')) {
const newPath222 = process.env.FEATURE_NEW_VERSIONS
? newPath.replace('@2.21/', '@2.22/')
: newPath.replace('/2.21/', '/2.22/')
const newPath222 = newPath.replace('@2.21/', '@2.22/')
const developerRoute222 = developerRoute.replace('/2.21/', '/2.22/')
const developerRouteWithLanguage222 = `/en${developerRoute222}`
allRedirects[developerRoute222] = newPath222
@@ -88,14 +84,12 @@ module.exports = async function precompileRedirects (pages) {
// given a developer route like `/v3/gists/comments`,
// add a veriation like `/free-pro-team@latest/v3/gists/comments`;
// again, we need to do this because all links in content get rewritten
if (process.env.FEATURE_NEW_VERSIONS) {
if (!developerRoute.startsWith('/enterprise/')) {
const developerRouteWithVersion = path.join(nonEnterpriseDefaultVersion, developerRoute)
const developerRouteWithVersionAndLanguage = `/en/${developerRouteWithVersion}`
allRedirects[developerRouteWithVersion] = newPath
allRedirects[developerRouteWithVersionAndLanguage] = newPath
}
}
})
return allRedirects

View File

@@ -1,7 +1,3 @@
const versionsProp = process.env.FEATURE_NEW_VERSIONS
? 'versions'
: 'productVersions'
module.exports = function removeDeprecatedFrontmatter (data, devCheckout, versionToDeprecate, nextOldestVersion) {
// there are currently different frontmatter conventions for developer docs vs. help docs
if (devCheckout) {
@@ -16,12 +12,12 @@ module.exports = function removeDeprecatedFrontmatter (data, devCheckout, versio
}
} else {
// skip files with no versions or Enterprise versions frontmatter
if (!data[versionsProp]) return data
if (!data[versionsProp].enterprise) return data
if (!data.versions) return data
if (!data.versions.enterprise) return data
// change frontmatter like enterprise: '>=2.13' to enterprise: '*'
if (data[versionsProp].enterprise === `>=${versionToDeprecate}` || data[versionsProp].enterprise === `>=${nextOldestVersion}`) {
data[versionsProp].enterprise = '*'
if (data.versions.enterprise === `>=${versionToDeprecate}` || data.versions.enterprise === `>=${nextOldestVersion}`) {
data.versions.enterprise = '*'
}
}

View File

@@ -1,29 +1,29 @@
const latestEnterpriseVersion = require('./enterprise-server-releases').latest
const nonEnterpriseDefaultVersion = require('./non-enterprise-default-version')
const { getOldVersionFromNewVersion } = require('./old-versions-utils')
const s3BasePath = 'https://github-images.s3.amazonaws.com'
// rewrite asset paths to s3 if it's a dotcom article on any GHE version
// or if it's an admin article on any GHE version EXCEPT latest version
// This module rewrites asset paths on Enterprise versions to S3 paths.
// Source example: /assets/images/foo.png
// Rewritten: https://github-images.s3.amazonaws.com/enterprise/2.20/assets/images/foo.png
// The one exception is Admin pages on the latest GHES release.
module.exports = function rewriteAssetPathsToS3 ($, version, relativePath) {
let oldVersion
if (process.env.FEATURE_NEW_VERSIONS) {
// if the current version is non-enterprise, do not rewrite
if (version === nonEnterpriseDefaultVersion) return
// get 2.22 from enterprise-server@2.22
oldVersion = getOldVersionFromNewVersion(version)
// relativePath starts with the product, like /admin/foo or /github/foo
const product = relativePath.split('/')[0]
if (product === 'admin' && oldVersion === latestEnterpriseVersion) return
} else {
if (version === 'dotcom') return
if (relativePath.includes('enterprise/') && version === latestEnterpriseVersion) return
oldVersion = version
}
const s3Path = 'https://github-images.s3.amazonaws.com'
// get 2.22 from enterprise-server@2.22
const oldVersion = getOldVersionFromNewVersion(version)
// the relativePath starts with the product, like /admin/foo or /github/foo
const product = relativePath.split('/')[0]
// if this is an Admin page on the latest version, do not rewrite
if (product === 'admin' && oldVersion === latestEnterpriseVersion) return
$('img').each((i, el) => {
const src = $(el).attr('src')
if (!src.startsWith('/assets/images')) return
const newSrc = `${s3Path}/enterprise/${oldVersion}${src}`
const newSrc = `${s3BasePath}/enterprise/${oldVersion}${src}`
if (src !== newSrc) $(el).attr('src', newSrc)
})
}

View File

@@ -27,9 +27,7 @@ function getNewHref (link, languageCode, version) {
// If link is dotcom-only, just get the language code
// Otherwise, get the versioned path with language code
const newHref = link.hasClass('dotcom-only')
? process.env.FEATURE_NEW_VERSIONS
? pathUtils.getVersionedPathWithLanguage(href, nonEnterpriseDefaultVersion, languageCode)
: pathUtils.getPathWithLanguage(href, languageCode)
: pathUtils.getVersionedPathWithLanguage(href, version, languageCode)
if (href !== newHref) link.attr('href', newHref)

View File

@@ -5,14 +5,7 @@ const products = Object.values(require('../lib/all-products'))
const { getVersionedPathWithoutLanguage } = require('./path-utils')
const languageCodes = Object.keys(require('./languages'))
const addTitlesToTree = require('./site-tree-titles')
const allVersions = process.env.FEATURE_NEW_VERSIONS
? Object.keys(require('./all-versions'))
: require('./all-versions')
const versionsProp = process.env.FEATURE_NEW_VERSIONS
? 'versions'
: 'productVersions'
const allVersions = Object.keys(require('./all-versions'))
// This module builds a localized tree of every page on the site
// It includes single-source pages that have different variants
@@ -83,7 +76,7 @@ function buildCategoriesTree (tocItems, productHref, pages, redirects, version,
category.title = page.shortTitle || page.title
if (!getApplicableVersions(page[versionsProp], page.fullPath).includes(version)) {
if (!getApplicableVersions(page.versions, page.fullPath).includes(version)) {
return
}
@@ -135,7 +128,7 @@ function buildMaptopicsTree (tocItems, categoryHref, pages, redirects, version,
// if this is not a maptopic, return early
if (!page.mapTopic) return
if (!getApplicableVersions(page[versionsProp], page.fullPath).includes(version)) {
if (!getApplicableVersions(page.versions, page.fullPath).includes(version)) {
return
}
@@ -177,7 +170,7 @@ function buildArticlesTree (tocItems, categoryHref, pages, redirects, version, l
article.title = page.shortTitle || page.title
if (!getApplicableVersions(page[versionsProp], page.fullPath).includes(version)) {
if (!getApplicableVersions(page.versions, page.fullPath).includes(version)) {
return
}

View File

@@ -1,5 +1,5 @@
const path = require('path')
const { getPathWithoutLanguage, getVersionedPathWithoutLanguage } = require('../lib/path-utils')
const { getPathWithoutLanguage } = require('../lib/path-utils')
module.exports = async (req, res, next) => {
req.context.breadcrumbs = {}
@@ -7,65 +7,8 @@ module.exports = async (req, res, next) => {
if (!req.context.page) return next()
if (req.context.page.relativePath === 'index.md') return next()
let pathParts, product, categoryPath
if (!process.env.FEATURE_NEW_VERSIONS) {
if (req.context.page.relativePath === 'enterprise/index.md') return next()
pathParts = req.context.currentPathWithoutLanguage.split('/')
// remove first empty item
pathParts.shift()
let productPath
// e.g., /github
if (pathParts[0] !== 'enterprise') {
productPath = path.posix.join('/', pathParts[0])
}
if (pathParts[0] === 'enterprise') {
// handling for /enterprise/version/admin
if (pathParts.includes('admin')) {
productPath = path.posix.join('/', ...pathParts.slice(0, 3))
// remove /enterprise/version so that path starts with /admin
pathParts.splice(0, 2)
}
// handling for /enterprise/version/user/product
if (pathParts.includes('user')) {
productPath = path.posix.join('/', ...pathParts.slice(0, 4))
// remove /enterprise/version/user so that path starts with /product
pathParts.splice(0, 3)
}
}
// turn /product paths into /enterprise/version/user/product paths and vice versa
productPath = getVersionedPathWithoutLanguage(productPath, req.context.currentVersion)
product = req.context.siteTree[req.language][req.context.currentVersion].products[req.context.currentProduct.id]
// GitHub.com is the only product with a breadcrumbs-specific Enterprise title
// in the sidebar, the product title is `GitHub.com` in all versions
// in the breadcrumbs, the product title is either `GitHub.com` or `GitHub Enterprise Server`
const productTitle = product.title === 'GitHub.com' && req.context.currentVersion !== 'dotcom'
? 'GitHub Enterprise Server'
: product.title
req.context.breadcrumbs.product = {
href: productPath,
title: productTitle
}
if (!pathParts[1]) return next()
// get category path
// e.g., /github/getting-started-with-github
categoryPath = path.posix.join(productPath, pathParts[1])
}
if (process.env.FEATURE_NEW_VERSIONS) {
const rawPath = getPathWithoutLanguage(req.path)
pathParts = rawPath.split('/')
const pathParts = rawPath.split('/')
// drop first '/'
pathParts.shift()
@@ -74,7 +17,7 @@ module.exports = async (req, res, next) => {
pathParts.shift()
const productPath = path.posix.join('/', req.context.currentProduct)
product = req.context.siteTree[req.language][req.context.currentVersion].products[req.context.currentProduct]
const product = req.context.siteTree[req.language][req.context.currentVersion].products[req.context.currentProduct]
req.context.breadcrumbs.product = {
href: path.posix.join('/', req.context.currentVersion, productPath),
@@ -86,8 +29,7 @@ module.exports = async (req, res, next) => {
// get category path
// e.g., `getting-started-with-github` in /free-pro-team@latest/github/getting-started-with-github
// or /enterprise-server@2.21/github/getting-started-with-github
categoryPath = path.posix.join('/', req.context.currentVersion, productPath, pathParts[1])
}
const categoryPath = path.posix.join('/', req.context.currentVersion, productPath, pathParts[1])
const category = product.categories[categoryPath]

View File

@@ -5,7 +5,6 @@ const allProducts = require('../lib/all-products')
const activeProducts = Object.values(allProducts).filter(product => !product.wip)
const { getVersionStringFromPath, getProductStringFromPath, getPathWithoutLanguage } = require('../lib/path-utils')
const productNames = require('../lib/product-names')
const patterns = require('../lib/patterns')
const warmServer = require('../lib/warm-server')
const featureFlags = Object.keys(require('../feature-flags'))
@@ -25,31 +24,19 @@ module.exports = async function contextualize (req, res, next) {
// define each context property explicitly for code-search friendliness
// e.g. searches for "req.context.page" will include results from this file
req.context.currentLanguage = req.language
if (process.env.FEATURE_NEW_VERSIONS) {
req.context.currentVersion = getVersionStringFromPath(req.path)
req.context.currentProduct = getProductStringFromPath(req.path)
req.context.allProducts = allProducts
req.context.activeProducts = activeProducts
req.context.allVersions = allVersions
req.context.currentPathWithoutLanguage = getPathWithoutLanguage(req.path)
}
if (!process.env.FEATURE_NEW_VERSIONS) {
req.context.currentVersion = getVersion(req.path)
req.context.currentPathWithoutLanguage = getPathWithoutLanguage(req.path).replace(patterns.getEnterpriseVersionlessPath, '$1/')
}
req.context.currentPath = req.path
req.context.query = req.query
req.context.languages = languages
req.context.earlyAccessPaths = earlyAccessPaths
req.context.enterpriseVersions = enterpriseServerReleases
req.context.productNames = productNames
if (process.env.FEATURE_NEW_VERSIONS) {
req.context.enterpriseServerReleases = enterpriseServerReleases
}
if (!process.env.FEATURE_NEW_VERSIONS) {
req.context.enterpriseVersions = enterpriseServerReleases
req.context.productNames = productNames
}
req.context.redirects = redirects
req.context.site = site[req.language].site
req.context.siteTree = siteTree
@@ -57,15 +44,3 @@ module.exports = async function contextualize (req, res, next) {
return next()
}
// infer the version from the request path
// /en/articles/foo -> dotcom
// /en/enterprise/2.14/user/articles/foo -> 2.14
// /en/enterprise/user/articles/foo -> latest GHES version
function getVersion (requestPath) {
const versionNumber = requestPath.match(patterns.getEnterpriseVersionNumber)
return patterns.enterprise.test(requestPath)
? versionNumber ? versionNumber[1] : enterpriseServerReleases.latest
: 'dotcom'
}

View File

@@ -14,9 +14,7 @@ module.exports = async (req, res, next) => {
if (!req.path.includes('/graphql/')) return next()
// TODO need to update this to the new versions in coordination with the updater scripts
const currentOldVersion = process.env.FEATURE_NEW_VERSIONS
? getOldVersionFromNewVersion(req.context.currentVersion)
: req.context.currentVersion
const currentOldVersion = getOldVersionFromNewVersion(req.context.currentVersion)
req.context.graphql = {
schemaForCurrentVersion: require(`../../lib/graphql/static/schema-${currentOldVersion}`),

View File

@@ -6,9 +6,7 @@ module.exports = async function (req, res, next) {
req.context.rest = rest
// TODO need to update this to the new versions in coordination with the updater scripts
const currentOldVersion = process.env.FEATURE_NEW_VERSIONS
? getOldVersionFromNewVersion(req.context.currentVersion)
: req.context.currentVersion
const currentOldVersion = getOldVersionFromNewVersion(req.context.currentVersion)
// link to include in `Works with GitHub Apps` notes
// e.g. /ja/rest/reference/apps or /en/enterprise/2.20/user/rest/reference/apps

View File

@@ -5,9 +5,7 @@ const { getOldVersionFromNewVersion } = require('../../lib/old-versions-utils')
module.exports = async (req, res, next) => {
// TODO need to update this to the new versions in coordination with the updater scripts
const currentOldVersion = process.env.FEATURE_NEW_VERSIONS
? getOldVersionFromNewVersion(req.context.currentVersion)
: req.context.currentVersion
const currentOldVersion = getOldVersionFromNewVersion(req.context.currentVersion)
const webhookPayloadsForCurrentVersion = webhookPayloads[currentOldVersion]

View File

@@ -30,9 +30,7 @@ async function getLinkData (rawLinks, context) {
const linkedPage = findPage(href, context.pages, context.redirects, context.currentLanguage)
if (!linkedPage) continue
const applicableVersions = process.env.FEATURE_NEW_VERSIONS
? getApplicableVersions(linkedPage.versions, linkedPage.fullPath)
: getApplicableVersions(linkedPage.productVersions, linkedPage.fullPath)
const applicableVersions = getApplicableVersions(linkedPage.versions, linkedPage.fullPath)
// skip link if this is not the homepage and the link's versions do not include the current version
if (context.currentVersion !== 'homepage' && !applicableVersions.includes(context.currentVersion)) continue

View File

@@ -20,7 +20,6 @@ module.exports = function (app) {
app.use(require('./redirects/help-to-docs'))
app.use(require('./set-fastly-cache-headers'))
app.use(require('./handle-invalid-paths'))
if (!process.env.FEATURE_NEW_VERSIONS) app.use(require('./enterprise-homepage'))
app.use(require('./loaderio-verification'))
app.use(require('./cors'))
app.use(require('./csp'))
@@ -41,13 +40,11 @@ module.exports = function (app) {
app.use(require('./early-access-paths'))
app.use(require('./early-access-proxy'))
app.use(require('./find-page'))
if (!process.env.FEATURE_NEW_VERSIONS) app.use(require('./products'))
app.use(require('./notices'))
app.use(require('./archived-enterprise-versions'))
app.use(require('./archived-enterprise-versions-assets'))
app.use('/assets', express.static('assets'))
app.use('/public', express.static('data/graphql'))
if (!process.env.FEATURE_NEW_VERSIONS) app.use(require('./homepages'))
app.use(require('./redirects/language-code-redirects'))
// redirects need to be handled before the contextualizers
app.use(require('./redirects/handle-redirects'))

View File

@@ -22,9 +22,7 @@ module.exports = (req, res, next) => {
language.wip
)
const currentProduct = process.env.FEATURE_NEW_VERSIONS
? req.context.allProducts[req.context.currentProduct]
: req.context.currentProduct
const currentProduct = req.context.allProducts[req.context.currentProduct]
// if this is the homepage and no product is chosen yet, return early
if (!currentProduct) return next()

View File

@@ -1,6 +1,5 @@
#!/usr/bin/env node
require('../lib/feature-flags')
const path = require('path')
const assert = require('assert')
const patterns = require('../lib/patterns')

View File

@@ -1,6 +1,5 @@
#!/usr/bin/env node
require('../../lib/feature-flags')
const fs = require('fs')
const path = require('path')
const mkdirp = require('mkdirp').sync
@@ -12,26 +11,23 @@ const graphqlStaticDir = path.join(process.cwd(), 'lib/graphql/static')
const { getContents } = require('../../lib/git-utils')
const dataFilenames = require('./utils/data-filenames')
const { oldVersions } = require('../../lib/old-versions-utils')
const allVersions = require('../../lib/all-versions')
const processPreviews = require('./utils/process-previews')
const processUpcomingChanges = require('./utils/process-upcoming-changes')
const processSchemas = require('./utils/process-schemas')
const prerenderObjects = require('./utils/prerender-objects')
// TODO need to update this to the new versions
// for now, fall back to the old versions for use in schema filenames
const versions = process.env.FEATURE_NEW_VERSIONS ? oldVersions : allVersions
// TODO this step is only required as long as we support GHE versions *OLDER THAN* 2.21
// as soon as 2.20 is deprecated on 2021-02-11, we can remove all graphql-ruby filtering
const removeHiddenMembersScript = path.join(__dirname, './utils/remove-hidden-schema-members.rb')
// optionally build only 'dotcom' or any GHE version by passing the number ('2.20')
let versionsToBuild = versions
// TODO need to update this to the new versions
// for now, fall back to the old versions for use in schema filenames
let versionsToBuild = oldVersions
if (process.argv.length === 3) {
const version = process.argv[2]
assert(versions.includes(version), `'${version}' is not valid! must be one of: ${versions}`)
assert(oldVersions.includes(version), `'${version}' is not valid! must be one of: ${oldVersions}`)
versionsToBuild = [version]
}

View File

@@ -7,7 +7,6 @@
//
// [end-readme]
require('../lib/feature-flags')
require('make-promises-safe')
main()

View File

@@ -1,20 +1,11 @@
/* global page */
require('../../lib/feature-flags')
const sleep = require('await-sleep')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('homepage', () => {
testFeatureNewVersions('should be titled "GitHub Documentation"', async () => {
test('should be titled "GitHub Documentation"', async () => {
await page.goto('http://localhost:4001')
await expect(page.title()).resolves.toMatch('GitHub Documentation')
})
testFeatureOldVersions('should be titled "GitHub.com Help"', async () => {
await page.goto('http://localhost:4001')
await expect(page.title()).resolves.toMatch('GitHub.com Help')
})
})
describe('algolia browser search', () => {

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const path = require('path')
const fs = require('fs')
const walk = require('walk-sync')

View File

@@ -1,12 +1,8 @@
require('../../lib/feature-flags')
const { getDOM, getJSON } = require('../helpers')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const japaneseCharacters = require('japanese-characters')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('gettingStartedLinks and popularLinks', () => {
jest.setTimeout(3 * 60 * 1000)
@@ -16,7 +12,7 @@ describe('gettingStartedLinks and popularLinks', () => {
expect($('.featured-links')).toHaveLength(0)
})
testFeatureNewVersions('landing page intro links have expected properties', async () => {
test('landing page intro links have expected properties', async () => {
const $ = await getDOM('/en')
const $featuredLinks = $('.featured-links a')
expect($featuredLinks).toHaveLength(9)
@@ -29,19 +25,6 @@ describe('gettingStartedLinks and popularLinks', () => {
expect($featuredLinks.eq(8).children('p').text().startsWith('You can create a website')).toBe(true)
})
testFeatureOldVersions('landing page intro links have expected properties', async () => {
const $ = await getDOM('/en')
const $featuredLinks = $('.featured-links a')
expect($featuredLinks).toHaveLength(9)
expect($featuredLinks.eq(0).attr('href')).toBe('/en/github/getting-started-with-github/set-up-git')
expect($featuredLinks.eq(0).children('h4').text().startsWith('Set up Git')).toBe(true)
expect($featuredLinks.eq(0).children('p').text().startsWith('At the heart of GitHub')).toBe(true)
expect($featuredLinks.eq(8).attr('href')).toBe('/en/github/working-with-github-pages')
expect($featuredLinks.eq(8).children('h4').text().startsWith('GitHub Pages')).toBe(true)
expect($featuredLinks.eq(8).children('p').text().startsWith('You can create a website')).toBe(true)
})
test('localized intro links link to localized pages', async () => {
const $ = await getDOM('/ja')
const $featuredLinks = $('.featured-links a')
@@ -51,7 +34,7 @@ describe('gettingStartedLinks and popularLinks', () => {
expect(japaneseCharacters.presentIn($featuredLinks.eq(0).children('p').text())).toBe(true)
})
testFeatureNewVersions('Enterprise user intro links have expected values', async () => {
test('Enterprise user intro links have expected values', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/insights`)
const $featuredLinks = $('.featured-links a')
expect($featuredLinks).toHaveLength(6)
@@ -60,15 +43,6 @@ describe('gettingStartedLinks and popularLinks', () => {
expect($featuredLinks.eq(0).children('p').text().startsWith('GitHub Insights provides metrics')).toBe(true)
})
testFeatureOldVersions('Enterprise user intro links have expected values', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/insights`)
const $featuredLinks = $('.featured-links a')
expect($featuredLinks).toHaveLength(6)
expect($featuredLinks.eq(0).attr('href')).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/insights/installing-and-configuring-github-insights/about-github-insights`)
expect($featuredLinks.eq(0).children('h4').text().startsWith('About GitHub Insights')).toBe(true)
expect($featuredLinks.eq(0).children('p').text().startsWith('GitHub Insights provides metrics')).toBe(true)
})
test('featured links respect versioning', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/packages`)
const $featuredLinks = $('.featured-links a')
@@ -80,7 +54,7 @@ describe('gettingStartedLinks and popularLinks', () => {
})
describe('context.page object', () => {
testFeatureNewVersions('returns modified array of links', async () => {
test('returns modified array of links', async () => {
const gettingStartedLinks = await getJSON('/en?json=gettingStartedLinks')
const expectedFirstLink = {
href: `/en/${nonEnterpriseDefaultVersion}/github/getting-started-with-github/set-up-git`,
@@ -91,17 +65,6 @@ describe('gettingStartedLinks and popularLinks', () => {
expect(gettingStartedLinks[0].intro.startsWith('At the heart of GitHub')).toBe(true)
})
testFeatureOldVersions('returns modified array of links', async () => {
const gettingStartedLinks = await getJSON('/en?json=gettingStartedLinks')
const expectedFirstLink = {
href: '/en/github/getting-started-with-github/set-up-git',
title: 'Set up Git'
}
expect(gettingStartedLinks[0].href).toEqual(expectedFirstLink.href)
expect(gettingStartedLinks[0].title).toEqual(expectedFirstLink.title)
expect(gettingStartedLinks[0].intro.startsWith('At the heart of GitHub')).toBe(true)
})
test('returns raw array of links on the page object', async () => {
const rawGettingStartedLinks = await getJSON('/en?json=page.rawGettingStartedLinks')
expect(rawGettingStartedLinks[0]).toEqual('/github/getting-started-with-github/set-up-git')

View File

@@ -3,14 +3,14 @@ const upcomingChangesJson = require('../../lib/graphql/static/upcoming-changes')
const prerenderedObjectsJson = require('../../lib/graphql/static/prerendered-objects')
const { schemaValidator, previewsValidator, upcomingChangesValidator } = require('../../lib/graphql/validator')
const revalidator = require('revalidator')
const allVersions = require('../../lib/all-versions')
const { oldVersions } = require('../../lib/old-versions-utils')
const graphqlTypes = require('../../lib/graphql/types').map(t => t.kind)
describe('graphql json files', () => {
jest.setTimeout(3 * 60 * 1000)
test('static files have versions as top-level keys', () => {
allVersions.forEach(version => {
oldVersions.forEach(version => {
expect(version in previewsJson).toBe(true)
expect(version in upcomingChangesJson).toBe(true)
expect(version in prerenderedObjectsJson).toBe(true)
@@ -18,7 +18,7 @@ describe('graphql json files', () => {
})
test('schemas object validation', () => {
allVersions.forEach(version => {
oldVersions.forEach(version => {
const schemaJsonPerVersion = require(`../../lib/graphql/static/schema-${version}`)
// all graphql types are arrays except for queries
graphqlTypes
@@ -48,7 +48,7 @@ describe('graphql json files', () => {
})
test('previews object validation', () => {
allVersions.forEach(version => {
oldVersions.forEach(version => {
previewsJson[version].forEach(previewObj => {
const { valid, errors } = revalidator.validate(previewObj, previewsValidator)
const errorMessage = JSON.stringify(errors, null, 2)
@@ -58,7 +58,7 @@ describe('graphql json files', () => {
})
test('upcoming changes object validation', () => {
allVersions.forEach(version => {
oldVersions.forEach(version => {
Object.values(upcomingChangesJson[version]).forEach(changes => {
// each object value is an array of changes
changes.forEach(changeObj => {
@@ -71,7 +71,7 @@ describe('graphql json files', () => {
})
test('prerendered objects validation', () => {
allVersions.forEach(version => {
oldVersions.forEach(version => {
// shape of prerenderedObject: {
// html: <div>foo</div>,
// miniToc: {contents: '<a>bar</a>', headingLevel: N, indentationLevel: N}

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const path = require('path')
const fs = require('fs')
const walk = require('walk-sync')
@@ -15,9 +14,6 @@ const variablesDir = path.join(rootDir, 'data/variables')
const languageCodes = Object.keys(languages)
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
// WARNING: Complicated RegExp below!
//
// Things matched by this RegExp:
@@ -128,7 +124,7 @@ describe('lint-files', () => {
content = bodyContent
})
testFeatureNewVersions('relative URLs must start with "/"', async () => {
test('relative URLs must start with "/"', async () => {
const initialMatches = (content.match(relativeArticleLinkRegex) || [])
// Filter out some very specific false positive matches
@@ -180,65 +176,13 @@ describe('lint-files', () => {
expect(matches.length, errorMessage).toBe(0)
})
testFeatureOldVersions('relative URLs must start with "/"', async () => {
const initialMatches = (content.match(relativeArticleLinkRegex) || [])
// Filter out some very specific false positive matches
const matches = initialMatches.filter(match => {
if (markdownRelPath === 'content/github/enforcing-best-practices-with-github-policies/overview.md') {
if (match === '[A-Z]([a-z]|-)') {
return false
}
} else if (markdownRelPath === 'content/github/enforcing-best-practices-with-github-policies/constraints.md') {
if (match === '[a-z]([a-z]|-)') {
return false
}
} else if (markdownRelPath === 'content/github/building-a-strong-community/editing-wiki-content.md') {
if (match === '[Link Text](full-URL-of-wiki-page)') {
return false
}
} else if (markdownRelPath === 'content/enterprise/admin/user-management/configuring-email-for-notifications.md') {
if (/^\[\d+\]: (?:connect|disconnect|[0-9A-F]+:)\s*$/.test(match)) {
return false
}
} else if (markdownRelPath === 'content/actions/hosting-your-own-runners/monitoring-and-troubleshooting-self-hosted-runners.md') {
if (/^\[\d+\]: (?:Starting|Started|√|\d{4}-\d{2}-\d{2})\s*$/.test(match)) {
return false
}
} else if (markdownRelPath === 'content/github/finding-security-vulnerabilities-and-errors-in-your-code/sarif-support-for-code-scanning.md') {
if (/^\[(?:here|ruleIndex|ruleID)\]\(\d+\)\s*$/.test(match)) {
return false
}
} else if (markdownRelPath === 'content/github/building-a-strong-community/manually-creating-a-single-issue-template-for-your-repository.md') {
if (match === '[DATE]: [FEATURE ') {
return false
}
} else if (markdownRelPath === 'content/rest/overview/libraries.md') {
if (
match === '[pithub-github] ([CPAN][pithub-cpan])' ||
match === '[net-github-github] ([CPAN][net-github-cpan])'
) {
return false
}
} else if (markdownRelPath === 'data/reusables/repositories/relative-links.md') {
if (match === '[Contribution guidelines for this project](docs/CONTRIBUTING.md)') {
return false
}
}
return true
})
const errorMessage = formatLinkError(relativeArticleLinkErrorText, matches)
expect(matches.length, errorMessage).toBe(0)
})
test('URLs must not contain a hard-coded language code', async () => {
const matches = (content.match(languageLinkRegex) || [])
const errorMessage = formatLinkError(languageLinkErrorText, matches)
expect(matches.length, errorMessage).toBe(0)
})
testFeatureNewVersions('URLs must not contain a hard-coded version number', async () => {
test('URLs must not contain a hard-coded version number', async () => {
const initialMatches = (content.match(versionLinkRegEx) || [])
// Filter out some very specific false positive matches
@@ -253,21 +197,6 @@ describe('lint-files', () => {
expect(matches.length, errorMessage).toBe(0)
})
testFeatureOldVersions('URLs must not contain a hard-coded version number', async () => {
const initialMatches = (content.match(versionLinkRegEx) || [])
// Filter out some very specific false positive matches
const matches = initialMatches.filter(match => {
if (markdownRelPath === 'content/enterprise/admin/enterprise-management/migrating-from-github-enterprise-1110x-to-2123.md') {
return false
}
return true
})
const errorMessage = formatLinkError(versionLinkErrorText, matches)
expect(matches.length, errorMessage).toBe(0)
})
test('URLs must not contain a hard-coded domain name', async () => {
const matches = (content.match(domainLinkRegex) || [])
const errorMessage = formatLinkError(domainLinkErrorText, matches)

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const { isEqual, get, uniqBy } = require('lodash')
const loadSiteData = require('../../lib/site-data')
const loadPages = require('../../lib/pages')

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const fs = require('fs')
const path = require('path')
const { get, isPlainObject, has } = require('lodash')

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const revalidator = require('revalidator')
const schema = require('../../lib/site-tree-schema')
const latestEnterpriseRelease = require('../../lib/enterprise-server-releases').latest
@@ -7,9 +6,6 @@ const flat = require('flat')
const japaneseCharacters = require('japanese-characters')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('siteTree', () => {
jest.setTimeout(3 * 60 * 1000)
@@ -25,34 +21,21 @@ describe('siteTree', () => {
expect('ja' in siteTree).toBe(true)
})
testFeatureNewVersions('object order', () => {
test('object order', () => {
expect(Object.keys(siteTree)[0]).toBe('en')
expect(Object.keys(siteTree.en)[0]).toBe(nonEnterpriseDefaultVersion)
expect(Object.keys(siteTree.en[nonEnterpriseDefaultVersion].products.github.categories)[0]).toBe(`/${nonEnterpriseDefaultVersion}/github/getting-started-with-github`)
})
testFeatureOldVersions('object order', () => {
expect(Object.keys(siteTree)[0]).toBe('en')
expect(Object.keys(siteTree.en)[0]).toBe('dotcom')
expect(Object.keys(siteTree.en.dotcom.products.github.categories)[0]).toBe('/github/getting-started-with-github')
})
testFeatureNewVersions('object structure', () => {
test('object structure', () => {
expect(nonEnterpriseDefaultVersion in siteTree.en).toBe(true)
expect(`enterprise-server@${latestEnterpriseRelease}` in siteTree.en).toBe(true)
expect(flatTree[`en.${nonEnterpriseDefaultVersion}.products.github.href`]).toBe(`/${nonEnterpriseDefaultVersion}/github`)
expect(flatTree[`en.${nonEnterpriseDefaultVersion}.products.github.categories./${nonEnterpriseDefaultVersion}/github/getting-started-with-github.href`]).toBe(`/${nonEnterpriseDefaultVersion}/github/getting-started-with-github`)
})
testFeatureOldVersions('object structure', () => {
expect('dotcom' in siteTree.en).toBe(true)
expect(latestEnterpriseRelease in siteTree.en).toBe(true)
expect(flatTree['en.dotcom.products.github.href']).toBe('/github')
expect(flatTree['en.dotcom.products.github.categories./github/getting-started-with-github.href']).toBe('/github/getting-started-with-github')
})
describe('localized titles', () => {
testFeatureNewVersions('titles for categories', () => {
test('titles for categories', () => {
const japaneseTitle = flatTree[`ja.${nonEnterpriseDefaultVersion}.products.github.categories./${nonEnterpriseDefaultVersion}/github/getting-started-with-github.title`]
expect(typeof japaneseTitle).toBe('string')
expect(japaneseCharacters.presentIn(japaneseTitle)).toBe(true)
@@ -62,21 +45,11 @@ describe('siteTree', () => {
expect(japaneseCharacters.presentIn(englishTitle)).toBe(false)
})
testFeatureOldVersions('titles for categories', () => {
const japaneseTitle = flatTree['ja.dotcom.products.github.categories./github/getting-started-with-github.title']
expect(typeof japaneseTitle).toBe('string')
expect(japaneseCharacters.presentIn(japaneseTitle)).toBe(true)
const englishTitle = flatTree['en.dotcom.products.github.categories./github/getting-started-with-github.title']
expect(typeof englishTitle).toBe('string')
expect(japaneseCharacters.presentIn(englishTitle)).toBe(false)
})
test.todo('titles for maptopics')
test.todo('titles for articles')
testFeatureNewVersions('articles that include site data in liquid templating', () => {
test('articles that include site data in liquid templating', () => {
const pageWithDynamicTitle = siteTree.en[`enterprise-server@${latestEnterpriseRelease}`]
.products.admin
.categories[`/enterprise-server@${latestEnterpriseRelease}/admin/enterprise-support`]
@@ -84,18 +57,9 @@ describe('siteTree', () => {
// title: 'Working with {{ site.data.variables.contact.github_support }}'
expect(pageWithDynamicTitle.title).toEqual('Working with GitHub Support')
})
testFeatureOldVersions('articles that include site data in liquid templating', () => {
const pageWithDynamicTitle = siteTree.en[latestEnterpriseRelease]
.products.enterpriseServer
.categories[`/enterprise/${latestEnterpriseRelease}/admin/enterprise-support`]
// Source frontmatter from article:
// title: 'Working with {{ site.data.variables.contact.github_support }}'
expect(pageWithDynamicTitle.title).toEqual('Working with GitHub Support')
})
})
testFeatureNewVersions('object validation', () => {
test('object validation', () => {
const products = Object.values(siteTree.en[nonEnterpriseDefaultVersion].products)
expect(products.length).toBeGreaterThan(0)
@@ -117,27 +81,4 @@ describe('siteTree', () => {
})
})
})
testFeatureOldVersions('object validation', () => {
const products = Object.values(siteTree.en.dotcom.products)
expect(products.length).toBeGreaterThan(0)
products.forEach(product => {
const { valid, errors } = revalidator.validate(product, schema.product)
const expectation = JSON.stringify(errors, null, 2)
expect(valid, expectation).toBe(true)
Object.values(product.categories || {}).forEach(category => {
const { valid, errors } = revalidator.validate(category, schema.category)
const expectation = JSON.stringify(errors, null, 2)
expect(valid, expectation).toBe(true)
Object.values(category.maptopics || {}).forEach(maptopic => {
const { valid, errors } = revalidator.validate(maptopic, schema.maptopic)
const expectation = JSON.stringify(errors, null, 2)
expect(valid, expectation).toBe(true)
})
})
})
})
})

View File

@@ -1,45 +1,27 @@
require('../../lib/feature-flags')
const { difference } = require('lodash')
const { getJSON } = require('../helpers')
const { latest } = require('../../lib/enterprise-server-releases')
const allVersions = require('../../lib/all-versions')
const { oldVersions } = require('../../lib/old-versions-utils')
const webhookPayloads = require('../../lib/webhooks')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('webhook payloads', () => {
jest.setTimeout(3 * 60 * 1000)
// TODO update this test when we update the webhook payload filepaths
testFeatureNewVersions('have old versions as top-level keys', () => {
test('have old versions as top-level keys', () => {
oldVersions.forEach(version => {
expect(version in webhookPayloads).toBe(true)
})
})
testFeatureOldVersions('have current versions as top-level keys', () => {
allVersions.forEach(version => {
expect(version in webhookPayloads).toBe(true)
})
})
// TODO update this test when we update the webhook payload filepaths
testFeatureNewVersions('have a reasonable number of payloads per version', () => {
test('have a reasonable number of payloads per version', () => {
oldVersions.forEach(version => {
const payloadsPerVersion = Object.keys(webhookPayloads[version])
expect(payloadsPerVersion.length).toBeGreaterThan(20)
})
})
testFeatureOldVersions('have a reasonable number of payloads per version', () => {
allVersions.forEach(version => {
const payloadsPerVersion = Object.keys(webhookPayloads[version])
expect(payloadsPerVersion.length).toBeGreaterThan(20)
})
})
test('have payloads that are JSON strings, not objects', () => {
// use the first one found for testing purposes
const firstKey = Object.keys(webhookPayloads.dotcom)[0]

View File

@@ -2,7 +2,8 @@
title: GitHub 上でプロジェクトを探索する
intro: ''
mapTopic: verdadero
productVersions:
dotcom: '*'
enterprise: '*'
versions:
free-pro-team: '*'
enterprise-server: '*'
---

View File

@@ -1,26 +1,26 @@
{
"/apps": "/en/developers/apps",
"/apps/building-github-apps": "/en/developers/apps/building-github-apps",
"/apps/building-oauth-apps": "/en/developers/apps/building-oauth-apps",
"/apps/managing-github-apps": "/en/developers/apps/managing-github-apps",
"/apps/managing-oauth-apps": "/en/developers/apps/managing-oauth-apps",
"/apps/quickstart-guides": "/en/developers/apps/guides",
"/marketplace": "/en/developers/github-marketplace",
"/marketplace/getting-started": "/en/developers/github-marketplace/about-github-marketplace",
"/marketplace/integrating-with-the-github-marketplace-api": "/en/developers/github-marketplace/using-the-github-marketplace-api-in-your-app",
"/marketplace/listing-on-github-marketplace": "/en/developers/github-marketplace/listing-an-app-on-github-marketplace",
"/marketplace/selling-your-app": "/en/developers/github-marketplace/selling-your-app-on-github-marketplace",
"/v3": "/en/rest",
"/v3/actions/workflow-jobs": "/en/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow-runs": "/en/rest/reference/actions#workflow-runs",
"/v3/actions/workflow_jobs": "/en/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow_runs": "/en/rest/reference/actions#workflow-runs",
"/v3/guides": "/en/rest/guides",
"/v3/guides/managing-deploy-keys": "/en/developers/overview/managing-deploy-keys",
"/v3/misc": "/en/rest/reference/emojis",
"/v4/public_schema": "/en/graphql/overview/public-schema",
"/v4/object/repository": "/en/graphql/reference/objects#repository",
"/webhooks": "/en/developers/webhooks-and-events/about-webhooks",
"/apps": "/en/free-pro-team@latest/developers/apps",
"/apps/building-github-apps": "/en/free-pro-team@latest/developers/apps/building-github-apps",
"/apps/building-oauth-apps": "/en/free-pro-team@latest/developers/apps/building-oauth-apps",
"/apps/managing-github-apps": "/en/free-pro-team@latest/developers/apps/managing-github-apps",
"/apps/managing-oauth-apps": "/en/free-pro-team@latest/developers/apps/managing-oauth-apps",
"/apps/quickstart-guides": "/en/free-pro-team@latest/developers/apps/guides",
"/marketplace": "/en/free-pro-team@latest/developers/github-marketplace",
"/marketplace/getting-started": "/en/free-pro-team@latest/developers/github-marketplace/about-github-marketplace",
"/marketplace/integrating-with-the-github-marketplace-api": "/en/free-pro-team@latest/developers/github-marketplace/using-the-github-marketplace-api-in-your-app",
"/marketplace/listing-on-github-marketplace": "/en/free-pro-team@latest/developers/github-marketplace/listing-an-app-on-github-marketplace",
"/marketplace/selling-your-app": "/en/free-pro-team@latest/developers/github-marketplace/selling-your-app-on-github-marketplace",
"/v3": "/en/free-pro-team@latest/rest",
"/v3/actions/workflow-jobs": "/en/free-pro-team@latest/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow-runs": "/en/free-pro-team@latest/rest/reference/actions#workflow-runs",
"/v3/actions/workflow_jobs": "/en/free-pro-team@latest/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow_runs": "/en/free-pro-team@latest/rest/reference/actions#workflow-runs",
"/v3/guides": "/en/free-pro-team@latest/rest/guides",
"/v3/guides/managing-deploy-keys": "/en/free-pro-team@latest/developers/overview/managing-deploy-keys",
"/v3/misc": "/en/free-pro-team@latest/rest/reference/emojis",
"/v4/public_schema": "/en/free-pro-team@latest/graphql/overview/public-schema",
"/v4/object/repository": "/en/free-pro-team@latest/graphql/reference/objects#repository",
"/webhooks": "/en/free-pro-team@latest/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.18/apps": "/en/enterprise/2.18/user/developers/apps",
"/en/enterprise/2.18/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise/2.18/user/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.18/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise/2.18/user/developers/apps/scopes-for-oauth-apps",
@@ -32,37 +32,37 @@
"/en/enterprise/2.18/v4/guides/intro-to-graphql": "/en/enterprise/2.18/user/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.18/v4/guides/migrating-from-rest": "/en/enterprise/2.18/user/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.18/webhooks": "/en/enterprise/2.18/user/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.19/apps": "/en/enterprise/2.19/user/developers/apps",
"/en/enterprise/2.19/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise/2.19/user/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.19/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise/2.19/user/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.19/apps/differences-between-apps": "/en/enterprise/2.19/user/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.19/v3/auth": "/en/enterprise/2.19/user/rest/overview/other-authentication-methods",
"/en/enterprise/2.19/v3/guides/managing-deploy-keys": "/en/enterprise/2.19/user/developers/overview/managing-deploy-keys",
"/en/enterprise/2.19/v4/explorer": "/en/enterprise/2.19/user/graphql/overview/explorer",
"/en/enterprise/2.19/v4/guides/forming-calls": "/en/enterprise/2.19/user/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.19/v4/guides/intro-to-graphql": "/en/enterprise/2.19/user/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.19/v4/guides/migrating-from-rest": "/en/enterprise/2.19/user/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.19/webhooks": "/en/enterprise/2.19/user/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.20/apps": "/en/enterprise/2.20/user/developers/apps",
"/en/enterprise/2.20/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise/2.20/user/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.20/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise/2.20/user/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.20/apps/differences-between-apps": "/en/enterprise/2.20/user/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.20/v3/auth": "/en/enterprise/2.20/user/rest/overview/other-authentication-methods",
"/en/enterprise/2.20/v3/guides/managing-deploy-keys": "/en/enterprise/2.20/user/developers/overview/managing-deploy-keys",
"/en/enterprise/2.20/v4/explorer": "/en/enterprise/2.20/user/graphql/overview/explorer",
"/en/enterprise/2.20/v4/guides/forming-calls": "/en/enterprise/2.20/user/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.20/v4/guides/intro-to-graphql": "/en/enterprise/2.20/user/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.20/v4/guides/migrating-from-rest": "/en/enterprise/2.20/user/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.20/webhooks": "/en/enterprise/2.20/user/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.21/apps": "/en/enterprise/2.21/user/developers/apps",
"/en/enterprise/2.21/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise/2.21/user/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.21/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise/2.21/user/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.21/apps/differences-between-apps": "/en/enterprise/2.21/user/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.21/v3/auth": "/en/enterprise/2.21/user/rest/overview/other-authentication-methods",
"/en/enterprise/2.21/v3/guides/managing-deploy-keys": "/en/enterprise/2.21/user/developers/overview/managing-deploy-keys",
"/en/enterprise/2.21/v4/explorer": "/en/enterprise/2.21/user/graphql/overview/explorer",
"/en/enterprise/2.21/v4/guides/forming-calls": "/en/enterprise/2.21/user/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.21/v4/guides/intro-to-graphql": "/en/enterprise/2.21/user/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.21/v4/guides/migrating-from-rest": "/en/enterprise/2.21/user/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.21/webhooks": "/en/enterprise/2.21/user/developers/webhooks-and-events/about-webhooks"
"/en/enterprise/2.19/apps": "/en/enterprise-server@2.19/developers/apps",
"/en/enterprise/2.19/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise-server@2.19/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.19/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise-server@2.19/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.19/apps/differences-between-apps": "/en/enterprise-server@2.19/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.19/v3/auth": "/en/enterprise-server@2.19/rest/overview/other-authentication-methods",
"/en/enterprise/2.19/v3/guides/managing-deploy-keys": "/en/enterprise-server@2.19/developers/overview/managing-deploy-keys",
"/en/enterprise/2.19/v4/explorer": "/en/enterprise-server@2.19/graphql/overview/explorer",
"/en/enterprise/2.19/v4/guides/forming-calls": "/en/enterprise-server@2.19/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.19/v4/guides/intro-to-graphql": "/en/enterprise-server@2.19/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.19/v4/guides/migrating-from-rest": "/en/enterprise-server@2.19/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.19/webhooks": "/en/enterprise-server@2.19/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.20/apps": "/en/enterprise-server@2.20/developers/apps",
"/en/enterprise/2.20/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise-server@2.20/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.20/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise-server@2.20/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.20/apps/differences-between-apps": "/en/enterprise-server@2.20/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.20/v3/auth": "/en/enterprise-server@2.20/rest/overview/other-authentication-methods",
"/en/enterprise/2.20/v3/guides/managing-deploy-keys": "/en/enterprise-server@2.20/developers/overview/managing-deploy-keys",
"/en/enterprise/2.20/v4/explorer": "/en/enterprise-server@2.20/graphql/overview/explorer",
"/en/enterprise/2.20/v4/guides/forming-calls": "/en/enterprise-server@2.20/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.20/v4/guides/intro-to-graphql": "/en/enterprise-server@2.20/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.20/v4/guides/migrating-from-rest": "/en/enterprise-server@2.20/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.20/webhooks": "/en/enterprise-server@2.20/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.21/apps": "/en/enterprise-server@2.21/developers/apps",
"/en/enterprise/2.21/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise-server@2.21/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.21/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise-server@2.21/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.21/apps/differences-between-apps": "/en/enterprise-server@2.21/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.21/v3/auth": "/en/enterprise-server@2.21/rest/overview/other-authentication-methods",
"/en/enterprise/2.21/v3/guides/managing-deploy-keys": "/en/enterprise-server@2.21/developers/overview/managing-deploy-keys",
"/en/enterprise/2.21/v4/explorer": "/en/enterprise-server@2.21/graphql/overview/explorer",
"/en/enterprise/2.21/v4/guides/forming-calls": "/en/enterprise-server@2.21/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.21/v4/guides/intro-to-graphql": "/en/enterprise-server@2.21/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.21/v4/guides/migrating-from-rest": "/en/enterprise-server@2.21/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.21/webhooks": "/en/enterprise-server@2.21/developers/webhooks-and-events/about-webhooks"
}

View File

@@ -41,186 +41,186 @@
"/en/enterprise/2.18/v4/scalar/date": "/en/enterprise/2.18/user/graphql/reference/scalars#date",
"/en/enterprise/2.18/v4/union": "/en/enterprise/2.18/user/graphql/reference/unions",
"/en/enterprise/2.18/v4/union/auditentryactor": "/en/enterprise/2.18/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.19/user/v4/enum": "/en/enterprise/2.19/user/graphql/reference/enums",
"/en/enterprise/2.19/user/v4/enum/auditlogorderfield": "/en/enterprise/2.19/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.19/user/v4/enum/checkannotationlevel": "/en/enterprise/2.19/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.19/user/v4/guides": "/en/enterprise/2.19/user/graphql/guides",
"/en/enterprise/2.19/user/v4/input_object": "/en/enterprise/2.19/user/graphql/reference/input-objects",
"/en/enterprise/2.19/user/v4/interface": "/en/enterprise/2.19/user/graphql/reference/interfaces",
"/en/enterprise/2.19/user/v4/interface/actor": "/en/enterprise/2.19/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.19/user/v4/interface/assignable": "/en/enterprise/2.19/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.19/user/v4/mutation": "/en/enterprise/2.19/user/graphql/reference/mutations",
"/en/enterprise/2.19/user/v4/object": "/en/enterprise/2.19/user/graphql/reference/objects",
"/en/enterprise/2.19/user/v4/object/actorlocation": "/en/enterprise/2.19/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.19/user/v4/object/addedtoprojectevent": "/en/enterprise/2.19/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.19/user/v4/previews": "/en/enterprise/2.19/user/graphql/overview/schema-previews",
"/en/enterprise/2.19/user/v4/public_schema": "/en/enterprise/2.19/user/graphql/overview/public-schema",
"/en/enterprise/2.19/user/v4/query": "/en/enterprise/2.19/user/graphql/reference/queries",
"/en/enterprise/2.19/user/v4/reference": "/en/enterprise/2.19/user/graphql/reference",
"/en/enterprise/2.19/user/v4/scalar": "/en/enterprise/2.19/user/graphql/reference/scalars",
"/en/enterprise/2.19/user/v4/scalar/boolean": "/en/enterprise/2.19/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.19/user/v4/scalar/date": "/en/enterprise/2.19/user/graphql/reference/scalars#date",
"/en/enterprise/2.19/user/v4/union": "/en/enterprise/2.19/user/graphql/reference/unions",
"/en/enterprise/2.19/user/v4/union/assignee": "/en/enterprise/2.19/user/graphql/reference/unions#assignee",
"/en/enterprise/2.19/user/v4/union/auditentryactor": "/en/enterprise/2.19/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.19/v4/enum": "/en/enterprise/2.19/user/graphql/reference/enums",
"/en/enterprise/2.19/v4/enum/auditlogorderfield": "/en/enterprise/2.19/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.19/v4/enum/checkannotationlevel": "/en/enterprise/2.19/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.19/v4/guides": "/en/enterprise/2.19/user/graphql/guides",
"/en/enterprise/2.19/v4/input_object": "/en/enterprise/2.19/user/graphql/reference/input-objects",
"/en/enterprise/2.19/v4/interface": "/en/enterprise/2.19/user/graphql/reference/interfaces",
"/en/enterprise/2.19/v4/interface/actor": "/en/enterprise/2.19/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.19/v4/interface/assignable": "/en/enterprise/2.19/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.19/v4/mutation": "/en/enterprise/2.19/user/graphql/reference/mutations",
"/en/enterprise/2.19/v4/object": "/en/enterprise/2.19/user/graphql/reference/objects",
"/en/enterprise/2.19/v4/object/actorlocation": "/en/enterprise/2.19/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.19/v4/object/addedtoprojectevent": "/en/enterprise/2.19/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.19/v4/previews": "/en/enterprise/2.19/user/graphql/overview/schema-previews",
"/en/enterprise/2.19/v4/public_schema": "/en/enterprise/2.19/user/graphql/overview/public-schema",
"/en/enterprise/2.19/v4/query": "/en/enterprise/2.19/user/graphql/reference/queries",
"/en/enterprise/2.19/v4/reference": "/en/enterprise/2.19/user/graphql/reference",
"/en/enterprise/2.19/v4/scalar": "/en/enterprise/2.19/user/graphql/reference/scalars",
"/en/enterprise/2.19/v4/scalar/boolean": "/en/enterprise/2.19/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.19/v4/scalar/date": "/en/enterprise/2.19/user/graphql/reference/scalars#date",
"/en/enterprise/2.19/v4/union": "/en/enterprise/2.19/user/graphql/reference/unions",
"/en/enterprise/2.19/v4/union/assignee": "/en/enterprise/2.19/user/graphql/reference/unions#assignee",
"/en/enterprise/2.19/v4/union/auditentryactor": "/en/enterprise/2.19/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.20/user/v4/enum": "/en/enterprise/2.20/user/graphql/reference/enums",
"/en/enterprise/2.20/user/v4/enum/auditlogorderfield": "/en/enterprise/2.20/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.20/user/v4/enum/checkannotationlevel": "/en/enterprise/2.20/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.20/user/v4/guides": "/en/enterprise/2.20/user/graphql/guides",
"/en/enterprise/2.20/user/v4/input_object": "/en/enterprise/2.20/user/graphql/reference/input-objects",
"/en/enterprise/2.20/user/v4/interface": "/en/enterprise/2.20/user/graphql/reference/interfaces",
"/en/enterprise/2.20/user/v4/interface/actor": "/en/enterprise/2.20/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.20/user/v4/interface/assignable": "/en/enterprise/2.20/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.20/user/v4/mutation": "/en/enterprise/2.20/user/graphql/reference/mutations",
"/en/enterprise/2.20/user/v4/object": "/en/enterprise/2.20/user/graphql/reference/objects",
"/en/enterprise/2.20/user/v4/object/actorlocation": "/en/enterprise/2.20/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.20/user/v4/object/addedtoprojectevent": "/en/enterprise/2.20/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.20/user/v4/previews": "/en/enterprise/2.20/user/graphql/overview/schema-previews",
"/en/enterprise/2.20/user/v4/public_schema": "/en/enterprise/2.20/user/graphql/overview/public-schema",
"/en/enterprise/2.20/user/v4/query": "/en/enterprise/2.20/user/graphql/reference/queries",
"/en/enterprise/2.20/user/v4/reference": "/en/enterprise/2.20/user/graphql/reference",
"/en/enterprise/2.20/user/v4/scalar": "/en/enterprise/2.20/user/graphql/reference/scalars",
"/en/enterprise/2.20/user/v4/scalar/boolean": "/en/enterprise/2.20/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.20/user/v4/scalar/date": "/en/enterprise/2.20/user/graphql/reference/scalars#date",
"/en/enterprise/2.20/user/v4/union": "/en/enterprise/2.20/user/graphql/reference/unions",
"/en/enterprise/2.20/user/v4/union/assignee": "/en/enterprise/2.20/user/graphql/reference/unions#assignee",
"/en/enterprise/2.20/user/v4/union/auditentryactor": "/en/enterprise/2.20/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.20/v4/enum": "/en/enterprise/2.20/user/graphql/reference/enums",
"/en/enterprise/2.20/v4/enum/auditlogorderfield": "/en/enterprise/2.20/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.20/v4/enum/checkannotationlevel": "/en/enterprise/2.20/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.20/v4/guides": "/en/enterprise/2.20/user/graphql/guides",
"/en/enterprise/2.20/v4/input_object": "/en/enterprise/2.20/user/graphql/reference/input-objects",
"/en/enterprise/2.20/v4/interface": "/en/enterprise/2.20/user/graphql/reference/interfaces",
"/en/enterprise/2.20/v4/interface/actor": "/en/enterprise/2.20/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.20/v4/interface/assignable": "/en/enterprise/2.20/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.20/v4/mutation": "/en/enterprise/2.20/user/graphql/reference/mutations",
"/en/enterprise/2.20/v4/object": "/en/enterprise/2.20/user/graphql/reference/objects",
"/en/enterprise/2.20/v4/object/actorlocation": "/en/enterprise/2.20/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.20/v4/object/addedtoprojectevent": "/en/enterprise/2.20/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.20/v4/previews": "/en/enterprise/2.20/user/graphql/overview/schema-previews",
"/en/enterprise/2.20/v4/public_schema": "/en/enterprise/2.20/user/graphql/overview/public-schema",
"/en/enterprise/2.20/v4/query": "/en/enterprise/2.20/user/graphql/reference/queries",
"/en/enterprise/2.20/v4/reference": "/en/enterprise/2.20/user/graphql/reference",
"/en/enterprise/2.20/v4/scalar": "/en/enterprise/2.20/user/graphql/reference/scalars",
"/en/enterprise/2.20/v4/scalar/boolean": "/en/enterprise/2.20/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.20/v4/scalar/date": "/en/enterprise/2.20/user/graphql/reference/scalars#date",
"/en/enterprise/2.20/v4/union": "/en/enterprise/2.20/user/graphql/reference/unions",
"/en/enterprise/2.20/v4/union/assignee": "/en/enterprise/2.20/user/graphql/reference/unions#assignee",
"/en/enterprise/2.20/v4/union/auditentryactor": "/en/enterprise/2.20/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.21/user/v4/enum": "/en/enterprise/2.21/user/graphql/reference/enums",
"/en/enterprise/2.21/user/v4/enum/auditlogorderfield": "/en/enterprise/2.21/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.21/user/v4/enum/checkannotationlevel": "/en/enterprise/2.21/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.21/user/v4/guides": "/en/enterprise/2.21/user/graphql/guides",
"/en/enterprise/2.21/user/v4/input_object": "/en/enterprise/2.21/user/graphql/reference/input-objects",
"/en/enterprise/2.21/user/v4/interface": "/en/enterprise/2.21/user/graphql/reference/interfaces",
"/en/enterprise/2.21/user/v4/interface/actor": "/en/enterprise/2.21/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.21/user/v4/interface/assignable": "/en/enterprise/2.21/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.21/user/v4/mutation": "/en/enterprise/2.21/user/graphql/reference/mutations",
"/en/enterprise/2.21/user/v4/object": "/en/enterprise/2.21/user/graphql/reference/objects",
"/en/enterprise/2.21/user/v4/object/actorlocation": "/en/enterprise/2.21/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.21/user/v4/object/addedtoprojectevent": "/en/enterprise/2.21/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.21/user/v4/previews": "/en/enterprise/2.21/user/graphql/overview/schema-previews",
"/en/enterprise/2.21/user/v4/public_schema": "/en/enterprise/2.21/user/graphql/overview/public-schema",
"/en/enterprise/2.21/user/v4/query": "/en/enterprise/2.21/user/graphql/reference/queries",
"/en/enterprise/2.21/user/v4/reference": "/en/enterprise/2.21/user/graphql/reference",
"/en/enterprise/2.21/user/v4/scalar": "/en/enterprise/2.21/user/graphql/reference/scalars",
"/en/enterprise/2.21/user/v4/scalar/boolean": "/en/enterprise/2.21/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.21/user/v4/scalar/date": "/en/enterprise/2.21/user/graphql/reference/scalars#date",
"/en/enterprise/2.21/user/v4/union": "/en/enterprise/2.21/user/graphql/reference/unions",
"/en/enterprise/2.21/user/v4/union/assignee": "/en/enterprise/2.21/user/graphql/reference/unions#assignee",
"/en/enterprise/2.21/user/v4/union/auditentryactor": "/en/enterprise/2.21/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.21/v4/enum": "/en/enterprise/2.21/user/graphql/reference/enums",
"/en/enterprise/2.21/v4/enum/auditlogorderfield": "/en/enterprise/2.21/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.21/v4/enum/checkannotationlevel": "/en/enterprise/2.21/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.21/v4/guides": "/en/enterprise/2.21/user/graphql/guides",
"/en/enterprise/2.21/v4/input_object": "/en/enterprise/2.21/user/graphql/reference/input-objects",
"/en/enterprise/2.21/v4/interface": "/en/enterprise/2.21/user/graphql/reference/interfaces",
"/en/enterprise/2.21/v4/interface/actor": "/en/enterprise/2.21/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.21/v4/interface/assignable": "/en/enterprise/2.21/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.21/v4/mutation": "/en/enterprise/2.21/user/graphql/reference/mutations",
"/en/enterprise/2.21/v4/object": "/en/enterprise/2.21/user/graphql/reference/objects",
"/en/enterprise/2.21/v4/object/actorlocation": "/en/enterprise/2.21/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.21/v4/object/addedtoprojectevent": "/en/enterprise/2.21/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.21/v4/previews": "/en/enterprise/2.21/user/graphql/overview/schema-previews",
"/en/enterprise/2.21/v4/public_schema": "/en/enterprise/2.21/user/graphql/overview/public-schema",
"/en/enterprise/2.21/v4/query": "/en/enterprise/2.21/user/graphql/reference/queries",
"/en/enterprise/2.21/v4/reference": "/en/enterprise/2.21/user/graphql/reference",
"/en/enterprise/2.21/v4/scalar": "/en/enterprise/2.21/user/graphql/reference/scalars",
"/en/enterprise/2.21/v4/scalar/boolean": "/en/enterprise/2.21/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.21/v4/scalar/date": "/en/enterprise/2.21/user/graphql/reference/scalars#date",
"/en/enterprise/2.21/v4/union": "/en/enterprise/2.21/user/graphql/reference/unions",
"/en/enterprise/2.21/v4/union/assignee": "/en/enterprise/2.21/user/graphql/reference/unions#assignee",
"/en/enterprise/2.21/v4/union/auditentryactor": "/en/enterprise/2.21/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/v4/enum": "/en/enterprise/user/graphql/reference/enums",
"/en/enterprise/v4/enum/auditlogorderfield": "/en/enterprise/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/v4/enum/checkannotationlevel": "/en/enterprise/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/v4/guides": "/en/enterprise/user/graphql/guides",
"/en/enterprise/v4/input_object": "/en/enterprise/user/graphql/reference/input-objects",
"/en/enterprise/v4/interface": "/en/enterprise/user/graphql/reference/interfaces",
"/en/enterprise/v4/interface/actor": "/en/enterprise/user/graphql/reference/interfaces#actor",
"/en/enterprise/v4/interface/assignable": "/en/enterprise/user/graphql/reference/interfaces#assignable",
"/en/enterprise/v4/mutation": "/en/enterprise/user/graphql/reference/mutations",
"/en/enterprise/v4/object": "/en/enterprise/user/graphql/reference/objects",
"/en/enterprise/v4/object/actorlocation": "/en/enterprise/user/graphql/reference/objects#actorlocation",
"/en/enterprise/v4/object/addedtoprojectevent": "/en/enterprise/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/v4/previews": "/en/enterprise/user/graphql/overview/schema-previews",
"/en/enterprise/v4/public_schema": "/en/enterprise/user/graphql/overview/public-schema",
"/en/enterprise/v4/query": "/en/enterprise/user/graphql/reference/queries",
"/en/enterprise/v4/reference": "/en/enterprise/user/graphql/reference",
"/en/enterprise/v4/scalar": "/en/enterprise/user/graphql/reference/scalars",
"/en/enterprise/v4/scalar/boolean": "/en/enterprise/user/graphql/reference/scalars#boolean",
"/en/enterprise/v4/scalar/date": "/en/enterprise/user/graphql/reference/scalars#date",
"/en/enterprise/v4/union": "/en/enterprise/user/graphql/reference/unions",
"/en/enterprise/v4/union/assignee": "/en/enterprise/user/graphql/reference/unions#assignee",
"/en/enterprise/v4/union/auditentryactor": "/en/enterprise/user/graphql/reference/unions#auditentryactor",
"/en/v4/enum": "/en/graphql/reference/enums",
"/en/v4/enum/auditlogorderfield": "/en/graphql/reference/enums#auditlogorderfield",
"/en/v4/enum/checkannotationlevel": "/en/graphql/reference/enums#checkannotationlevel",
"/en/v4/guides": "/en/graphql/guides",
"/en/v4/input_object": "/en/graphql/reference/input-objects",
"/en/v4/input_object/acceptenterpriseadministratorinvitationinput": "/en/graphql/reference/input-objects#acceptenterpriseadministratorinvitationinput",
"/en/v4/input_object/accepttopicsuggestioninput": "/en/graphql/reference/input-objects#accepttopicsuggestioninput",
"/en/v4/interface": "/en/graphql/reference/interfaces",
"/en/v4/interface/actor": "/en/graphql/reference/interfaces#actor",
"/en/v4/interface/assignable": "/en/graphql/reference/interfaces#assignable",
"/en/v4/mutation": "/en/graphql/reference/mutations",
"/en/v4/mutation/acceptenterpriseadministratorinvitation": "/en/graphql/reference/mutations#acceptenterpriseadministratorinvitation",
"/en/v4/mutation/accepttopicsuggestion": "/en/graphql/reference/mutations#accepttopicsuggestion",
"/en/v4/object": "/en/graphql/reference/objects",
"/en/v4/object/actorlocation": "/en/graphql/reference/objects#actorlocation",
"/en/v4/object/addedtoprojectevent": "/en/graphql/reference/objects#addedtoprojectevent",
"/en/v4/previews": "/en/graphql/overview/schema-previews",
"/en/v4/public_schema": "/en/graphql/overview/public-schema",
"/en/v4/query": "/en/graphql/reference/queries",
"/en/v4/reference": "/en/graphql/reference",
"/en/v4/scalar": "/en/graphql/reference/scalars",
"/en/v4/scalar/boolean": "/en/graphql/reference/scalars#boolean",
"/en/v4/scalar/date": "/en/graphql/reference/scalars#date",
"/en/v4/union": "/en/graphql/reference/unions",
"/en/v4/union/assignee": "/en/graphql/reference/unions#assignee",
"/en/v4/union/auditentryactor": "/en/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.19/user/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/en/enterprise/2.19/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.19/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.19/user/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/en/enterprise/2.19/user/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/en/enterprise/2.19/user/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/en/enterprise/2.19/user/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/en/enterprise/2.19/user/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/en/enterprise/2.19/user/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/en/enterprise/2.19/user/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/en/enterprise/2.19/user/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/en/enterprise/2.19/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.19/user/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/en/enterprise/2.19/user/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/en/enterprise/2.19/user/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/en/enterprise/2.19/user/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/en/enterprise/2.19/user/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/en/enterprise/2.19/user/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/en/enterprise/2.19/user/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/en/enterprise/2.19/user/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/en/enterprise/2.19/user/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/en/enterprise/2.19/user/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.19/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/en/enterprise/2.19/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.19/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.19/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/en/enterprise/2.19/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/en/enterprise/2.19/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/en/enterprise/2.19/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/en/enterprise/2.19/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/en/enterprise/2.19/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/en/enterprise/2.19/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/en/enterprise/2.19/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/en/enterprise/2.19/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.19/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/en/enterprise/2.19/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/en/enterprise/2.19/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/en/enterprise/2.19/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/en/enterprise/2.19/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/en/enterprise/2.19/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/en/enterprise/2.19/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/en/enterprise/2.19/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/en/enterprise/2.19/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/en/enterprise/2.19/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.20/user/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/en/enterprise/2.20/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.20/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.20/user/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/en/enterprise/2.20/user/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/en/enterprise/2.20/user/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/en/enterprise/2.20/user/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/en/enterprise/2.20/user/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/en/enterprise/2.20/user/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/en/enterprise/2.20/user/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/en/enterprise/2.20/user/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/en/enterprise/2.20/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.20/user/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/en/enterprise/2.20/user/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/en/enterprise/2.20/user/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/en/enterprise/2.20/user/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/en/enterprise/2.20/user/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/en/enterprise/2.20/user/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/en/enterprise/2.20/user/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/en/enterprise/2.20/user/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/en/enterprise/2.20/user/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/en/enterprise/2.20/user/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.20/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/en/enterprise/2.20/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.20/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.20/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/en/enterprise/2.20/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/en/enterprise/2.20/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/en/enterprise/2.20/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/en/enterprise/2.20/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/en/enterprise/2.20/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/en/enterprise/2.20/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/en/enterprise/2.20/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/en/enterprise/2.20/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.20/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/en/enterprise/2.20/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/en/enterprise/2.20/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/en/enterprise/2.20/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/en/enterprise/2.20/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/en/enterprise/2.20/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/en/enterprise/2.20/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/en/enterprise/2.20/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/en/enterprise/2.20/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/en/enterprise/2.20/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.21/user/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/en/enterprise/2.21/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.21/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.21/user/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/en/enterprise/2.21/user/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/en/enterprise/2.21/user/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/en/enterprise/2.21/user/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/en/enterprise/2.21/user/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/en/enterprise/2.21/user/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/en/enterprise/2.21/user/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/en/enterprise/2.21/user/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/en/enterprise/2.21/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.21/user/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/en/enterprise/2.21/user/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/en/enterprise/2.21/user/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/en/enterprise/2.21/user/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/en/enterprise/2.21/user/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/en/enterprise/2.21/user/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/en/enterprise/2.21/user/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/en/enterprise/2.21/user/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/en/enterprise/2.21/user/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/en/enterprise/2.21/user/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.21/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/en/enterprise/2.21/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.21/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.21/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/en/enterprise/2.21/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/en/enterprise/2.21/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/en/enterprise/2.21/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/en/enterprise/2.21/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/en/enterprise/2.21/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/en/enterprise/2.21/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/en/enterprise/2.21/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/en/enterprise/2.21/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.21/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/en/enterprise/2.21/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/en/enterprise/2.21/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/en/enterprise/2.21/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/en/enterprise/2.21/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/en/enterprise/2.21/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/en/enterprise/2.21/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/en/enterprise/2.21/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/en/enterprise/2.21/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/en/enterprise/2.21/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/en/enterprise/v4/enum": "/en/enterprise-server/graphql/reference/enums",
"/en/enterprise/v4/enum/auditlogorderfield": "/en/enterprise-server/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/v4/enum/checkannotationlevel": "/en/enterprise-server/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/v4/guides": "/en/enterprise-server/graphql/guides",
"/en/enterprise/v4/input_object": "/en/enterprise-server/graphql/reference/input-objects",
"/en/enterprise/v4/interface": "/en/enterprise-server/graphql/reference/interfaces",
"/en/enterprise/v4/interface/actor": "/en/enterprise-server/graphql/reference/interfaces#actor",
"/en/enterprise/v4/interface/assignable": "/en/enterprise-server/graphql/reference/interfaces#assignable",
"/en/enterprise/v4/mutation": "/en/enterprise-server/graphql/reference/mutations",
"/en/enterprise/v4/object": "/en/enterprise-server/graphql/reference/objects",
"/en/enterprise/v4/object/actorlocation": "/en/enterprise-server/graphql/reference/objects#actorlocation",
"/en/enterprise/v4/object/addedtoprojectevent": "/en/enterprise-server/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/v4/previews": "/en/enterprise-server/graphql/overview/schema-previews",
"/en/enterprise/v4/public_schema": "/en/enterprise-server/graphql/overview/public-schema",
"/en/enterprise/v4/query": "/en/enterprise-server/graphql/reference/queries",
"/en/enterprise/v4/reference": "/en/enterprise-server/graphql/reference",
"/en/enterprise/v4/scalar": "/en/enterprise-server/graphql/reference/scalars",
"/en/enterprise/v4/scalar/boolean": "/en/enterprise-server/graphql/reference/scalars#boolean",
"/en/enterprise/v4/scalar/date": "/en/enterprise-server/graphql/reference/scalars#date",
"/en/enterprise/v4/union": "/en/enterprise-server/graphql/reference/unions",
"/en/enterprise/v4/union/assignee": "/en/enterprise-server/graphql/reference/unions#assignee",
"/en/enterprise/v4/union/auditentryactor": "/en/enterprise-server/graphql/reference/unions#auditentryactor",
"/en/v4/enum": "/en/free-pro-team@latest/graphql/reference/enums",
"/en/v4/enum/auditlogorderfield": "/en/free-pro-team@latest/graphql/reference/enums#auditlogorderfield",
"/en/v4/enum/checkannotationlevel": "/en/free-pro-team@latest/graphql/reference/enums#checkannotationlevel",
"/en/v4/guides": "/en/free-pro-team@latest/graphql/guides",
"/en/v4/input_object": "/en/free-pro-team@latest/graphql/reference/input-objects",
"/en/v4/input_object/acceptenterpriseadministratorinvitationinput": "/en/free-pro-team@latest/graphql/reference/input-objects#acceptenterpriseadministratorinvitationinput",
"/en/v4/input_object/accepttopicsuggestioninput": "/en/free-pro-team@latest/graphql/reference/input-objects#accepttopicsuggestioninput",
"/en/v4/interface": "/en/free-pro-team@latest/graphql/reference/interfaces",
"/en/v4/interface/actor": "/en/free-pro-team@latest/graphql/reference/interfaces#actor",
"/en/v4/interface/assignable": "/en/free-pro-team@latest/graphql/reference/interfaces#assignable",
"/en/v4/mutation": "/en/free-pro-team@latest/graphql/reference/mutations",
"/en/v4/mutation/acceptenterpriseadministratorinvitation": "/en/free-pro-team@latest/graphql/reference/mutations#acceptenterpriseadministratorinvitation",
"/en/v4/mutation/accepttopicsuggestion": "/en/free-pro-team@latest/graphql/reference/mutations#accepttopicsuggestion",
"/en/v4/object": "/en/free-pro-team@latest/graphql/reference/objects",
"/en/v4/object/actorlocation": "/en/free-pro-team@latest/graphql/reference/objects#actorlocation",
"/en/v4/object/addedtoprojectevent": "/en/free-pro-team@latest/graphql/reference/objects#addedtoprojectevent",
"/en/v4/previews": "/en/free-pro-team@latest/graphql/overview/schema-previews",
"/en/v4/public_schema": "/en/free-pro-team@latest/graphql/overview/public-schema",
"/en/v4/query": "/en/free-pro-team@latest/graphql/reference/queries",
"/en/v4/reference": "/en/free-pro-team@latest/graphql/reference",
"/en/v4/scalar": "/en/free-pro-team@latest/graphql/reference/scalars",
"/en/v4/scalar/boolean": "/en/free-pro-team@latest/graphql/reference/scalars#boolean",
"/en/v4/scalar/date": "/en/free-pro-team@latest/graphql/reference/scalars#date",
"/en/v4/union": "/en/free-pro-team@latest/graphql/reference/unions",
"/en/v4/union/assignee": "/en/free-pro-team@latest/graphql/reference/unions#assignee",
"/en/v4/union/auditentryactor": "/en/free-pro-team@latest/graphql/reference/unions#auditentryactor",
"/enterprise/2.18/user/v4/enum": "/en/enterprise/2.18/user/graphql/reference/enums",
"/enterprise/2.18/user/v4/enum/auditlogorderfield": "/en/enterprise/2.18/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.18/user/v4/enum/checkannotationlevel": "/en/enterprise/2.18/user/graphql/reference/enums#checkannotationlevel",
@@ -263,184 +263,184 @@
"/enterprise/2.18/v4/scalar/date": "/en/enterprise/2.18/user/graphql/reference/scalars#date",
"/enterprise/2.18/v4/union": "/en/enterprise/2.18/user/graphql/reference/unions",
"/enterprise/2.18/v4/union/auditentryactor": "/en/enterprise/2.18/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.19/user/v4/enum": "/en/enterprise/2.19/user/graphql/reference/enums",
"/enterprise/2.19/user/v4/enum/auditlogorderfield": "/en/enterprise/2.19/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.19/user/v4/enum/checkannotationlevel": "/en/enterprise/2.19/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.19/user/v4/guides": "/en/enterprise/2.19/user/graphql/guides",
"/enterprise/2.19/user/v4/input_object": "/en/enterprise/2.19/user/graphql/reference/input-objects",
"/enterprise/2.19/user/v4/interface": "/en/enterprise/2.19/user/graphql/reference/interfaces",
"/enterprise/2.19/user/v4/interface/actor": "/en/enterprise/2.19/user/graphql/reference/interfaces#actor",
"/enterprise/2.19/user/v4/interface/assignable": "/en/enterprise/2.19/user/graphql/reference/interfaces#assignable",
"/enterprise/2.19/user/v4/mutation": "/en/enterprise/2.19/user/graphql/reference/mutations",
"/enterprise/2.19/user/v4/object": "/en/enterprise/2.19/user/graphql/reference/objects",
"/enterprise/2.19/user/v4/object/actorlocation": "/en/enterprise/2.19/user/graphql/reference/objects#actorlocation",
"/enterprise/2.19/user/v4/object/addedtoprojectevent": "/en/enterprise/2.19/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.19/user/v4/previews": "/en/enterprise/2.19/user/graphql/overview/schema-previews",
"/enterprise/2.19/user/v4/public_schema": "/en/enterprise/2.19/user/graphql/overview/public-schema",
"/enterprise/2.19/user/v4/query": "/en/enterprise/2.19/user/graphql/reference/queries",
"/enterprise/2.19/user/v4/reference": "/en/enterprise/2.19/user/graphql/reference",
"/enterprise/2.19/user/v4/scalar": "/en/enterprise/2.19/user/graphql/reference/scalars",
"/enterprise/2.19/user/v4/scalar/boolean": "/en/enterprise/2.19/user/graphql/reference/scalars#boolean",
"/enterprise/2.19/user/v4/scalar/date": "/en/enterprise/2.19/user/graphql/reference/scalars#date",
"/enterprise/2.19/user/v4/union": "/en/enterprise/2.19/user/graphql/reference/unions",
"/enterprise/2.19/user/v4/union/assignee": "/en/enterprise/2.19/user/graphql/reference/unions#assignee",
"/enterprise/2.19/user/v4/union/auditentryactor": "/en/enterprise/2.19/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.19/v4/enum": "/en/enterprise/2.19/user/graphql/reference/enums",
"/enterprise/2.19/v4/enum/auditlogorderfield": "/en/enterprise/2.19/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.19/v4/enum/checkannotationlevel": "/en/enterprise/2.19/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.19/v4/guides": "/en/enterprise/2.19/user/graphql/guides",
"/enterprise/2.19/v4/input_object": "/en/enterprise/2.19/user/graphql/reference/input-objects",
"/enterprise/2.19/v4/interface": "/en/enterprise/2.19/user/graphql/reference/interfaces",
"/enterprise/2.19/v4/interface/actor": "/en/enterprise/2.19/user/graphql/reference/interfaces#actor",
"/enterprise/2.19/v4/interface/assignable": "/en/enterprise/2.19/user/graphql/reference/interfaces#assignable",
"/enterprise/2.19/v4/mutation": "/en/enterprise/2.19/user/graphql/reference/mutations",
"/enterprise/2.19/v4/object": "/en/enterprise/2.19/user/graphql/reference/objects",
"/enterprise/2.19/v4/object/actorlocation": "/en/enterprise/2.19/user/graphql/reference/objects#actorlocation",
"/enterprise/2.19/v4/object/addedtoprojectevent": "/en/enterprise/2.19/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.19/v4/previews": "/en/enterprise/2.19/user/graphql/overview/schema-previews",
"/enterprise/2.19/v4/public_schema": "/en/enterprise/2.19/user/graphql/overview/public-schema",
"/enterprise/2.19/v4/query": "/en/enterprise/2.19/user/graphql/reference/queries",
"/enterprise/2.19/v4/reference": "/en/enterprise/2.19/user/graphql/reference",
"/enterprise/2.19/v4/scalar": "/en/enterprise/2.19/user/graphql/reference/scalars",
"/enterprise/2.19/v4/scalar/boolean": "/en/enterprise/2.19/user/graphql/reference/scalars#boolean",
"/enterprise/2.19/v4/scalar/date": "/en/enterprise/2.19/user/graphql/reference/scalars#date",
"/enterprise/2.19/v4/union": "/en/enterprise/2.19/user/graphql/reference/unions",
"/enterprise/2.19/v4/union/assignee": "/en/enterprise/2.19/user/graphql/reference/unions#assignee",
"/enterprise/2.19/v4/union/auditentryactor": "/en/enterprise/2.19/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.20/user/v4/enum": "/en/enterprise/2.20/user/graphql/reference/enums",
"/enterprise/2.20/user/v4/enum/auditlogorderfield": "/en/enterprise/2.20/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.20/user/v4/enum/checkannotationlevel": "/en/enterprise/2.20/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.20/user/v4/guides": "/en/enterprise/2.20/user/graphql/guides",
"/enterprise/2.20/user/v4/input_object": "/en/enterprise/2.20/user/graphql/reference/input-objects",
"/enterprise/2.20/user/v4/interface": "/en/enterprise/2.20/user/graphql/reference/interfaces",
"/enterprise/2.20/user/v4/interface/actor": "/en/enterprise/2.20/user/graphql/reference/interfaces#actor",
"/enterprise/2.20/user/v4/interface/assignable": "/en/enterprise/2.20/user/graphql/reference/interfaces#assignable",
"/enterprise/2.20/user/v4/mutation": "/en/enterprise/2.20/user/graphql/reference/mutations",
"/enterprise/2.20/user/v4/object": "/en/enterprise/2.20/user/graphql/reference/objects",
"/enterprise/2.20/user/v4/object/actorlocation": "/en/enterprise/2.20/user/graphql/reference/objects#actorlocation",
"/enterprise/2.20/user/v4/object/addedtoprojectevent": "/en/enterprise/2.20/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.20/user/v4/previews": "/en/enterprise/2.20/user/graphql/overview/schema-previews",
"/enterprise/2.20/user/v4/public_schema": "/en/enterprise/2.20/user/graphql/overview/public-schema",
"/enterprise/2.20/user/v4/query": "/en/enterprise/2.20/user/graphql/reference/queries",
"/enterprise/2.20/user/v4/reference": "/en/enterprise/2.20/user/graphql/reference",
"/enterprise/2.20/user/v4/scalar": "/en/enterprise/2.20/user/graphql/reference/scalars",
"/enterprise/2.20/user/v4/scalar/boolean": "/en/enterprise/2.20/user/graphql/reference/scalars#boolean",
"/enterprise/2.20/user/v4/scalar/date": "/en/enterprise/2.20/user/graphql/reference/scalars#date",
"/enterprise/2.20/user/v4/union": "/en/enterprise/2.20/user/graphql/reference/unions",
"/enterprise/2.20/user/v4/union/assignee": "/en/enterprise/2.20/user/graphql/reference/unions#assignee",
"/enterprise/2.20/user/v4/union/auditentryactor": "/en/enterprise/2.20/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.20/v4/enum": "/en/enterprise/2.20/user/graphql/reference/enums",
"/enterprise/2.20/v4/enum/auditlogorderfield": "/en/enterprise/2.20/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.20/v4/enum/checkannotationlevel": "/en/enterprise/2.20/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.20/v4/guides": "/en/enterprise/2.20/user/graphql/guides",
"/enterprise/2.20/v4/input_object": "/en/enterprise/2.20/user/graphql/reference/input-objects",
"/enterprise/2.20/v4/interface": "/en/enterprise/2.20/user/graphql/reference/interfaces",
"/enterprise/2.20/v4/interface/actor": "/en/enterprise/2.20/user/graphql/reference/interfaces#actor",
"/enterprise/2.20/v4/interface/assignable": "/en/enterprise/2.20/user/graphql/reference/interfaces#assignable",
"/enterprise/2.20/v4/mutation": "/en/enterprise/2.20/user/graphql/reference/mutations",
"/enterprise/2.20/v4/object": "/en/enterprise/2.20/user/graphql/reference/objects",
"/enterprise/2.20/v4/object/actorlocation": "/en/enterprise/2.20/user/graphql/reference/objects#actorlocation",
"/enterprise/2.20/v4/object/addedtoprojectevent": "/en/enterprise/2.20/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.20/v4/previews": "/en/enterprise/2.20/user/graphql/overview/schema-previews",
"/enterprise/2.20/v4/public_schema": "/en/enterprise/2.20/user/graphql/overview/public-schema",
"/enterprise/2.20/v4/query": "/en/enterprise/2.20/user/graphql/reference/queries",
"/enterprise/2.20/v4/reference": "/en/enterprise/2.20/user/graphql/reference",
"/enterprise/2.20/v4/scalar": "/en/enterprise/2.20/user/graphql/reference/scalars",
"/enterprise/2.20/v4/scalar/boolean": "/en/enterprise/2.20/user/graphql/reference/scalars#boolean",
"/enterprise/2.20/v4/scalar/date": "/en/enterprise/2.20/user/graphql/reference/scalars#date",
"/enterprise/2.20/v4/union": "/en/enterprise/2.20/user/graphql/reference/unions",
"/enterprise/2.20/v4/union/assignee": "/en/enterprise/2.20/user/graphql/reference/unions#assignee",
"/enterprise/2.20/v4/union/auditentryactor": "/en/enterprise/2.20/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.21/user/v4/enum": "/en/enterprise/2.21/user/graphql/reference/enums",
"/enterprise/2.21/user/v4/enum/auditlogorderfield": "/en/enterprise/2.21/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.21/user/v4/enum/checkannotationlevel": "/en/enterprise/2.21/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.21/user/v4/guides": "/en/enterprise/2.21/user/graphql/guides",
"/enterprise/2.21/user/v4/input_object": "/en/enterprise/2.21/user/graphql/reference/input-objects",
"/enterprise/2.21/user/v4/interface": "/en/enterprise/2.21/user/graphql/reference/interfaces",
"/enterprise/2.21/user/v4/interface/actor": "/en/enterprise/2.21/user/graphql/reference/interfaces#actor",
"/enterprise/2.21/user/v4/interface/assignable": "/en/enterprise/2.21/user/graphql/reference/interfaces#assignable",
"/enterprise/2.21/user/v4/mutation": "/en/enterprise/2.21/user/graphql/reference/mutations",
"/enterprise/2.21/user/v4/object": "/en/enterprise/2.21/user/graphql/reference/objects",
"/enterprise/2.21/user/v4/object/actorlocation": "/en/enterprise/2.21/user/graphql/reference/objects#actorlocation",
"/enterprise/2.21/user/v4/object/addedtoprojectevent": "/en/enterprise/2.21/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.21/user/v4/previews": "/en/enterprise/2.21/user/graphql/overview/schema-previews",
"/enterprise/2.21/user/v4/public_schema": "/en/enterprise/2.21/user/graphql/overview/public-schema",
"/enterprise/2.21/user/v4/query": "/en/enterprise/2.21/user/graphql/reference/queries",
"/enterprise/2.21/user/v4/reference": "/en/enterprise/2.21/user/graphql/reference",
"/enterprise/2.21/user/v4/scalar": "/en/enterprise/2.21/user/graphql/reference/scalars",
"/enterprise/2.21/user/v4/scalar/boolean": "/en/enterprise/2.21/user/graphql/reference/scalars#boolean",
"/enterprise/2.21/user/v4/scalar/date": "/en/enterprise/2.21/user/graphql/reference/scalars#date",
"/enterprise/2.21/user/v4/union": "/en/enterprise/2.21/user/graphql/reference/unions",
"/enterprise/2.21/user/v4/union/assignee": "/en/enterprise/2.21/user/graphql/reference/unions#assignee",
"/enterprise/2.21/user/v4/union/auditentryactor": "/en/enterprise/2.21/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.21/v4/enum": "/en/enterprise/2.21/user/graphql/reference/enums",
"/enterprise/2.21/v4/enum/auditlogorderfield": "/en/enterprise/2.21/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.21/v4/enum/checkannotationlevel": "/en/enterprise/2.21/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.21/v4/guides": "/en/enterprise/2.21/user/graphql/guides",
"/enterprise/2.21/v4/input_object": "/en/enterprise/2.21/user/graphql/reference/input-objects",
"/enterprise/2.21/v4/interface": "/en/enterprise/2.21/user/graphql/reference/interfaces",
"/enterprise/2.21/v4/interface/actor": "/en/enterprise/2.21/user/graphql/reference/interfaces#actor",
"/enterprise/2.21/v4/interface/assignable": "/en/enterprise/2.21/user/graphql/reference/interfaces#assignable",
"/enterprise/2.21/v4/mutation": "/en/enterprise/2.21/user/graphql/reference/mutations",
"/enterprise/2.21/v4/object": "/en/enterprise/2.21/user/graphql/reference/objects",
"/enterprise/2.21/v4/object/actorlocation": "/en/enterprise/2.21/user/graphql/reference/objects#actorlocation",
"/enterprise/2.21/v4/object/addedtoprojectevent": "/en/enterprise/2.21/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.21/v4/previews": "/en/enterprise/2.21/user/graphql/overview/schema-previews",
"/enterprise/2.21/v4/public_schema": "/en/enterprise/2.21/user/graphql/overview/public-schema",
"/enterprise/2.21/v4/query": "/en/enterprise/2.21/user/graphql/reference/queries",
"/enterprise/2.21/v4/reference": "/en/enterprise/2.21/user/graphql/reference",
"/enterprise/2.21/v4/scalar": "/en/enterprise/2.21/user/graphql/reference/scalars",
"/enterprise/2.21/v4/scalar/boolean": "/en/enterprise/2.21/user/graphql/reference/scalars#boolean",
"/enterprise/2.21/v4/scalar/date": "/en/enterprise/2.21/user/graphql/reference/scalars#date",
"/enterprise/2.21/v4/union": "/en/enterprise/2.21/user/graphql/reference/unions",
"/enterprise/2.21/v4/union/assignee": "/en/enterprise/2.21/user/graphql/reference/unions#assignee",
"/enterprise/2.21/v4/union/auditentryactor": "/en/enterprise/2.21/user/graphql/reference/unions#auditentryactor",
"/enterprise/v4/enum": "/en/enterprise/user/graphql/reference/enums",
"/enterprise/v4/enum/auditlogorderfield": "/en/enterprise/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/v4/enum/checkannotationlevel": "/en/enterprise/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/v4/guides": "/en/enterprise/user/graphql/guides",
"/enterprise/v4/input_object": "/en/enterprise/user/graphql/reference/input-objects",
"/enterprise/v4/interface": "/en/enterprise/user/graphql/reference/interfaces",
"/enterprise/v4/interface/actor": "/en/enterprise/user/graphql/reference/interfaces#actor",
"/enterprise/v4/interface/assignable": "/en/enterprise/user/graphql/reference/interfaces#assignable",
"/enterprise/v4/mutation": "/en/enterprise/user/graphql/reference/mutations",
"/enterprise/v4/object": "/en/enterprise/user/graphql/reference/objects",
"/enterprise/v4/object/actorlocation": "/en/enterprise/user/graphql/reference/objects#actorlocation",
"/enterprise/v4/object/addedtoprojectevent": "/en/enterprise/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/v4/previews": "/en/enterprise/user/graphql/overview/schema-previews",
"/enterprise/v4/public_schema": "/en/enterprise/user/graphql/overview/public-schema",
"/enterprise/v4/query": "/en/enterprise/user/graphql/reference/queries",
"/enterprise/v4/reference": "/en/enterprise/user/graphql/reference",
"/enterprise/v4/scalar": "/en/enterprise/user/graphql/reference/scalars",
"/enterprise/v4/scalar/boolean": "/en/enterprise/user/graphql/reference/scalars#boolean",
"/enterprise/v4/scalar/date": "/en/enterprise/user/graphql/reference/scalars#date",
"/enterprise/v4/union": "/en/enterprise/user/graphql/reference/unions",
"/enterprise/v4/union/assignee": "/en/enterprise/user/graphql/reference/unions#assignee",
"/enterprise/v4/union/auditentryactor": "/en/enterprise/user/graphql/reference/unions#auditentryactor",
"/v4/enum": "/en/graphql/reference/enums",
"/v4/enum/auditlogorderfield": "/en/graphql/reference/enums#auditlogorderfield",
"/v4/enum/checkannotationlevel": "/en/graphql/reference/enums#checkannotationlevel",
"/v4/guides": "/en/graphql/guides",
"/v4/input_object": "/en/graphql/reference/input-objects",
"/v4/input_object/acceptenterpriseadministratorinvitationinput": "/en/graphql/reference/input-objects#acceptenterpriseadministratorinvitationinput",
"/v4/input_object/accepttopicsuggestioninput": "/en/graphql/reference/input-objects#accepttopicsuggestioninput",
"/v4/interface": "/en/graphql/reference/interfaces",
"/v4/interface/actor": "/en/graphql/reference/interfaces#actor",
"/v4/interface/assignable": "/en/graphql/reference/interfaces#assignable",
"/v4/mutation": "/en/graphql/reference/mutations",
"/v4/mutation/acceptenterpriseadministratorinvitation": "/en/graphql/reference/mutations#acceptenterpriseadministratorinvitation",
"/v4/mutation/accepttopicsuggestion": "/en/graphql/reference/mutations#accepttopicsuggestion",
"/v4/object": "/en/graphql/reference/objects",
"/v4/object/actorlocation": "/en/graphql/reference/objects#actorlocation",
"/v4/object/addedtoprojectevent": "/en/graphql/reference/objects#addedtoprojectevent",
"/v4/previews": "/en/graphql/overview/schema-previews",
"/v4/public_schema": "/en/graphql/overview/public-schema",
"/v4/query": "/en/graphql/reference/queries",
"/v4/reference": "/en/graphql/reference",
"/v4/scalar": "/en/graphql/reference/scalars",
"/v4/scalar/boolean": "/en/graphql/reference/scalars#boolean",
"/v4/scalar/date": "/en/graphql/reference/scalars#date",
"/v4/union": "/en/graphql/reference/unions",
"/v4/union/assignee": "/en/graphql/reference/unions#assignee",
"/v4/union/auditentryactor": "/en/graphql/reference/unions#auditentryactor"
"/enterprise/2.19/user/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/enterprise/2.19/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.19/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.19/user/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/enterprise/2.19/user/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/enterprise/2.19/user/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/enterprise/2.19/user/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/enterprise/2.19/user/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/enterprise/2.19/user/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/enterprise/2.19/user/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/enterprise/2.19/user/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/enterprise/2.19/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.19/user/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/enterprise/2.19/user/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/enterprise/2.19/user/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/enterprise/2.19/user/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/enterprise/2.19/user/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/enterprise/2.19/user/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/enterprise/2.19/user/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/enterprise/2.19/user/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/enterprise/2.19/user/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/enterprise/2.19/user/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/enterprise/2.19/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/enterprise/2.19/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.19/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.19/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/enterprise/2.19/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/enterprise/2.19/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/enterprise/2.19/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/enterprise/2.19/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/enterprise/2.19/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/enterprise/2.19/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/enterprise/2.19/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/enterprise/2.19/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.19/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/enterprise/2.19/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/enterprise/2.19/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/enterprise/2.19/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/enterprise/2.19/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/enterprise/2.19/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/enterprise/2.19/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/enterprise/2.19/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/enterprise/2.19/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/enterprise/2.19/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/enterprise/2.20/user/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/enterprise/2.20/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.20/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.20/user/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/enterprise/2.20/user/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/enterprise/2.20/user/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/enterprise/2.20/user/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/enterprise/2.20/user/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/enterprise/2.20/user/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/enterprise/2.20/user/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/enterprise/2.20/user/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/enterprise/2.20/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.20/user/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/enterprise/2.20/user/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/enterprise/2.20/user/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/enterprise/2.20/user/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/enterprise/2.20/user/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/enterprise/2.20/user/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/enterprise/2.20/user/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/enterprise/2.20/user/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/enterprise/2.20/user/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/enterprise/2.20/user/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/enterprise/2.20/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/enterprise/2.20/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.20/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.20/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/enterprise/2.20/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/enterprise/2.20/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/enterprise/2.20/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/enterprise/2.20/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/enterprise/2.20/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/enterprise/2.20/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/enterprise/2.20/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/enterprise/2.20/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.20/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/enterprise/2.20/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/enterprise/2.20/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/enterprise/2.20/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/enterprise/2.20/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/enterprise/2.20/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/enterprise/2.20/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/enterprise/2.20/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/enterprise/2.20/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/enterprise/2.20/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/enterprise/2.21/user/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/enterprise/2.21/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.21/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.21/user/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/enterprise/2.21/user/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/enterprise/2.21/user/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/enterprise/2.21/user/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/enterprise/2.21/user/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/enterprise/2.21/user/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/enterprise/2.21/user/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/enterprise/2.21/user/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/enterprise/2.21/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.21/user/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/enterprise/2.21/user/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/enterprise/2.21/user/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/enterprise/2.21/user/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/enterprise/2.21/user/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/enterprise/2.21/user/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/enterprise/2.21/user/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/enterprise/2.21/user/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/enterprise/2.21/user/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/enterprise/2.21/user/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/enterprise/2.21/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/enterprise/2.21/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.21/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.21/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/enterprise/2.21/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/enterprise/2.21/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/enterprise/2.21/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/enterprise/2.21/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/enterprise/2.21/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/enterprise/2.21/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/enterprise/2.21/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/enterprise/2.21/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.21/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/enterprise/2.21/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/enterprise/2.21/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/enterprise/2.21/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/enterprise/2.21/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/enterprise/2.21/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/enterprise/2.21/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/enterprise/2.21/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/enterprise/2.21/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/enterprise/2.21/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/enterprise/v4/enum": "/en/enterprise-server/graphql/reference/enums",
"/enterprise/v4/enum/auditlogorderfield": "/en/enterprise-server/graphql/reference/enums#auditlogorderfield",
"/enterprise/v4/enum/checkannotationlevel": "/en/enterprise-server/graphql/reference/enums#checkannotationlevel",
"/enterprise/v4/guides": "/en/enterprise-server/graphql/guides",
"/enterprise/v4/input_object": "/en/enterprise-server/graphql/reference/input-objects",
"/enterprise/v4/interface": "/en/enterprise-server/graphql/reference/interfaces",
"/enterprise/v4/interface/actor": "/en/enterprise-server/graphql/reference/interfaces#actor",
"/enterprise/v4/interface/assignable": "/en/enterprise-server/graphql/reference/interfaces#assignable",
"/enterprise/v4/mutation": "/en/enterprise-server/graphql/reference/mutations",
"/enterprise/v4/object": "/en/enterprise-server/graphql/reference/objects",
"/enterprise/v4/object/actorlocation": "/en/enterprise-server/graphql/reference/objects#actorlocation",
"/enterprise/v4/object/addedtoprojectevent": "/en/enterprise-server/graphql/reference/objects#addedtoprojectevent",
"/enterprise/v4/previews": "/en/enterprise-server/graphql/overview/schema-previews",
"/enterprise/v4/public_schema": "/en/enterprise-server/graphql/overview/public-schema",
"/enterprise/v4/query": "/en/enterprise-server/graphql/reference/queries",
"/enterprise/v4/reference": "/en/enterprise-server/graphql/reference",
"/enterprise/v4/scalar": "/en/enterprise-server/graphql/reference/scalars",
"/enterprise/v4/scalar/boolean": "/en/enterprise-server/graphql/reference/scalars#boolean",
"/enterprise/v4/scalar/date": "/en/enterprise-server/graphql/reference/scalars#date",
"/enterprise/v4/union": "/en/enterprise-server/graphql/reference/unions",
"/enterprise/v4/union/assignee": "/en/enterprise-server/graphql/reference/unions#assignee",
"/enterprise/v4/union/auditentryactor": "/en/enterprise-server/graphql/reference/unions#auditentryactor",
"/v4/enum": "/en/free-pro-team@latest/graphql/reference/enums",
"/v4/enum/auditlogorderfield": "/en/free-pro-team@latest/graphql/reference/enums#auditlogorderfield",
"/v4/enum/checkannotationlevel": "/en/free-pro-team@latest/graphql/reference/enums#checkannotationlevel",
"/v4/guides": "/en/free-pro-team@latest/graphql/guides",
"/v4/input_object": "/en/free-pro-team@latest/graphql/reference/input-objects",
"/v4/input_object/acceptenterpriseadministratorinvitationinput": "/en/free-pro-team@latest/graphql/reference/input-objects#acceptenterpriseadministratorinvitationinput",
"/v4/input_object/accepttopicsuggestioninput": "/en/free-pro-team@latest/graphql/reference/input-objects#accepttopicsuggestioninput",
"/v4/interface": "/en/free-pro-team@latest/graphql/reference/interfaces",
"/v4/interface/actor": "/en/free-pro-team@latest/graphql/reference/interfaces#actor",
"/v4/interface/assignable": "/en/free-pro-team@latest/graphql/reference/interfaces#assignable",
"/v4/mutation": "/en/free-pro-team@latest/graphql/reference/mutations",
"/v4/mutation/acceptenterpriseadministratorinvitation": "/en/free-pro-team@latest/graphql/reference/mutations#acceptenterpriseadministratorinvitation",
"/v4/mutation/accepttopicsuggestion": "/en/free-pro-team@latest/graphql/reference/mutations#accepttopicsuggestion",
"/v4/object": "/en/free-pro-team@latest/graphql/reference/objects",
"/v4/object/actorlocation": "/en/free-pro-team@latest/graphql/reference/objects#actorlocation",
"/v4/object/addedtoprojectevent": "/en/free-pro-team@latest/graphql/reference/objects#addedtoprojectevent",
"/v4/previews": "/en/free-pro-team@latest/graphql/overview/schema-previews",
"/v4/public_schema": "/en/free-pro-team@latest/graphql/overview/public-schema",
"/v4/query": "/en/free-pro-team@latest/graphql/reference/queries",
"/v4/reference": "/en/free-pro-team@latest/graphql/reference",
"/v4/scalar": "/en/free-pro-team@latest/graphql/reference/scalars",
"/v4/scalar/boolean": "/en/free-pro-team@latest/graphql/reference/scalars#boolean",
"/v4/scalar/date": "/en/free-pro-team@latest/graphql/reference/scalars#date",
"/v4/union": "/en/free-pro-team@latest/graphql/reference/unions",
"/v4/union/assignee": "/en/free-pro-team@latest/graphql/reference/unions#assignee",
"/v4/union/auditentryactor": "/en/free-pro-team@latest/graphql/reference/unions#auditentryactor"
}

View File

@@ -1,9 +0,0 @@
---
title: GitHub 上でプロジェクトを探索する
intro: ''
mapTopic: verdadero
versions:
free-pro-team: '*'
enterprise-server: '*'
---

View File

@@ -1,68 +0,0 @@
{
"/apps": "/en/free-pro-team@latest/developers/apps",
"/apps/building-github-apps": "/en/free-pro-team@latest/developers/apps/building-github-apps",
"/apps/building-oauth-apps": "/en/free-pro-team@latest/developers/apps/building-oauth-apps",
"/apps/managing-github-apps": "/en/free-pro-team@latest/developers/apps/managing-github-apps",
"/apps/managing-oauth-apps": "/en/free-pro-team@latest/developers/apps/managing-oauth-apps",
"/apps/quickstart-guides": "/en/free-pro-team@latest/developers/apps/guides",
"/marketplace": "/en/free-pro-team@latest/developers/github-marketplace",
"/marketplace/getting-started": "/en/free-pro-team@latest/developers/github-marketplace/about-github-marketplace",
"/marketplace/integrating-with-the-github-marketplace-api": "/en/free-pro-team@latest/developers/github-marketplace/using-the-github-marketplace-api-in-your-app",
"/marketplace/listing-on-github-marketplace": "/en/free-pro-team@latest/developers/github-marketplace/listing-an-app-on-github-marketplace",
"/marketplace/selling-your-app": "/en/free-pro-team@latest/developers/github-marketplace/selling-your-app-on-github-marketplace",
"/v3": "/en/free-pro-team@latest/rest",
"/v3/actions/workflow-jobs": "/en/free-pro-team@latest/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow-runs": "/en/free-pro-team@latest/rest/reference/actions#workflow-runs",
"/v3/actions/workflow_jobs": "/en/free-pro-team@latest/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow_runs": "/en/free-pro-team@latest/rest/reference/actions#workflow-runs",
"/v3/guides": "/en/free-pro-team@latest/rest/guides",
"/v3/guides/managing-deploy-keys": "/en/free-pro-team@latest/developers/overview/managing-deploy-keys",
"/v3/misc": "/en/free-pro-team@latest/rest/reference/emojis",
"/v4/public_schema": "/en/free-pro-team@latest/graphql/overview/public-schema",
"/v4/object/repository": "/en/free-pro-team@latest/graphql/reference/objects#repository",
"/webhooks": "/en/free-pro-team@latest/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.18/apps": "/en/enterprise/2.18/user/developers/apps",
"/en/enterprise/2.18/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise/2.18/user/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.18/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise/2.18/user/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.18/apps/differences-between-apps": "/en/enterprise/2.18/user/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.18/v3/auth": "/en/enterprise/2.18/user/rest/overview/other-authentication-methods",
"/en/enterprise/2.18/v3/guides/managing-deploy-keys": "/en/enterprise/2.18/user/developers/overview/managing-deploy-keys",
"/en/enterprise/2.18/v4/explorer": "/en/enterprise/2.18/user/graphql/overview/explorer",
"/en/enterprise/2.18/v4/guides/forming-calls": "/en/enterprise/2.18/user/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.18/v4/guides/intro-to-graphql": "/en/enterprise/2.18/user/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.18/v4/guides/migrating-from-rest": "/en/enterprise/2.18/user/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.18/webhooks": "/en/enterprise/2.18/user/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.19/apps": "/en/enterprise-server@2.19/developers/apps",
"/en/enterprise/2.19/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise-server@2.19/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.19/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise-server@2.19/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.19/apps/differences-between-apps": "/en/enterprise-server@2.19/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.19/v3/auth": "/en/enterprise-server@2.19/rest/overview/other-authentication-methods",
"/en/enterprise/2.19/v3/guides/managing-deploy-keys": "/en/enterprise-server@2.19/developers/overview/managing-deploy-keys",
"/en/enterprise/2.19/v4/explorer": "/en/enterprise-server@2.19/graphql/overview/explorer",
"/en/enterprise/2.19/v4/guides/forming-calls": "/en/enterprise-server@2.19/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.19/v4/guides/intro-to-graphql": "/en/enterprise-server@2.19/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.19/v4/guides/migrating-from-rest": "/en/enterprise-server@2.19/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.19/webhooks": "/en/enterprise-server@2.19/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.20/apps": "/en/enterprise-server@2.20/developers/apps",
"/en/enterprise/2.20/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise-server@2.20/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.20/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise-server@2.20/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.20/apps/differences-between-apps": "/en/enterprise-server@2.20/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.20/v3/auth": "/en/enterprise-server@2.20/rest/overview/other-authentication-methods",
"/en/enterprise/2.20/v3/guides/managing-deploy-keys": "/en/enterprise-server@2.20/developers/overview/managing-deploy-keys",
"/en/enterprise/2.20/v4/explorer": "/en/enterprise-server@2.20/graphql/overview/explorer",
"/en/enterprise/2.20/v4/guides/forming-calls": "/en/enterprise-server@2.20/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.20/v4/guides/intro-to-graphql": "/en/enterprise-server@2.20/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.20/v4/guides/migrating-from-rest": "/en/enterprise-server@2.20/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.20/webhooks": "/en/enterprise-server@2.20/developers/webhooks-and-events/about-webhooks",
"/en/enterprise/2.21/apps": "/en/enterprise-server@2.21/developers/apps",
"/en/enterprise/2.21/apps/building-oauth-apps/authorizing-oauth-apps": "/en/enterprise-server@2.21/developers/apps/authorizing-oauth-apps",
"/en/enterprise/2.21/apps/building-oauth-apps/understanding-scopes-for-oauth-apps": "/en/enterprise-server@2.21/developers/apps/scopes-for-oauth-apps",
"/en/enterprise/2.21/apps/differences-between-apps": "/en/enterprise-server@2.21/developers/apps/differences-between-github-apps-and-oauth-apps",
"/en/enterprise/2.21/v3/auth": "/en/enterprise-server@2.21/rest/overview/other-authentication-methods",
"/en/enterprise/2.21/v3/guides/managing-deploy-keys": "/en/enterprise-server@2.21/developers/overview/managing-deploy-keys",
"/en/enterprise/2.21/v4/explorer": "/en/enterprise-server@2.21/graphql/overview/explorer",
"/en/enterprise/2.21/v4/guides/forming-calls": "/en/enterprise-server@2.21/graphql/guides/forming-calls-with-graphql",
"/en/enterprise/2.21/v4/guides/intro-to-graphql": "/en/enterprise-server@2.21/graphql/guides/introduction-to-graphql",
"/en/enterprise/2.21/v4/guides/migrating-from-rest": "/en/enterprise-server@2.21/graphql/guides/migrating-from-rest-to-graphql",
"/en/enterprise/2.21/webhooks": "/en/enterprise-server@2.21/developers/webhooks-and-events/about-webhooks"
}

View File

@@ -1,446 +0,0 @@
{
"/en/enterprise/2.18/user/v4/enum": "/en/enterprise/2.18/user/graphql/reference/enums",
"/en/enterprise/2.18/user/v4/enum/auditlogorderfield": "/en/enterprise/2.18/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.18/user/v4/enum/checkannotationlevel": "/en/enterprise/2.18/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.18/user/v4/guides": "/en/enterprise/2.18/user/graphql/guides",
"/en/enterprise/2.18/user/v4/input_object": "/en/enterprise/2.18/user/graphql/reference/input-objects",
"/en/enterprise/2.18/user/v4/interface": "/en/enterprise/2.18/user/graphql/reference/interfaces",
"/en/enterprise/2.18/user/v4/interface/actor": "/en/enterprise/2.18/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.18/user/v4/interface/assignable": "/en/enterprise/2.18/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.18/user/v4/mutation": "/en/enterprise/2.18/user/graphql/reference/mutations",
"/en/enterprise/2.18/user/v4/object": "/en/enterprise/2.18/user/graphql/reference/objects",
"/en/enterprise/2.18/user/v4/object/actorlocation": "/en/enterprise/2.18/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.18/user/v4/object/addedtoprojectevent": "/en/enterprise/2.18/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.18/user/v4/previews": "/en/enterprise/2.18/user/graphql/overview/schema-previews",
"/en/enterprise/2.18/user/v4/public_schema": "/en/enterprise/2.18/user/graphql/overview/public-schema",
"/en/enterprise/2.18/user/v4/query": "/en/enterprise/2.18/user/graphql/reference/queries",
"/en/enterprise/2.18/user/v4/reference": "/en/enterprise/2.18/user/graphql/reference",
"/en/enterprise/2.18/user/v4/scalar": "/en/enterprise/2.18/user/graphql/reference/scalars",
"/en/enterprise/2.18/user/v4/scalar/boolean": "/en/enterprise/2.18/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.18/user/v4/scalar/date": "/en/enterprise/2.18/user/graphql/reference/scalars#date",
"/en/enterprise/2.18/user/v4/union": "/en/enterprise/2.18/user/graphql/reference/unions",
"/en/enterprise/2.18/user/v4/union/auditentryactor": "/en/enterprise/2.18/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.18/v4/enum": "/en/enterprise/2.18/user/graphql/reference/enums",
"/en/enterprise/2.18/v4/enum/auditlogorderfield": "/en/enterprise/2.18/user/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.18/v4/enum/checkannotationlevel": "/en/enterprise/2.18/user/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.18/v4/guides": "/en/enterprise/2.18/user/graphql/guides",
"/en/enterprise/2.18/v4/input_object": "/en/enterprise/2.18/user/graphql/reference/input-objects",
"/en/enterprise/2.18/v4/interface": "/en/enterprise/2.18/user/graphql/reference/interfaces",
"/en/enterprise/2.18/v4/interface/actor": "/en/enterprise/2.18/user/graphql/reference/interfaces#actor",
"/en/enterprise/2.18/v4/interface/assignable": "/en/enterprise/2.18/user/graphql/reference/interfaces#assignable",
"/en/enterprise/2.18/v4/mutation": "/en/enterprise/2.18/user/graphql/reference/mutations",
"/en/enterprise/2.18/v4/object": "/en/enterprise/2.18/user/graphql/reference/objects",
"/en/enterprise/2.18/v4/object/actorlocation": "/en/enterprise/2.18/user/graphql/reference/objects#actorlocation",
"/en/enterprise/2.18/v4/object/addedtoprojectevent": "/en/enterprise/2.18/user/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.18/v4/previews": "/en/enterprise/2.18/user/graphql/overview/schema-previews",
"/en/enterprise/2.18/v4/public_schema": "/en/enterprise/2.18/user/graphql/overview/public-schema",
"/en/enterprise/2.18/v4/query": "/en/enterprise/2.18/user/graphql/reference/queries",
"/en/enterprise/2.18/v4/reference": "/en/enterprise/2.18/user/graphql/reference",
"/en/enterprise/2.18/v4/scalar": "/en/enterprise/2.18/user/graphql/reference/scalars",
"/en/enterprise/2.18/v4/scalar/boolean": "/en/enterprise/2.18/user/graphql/reference/scalars#boolean",
"/en/enterprise/2.18/v4/scalar/date": "/en/enterprise/2.18/user/graphql/reference/scalars#date",
"/en/enterprise/2.18/v4/union": "/en/enterprise/2.18/user/graphql/reference/unions",
"/en/enterprise/2.18/v4/union/auditentryactor": "/en/enterprise/2.18/user/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.19/user/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/en/enterprise/2.19/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.19/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.19/user/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/en/enterprise/2.19/user/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/en/enterprise/2.19/user/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/en/enterprise/2.19/user/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/en/enterprise/2.19/user/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/en/enterprise/2.19/user/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/en/enterprise/2.19/user/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/en/enterprise/2.19/user/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/en/enterprise/2.19/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.19/user/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/en/enterprise/2.19/user/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/en/enterprise/2.19/user/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/en/enterprise/2.19/user/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/en/enterprise/2.19/user/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/en/enterprise/2.19/user/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/en/enterprise/2.19/user/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/en/enterprise/2.19/user/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/en/enterprise/2.19/user/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/en/enterprise/2.19/user/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.19/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/en/enterprise/2.19/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.19/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.19/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/en/enterprise/2.19/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/en/enterprise/2.19/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/en/enterprise/2.19/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/en/enterprise/2.19/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/en/enterprise/2.19/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/en/enterprise/2.19/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/en/enterprise/2.19/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/en/enterprise/2.19/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.19/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/en/enterprise/2.19/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/en/enterprise/2.19/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/en/enterprise/2.19/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/en/enterprise/2.19/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/en/enterprise/2.19/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/en/enterprise/2.19/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/en/enterprise/2.19/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/en/enterprise/2.19/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/en/enterprise/2.19/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.20/user/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/en/enterprise/2.20/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.20/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.20/user/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/en/enterprise/2.20/user/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/en/enterprise/2.20/user/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/en/enterprise/2.20/user/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/en/enterprise/2.20/user/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/en/enterprise/2.20/user/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/en/enterprise/2.20/user/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/en/enterprise/2.20/user/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/en/enterprise/2.20/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.20/user/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/en/enterprise/2.20/user/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/en/enterprise/2.20/user/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/en/enterprise/2.20/user/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/en/enterprise/2.20/user/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/en/enterprise/2.20/user/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/en/enterprise/2.20/user/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/en/enterprise/2.20/user/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/en/enterprise/2.20/user/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/en/enterprise/2.20/user/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.20/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/en/enterprise/2.20/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.20/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.20/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/en/enterprise/2.20/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/en/enterprise/2.20/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/en/enterprise/2.20/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/en/enterprise/2.20/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/en/enterprise/2.20/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/en/enterprise/2.20/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/en/enterprise/2.20/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/en/enterprise/2.20/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.20/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/en/enterprise/2.20/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/en/enterprise/2.20/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/en/enterprise/2.20/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/en/enterprise/2.20/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/en/enterprise/2.20/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/en/enterprise/2.20/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/en/enterprise/2.20/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/en/enterprise/2.20/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/en/enterprise/2.20/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.21/user/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/en/enterprise/2.21/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.21/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.21/user/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/en/enterprise/2.21/user/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/en/enterprise/2.21/user/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/en/enterprise/2.21/user/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/en/enterprise/2.21/user/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/en/enterprise/2.21/user/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/en/enterprise/2.21/user/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/en/enterprise/2.21/user/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/en/enterprise/2.21/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.21/user/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/en/enterprise/2.21/user/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/en/enterprise/2.21/user/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/en/enterprise/2.21/user/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/en/enterprise/2.21/user/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/en/enterprise/2.21/user/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/en/enterprise/2.21/user/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/en/enterprise/2.21/user/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/en/enterprise/2.21/user/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/en/enterprise/2.21/user/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/en/enterprise/2.21/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/en/enterprise/2.21/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/2.21/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/2.21/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/en/enterprise/2.21/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/en/enterprise/2.21/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/en/enterprise/2.21/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/en/enterprise/2.21/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/en/enterprise/2.21/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/en/enterprise/2.21/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/en/enterprise/2.21/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/en/enterprise/2.21/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/2.21/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/en/enterprise/2.21/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/en/enterprise/2.21/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/en/enterprise/2.21/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/en/enterprise/2.21/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/en/enterprise/2.21/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/en/enterprise/2.21/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/en/enterprise/2.21/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/en/enterprise/2.21/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/en/enterprise/2.21/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/en/enterprise/v4/enum": "/en/enterprise-server/graphql/reference/enums",
"/en/enterprise/v4/enum/auditlogorderfield": "/en/enterprise-server/graphql/reference/enums#auditlogorderfield",
"/en/enterprise/v4/enum/checkannotationlevel": "/en/enterprise-server/graphql/reference/enums#checkannotationlevel",
"/en/enterprise/v4/guides": "/en/enterprise-server/graphql/guides",
"/en/enterprise/v4/input_object": "/en/enterprise-server/graphql/reference/input-objects",
"/en/enterprise/v4/interface": "/en/enterprise-server/graphql/reference/interfaces",
"/en/enterprise/v4/interface/actor": "/en/enterprise-server/graphql/reference/interfaces#actor",
"/en/enterprise/v4/interface/assignable": "/en/enterprise-server/graphql/reference/interfaces#assignable",
"/en/enterprise/v4/mutation": "/en/enterprise-server/graphql/reference/mutations",
"/en/enterprise/v4/object": "/en/enterprise-server/graphql/reference/objects",
"/en/enterprise/v4/object/actorlocation": "/en/enterprise-server/graphql/reference/objects#actorlocation",
"/en/enterprise/v4/object/addedtoprojectevent": "/en/enterprise-server/graphql/reference/objects#addedtoprojectevent",
"/en/enterprise/v4/previews": "/en/enterprise-server/graphql/overview/schema-previews",
"/en/enterprise/v4/public_schema": "/en/enterprise-server/graphql/overview/public-schema",
"/en/enterprise/v4/query": "/en/enterprise-server/graphql/reference/queries",
"/en/enterprise/v4/reference": "/en/enterprise-server/graphql/reference",
"/en/enterprise/v4/scalar": "/en/enterprise-server/graphql/reference/scalars",
"/en/enterprise/v4/scalar/boolean": "/en/enterprise-server/graphql/reference/scalars#boolean",
"/en/enterprise/v4/scalar/date": "/en/enterprise-server/graphql/reference/scalars#date",
"/en/enterprise/v4/union": "/en/enterprise-server/graphql/reference/unions",
"/en/enterprise/v4/union/assignee": "/en/enterprise-server/graphql/reference/unions#assignee",
"/en/enterprise/v4/union/auditentryactor": "/en/enterprise-server/graphql/reference/unions#auditentryactor",
"/en/v4/enum": "/en/free-pro-team@latest/graphql/reference/enums",
"/en/v4/enum/auditlogorderfield": "/en/free-pro-team@latest/graphql/reference/enums#auditlogorderfield",
"/en/v4/enum/checkannotationlevel": "/en/free-pro-team@latest/graphql/reference/enums#checkannotationlevel",
"/en/v4/guides": "/en/free-pro-team@latest/graphql/guides",
"/en/v4/input_object": "/en/free-pro-team@latest/graphql/reference/input-objects",
"/en/v4/input_object/acceptenterpriseadministratorinvitationinput": "/en/free-pro-team@latest/graphql/reference/input-objects#acceptenterpriseadministratorinvitationinput",
"/en/v4/input_object/accepttopicsuggestioninput": "/en/free-pro-team@latest/graphql/reference/input-objects#accepttopicsuggestioninput",
"/en/v4/interface": "/en/free-pro-team@latest/graphql/reference/interfaces",
"/en/v4/interface/actor": "/en/free-pro-team@latest/graphql/reference/interfaces#actor",
"/en/v4/interface/assignable": "/en/free-pro-team@latest/graphql/reference/interfaces#assignable",
"/en/v4/mutation": "/en/free-pro-team@latest/graphql/reference/mutations",
"/en/v4/mutation/acceptenterpriseadministratorinvitation": "/en/free-pro-team@latest/graphql/reference/mutations#acceptenterpriseadministratorinvitation",
"/en/v4/mutation/accepttopicsuggestion": "/en/free-pro-team@latest/graphql/reference/mutations#accepttopicsuggestion",
"/en/v4/object": "/en/free-pro-team@latest/graphql/reference/objects",
"/en/v4/object/actorlocation": "/en/free-pro-team@latest/graphql/reference/objects#actorlocation",
"/en/v4/object/addedtoprojectevent": "/en/free-pro-team@latest/graphql/reference/objects#addedtoprojectevent",
"/en/v4/previews": "/en/free-pro-team@latest/graphql/overview/schema-previews",
"/en/v4/public_schema": "/en/free-pro-team@latest/graphql/overview/public-schema",
"/en/v4/query": "/en/free-pro-team@latest/graphql/reference/queries",
"/en/v4/reference": "/en/free-pro-team@latest/graphql/reference",
"/en/v4/scalar": "/en/free-pro-team@latest/graphql/reference/scalars",
"/en/v4/scalar/boolean": "/en/free-pro-team@latest/graphql/reference/scalars#boolean",
"/en/v4/scalar/date": "/en/free-pro-team@latest/graphql/reference/scalars#date",
"/en/v4/union": "/en/free-pro-team@latest/graphql/reference/unions",
"/en/v4/union/assignee": "/en/free-pro-team@latest/graphql/reference/unions#assignee",
"/en/v4/union/auditentryactor": "/en/free-pro-team@latest/graphql/reference/unions#auditentryactor",
"/enterprise/2.18/user/v4/enum": "/en/enterprise/2.18/user/graphql/reference/enums",
"/enterprise/2.18/user/v4/enum/auditlogorderfield": "/en/enterprise/2.18/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.18/user/v4/enum/checkannotationlevel": "/en/enterprise/2.18/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.18/user/v4/guides": "/en/enterprise/2.18/user/graphql/guides",
"/enterprise/2.18/user/v4/input_object": "/en/enterprise/2.18/user/graphql/reference/input-objects",
"/enterprise/2.18/user/v4/interface": "/en/enterprise/2.18/user/graphql/reference/interfaces",
"/enterprise/2.18/user/v4/interface/actor": "/en/enterprise/2.18/user/graphql/reference/interfaces#actor",
"/enterprise/2.18/user/v4/interface/assignable": "/en/enterprise/2.18/user/graphql/reference/interfaces#assignable",
"/enterprise/2.18/user/v4/mutation": "/en/enterprise/2.18/user/graphql/reference/mutations",
"/enterprise/2.18/user/v4/object": "/en/enterprise/2.18/user/graphql/reference/objects",
"/enterprise/2.18/user/v4/object/actorlocation": "/en/enterprise/2.18/user/graphql/reference/objects#actorlocation",
"/enterprise/2.18/user/v4/object/addedtoprojectevent": "/en/enterprise/2.18/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.18/user/v4/previews": "/en/enterprise/2.18/user/graphql/overview/schema-previews",
"/enterprise/2.18/user/v4/public_schema": "/en/enterprise/2.18/user/graphql/overview/public-schema",
"/enterprise/2.18/user/v4/query": "/en/enterprise/2.18/user/graphql/reference/queries",
"/enterprise/2.18/user/v4/reference": "/en/enterprise/2.18/user/graphql/reference",
"/enterprise/2.18/user/v4/scalar": "/en/enterprise/2.18/user/graphql/reference/scalars",
"/enterprise/2.18/user/v4/scalar/boolean": "/en/enterprise/2.18/user/graphql/reference/scalars#boolean",
"/enterprise/2.18/user/v4/scalar/date": "/en/enterprise/2.18/user/graphql/reference/scalars#date",
"/enterprise/2.18/user/v4/union": "/en/enterprise/2.18/user/graphql/reference/unions",
"/enterprise/2.18/user/v4/union/auditentryactor": "/en/enterprise/2.18/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.18/v4/enum": "/en/enterprise/2.18/user/graphql/reference/enums",
"/enterprise/2.18/v4/enum/auditlogorderfield": "/en/enterprise/2.18/user/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.18/v4/enum/checkannotationlevel": "/en/enterprise/2.18/user/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.18/v4/guides": "/en/enterprise/2.18/user/graphql/guides",
"/enterprise/2.18/v4/input_object": "/en/enterprise/2.18/user/graphql/reference/input-objects",
"/enterprise/2.18/v4/interface": "/en/enterprise/2.18/user/graphql/reference/interfaces",
"/enterprise/2.18/v4/interface/actor": "/en/enterprise/2.18/user/graphql/reference/interfaces#actor",
"/enterprise/2.18/v4/interface/assignable": "/en/enterprise/2.18/user/graphql/reference/interfaces#assignable",
"/enterprise/2.18/v4/mutation": "/en/enterprise/2.18/user/graphql/reference/mutations",
"/enterprise/2.18/v4/object": "/en/enterprise/2.18/user/graphql/reference/objects",
"/enterprise/2.18/v4/object/actorlocation": "/en/enterprise/2.18/user/graphql/reference/objects#actorlocation",
"/enterprise/2.18/v4/object/addedtoprojectevent": "/en/enterprise/2.18/user/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.18/v4/previews": "/en/enterprise/2.18/user/graphql/overview/schema-previews",
"/enterprise/2.18/v4/public_schema": "/en/enterprise/2.18/user/graphql/overview/public-schema",
"/enterprise/2.18/v4/query": "/en/enterprise/2.18/user/graphql/reference/queries",
"/enterprise/2.18/v4/reference": "/en/enterprise/2.18/user/graphql/reference",
"/enterprise/2.18/v4/scalar": "/en/enterprise/2.18/user/graphql/reference/scalars",
"/enterprise/2.18/v4/scalar/boolean": "/en/enterprise/2.18/user/graphql/reference/scalars#boolean",
"/enterprise/2.18/v4/scalar/date": "/en/enterprise/2.18/user/graphql/reference/scalars#date",
"/enterprise/2.18/v4/union": "/en/enterprise/2.18/user/graphql/reference/unions",
"/enterprise/2.18/v4/union/auditentryactor": "/en/enterprise/2.18/user/graphql/reference/unions#auditentryactor",
"/enterprise/2.19/user/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/enterprise/2.19/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.19/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.19/user/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/enterprise/2.19/user/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/enterprise/2.19/user/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/enterprise/2.19/user/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/enterprise/2.19/user/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/enterprise/2.19/user/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/enterprise/2.19/user/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/enterprise/2.19/user/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/enterprise/2.19/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.19/user/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/enterprise/2.19/user/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/enterprise/2.19/user/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/enterprise/2.19/user/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/enterprise/2.19/user/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/enterprise/2.19/user/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/enterprise/2.19/user/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/enterprise/2.19/user/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/enterprise/2.19/user/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/enterprise/2.19/user/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/enterprise/2.19/v4/enum": "/en/enterprise-server@2.19/graphql/reference/enums",
"/enterprise/2.19/v4/enum/auditlogorderfield": "/en/enterprise-server@2.19/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.19/v4/enum/checkannotationlevel": "/en/enterprise-server@2.19/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.19/v4/guides": "/en/enterprise-server@2.19/graphql/guides",
"/enterprise/2.19/v4/input_object": "/en/enterprise-server@2.19/graphql/reference/input-objects",
"/enterprise/2.19/v4/interface": "/en/enterprise-server@2.19/graphql/reference/interfaces",
"/enterprise/2.19/v4/interface/actor": "/en/enterprise-server@2.19/graphql/reference/interfaces#actor",
"/enterprise/2.19/v4/interface/assignable": "/en/enterprise-server@2.19/graphql/reference/interfaces#assignable",
"/enterprise/2.19/v4/mutation": "/en/enterprise-server@2.19/graphql/reference/mutations",
"/enterprise/2.19/v4/object": "/en/enterprise-server@2.19/graphql/reference/objects",
"/enterprise/2.19/v4/object/actorlocation": "/en/enterprise-server@2.19/graphql/reference/objects#actorlocation",
"/enterprise/2.19/v4/object/addedtoprojectevent": "/en/enterprise-server@2.19/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.19/v4/previews": "/en/enterprise-server@2.19/graphql/overview/schema-previews",
"/enterprise/2.19/v4/public_schema": "/en/enterprise-server@2.19/graphql/overview/public-schema",
"/enterprise/2.19/v4/query": "/en/enterprise-server@2.19/graphql/reference/queries",
"/enterprise/2.19/v4/reference": "/en/enterprise-server@2.19/graphql/reference",
"/enterprise/2.19/v4/scalar": "/en/enterprise-server@2.19/graphql/reference/scalars",
"/enterprise/2.19/v4/scalar/boolean": "/en/enterprise-server@2.19/graphql/reference/scalars#boolean",
"/enterprise/2.19/v4/scalar/date": "/en/enterprise-server@2.19/graphql/reference/scalars#date",
"/enterprise/2.19/v4/union": "/en/enterprise-server@2.19/graphql/reference/unions",
"/enterprise/2.19/v4/union/assignee": "/en/enterprise-server@2.19/graphql/reference/unions#assignee",
"/enterprise/2.19/v4/union/auditentryactor": "/en/enterprise-server@2.19/graphql/reference/unions#auditentryactor",
"/enterprise/2.20/user/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/enterprise/2.20/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.20/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.20/user/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/enterprise/2.20/user/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/enterprise/2.20/user/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/enterprise/2.20/user/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/enterprise/2.20/user/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/enterprise/2.20/user/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/enterprise/2.20/user/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/enterprise/2.20/user/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/enterprise/2.20/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.20/user/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/enterprise/2.20/user/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/enterprise/2.20/user/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/enterprise/2.20/user/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/enterprise/2.20/user/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/enterprise/2.20/user/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/enterprise/2.20/user/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/enterprise/2.20/user/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/enterprise/2.20/user/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/enterprise/2.20/user/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/enterprise/2.20/v4/enum": "/en/enterprise-server@2.20/graphql/reference/enums",
"/enterprise/2.20/v4/enum/auditlogorderfield": "/en/enterprise-server@2.20/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.20/v4/enum/checkannotationlevel": "/en/enterprise-server@2.20/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.20/v4/guides": "/en/enterprise-server@2.20/graphql/guides",
"/enterprise/2.20/v4/input_object": "/en/enterprise-server@2.20/graphql/reference/input-objects",
"/enterprise/2.20/v4/interface": "/en/enterprise-server@2.20/graphql/reference/interfaces",
"/enterprise/2.20/v4/interface/actor": "/en/enterprise-server@2.20/graphql/reference/interfaces#actor",
"/enterprise/2.20/v4/interface/assignable": "/en/enterprise-server@2.20/graphql/reference/interfaces#assignable",
"/enterprise/2.20/v4/mutation": "/en/enterprise-server@2.20/graphql/reference/mutations",
"/enterprise/2.20/v4/object": "/en/enterprise-server@2.20/graphql/reference/objects",
"/enterprise/2.20/v4/object/actorlocation": "/en/enterprise-server@2.20/graphql/reference/objects#actorlocation",
"/enterprise/2.20/v4/object/addedtoprojectevent": "/en/enterprise-server@2.20/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.20/v4/previews": "/en/enterprise-server@2.20/graphql/overview/schema-previews",
"/enterprise/2.20/v4/public_schema": "/en/enterprise-server@2.20/graphql/overview/public-schema",
"/enterprise/2.20/v4/query": "/en/enterprise-server@2.20/graphql/reference/queries",
"/enterprise/2.20/v4/reference": "/en/enterprise-server@2.20/graphql/reference",
"/enterprise/2.20/v4/scalar": "/en/enterprise-server@2.20/graphql/reference/scalars",
"/enterprise/2.20/v4/scalar/boolean": "/en/enterprise-server@2.20/graphql/reference/scalars#boolean",
"/enterprise/2.20/v4/scalar/date": "/en/enterprise-server@2.20/graphql/reference/scalars#date",
"/enterprise/2.20/v4/union": "/en/enterprise-server@2.20/graphql/reference/unions",
"/enterprise/2.20/v4/union/assignee": "/en/enterprise-server@2.20/graphql/reference/unions#assignee",
"/enterprise/2.20/v4/union/auditentryactor": "/en/enterprise-server@2.20/graphql/reference/unions#auditentryactor",
"/enterprise/2.21/user/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/enterprise/2.21/user/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.21/user/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.21/user/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/enterprise/2.21/user/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/enterprise/2.21/user/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/enterprise/2.21/user/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/enterprise/2.21/user/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/enterprise/2.21/user/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/enterprise/2.21/user/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/enterprise/2.21/user/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/enterprise/2.21/user/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.21/user/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/enterprise/2.21/user/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/enterprise/2.21/user/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/enterprise/2.21/user/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/enterprise/2.21/user/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/enterprise/2.21/user/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/enterprise/2.21/user/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/enterprise/2.21/user/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/enterprise/2.21/user/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/enterprise/2.21/user/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/enterprise/2.21/v4/enum": "/en/enterprise-server@2.21/graphql/reference/enums",
"/enterprise/2.21/v4/enum/auditlogorderfield": "/en/enterprise-server@2.21/graphql/reference/enums#auditlogorderfield",
"/enterprise/2.21/v4/enum/checkannotationlevel": "/en/enterprise-server@2.21/graphql/reference/enums#checkannotationlevel",
"/enterprise/2.21/v4/guides": "/en/enterprise-server@2.21/graphql/guides",
"/enterprise/2.21/v4/input_object": "/en/enterprise-server@2.21/graphql/reference/input-objects",
"/enterprise/2.21/v4/interface": "/en/enterprise-server@2.21/graphql/reference/interfaces",
"/enterprise/2.21/v4/interface/actor": "/en/enterprise-server@2.21/graphql/reference/interfaces#actor",
"/enterprise/2.21/v4/interface/assignable": "/en/enterprise-server@2.21/graphql/reference/interfaces#assignable",
"/enterprise/2.21/v4/mutation": "/en/enterprise-server@2.21/graphql/reference/mutations",
"/enterprise/2.21/v4/object": "/en/enterprise-server@2.21/graphql/reference/objects",
"/enterprise/2.21/v4/object/actorlocation": "/en/enterprise-server@2.21/graphql/reference/objects#actorlocation",
"/enterprise/2.21/v4/object/addedtoprojectevent": "/en/enterprise-server@2.21/graphql/reference/objects#addedtoprojectevent",
"/enterprise/2.21/v4/previews": "/en/enterprise-server@2.21/graphql/overview/schema-previews",
"/enterprise/2.21/v4/public_schema": "/en/enterprise-server@2.21/graphql/overview/public-schema",
"/enterprise/2.21/v4/query": "/en/enterprise-server@2.21/graphql/reference/queries",
"/enterprise/2.21/v4/reference": "/en/enterprise-server@2.21/graphql/reference",
"/enterprise/2.21/v4/scalar": "/en/enterprise-server@2.21/graphql/reference/scalars",
"/enterprise/2.21/v4/scalar/boolean": "/en/enterprise-server@2.21/graphql/reference/scalars#boolean",
"/enterprise/2.21/v4/scalar/date": "/en/enterprise-server@2.21/graphql/reference/scalars#date",
"/enterprise/2.21/v4/union": "/en/enterprise-server@2.21/graphql/reference/unions",
"/enterprise/2.21/v4/union/assignee": "/en/enterprise-server@2.21/graphql/reference/unions#assignee",
"/enterprise/2.21/v4/union/auditentryactor": "/en/enterprise-server@2.21/graphql/reference/unions#auditentryactor",
"/enterprise/v4/enum": "/en/enterprise-server/graphql/reference/enums",
"/enterprise/v4/enum/auditlogorderfield": "/en/enterprise-server/graphql/reference/enums#auditlogorderfield",
"/enterprise/v4/enum/checkannotationlevel": "/en/enterprise-server/graphql/reference/enums#checkannotationlevel",
"/enterprise/v4/guides": "/en/enterprise-server/graphql/guides",
"/enterprise/v4/input_object": "/en/enterprise-server/graphql/reference/input-objects",
"/enterprise/v4/interface": "/en/enterprise-server/graphql/reference/interfaces",
"/enterprise/v4/interface/actor": "/en/enterprise-server/graphql/reference/interfaces#actor",
"/enterprise/v4/interface/assignable": "/en/enterprise-server/graphql/reference/interfaces#assignable",
"/enterprise/v4/mutation": "/en/enterprise-server/graphql/reference/mutations",
"/enterprise/v4/object": "/en/enterprise-server/graphql/reference/objects",
"/enterprise/v4/object/actorlocation": "/en/enterprise-server/graphql/reference/objects#actorlocation",
"/enterprise/v4/object/addedtoprojectevent": "/en/enterprise-server/graphql/reference/objects#addedtoprojectevent",
"/enterprise/v4/previews": "/en/enterprise-server/graphql/overview/schema-previews",
"/enterprise/v4/public_schema": "/en/enterprise-server/graphql/overview/public-schema",
"/enterprise/v4/query": "/en/enterprise-server/graphql/reference/queries",
"/enterprise/v4/reference": "/en/enterprise-server/graphql/reference",
"/enterprise/v4/scalar": "/en/enterprise-server/graphql/reference/scalars",
"/enterprise/v4/scalar/boolean": "/en/enterprise-server/graphql/reference/scalars#boolean",
"/enterprise/v4/scalar/date": "/en/enterprise-server/graphql/reference/scalars#date",
"/enterprise/v4/union": "/en/enterprise-server/graphql/reference/unions",
"/enterprise/v4/union/assignee": "/en/enterprise-server/graphql/reference/unions#assignee",
"/enterprise/v4/union/auditentryactor": "/en/enterprise-server/graphql/reference/unions#auditentryactor",
"/v4/enum": "/en/free-pro-team@latest/graphql/reference/enums",
"/v4/enum/auditlogorderfield": "/en/free-pro-team@latest/graphql/reference/enums#auditlogorderfield",
"/v4/enum/checkannotationlevel": "/en/free-pro-team@latest/graphql/reference/enums#checkannotationlevel",
"/v4/guides": "/en/free-pro-team@latest/graphql/guides",
"/v4/input_object": "/en/free-pro-team@latest/graphql/reference/input-objects",
"/v4/input_object/acceptenterpriseadministratorinvitationinput": "/en/free-pro-team@latest/graphql/reference/input-objects#acceptenterpriseadministratorinvitationinput",
"/v4/input_object/accepttopicsuggestioninput": "/en/free-pro-team@latest/graphql/reference/input-objects#accepttopicsuggestioninput",
"/v4/interface": "/en/free-pro-team@latest/graphql/reference/interfaces",
"/v4/interface/actor": "/en/free-pro-team@latest/graphql/reference/interfaces#actor",
"/v4/interface/assignable": "/en/free-pro-team@latest/graphql/reference/interfaces#assignable",
"/v4/mutation": "/en/free-pro-team@latest/graphql/reference/mutations",
"/v4/mutation/acceptenterpriseadministratorinvitation": "/en/free-pro-team@latest/graphql/reference/mutations#acceptenterpriseadministratorinvitation",
"/v4/mutation/accepttopicsuggestion": "/en/free-pro-team@latest/graphql/reference/mutations#accepttopicsuggestion",
"/v4/object": "/en/free-pro-team@latest/graphql/reference/objects",
"/v4/object/actorlocation": "/en/free-pro-team@latest/graphql/reference/objects#actorlocation",
"/v4/object/addedtoprojectevent": "/en/free-pro-team@latest/graphql/reference/objects#addedtoprojectevent",
"/v4/previews": "/en/free-pro-team@latest/graphql/overview/schema-previews",
"/v4/public_schema": "/en/free-pro-team@latest/graphql/overview/public-schema",
"/v4/query": "/en/free-pro-team@latest/graphql/reference/queries",
"/v4/reference": "/en/free-pro-team@latest/graphql/reference",
"/v4/scalar": "/en/free-pro-team@latest/graphql/reference/scalars",
"/v4/scalar/boolean": "/en/free-pro-team@latest/graphql/reference/scalars#boolean",
"/v4/scalar/date": "/en/free-pro-team@latest/graphql/reference/scalars#date",
"/v4/union": "/en/free-pro-team@latest/graphql/reference/unions",
"/v4/union/assignee": "/en/free-pro-team@latest/graphql/reference/unions#assignee",
"/v4/union/auditentryactor": "/en/free-pro-team@latest/graphql/reference/unions#auditentryactor"
}

View File

@@ -1,6 +0,0 @@
---
title: Some page that exists in the content directory but not the translations directory
versions:
free-pro-team: '*'
---

View File

@@ -1,6 +0,0 @@
---
title: This is an article
intro: 'I've got broken frontmatter'
versions:
free-pro-team: '*'
---

View File

@@ -1,8 +0,0 @@
---
title: A page with redirects
redirect_from:
- /some-old-path
versions:
free-pro-team: '*'
---

View File

@@ -1,6 +0,0 @@
---
title: A sample article
versions:
free-pro-team: '*'
---

View File

@@ -1,6 +0,0 @@
---
title: A sample article
versions:
free-pro-team: '*'
---

View File

@@ -1,506 +0,0 @@
{
"/en/enterprise/2.18/v3/activity/event_types": "/en/enterprise/2.18/user/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.18/v3/activity/events/types": "/en/enterprise/2.18/user/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.18/v3/activity/events": "/en/enterprise/2.18/user/rest/reference/activity#events",
"/en/enterprise/2.18/v3/activity/feeds": "/en/enterprise/2.18/user/rest/reference/activity#feeds",
"/en/enterprise/2.18/v3/activity": "/en/enterprise/2.18/user/rest/reference/activity",
"/en/enterprise/2.18/v3/activity/notifications": "/en/enterprise/2.18/user/rest/reference/activity#notifications",
"/en/enterprise/2.18/v3/activity/starring": "/en/enterprise/2.18/user/rest/reference/activity#starring",
"/en/enterprise/2.18/v3/activity/watching": "/en/enterprise/2.18/user/rest/reference/activity#watching",
"/en/enterprise/2.18/v3/apps/available-endpoints": "/en/enterprise/2.18/user/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.18/v3/apps": "/en/enterprise/2.18/user/rest/reference/apps",
"/en/enterprise/2.18/v3/apps/installations": "/en/enterprise/2.18/user/rest/reference/apps#installations",
"/en/enterprise/2.18/v3/apps/permissions": "/en/enterprise/2.18/user/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.18/v3/checks": "/en/enterprise/2.18/user/rest/reference/checks",
"/en/enterprise/2.18/v3/checks/runs": "/en/enterprise/2.18/user/rest/reference/checks#runs",
"/en/enterprise/2.18/v3/checks/suites": "/en/enterprise/2.18/user/rest/reference/checks#suites",
"/en/enterprise/2.18/v3/codes_of_conduct": "/en/enterprise/2.18/user/rest/reference/codes-of-conduct",
"/en/enterprise/2.18/v3/emojis": "/en/enterprise/2.18/user/rest/reference/emojis",
"/en/enterprise/2.18/v3/enterprise-admin/admin_stats": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.18/v3/enterprise-admin/global_webhooks": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.18/v3/enterprise-admin": "/en/enterprise/2.18/user/rest/reference/enterprise-admin",
"/en/enterprise/2.18/v3/enterprise-admin/ldap": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.18/v3/enterprise-admin/license": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#license",
"/en/enterprise/2.18/v3/enterprise-admin/management_console": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.18/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.18/v3/enterprise-admin/orgs": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.18/v3/enterprise-admin/pre_receive_environments": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.18/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.18/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.18/v3/enterprise-admin/search_indexing": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.18/v3/enterprise-admin/users": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#users",
"/en/enterprise/2.18/v3/gists/comments": "/en/enterprise/2.18/user/rest/reference/gists#comments",
"/en/enterprise/2.18/v3/gists": "/en/enterprise/2.18/user/rest/reference/gists",
"/en/enterprise/2.18/v3/git/blobs": "/en/enterprise/2.18/user/rest/reference/git#blobs",
"/en/enterprise/2.18/v3/git/commits": "/en/enterprise/2.18/user/rest/reference/git#commits",
"/en/enterprise/2.18/v3/git": "/en/enterprise/2.18/user/rest/reference/git",
"/en/enterprise/2.18/v3/git/refs": "/en/enterprise/2.18/user/rest/reference/git#refs",
"/en/enterprise/2.18/v3/git/tags": "/en/enterprise/2.18/user/rest/reference/git#tags",
"/en/enterprise/2.18/v3/git/trees": "/en/enterprise/2.18/user/rest/reference/git#trees",
"/en/enterprise/2.18/v3/gitignore": "/en/enterprise/2.18/user/rest/reference/gitignore",
"/en/enterprise/2.18/v3/issues/assignees": "/en/enterprise/2.18/user/rest/reference/issues#assignees",
"/en/enterprise/2.18/v3/issues/comments": "/en/enterprise/2.18/user/rest/reference/issues#comments",
"/en/enterprise/2.18/v3/issues/events": "/en/enterprise/2.18/user/rest/reference/issues#events",
"/en/enterprise/2.18/v3/issues": "/en/enterprise/2.18/user/rest/reference/issues",
"/en/enterprise/2.18/v3/issues/issue-event-types": "/en/enterprise/2.18/user/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.18/v3/issues/labels": "/en/enterprise/2.18/user/rest/reference/issues#labels",
"/en/enterprise/2.18/v3/issues/milestones": "/en/enterprise/2.18/user/rest/reference/issues#milestones",
"/en/enterprise/2.18/v3/issues/timeline": "/en/enterprise/2.18/user/rest/reference/issues#timeline",
"/en/enterprise/2.18/v3/licenses": "/en/enterprise/2.18/user/rest/reference/licenses",
"/en/enterprise/2.18/v3/markdown": "/en/enterprise/2.18/user/rest/reference/markdown",
"/en/enterprise/2.18/v3/meta": "/en/enterprise/2.18/user/rest/reference/meta",
"/en/enterprise/2.18/v3/oauth_authorizations": "/en/enterprise/2.18/user/rest/reference/oauth-authorizations",
"/en/enterprise/2.18/v3/orgs/hooks": "/en/enterprise/2.18/user/rest/reference/orgs#hooks",
"/en/enterprise/2.18/v3/orgs": "/en/enterprise/2.18/user/rest/reference/orgs",
"/en/enterprise/2.18/v3/orgs/members": "/en/enterprise/2.18/user/rest/reference/orgs#members",
"/en/enterprise/2.18/v3/orgs/outside_collaborators": "/en/enterprise/2.18/user/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.18/v3/orgs/pre_receive_hooks": "/en/enterprise/2.18/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.18/v3/orgs/teams": "/en/enterprise/2.18/user/rest/reference/orgs#teams",
"/en/enterprise/2.18/v3/projects/cards": "/en/enterprise/2.18/user/rest/reference/projects#cards",
"/en/enterprise/2.18/v3/projects/collaborators": "/en/enterprise/2.18/user/rest/reference/projects#collaborators",
"/en/enterprise/2.18/v3/projects/columns": "/en/enterprise/2.18/user/rest/reference/projects#columns",
"/en/enterprise/2.18/v3/projects": "/en/enterprise/2.18/user/rest/reference/projects",
"/en/enterprise/2.18/v3/pulls/comments": "/en/enterprise/2.18/user/rest/reference/pulls#comments",
"/en/enterprise/2.18/v3/pulls": "/en/enterprise/2.18/user/rest/reference/pulls",
"/en/enterprise/2.18/v3/pulls/review_requests": "/en/enterprise/2.18/user/rest/reference/pulls#review-requests",
"/en/enterprise/2.18/v3/pulls/reviews": "/en/enterprise/2.18/user/rest/reference/pulls#reviews",
"/en/enterprise/2.18/v3/rate_limit": "/en/enterprise/2.18/user/rest/reference/rate-limit",
"/en/enterprise/2.18/v3/reactions": "/en/enterprise/2.18/user/rest/reference/reactions",
"/en/enterprise/2.18/v3/repos/branches": "/en/enterprise/2.18/user/rest/reference/repos#branches",
"/en/enterprise/2.18/v3/repos/collaborators": "/en/enterprise/2.18/user/rest/reference/repos#collaborators",
"/en/enterprise/2.18/v3/repos/comments": "/en/enterprise/2.18/user/rest/reference/repos#comments",
"/en/enterprise/2.18/v3/repos/commits": "/en/enterprise/2.18/user/rest/reference/repos#commits",
"/en/enterprise/2.18/v3/repos/contents": "/en/enterprise/2.18/user/rest/reference/repos#contents",
"/en/enterprise/2.18/v3/repos/deployments": "/en/enterprise/2.18/user/rest/reference/repos#deployments",
"/en/enterprise/2.18/v3/repos/downloads": "/en/enterprise/2.18/user/rest/reference/repos#downloads",
"/en/enterprise/2.18/v3/repos/forks": "/en/enterprise/2.18/user/rest/reference/repos#forks",
"/en/enterprise/2.18/v3/repos/hooks": "/en/enterprise/2.18/user/rest/reference/repos#hooks",
"/en/enterprise/2.18/v3/repos": "/en/enterprise/2.18/user/rest/reference/repos",
"/en/enterprise/2.18/v3/repos/invitations": "/en/enterprise/2.18/user/rest/reference/repos#invitations",
"/en/enterprise/2.18/v3/repos/keys": "/en/enterprise/2.18/user/rest/reference/repos#keys",
"/en/enterprise/2.18/v3/repos/merging": "/en/enterprise/2.18/user/rest/reference/repos#merging",
"/en/enterprise/2.18/v3/repos/pages": "/en/enterprise/2.18/user/rest/reference/repos#pages",
"/en/enterprise/2.18/v3/repos/pre_receive_hooks": "/en/enterprise/2.18/user/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.18/v3/repos/releases": "/en/enterprise/2.18/user/rest/reference/repos#releases",
"/en/enterprise/2.18/v3/repos/statistics": "/en/enterprise/2.18/user/rest/reference/repos#statistics",
"/en/enterprise/2.18/v3/repos/statuses": "/en/enterprise/2.18/user/rest/reference/repos#statuses",
"/en/enterprise/2.18/v3/search": "/en/enterprise/2.18/user/rest/reference/search",
"/en/enterprise/2.18/v3/teams/discussion_comments": "/en/enterprise/2.18/user/rest/reference/teams#discussion-comments",
"/en/enterprise/2.18/v3/teams/discussions": "/en/enterprise/2.18/user/rest/reference/teams#discussions",
"/en/enterprise/2.18/v3/teams": "/en/enterprise/2.18/user/rest/reference/teams",
"/en/enterprise/2.18/v3/teams/members": "/en/enterprise/2.18/user/rest/reference/teams#members",
"/en/enterprise/2.18/v3/users/administration": "/en/enterprise/2.18/user/rest/reference/users#administration",
"/en/enterprise/2.18/v3/users/emails": "/en/enterprise/2.18/user/rest/reference/users#emails",
"/en/enterprise/2.18/v3/users/followers": "/en/enterprise/2.18/user/rest/reference/users#followers",
"/en/enterprise/2.18/v3/users/gpg_keys": "/en/enterprise/2.18/user/rest/reference/users#gpg-keys",
"/en/enterprise/2.18/v3/users": "/en/enterprise/2.18/user/rest/reference/users",
"/en/enterprise/2.18/v3/users/keys": "/en/enterprise/2.18/user/rest/reference/users#keys",
"/en/enterprise/2.19/v3/activity/event_types": "/en/enterprise-server@2.19/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.19/v3/activity/events/types": "/en/enterprise-server@2.19/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.19/v3/activity/events": "/en/enterprise-server@2.19/rest/reference/activity#events",
"/en/enterprise/2.19/v3/activity/feeds": "/en/enterprise-server@2.19/rest/reference/activity#feeds",
"/en/enterprise/2.19/v3/activity": "/en/enterprise-server@2.19/rest/reference/activity",
"/en/enterprise/2.19/v3/activity/notifications": "/en/enterprise-server@2.19/rest/reference/activity#notifications",
"/en/enterprise/2.19/v3/activity/starring": "/en/enterprise-server@2.19/rest/reference/activity#starring",
"/en/enterprise/2.19/v3/activity/watching": "/en/enterprise-server@2.19/rest/reference/activity#watching",
"/en/enterprise/2.19/v3/apps/available-endpoints": "/en/enterprise-server@2.19/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.19/v3/apps": "/en/enterprise-server@2.19/rest/reference/apps",
"/en/enterprise/2.19/v3/apps/installations": "/en/enterprise-server@2.19/rest/reference/apps#installations",
"/en/enterprise/2.19/v3/apps/permissions": "/en/enterprise-server@2.19/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.19/v3/checks": "/en/enterprise-server@2.19/rest/reference/checks",
"/en/enterprise/2.19/v3/checks/runs": "/en/enterprise-server@2.19/rest/reference/checks#runs",
"/en/enterprise/2.19/v3/checks/suites": "/en/enterprise-server@2.19/rest/reference/checks#suites",
"/en/enterprise/2.19/v3/codes_of_conduct": "/en/enterprise-server@2.19/rest/reference/codes-of-conduct",
"/en/enterprise/2.19/v3/emojis": "/en/enterprise-server@2.19/rest/reference/emojis",
"/en/enterprise/2.19/v3/enterprise-admin/admin_stats": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.19/v3/enterprise-admin/global_webhooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.19/v3/enterprise-admin": "/en/enterprise-server@2.19/rest/reference/enterprise-admin",
"/en/enterprise/2.19/v3/enterprise-admin/ldap": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.19/v3/enterprise-admin/license": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#license",
"/en/enterprise/2.19/v3/enterprise-admin/management_console": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.19/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/orgs": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.19/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.19/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/search_indexing": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.19/v3/enterprise-admin/users": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#users",
"/en/enterprise/2.19/v3/gists/comments": "/en/enterprise-server@2.19/rest/reference/gists#comments",
"/en/enterprise/2.19/v3/gists": "/en/enterprise-server@2.19/rest/reference/gists",
"/en/enterprise/2.19/v3/git/blobs": "/en/enterprise-server@2.19/rest/reference/git#blobs",
"/en/enterprise/2.19/v3/git/commits": "/en/enterprise-server@2.19/rest/reference/git#commits",
"/en/enterprise/2.19/v3/git": "/en/enterprise-server@2.19/rest/reference/git",
"/en/enterprise/2.19/v3/git/refs": "/en/enterprise-server@2.19/rest/reference/git#refs",
"/en/enterprise/2.19/v3/git/tags": "/en/enterprise-server@2.19/rest/reference/git#tags",
"/en/enterprise/2.19/v3/git/trees": "/en/enterprise-server@2.19/rest/reference/git#trees",
"/en/enterprise/2.19/v3/gitignore": "/en/enterprise-server@2.19/rest/reference/gitignore",
"/en/enterprise/2.19/v3/issues/assignees": "/en/enterprise-server@2.19/rest/reference/issues#assignees",
"/en/enterprise/2.19/v3/issues/comments": "/en/enterprise-server@2.19/rest/reference/issues#comments",
"/en/enterprise/2.19/v3/issues/events": "/en/enterprise-server@2.19/rest/reference/issues#events",
"/en/enterprise/2.19/v3/issues": "/en/enterprise-server@2.19/rest/reference/issues",
"/en/enterprise/2.19/v3/issues/issue-event-types": "/en/enterprise-server@2.19/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.19/v3/issues/labels": "/en/enterprise-server@2.19/rest/reference/issues#labels",
"/en/enterprise/2.19/v3/issues/milestones": "/en/enterprise-server@2.19/rest/reference/issues#milestones",
"/en/enterprise/2.19/v3/issues/timeline": "/en/enterprise-server@2.19/rest/reference/issues#timeline",
"/en/enterprise/2.19/v3/licenses": "/en/enterprise-server@2.19/rest/reference/licenses",
"/en/enterprise/2.19/v3/markdown": "/en/enterprise-server@2.19/rest/reference/markdown",
"/en/enterprise/2.19/v3/meta": "/en/enterprise-server@2.19/rest/reference/meta",
"/en/enterprise/2.19/v3/oauth_authorizations": "/en/enterprise-server@2.19/rest/reference/oauth-authorizations",
"/en/enterprise/2.19/v3/orgs/hooks": "/en/enterprise-server@2.19/rest/reference/orgs#hooks",
"/en/enterprise/2.19/v3/orgs": "/en/enterprise-server@2.19/rest/reference/orgs",
"/en/enterprise/2.19/v3/orgs/members": "/en/enterprise-server@2.19/rest/reference/orgs#members",
"/en/enterprise/2.19/v3/orgs/outside_collaborators": "/en/enterprise-server@2.19/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.19/v3/orgs/pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.19/v3/orgs/teams": "/en/enterprise-server@2.19/rest/reference/orgs#teams",
"/en/enterprise/2.19/v3/projects/cards": "/en/enterprise-server@2.19/rest/reference/projects#cards",
"/en/enterprise/2.19/v3/projects/collaborators": "/en/enterprise-server@2.19/rest/reference/projects#collaborators",
"/en/enterprise/2.19/v3/projects/columns": "/en/enterprise-server@2.19/rest/reference/projects#columns",
"/en/enterprise/2.19/v3/projects": "/en/enterprise-server@2.19/rest/reference/projects",
"/en/enterprise/2.19/v3/pulls/comments": "/en/enterprise-server@2.19/rest/reference/pulls#comments",
"/en/enterprise/2.19/v3/pulls": "/en/enterprise-server@2.19/rest/reference/pulls",
"/en/enterprise/2.19/v3/pulls/review_requests": "/en/enterprise-server@2.19/rest/reference/pulls#review-requests",
"/en/enterprise/2.19/v3/pulls/reviews": "/en/enterprise-server@2.19/rest/reference/pulls#reviews",
"/en/enterprise/2.19/v3/rate_limit": "/en/enterprise-server@2.19/rest/reference/rate-limit",
"/en/enterprise/2.19/v3/reactions": "/en/enterprise-server@2.19/rest/reference/reactions",
"/en/enterprise/2.19/v3/repos/branches": "/en/enterprise-server@2.19/rest/reference/repos#branches",
"/en/enterprise/2.19/v3/repos/collaborators": "/en/enterprise-server@2.19/rest/reference/repos#collaborators",
"/en/enterprise/2.19/v3/repos/comments": "/en/enterprise-server@2.19/rest/reference/repos#comments",
"/en/enterprise/2.19/v3/repos/commits": "/en/enterprise-server@2.19/rest/reference/repos#commits",
"/en/enterprise/2.19/v3/repos/contents": "/en/enterprise-server@2.19/rest/reference/repos#contents",
"/en/enterprise/2.19/v3/repos/deployments": "/en/enterprise-server@2.19/rest/reference/repos#deployments",
"/en/enterprise/2.19/v3/repos/downloads": "/en/enterprise-server@2.19/rest/reference/repos#downloads",
"/en/enterprise/2.19/v3/repos/forks": "/en/enterprise-server@2.19/rest/reference/repos#forks",
"/en/enterprise/2.19/v3/repos/hooks": "/en/enterprise-server@2.19/rest/reference/repos#hooks",
"/en/enterprise/2.19/v3/repos": "/en/enterprise-server@2.19/rest/reference/repos",
"/en/enterprise/2.19/v3/repos/invitations": "/en/enterprise-server@2.19/rest/reference/repos#invitations",
"/en/enterprise/2.19/v3/repos/keys": "/en/enterprise-server@2.19/rest/reference/repos#keys",
"/en/enterprise/2.19/v3/repos/merging": "/en/enterprise-server@2.19/rest/reference/repos#merging",
"/en/enterprise/2.19/v3/repos/pages": "/en/enterprise-server@2.19/rest/reference/repos#pages",
"/en/enterprise/2.19/v3/repos/pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.19/v3/repos/releases": "/en/enterprise-server@2.19/rest/reference/repos#releases",
"/en/enterprise/2.19/v3/repos/statistics": "/en/enterprise-server@2.19/rest/reference/repos#statistics",
"/en/enterprise/2.19/v3/repos/statuses": "/en/enterprise-server@2.19/rest/reference/repos#statuses",
"/en/enterprise/2.19/v3/search": "/en/enterprise-server@2.19/rest/reference/search",
"/en/enterprise/2.19/v3/teams/discussion_comments": "/en/enterprise-server@2.19/rest/reference/teams#discussion-comments",
"/en/enterprise/2.19/v3/teams/discussions": "/en/enterprise-server@2.19/rest/reference/teams#discussions",
"/en/enterprise/2.19/v3/teams": "/en/enterprise-server@2.19/rest/reference/teams",
"/en/enterprise/2.19/v3/teams/members": "/en/enterprise-server@2.19/rest/reference/teams#members",
"/en/enterprise/2.19/v3/users/administration": "/en/enterprise-server@2.19/rest/reference/users#administration",
"/en/enterprise/2.19/v3/users/emails": "/en/enterprise-server@2.19/rest/reference/users#emails",
"/en/enterprise/2.19/v3/users/followers": "/en/enterprise-server@2.19/rest/reference/users#followers",
"/en/enterprise/2.19/v3/users/gpg_keys": "/en/enterprise-server@2.19/rest/reference/users#gpg-keys",
"/en/enterprise/2.19/v3/users": "/en/enterprise-server@2.19/rest/reference/users",
"/en/enterprise/2.19/v3/users/keys": "/en/enterprise-server@2.19/rest/reference/users#keys",
"/en/enterprise/2.20/v3/activity/event_types": "/en/enterprise-server@2.20/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.20/v3/activity/events/types": "/en/enterprise-server@2.20/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.20/v3/activity/events": "/en/enterprise-server@2.20/rest/reference/activity#events",
"/en/enterprise/2.20/v3/activity/feeds": "/en/enterprise-server@2.20/rest/reference/activity#feeds",
"/en/enterprise/2.20/v3/activity": "/en/enterprise-server@2.20/rest/reference/activity",
"/en/enterprise/2.20/v3/activity/notifications": "/en/enterprise-server@2.20/rest/reference/activity#notifications",
"/en/enterprise/2.20/v3/activity/starring": "/en/enterprise-server@2.20/rest/reference/activity#starring",
"/en/enterprise/2.20/v3/activity/watching": "/en/enterprise-server@2.20/rest/reference/activity#watching",
"/en/enterprise/2.20/v3/apps/available-endpoints": "/en/enterprise-server@2.20/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.20/v3/apps": "/en/enterprise-server@2.20/rest/reference/apps",
"/en/enterprise/2.20/v3/apps/installations": "/en/enterprise-server@2.20/rest/reference/apps#installations",
"/en/enterprise/2.20/v3/apps/oauth_applications": "/en/enterprise-server@2.20/rest/reference/apps#oauth-applications",
"/en/enterprise/2.20/v3/apps/permissions": "/en/enterprise-server@2.20/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.20/v3/checks": "/en/enterprise-server@2.20/rest/reference/checks",
"/en/enterprise/2.20/v3/checks/runs": "/en/enterprise-server@2.20/rest/reference/checks#runs",
"/en/enterprise/2.20/v3/checks/suites": "/en/enterprise-server@2.20/rest/reference/checks#suites",
"/en/enterprise/2.20/v3/codes_of_conduct": "/en/enterprise-server@2.20/rest/reference/codes-of-conduct",
"/en/enterprise/2.20/v3/emojis": "/en/enterprise-server@2.20/rest/reference/emojis",
"/en/enterprise/2.20/v3/enterprise-admin/admin_stats": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.20/v3/enterprise-admin/global_webhooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.20/v3/enterprise-admin": "/en/enterprise-server@2.20/rest/reference/enterprise-admin",
"/en/enterprise/2.20/v3/enterprise-admin/ldap": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.20/v3/enterprise-admin/license": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#license",
"/en/enterprise/2.20/v3/enterprise-admin/management_console": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.20/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/orgs": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.20/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.20/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/search_indexing": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.20/v3/enterprise-admin/users": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#users",
"/en/enterprise/2.20/v3/gists/comments": "/en/enterprise-server@2.20/rest/reference/gists#comments",
"/en/enterprise/2.20/v3/gists": "/en/enterprise-server@2.20/rest/reference/gists",
"/en/enterprise/2.20/v3/git/blobs": "/en/enterprise-server@2.20/rest/reference/git#blobs",
"/en/enterprise/2.20/v3/git/commits": "/en/enterprise-server@2.20/rest/reference/git#commits",
"/en/enterprise/2.20/v3/git": "/en/enterprise-server@2.20/rest/reference/git",
"/en/enterprise/2.20/v3/git/refs": "/en/enterprise-server@2.20/rest/reference/git#refs",
"/en/enterprise/2.20/v3/git/tags": "/en/enterprise-server@2.20/rest/reference/git#tags",
"/en/enterprise/2.20/v3/git/trees": "/en/enterprise-server@2.20/rest/reference/git#trees",
"/en/enterprise/2.20/v3/gitignore": "/en/enterprise-server@2.20/rest/reference/gitignore",
"/en/enterprise/2.20/v3/issues/assignees": "/en/enterprise-server@2.20/rest/reference/issues#assignees",
"/en/enterprise/2.20/v3/issues/comments": "/en/enterprise-server@2.20/rest/reference/issues#comments",
"/en/enterprise/2.20/v3/issues/events": "/en/enterprise-server@2.20/rest/reference/issues#events",
"/en/enterprise/2.20/v3/issues": "/en/enterprise-server@2.20/rest/reference/issues",
"/en/enterprise/2.20/v3/issues/issue-event-types": "/en/enterprise-server@2.20/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.20/v3/issues/labels": "/en/enterprise-server@2.20/rest/reference/issues#labels",
"/en/enterprise/2.20/v3/issues/milestones": "/en/enterprise-server@2.20/rest/reference/issues#milestones",
"/en/enterprise/2.20/v3/issues/timeline": "/en/enterprise-server@2.20/rest/reference/issues#timeline",
"/en/enterprise/2.20/v3/licenses": "/en/enterprise-server@2.20/rest/reference/licenses",
"/en/enterprise/2.20/v3/markdown": "/en/enterprise-server@2.20/rest/reference/markdown",
"/en/enterprise/2.20/v3/meta": "/en/enterprise-server@2.20/rest/reference/meta",
"/en/enterprise/2.20/v3/oauth_authorizations": "/en/enterprise-server@2.20/rest/reference/oauth-authorizations",
"/en/enterprise/2.20/v3/orgs/hooks": "/en/enterprise-server@2.20/rest/reference/orgs#hooks",
"/en/enterprise/2.20/v3/orgs": "/en/enterprise-server@2.20/rest/reference/orgs",
"/en/enterprise/2.20/v3/orgs/members": "/en/enterprise-server@2.20/rest/reference/orgs#members",
"/en/enterprise/2.20/v3/orgs/outside_collaborators": "/en/enterprise-server@2.20/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.20/v3/orgs/pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.20/v3/orgs/teams": "/en/enterprise-server@2.20/rest/reference/orgs#teams",
"/en/enterprise/2.20/v3/projects/cards": "/en/enterprise-server@2.20/rest/reference/projects#cards",
"/en/enterprise/2.20/v3/projects/collaborators": "/en/enterprise-server@2.20/rest/reference/projects#collaborators",
"/en/enterprise/2.20/v3/projects/columns": "/en/enterprise-server@2.20/rest/reference/projects#columns",
"/en/enterprise/2.20/v3/projects": "/en/enterprise-server@2.20/rest/reference/projects",
"/en/enterprise/2.20/v3/pulls/comments": "/en/enterprise-server@2.20/rest/reference/pulls#comments",
"/en/enterprise/2.20/v3/pulls": "/en/enterprise-server@2.20/rest/reference/pulls",
"/en/enterprise/2.20/v3/pulls/review_requests": "/en/enterprise-server@2.20/rest/reference/pulls#review-requests",
"/en/enterprise/2.20/v3/pulls/reviews": "/en/enterprise-server@2.20/rest/reference/pulls#reviews",
"/en/enterprise/2.20/v3/rate_limit": "/en/enterprise-server@2.20/rest/reference/rate-limit",
"/en/enterprise/2.20/v3/reactions": "/en/enterprise-server@2.20/rest/reference/reactions",
"/en/enterprise/2.20/v3/repos/branches": "/en/enterprise-server@2.20/rest/reference/repos#branches",
"/en/enterprise/2.20/v3/repos/collaborators": "/en/enterprise-server@2.20/rest/reference/repos#collaborators",
"/en/enterprise/2.20/v3/repos/comments": "/en/enterprise-server@2.20/rest/reference/repos#comments",
"/en/enterprise/2.20/v3/repos/commits": "/en/enterprise-server@2.20/rest/reference/repos#commits",
"/en/enterprise/2.20/v3/repos/contents": "/en/enterprise-server@2.20/rest/reference/repos#contents",
"/en/enterprise/2.20/v3/repos/deployments": "/en/enterprise-server@2.20/rest/reference/repos#deployments",
"/en/enterprise/2.20/v3/repos/downloads": "/en/enterprise-server@2.20/rest/reference/repos#downloads",
"/en/enterprise/2.20/v3/repos/forks": "/en/enterprise-server@2.20/rest/reference/repos#forks",
"/en/enterprise/2.20/v3/repos/hooks": "/en/enterprise-server@2.20/rest/reference/repos#hooks",
"/en/enterprise/2.20/v3/repos": "/en/enterprise-server@2.20/rest/reference/repos",
"/en/enterprise/2.20/v3/repos/invitations": "/en/enterprise-server@2.20/rest/reference/repos#invitations",
"/en/enterprise/2.20/v3/repos/keys": "/en/enterprise-server@2.20/rest/reference/repos#keys",
"/en/enterprise/2.20/v3/repos/merging": "/en/enterprise-server@2.20/rest/reference/repos#merging",
"/en/enterprise/2.20/v3/repos/pages": "/en/enterprise-server@2.20/rest/reference/repos#pages",
"/en/enterprise/2.20/v3/repos/pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.20/v3/repos/releases": "/en/enterprise-server@2.20/rest/reference/repos#releases",
"/en/enterprise/2.20/v3/repos/statistics": "/en/enterprise-server@2.20/rest/reference/repos#statistics",
"/en/enterprise/2.20/v3/repos/statuses": "/en/enterprise-server@2.20/rest/reference/repos#statuses",
"/en/enterprise/2.20/v3/search": "/en/enterprise-server@2.20/rest/reference/search",
"/en/enterprise/2.20/v3/teams/discussion_comments": "/en/enterprise-server@2.20/rest/reference/teams#discussion-comments",
"/en/enterprise/2.20/v3/teams/discussions": "/en/enterprise-server@2.20/rest/reference/teams#discussions",
"/en/enterprise/2.20/v3/teams": "/en/enterprise-server@2.20/rest/reference/teams",
"/en/enterprise/2.20/v3/teams/members": "/en/enterprise-server@2.20/rest/reference/teams#members",
"/en/enterprise/2.20/v3/users/administration": "/en/enterprise-server@2.20/rest/reference/users#administration",
"/en/enterprise/2.20/v3/users/emails": "/en/enterprise-server@2.20/rest/reference/users#emails",
"/en/enterprise/2.20/v3/users/followers": "/en/enterprise-server@2.20/rest/reference/users#followers",
"/en/enterprise/2.20/v3/users/gpg_keys": "/en/enterprise-server@2.20/rest/reference/users#gpg-keys",
"/en/enterprise/2.20/v3/users": "/en/enterprise-server@2.20/rest/reference/users",
"/en/enterprise/2.20/v3/users/keys": "/en/enterprise-server@2.20/rest/reference/users#keys",
"/en/enterprise/2.21/v3/activity/event_types": "/en/enterprise-server@2.21/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.21/v3/activity/events/types": "/en/enterprise-server@2.21/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.21/v3/activity/events": "/en/enterprise-server@2.21/rest/reference/activity#events",
"/en/enterprise/2.21/v3/activity/feeds": "/en/enterprise-server@2.21/rest/reference/activity#feeds",
"/en/enterprise/2.21/v3/activity": "/en/enterprise-server@2.21/rest/reference/activity",
"/en/enterprise/2.21/v3/activity/notifications": "/en/enterprise-server@2.21/rest/reference/activity#notifications",
"/en/enterprise/2.21/v3/activity/starring": "/en/enterprise-server@2.21/rest/reference/activity#starring",
"/en/enterprise/2.21/v3/activity/watching": "/en/enterprise-server@2.21/rest/reference/activity#watching",
"/en/enterprise/2.21/v3/apps/available-endpoints": "/en/enterprise-server@2.21/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.21/v3/apps": "/en/enterprise-server@2.21/rest/reference/apps",
"/en/enterprise/2.21/v3/apps/installations": "/en/enterprise-server@2.21/rest/reference/apps#installations",
"/en/enterprise/2.21/v3/apps/oauth_applications": "/en/enterprise-server@2.21/rest/reference/apps#oauth-applications",
"/en/enterprise/2.21/v3/apps/permissions": "/en/enterprise-server@2.21/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.21/v3/checks": "/en/enterprise-server@2.21/rest/reference/checks",
"/en/enterprise/2.21/v3/checks/runs": "/en/enterprise-server@2.21/rest/reference/checks#runs",
"/en/enterprise/2.21/v3/checks/suites": "/en/enterprise-server@2.21/rest/reference/checks#suites",
"/en/enterprise/2.21/v3/codes_of_conduct": "/en/enterprise-server@2.21/rest/reference/codes-of-conduct",
"/en/enterprise/2.21/v3/emojis": "/en/enterprise-server@2.21/rest/reference/emojis",
"/en/enterprise/2.21/v3/enterprise-admin/admin_stats": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.21/v3/enterprise-admin/global_webhooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.21/v3/enterprise-admin": "/en/enterprise-server@2.21/rest/reference/enterprise-admin",
"/en/enterprise/2.21/v3/enterprise-admin/ldap": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.21/v3/enterprise-admin/license": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#license",
"/en/enterprise/2.21/v3/enterprise-admin/management_console": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.21/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/orgs": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.21/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.21/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/search_indexing": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.21/v3/enterprise-admin/users": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#users",
"/en/enterprise/2.21/v3/gists/comments": "/en/enterprise-server@2.21/rest/reference/gists#comments",
"/en/enterprise/2.21/v3/gists": "/en/enterprise-server@2.21/rest/reference/gists",
"/en/enterprise/2.21/v3/git/blobs": "/en/enterprise-server@2.21/rest/reference/git#blobs",
"/en/enterprise/2.21/v3/git/commits": "/en/enterprise-server@2.21/rest/reference/git#commits",
"/en/enterprise/2.21/v3/git": "/en/enterprise-server@2.21/rest/reference/git",
"/en/enterprise/2.21/v3/git/refs": "/en/enterprise-server@2.21/rest/reference/git#refs",
"/en/enterprise/2.21/v3/git/tags": "/en/enterprise-server@2.21/rest/reference/git#tags",
"/en/enterprise/2.21/v3/git/trees": "/en/enterprise-server@2.21/rest/reference/git#trees",
"/en/enterprise/2.21/v3/gitignore": "/en/enterprise-server@2.21/rest/reference/gitignore",
"/en/enterprise/2.21/v3/issues/assignees": "/en/enterprise-server@2.21/rest/reference/issues#assignees",
"/en/enterprise/2.21/v3/issues/comments": "/en/enterprise-server@2.21/rest/reference/issues#comments",
"/en/enterprise/2.21/v3/issues/events": "/en/enterprise-server@2.21/rest/reference/issues#events",
"/en/enterprise/2.21/v3/issues": "/en/enterprise-server@2.21/rest/reference/issues",
"/en/enterprise/2.21/v3/issues/issue-event-types": "/en/enterprise-server@2.21/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.21/v3/issues/labels": "/en/enterprise-server@2.21/rest/reference/issues#labels",
"/en/enterprise/2.21/v3/issues/milestones": "/en/enterprise-server@2.21/rest/reference/issues#milestones",
"/en/enterprise/2.21/v3/issues/timeline": "/en/enterprise-server@2.21/rest/reference/issues#timeline",
"/en/enterprise/2.21/v3/licenses": "/en/enterprise-server@2.21/rest/reference/licenses",
"/en/enterprise/2.21/v3/markdown": "/en/enterprise-server@2.21/rest/reference/markdown",
"/en/enterprise/2.21/v3/meta": "/en/enterprise-server@2.21/rest/reference/meta",
"/en/enterprise/2.21/v3/oauth_authorizations": "/en/enterprise-server@2.21/rest/reference/oauth-authorizations",
"/en/enterprise/2.21/v3/orgs/hooks": "/en/enterprise-server@2.21/rest/reference/orgs#hooks",
"/en/enterprise/2.21/v3/orgs": "/en/enterprise-server@2.21/rest/reference/orgs",
"/en/enterprise/2.21/v3/orgs/members": "/en/enterprise-server@2.21/rest/reference/orgs#members",
"/en/enterprise/2.21/v3/orgs/outside_collaborators": "/en/enterprise-server@2.21/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.21/v3/orgs/pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.21/v3/orgs/teams": "/en/enterprise-server@2.21/rest/reference/orgs#teams",
"/en/enterprise/2.21/v3/projects/cards": "/en/enterprise-server@2.21/rest/reference/projects#cards",
"/en/enterprise/2.21/v3/projects/collaborators": "/en/enterprise-server@2.21/rest/reference/projects#collaborators",
"/en/enterprise/2.21/v3/projects/columns": "/en/enterprise-server@2.21/rest/reference/projects#columns",
"/en/enterprise/2.21/v3/projects": "/en/enterprise-server@2.21/rest/reference/projects",
"/en/enterprise/2.21/v3/pulls/comments": "/en/enterprise-server@2.21/rest/reference/pulls#comments",
"/en/enterprise/2.21/v3/pulls": "/en/enterprise-server@2.21/rest/reference/pulls",
"/en/enterprise/2.21/v3/pulls/review_requests": "/en/enterprise-server@2.21/rest/reference/pulls#review-requests",
"/en/enterprise/2.21/v3/pulls/reviews": "/en/enterprise-server@2.21/rest/reference/pulls#reviews",
"/en/enterprise/2.21/v3/rate_limit": "/en/enterprise-server@2.21/rest/reference/rate-limit",
"/en/enterprise/2.21/v3/reactions": "/en/enterprise-server@2.21/rest/reference/reactions",
"/en/enterprise/2.21/v3/repos/branches": "/en/enterprise-server@2.21/rest/reference/repos#branches",
"/en/enterprise/2.21/v3/repos/collaborators": "/en/enterprise-server@2.21/rest/reference/repos#collaborators",
"/en/enterprise/2.21/v3/repos/comments": "/en/enterprise-server@2.21/rest/reference/repos#comments",
"/en/enterprise/2.21/v3/repos/commits": "/en/enterprise-server@2.21/rest/reference/repos#commits",
"/en/enterprise/2.21/v3/repos/contents": "/en/enterprise-server@2.21/rest/reference/repos#contents",
"/en/enterprise/2.21/v3/repos/deployments": "/en/enterprise-server@2.21/rest/reference/repos#deployments",
"/en/enterprise/2.21/v3/repos/downloads": "/en/enterprise-server@2.21/rest/reference/repos#downloads",
"/en/enterprise/2.21/v3/repos/forks": "/en/enterprise-server@2.21/rest/reference/repos#forks",
"/en/enterprise/2.21/v3/repos/hooks": "/en/enterprise-server@2.21/rest/reference/repos#hooks",
"/en/enterprise/2.21/v3/repos": "/en/enterprise-server@2.21/rest/reference/repos",
"/en/enterprise/2.21/v3/repos/invitations": "/en/enterprise-server@2.21/rest/reference/repos#invitations",
"/en/enterprise/2.21/v3/repos/keys": "/en/enterprise-server@2.21/rest/reference/repos#keys",
"/en/enterprise/2.21/v3/repos/merging": "/en/enterprise-server@2.21/rest/reference/repos#merging",
"/en/enterprise/2.21/v3/repos/pages": "/en/enterprise-server@2.21/rest/reference/repos#pages",
"/en/enterprise/2.21/v3/repos/pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.21/v3/repos/releases": "/en/enterprise-server@2.21/rest/reference/repos#releases",
"/en/enterprise/2.21/v3/repos/statistics": "/en/enterprise-server@2.21/rest/reference/repos#statistics",
"/en/enterprise/2.21/v3/repos/statuses": "/en/enterprise-server@2.21/rest/reference/repos#statuses",
"/en/enterprise/2.21/v3/search": "/en/enterprise-server@2.21/rest/reference/search",
"/en/enterprise/2.21/v3/teams/discussion_comments": "/en/enterprise-server@2.21/rest/reference/teams#discussion-comments",
"/en/enterprise/2.21/v3/teams/discussions": "/en/enterprise-server@2.21/rest/reference/teams#discussions",
"/en/enterprise/2.21/v3/teams": "/en/enterprise-server@2.21/rest/reference/teams",
"/en/enterprise/2.21/v3/teams/members": "/en/enterprise-server@2.21/rest/reference/teams#members",
"/en/enterprise/2.21/v3/users/administration": "/en/enterprise-server@2.21/rest/reference/users#administration",
"/en/enterprise/2.21/v3/users/emails": "/en/enterprise-server@2.21/rest/reference/users#emails",
"/en/enterprise/2.21/v3/users/followers": "/en/enterprise-server@2.21/rest/reference/users#followers",
"/en/enterprise/2.21/v3/users/gpg_keys": "/en/enterprise-server@2.21/rest/reference/users#gpg-keys",
"/en/enterprise/2.21/v3/users": "/en/enterprise-server@2.21/rest/reference/users",
"/en/enterprise/2.21/v3/users/keys": "/en/enterprise-server@2.21/rest/reference/users#keys",
"/v3/actions/artifacts": "/en/free-pro-team@latest/rest/reference/actions#artifacts",
"/v3/actions": "/en/free-pro-team@latest/rest/reference/actions",
"/v3/actions/secrets": "/en/free-pro-team@latest/rest/reference/actions#secrets",
"/v3/actions/self-hosted-runners": "/en/free-pro-team@latest/rest/reference/actions#self-hosted-runners",
"/v3/actions/self_hosted_runners": "/en/free-pro-team@latest/rest/reference/actions#self-hosted-runners",
"/v3/actions/workflow-jobs": "/en/free-pro-team@latest/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow-runs": "/en/free-pro-team@latest/rest/reference/actions#workflow-runs",
"/v3/actions/workflows": "/en/free-pro-team@latest/rest/reference/actions#workflows",
"/v3/activity/event_types": "/en/free-pro-team@latest/developers/webhooks-and-events/github-event-types",
"/v3/activity/events/types": "/en/free-pro-team@latest/developers/webhooks-and-events/webhook-events-and-payloads",
"/v3/activity/events": "/en/free-pro-team@latest/rest/reference/activity#events",
"/v3/activity/feeds": "/en/free-pro-team@latest/rest/reference/activity#feeds",
"/v3/activity": "/en/free-pro-team@latest/rest/reference/activity",
"/v3/activity/notifications": "/en/free-pro-team@latest/rest/reference/activity#notifications",
"/v3/activity/starring": "/en/free-pro-team@latest/rest/reference/activity#starring",
"/v3/activity/watching": "/en/free-pro-team@latest/rest/reference/activity#watching",
"/v3/apps/available-endpoints": "/en/free-pro-team@latest/rest/overview/endpoints-available-for-github-apps",
"/v3/apps": "/en/free-pro-team@latest/rest/reference/apps",
"/v3/apps/installations": "/en/free-pro-team@latest/rest/reference/apps#installations",
"/v3/apps/marketplace": "/en/free-pro-team@latest/rest/reference/apps#marketplace",
"/v3/apps/oauth_applications": "/en/free-pro-team@latest/rest/reference/apps#oauth-applications",
"/v3/apps/permissions": "/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps",
"/v3/checks": "/en/free-pro-team@latest/rest/reference/checks",
"/v3/checks/runs": "/en/free-pro-team@latest/rest/reference/checks#runs",
"/v3/checks/suites": "/en/free-pro-team@latest/rest/reference/checks#suites",
"/v3/code-scanning": "/en/free-pro-team@latest/rest/reference/code-scanning",
"/v3/codes_of_conduct": "/en/free-pro-team@latest/rest/reference/codes-of-conduct",
"/v3/emojis": "/en/free-pro-team@latest/rest/reference/emojis",
"/v3/enterprise-admin": "/en/free-pro-team@latest/rest/reference/enterprise-admin",
"/v3/enterprise-admin/admin_stats": "/en/enterprise-server/rest/reference/enterprise-admin#admin-stats",
"/v3/enterprise-admin/global_webhooks": "/en/enterprise-server/rest/reference/enterprise-admin#global-webhooks",
"/v3/enterprise-admin/ldap": "/en/enterprise-server/rest/reference/enterprise-admin#ldap",
"/v3/enterprise-admin/license": "/en/enterprise-server/rest/reference/enterprise-admin#license",
"/v3/enterprise-admin/management_console": "/en/enterprise-server/rest/reference/enterprise-admin#management-console",
"/v3/enterprise-admin/orgs": "/en/enterprise-server/rest/reference/enterprise-admin#orgs",
"/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server/rest/reference/enterprise-admin#pre-receive-environments",
"/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server/rest/reference/enterprise-admin#pre-receive-hooks",
"/v3/enterprise-admin/search_indexing": "/en/enterprise-server/rest/reference/enterprise-admin#search-indexing",
"/v3/enterprise-admin/users": "/en/enterprise-server/rest/reference/enterprise-admin#users",
"/v3/gists/comments": "/en/free-pro-team@latest/rest/reference/gists#comments",
"/v3/gists": "/en/free-pro-team@latest/rest/reference/gists",
"/v3/git/blobs": "/en/free-pro-team@latest/rest/reference/git#blobs",
"/v3/git/commits": "/en/free-pro-team@latest/rest/reference/git#commits",
"/v3/git": "/en/free-pro-team@latest/rest/reference/git",
"/v3/git/refs": "/en/free-pro-team@latest/rest/reference/git#refs",
"/v3/git/tags": "/en/free-pro-team@latest/rest/reference/git#tags",
"/v3/git/trees": "/en/free-pro-team@latest/rest/reference/git#trees",
"/v3/gitignore": "/en/free-pro-team@latest/rest/reference/gitignore",
"/v3/interactions": "/en/free-pro-team@latest/rest/reference/interactions",
"/v3/interactions/orgs": "/en/free-pro-team@latest/rest/reference/interactions#orgs",
"/v3/interactions/repos": "/en/free-pro-team@latest/rest/reference/interactions#repos",
"/v3/issues/assignees": "/en/free-pro-team@latest/rest/reference/issues#assignees",
"/v3/issues/comments": "/en/free-pro-team@latest/rest/reference/issues#comments",
"/v3/issues/events": "/en/free-pro-team@latest/rest/reference/issues#events",
"/v3/issues": "/en/free-pro-team@latest/rest/reference/issues",
"/v3/issues/issue-event-types": "/en/free-pro-team@latest/developers/webhooks-and-events/issue-event-types",
"/v3/issues/labels": "/en/free-pro-team@latest/rest/reference/issues#labels",
"/v3/issues/milestones": "/en/free-pro-team@latest/rest/reference/issues#milestones",
"/v3/issues/timeline": "/en/free-pro-team@latest/rest/reference/issues#timeline",
"/v3/licenses": "/en/free-pro-team@latest/rest/reference/licenses",
"/v3/markdown": "/en/free-pro-team@latest/rest/reference/markdown",
"/v3/meta": "/en/free-pro-team@latest/rest/reference/meta",
"/v3/migrations": "/en/free-pro-team@latest/rest/reference/migrations",
"/v3/migrations/orgs": "/en/free-pro-team@latest/rest/reference/migrations#orgs",
"/v3/migrations/source_imports": "/en/free-pro-team@latest/rest/reference/migrations#source-imports",
"/v3/migrations/users": "/en/free-pro-team@latest/rest/reference/migrations#users",
"/v3/oauth_authorizations": "/en/free-pro-team@latest/rest/reference/oauth-authorizations",
"/v3/orgs/blocking": "/en/free-pro-team@latest/rest/reference/orgs#blocking",
"/v3/orgs/hooks": "/en/free-pro-team@latest/rest/reference/orgs#hooks",
"/v3/orgs": "/en/free-pro-team@latest/rest/reference/orgs",
"/v3/orgs/members": "/en/free-pro-team@latest/rest/reference/orgs#members",
"/v3/orgs/migrations": "/en/free-pro-team@latest/rest/reference/orgs#migrations",
"/v3/orgs/outside_collaborators": "/en/free-pro-team@latest/rest/reference/orgs#outside-collaborators",
"/v3/orgs/pre_receive_hooks": "/en/enterprise-server/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/v3/orgs/teams": "/en/free-pro-team@latest/rest/reference/orgs#teams",
"/v3/projects/cards": "/en/free-pro-team@latest/rest/reference/projects#cards",
"/v3/projects/collaborators": "/en/free-pro-team@latest/rest/reference/projects#collaborators",
"/v3/projects/columns": "/en/free-pro-team@latest/rest/reference/projects#columns",
"/v3/projects": "/en/free-pro-team@latest/rest/reference/projects",
"/v3/pulls/comments": "/en/free-pro-team@latest/rest/reference/pulls#comments",
"/v3/pulls": "/en/free-pro-team@latest/rest/reference/pulls",
"/v3/pulls/review_requests": "/en/free-pro-team@latest/rest/reference/pulls#review-requests",
"/v3/pulls/reviews": "/en/free-pro-team@latest/rest/reference/pulls#reviews",
"/v3/rate_limit": "/en/free-pro-team@latest/rest/reference/rate-limit",
"/v3/reactions": "/en/free-pro-team@latest/rest/reference/reactions",
"/v3/repos/branches": "/en/free-pro-team@latest/rest/reference/repos#branches",
"/v3/repos/collaborators": "/en/free-pro-team@latest/rest/reference/repos#collaborators",
"/v3/repos/comments": "/en/free-pro-team@latest/rest/reference/repos#comments",
"/v3/repos/commits": "/en/free-pro-team@latest/rest/reference/repos#commits",
"/v3/repos/community": "/en/free-pro-team@latest/rest/reference/repos#community",
"/v3/repos/contents": "/en/free-pro-team@latest/rest/reference/repos#contents",
"/v3/repos/deployments": "/en/free-pro-team@latest/rest/reference/repos#deployments",
"/v3/repos/downloads": "/en/free-pro-team@latest/rest/reference/repos#downloads",
"/v3/repos/forks": "/en/free-pro-team@latest/rest/reference/repos#forks",
"/v3/repos/hooks": "/en/free-pro-team@latest/rest/reference/repos#hooks",
"/v3/repos": "/en/free-pro-team@latest/rest/reference/repos",
"/v3/repos/invitations": "/en/free-pro-team@latest/rest/reference/repos#invitations",
"/v3/repos/keys": "/en/free-pro-team@latest/rest/reference/repos#keys",
"/v3/repos/merging": "/en/free-pro-team@latest/rest/reference/repos#merging",
"/v3/repos/pages": "/en/free-pro-team@latest/rest/reference/repos#pages",
"/v3/repos/pre_receive_hooks": "/en/free-pro-team@latest/rest/reference/repos#pre-receive-hooks",
"/v3/repos/releases": "/en/free-pro-team@latest/rest/reference/repos#releases",
"/v3/repos/statistics": "/en/free-pro-team@latest/rest/reference/repos#statistics",
"/v3/repos/statuses": "/en/free-pro-team@latest/rest/reference/repos#statuses",
"/v3/repos/traffic": "/en/free-pro-team@latest/rest/reference/repos#traffic",
"/v3/scim": "/en/free-pro-team@latest/rest/reference/scim",
"/v3/search": "/en/free-pro-team@latest/rest/reference/search",
"/v3/teams/discussion_comments": "/en/free-pro-team@latest/rest/reference/teams#discussion-comments",
"/v3/teams/discussions": "/en/free-pro-team@latest/rest/reference/teams#discussions",
"/v3/teams": "/en/free-pro-team@latest/rest/reference/teams",
"/v3/teams/members": "/en/free-pro-team@latest/rest/reference/teams#members",
"/v3/teams/team_sync": "/en/free-pro-team@latest/rest/reference/teams#team-sync",
"/v3/users/blocking": "/en/free-pro-team@latest/rest/reference/users#blocking",
"/v3/users/emails": "/en/free-pro-team@latest/rest/reference/users#emails",
"/v3/users/followers": "/en/free-pro-team@latest/rest/reference/users#followers",
"/v3/users/gpg_keys": "/en/free-pro-team@latest/rest/reference/users#gpg-keys",
"/v3/users": "/en/free-pro-team@latest/rest/reference/users",
"/v3/users/keys": "/en/free-pro-team@latest/rest/reference/users#keys"
}

View File

@@ -1,6 +0,0 @@
---
title: A sample article
versions:
free-pro-team: '*'
---

View File

@@ -1,7 +0,0 @@
---
title: A sample TOC
versions:
free-pro-team: '*'
---
{% link_in_list /sample-article %}

View File

@@ -1,9 +0,0 @@
---
title: Translated TOC
versions:
free-pro-team: '*'
---
### 目次
Placeholder text

View File

@@ -1,5 +1,6 @@
---
title: Some page that exists in the content directory but not the translations directory
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---

View File

@@ -1,6 +1,6 @@
---
title: This is an article
intro: 'I've got broken frontmatter'
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---

View File

@@ -2,6 +2,7 @@
title: A page with redirects
redirect_from:
- /some-old-path
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---

View File

@@ -1,5 +1,6 @@
---
title: A sample article
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---

View File

@@ -1,5 +0,0 @@
---
title: A sample article
productVersions:
enterprise: '>2.16'
---

View File

@@ -1,5 +1,6 @@
---
title: A sample article
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---

View File

@@ -1,6 +1,6 @@
---
title: Frontmatter
productVersions:
versions:
dotcom: '*'
enterprise: '>=2.13'
---

View File

@@ -1,6 +1,6 @@
---
title: Frontmatter
productVersions:
versions:
dotcom: '*'
enterprise: '>=2.14'
---

View File

@@ -95,412 +95,412 @@
"/en/enterprise/2.18/v3/users/gpg_keys": "/en/enterprise/2.18/user/rest/reference/users#gpg-keys",
"/en/enterprise/2.18/v3/users": "/en/enterprise/2.18/user/rest/reference/users",
"/en/enterprise/2.18/v3/users/keys": "/en/enterprise/2.18/user/rest/reference/users#keys",
"/en/enterprise/2.19/v3/activity/event_types": "/en/enterprise/2.19/user/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.19/v3/activity/events/types": "/en/enterprise/2.19/user/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.19/v3/activity/events": "/en/enterprise/2.19/user/rest/reference/activity#events",
"/en/enterprise/2.19/v3/activity/feeds": "/en/enterprise/2.19/user/rest/reference/activity#feeds",
"/en/enterprise/2.19/v3/activity": "/en/enterprise/2.19/user/rest/reference/activity",
"/en/enterprise/2.19/v3/activity/notifications": "/en/enterprise/2.19/user/rest/reference/activity#notifications",
"/en/enterprise/2.19/v3/activity/starring": "/en/enterprise/2.19/user/rest/reference/activity#starring",
"/en/enterprise/2.19/v3/activity/watching": "/en/enterprise/2.19/user/rest/reference/activity#watching",
"/en/enterprise/2.19/v3/apps/available-endpoints": "/en/enterprise/2.19/user/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.19/v3/apps": "/en/enterprise/2.19/user/rest/reference/apps",
"/en/enterprise/2.19/v3/apps/installations": "/en/enterprise/2.19/user/rest/reference/apps#installations",
"/en/enterprise/2.19/v3/apps/permissions": "/en/enterprise/2.19/user/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.19/v3/checks": "/en/enterprise/2.19/user/rest/reference/checks",
"/en/enterprise/2.19/v3/checks/runs": "/en/enterprise/2.19/user/rest/reference/checks#runs",
"/en/enterprise/2.19/v3/checks/suites": "/en/enterprise/2.19/user/rest/reference/checks#suites",
"/en/enterprise/2.19/v3/codes_of_conduct": "/en/enterprise/2.19/user/rest/reference/codes-of-conduct",
"/en/enterprise/2.19/v3/emojis": "/en/enterprise/2.19/user/rest/reference/emojis",
"/en/enterprise/2.19/v3/enterprise-admin/admin_stats": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.19/v3/enterprise-admin/global_webhooks": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.19/v3/enterprise-admin": "/en/enterprise/2.19/user/rest/reference/enterprise-admin",
"/en/enterprise/2.19/v3/enterprise-admin/ldap": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.19/v3/enterprise-admin/license": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#license",
"/en/enterprise/2.19/v3/enterprise-admin/management_console": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.19/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/orgs": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.19/v3/enterprise-admin/pre_receive_environments": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.19/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/search_indexing": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.19/v3/enterprise-admin/users": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#users",
"/en/enterprise/2.19/v3/gists/comments": "/en/enterprise/2.19/user/rest/reference/gists#comments",
"/en/enterprise/2.19/v3/gists": "/en/enterprise/2.19/user/rest/reference/gists",
"/en/enterprise/2.19/v3/git/blobs": "/en/enterprise/2.19/user/rest/reference/git#blobs",
"/en/enterprise/2.19/v3/git/commits": "/en/enterprise/2.19/user/rest/reference/git#commits",
"/en/enterprise/2.19/v3/git": "/en/enterprise/2.19/user/rest/reference/git",
"/en/enterprise/2.19/v3/git/refs": "/en/enterprise/2.19/user/rest/reference/git#refs",
"/en/enterprise/2.19/v3/git/tags": "/en/enterprise/2.19/user/rest/reference/git#tags",
"/en/enterprise/2.19/v3/git/trees": "/en/enterprise/2.19/user/rest/reference/git#trees",
"/en/enterprise/2.19/v3/gitignore": "/en/enterprise/2.19/user/rest/reference/gitignore",
"/en/enterprise/2.19/v3/issues/assignees": "/en/enterprise/2.19/user/rest/reference/issues#assignees",
"/en/enterprise/2.19/v3/issues/comments": "/en/enterprise/2.19/user/rest/reference/issues#comments",
"/en/enterprise/2.19/v3/issues/events": "/en/enterprise/2.19/user/rest/reference/issues#events",
"/en/enterprise/2.19/v3/issues": "/en/enterprise/2.19/user/rest/reference/issues",
"/en/enterprise/2.19/v3/issues/issue-event-types": "/en/enterprise/2.19/user/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.19/v3/issues/labels": "/en/enterprise/2.19/user/rest/reference/issues#labels",
"/en/enterprise/2.19/v3/issues/milestones": "/en/enterprise/2.19/user/rest/reference/issues#milestones",
"/en/enterprise/2.19/v3/issues/timeline": "/en/enterprise/2.19/user/rest/reference/issues#timeline",
"/en/enterprise/2.19/v3/licenses": "/en/enterprise/2.19/user/rest/reference/licenses",
"/en/enterprise/2.19/v3/markdown": "/en/enterprise/2.19/user/rest/reference/markdown",
"/en/enterprise/2.19/v3/meta": "/en/enterprise/2.19/user/rest/reference/meta",
"/en/enterprise/2.19/v3/oauth_authorizations": "/en/enterprise/2.19/user/rest/reference/oauth-authorizations",
"/en/enterprise/2.19/v3/orgs/hooks": "/en/enterprise/2.19/user/rest/reference/orgs#hooks",
"/en/enterprise/2.19/v3/orgs": "/en/enterprise/2.19/user/rest/reference/orgs",
"/en/enterprise/2.19/v3/orgs/members": "/en/enterprise/2.19/user/rest/reference/orgs#members",
"/en/enterprise/2.19/v3/orgs/outside_collaborators": "/en/enterprise/2.19/user/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.19/v3/orgs/pre_receive_hooks": "/en/enterprise/2.19/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.19/v3/orgs/teams": "/en/enterprise/2.19/user/rest/reference/orgs#teams",
"/en/enterprise/2.19/v3/projects/cards": "/en/enterprise/2.19/user/rest/reference/projects#cards",
"/en/enterprise/2.19/v3/projects/collaborators": "/en/enterprise/2.19/user/rest/reference/projects#collaborators",
"/en/enterprise/2.19/v3/projects/columns": "/en/enterprise/2.19/user/rest/reference/projects#columns",
"/en/enterprise/2.19/v3/projects": "/en/enterprise/2.19/user/rest/reference/projects",
"/en/enterprise/2.19/v3/pulls/comments": "/en/enterprise/2.19/user/rest/reference/pulls#comments",
"/en/enterprise/2.19/v3/pulls": "/en/enterprise/2.19/user/rest/reference/pulls",
"/en/enterprise/2.19/v3/pulls/review_requests": "/en/enterprise/2.19/user/rest/reference/pulls#review-requests",
"/en/enterprise/2.19/v3/pulls/reviews": "/en/enterprise/2.19/user/rest/reference/pulls#reviews",
"/en/enterprise/2.19/v3/rate_limit": "/en/enterprise/2.19/user/rest/reference/rate-limit",
"/en/enterprise/2.19/v3/reactions": "/en/enterprise/2.19/user/rest/reference/reactions",
"/en/enterprise/2.19/v3/repos/branches": "/en/enterprise/2.19/user/rest/reference/repos#branches",
"/en/enterprise/2.19/v3/repos/collaborators": "/en/enterprise/2.19/user/rest/reference/repos#collaborators",
"/en/enterprise/2.19/v3/repos/comments": "/en/enterprise/2.19/user/rest/reference/repos#comments",
"/en/enterprise/2.19/v3/repos/commits": "/en/enterprise/2.19/user/rest/reference/repos#commits",
"/en/enterprise/2.19/v3/repos/contents": "/en/enterprise/2.19/user/rest/reference/repos#contents",
"/en/enterprise/2.19/v3/repos/deployments": "/en/enterprise/2.19/user/rest/reference/repos#deployments",
"/en/enterprise/2.19/v3/repos/downloads": "/en/enterprise/2.19/user/rest/reference/repos#downloads",
"/en/enterprise/2.19/v3/repos/forks": "/en/enterprise/2.19/user/rest/reference/repos#forks",
"/en/enterprise/2.19/v3/repos/hooks": "/en/enterprise/2.19/user/rest/reference/repos#hooks",
"/en/enterprise/2.19/v3/repos": "/en/enterprise/2.19/user/rest/reference/repos",
"/en/enterprise/2.19/v3/repos/invitations": "/en/enterprise/2.19/user/rest/reference/repos#invitations",
"/en/enterprise/2.19/v3/repos/keys": "/en/enterprise/2.19/user/rest/reference/repos#keys",
"/en/enterprise/2.19/v3/repos/merging": "/en/enterprise/2.19/user/rest/reference/repos#merging",
"/en/enterprise/2.19/v3/repos/pages": "/en/enterprise/2.19/user/rest/reference/repos#pages",
"/en/enterprise/2.19/v3/repos/pre_receive_hooks": "/en/enterprise/2.19/user/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.19/v3/repos/releases": "/en/enterprise/2.19/user/rest/reference/repos#releases",
"/en/enterprise/2.19/v3/repos/statistics": "/en/enterprise/2.19/user/rest/reference/repos#statistics",
"/en/enterprise/2.19/v3/repos/statuses": "/en/enterprise/2.19/user/rest/reference/repos#statuses",
"/en/enterprise/2.19/v3/search": "/en/enterprise/2.19/user/rest/reference/search",
"/en/enterprise/2.19/v3/teams/discussion_comments": "/en/enterprise/2.19/user/rest/reference/teams#discussion-comments",
"/en/enterprise/2.19/v3/teams/discussions": "/en/enterprise/2.19/user/rest/reference/teams#discussions",
"/en/enterprise/2.19/v3/teams": "/en/enterprise/2.19/user/rest/reference/teams",
"/en/enterprise/2.19/v3/teams/members": "/en/enterprise/2.19/user/rest/reference/teams#members",
"/en/enterprise/2.19/v3/users/administration": "/en/enterprise/2.19/user/rest/reference/users#administration",
"/en/enterprise/2.19/v3/users/emails": "/en/enterprise/2.19/user/rest/reference/users#emails",
"/en/enterprise/2.19/v3/users/followers": "/en/enterprise/2.19/user/rest/reference/users#followers",
"/en/enterprise/2.19/v3/users/gpg_keys": "/en/enterprise/2.19/user/rest/reference/users#gpg-keys",
"/en/enterprise/2.19/v3/users": "/en/enterprise/2.19/user/rest/reference/users",
"/en/enterprise/2.19/v3/users/keys": "/en/enterprise/2.19/user/rest/reference/users#keys",
"/en/enterprise/2.20/v3/activity/event_types": "/en/enterprise/2.20/user/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.20/v3/activity/events/types": "/en/enterprise/2.20/user/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.20/v3/activity/events": "/en/enterprise/2.20/user/rest/reference/activity#events",
"/en/enterprise/2.20/v3/activity/feeds": "/en/enterprise/2.20/user/rest/reference/activity#feeds",
"/en/enterprise/2.20/v3/activity": "/en/enterprise/2.20/user/rest/reference/activity",
"/en/enterprise/2.20/v3/activity/notifications": "/en/enterprise/2.20/user/rest/reference/activity#notifications",
"/en/enterprise/2.20/v3/activity/starring": "/en/enterprise/2.20/user/rest/reference/activity#starring",
"/en/enterprise/2.20/v3/activity/watching": "/en/enterprise/2.20/user/rest/reference/activity#watching",
"/en/enterprise/2.20/v3/apps/available-endpoints": "/en/enterprise/2.20/user/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.20/v3/apps": "/en/enterprise/2.20/user/rest/reference/apps",
"/en/enterprise/2.20/v3/apps/installations": "/en/enterprise/2.20/user/rest/reference/apps#installations",
"/en/enterprise/2.20/v3/apps/oauth_applications": "/en/enterprise/2.20/user/rest/reference/apps#oauth-applications",
"/en/enterprise/2.20/v3/apps/permissions": "/en/enterprise/2.20/user/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.20/v3/checks": "/en/enterprise/2.20/user/rest/reference/checks",
"/en/enterprise/2.20/v3/checks/runs": "/en/enterprise/2.20/user/rest/reference/checks#runs",
"/en/enterprise/2.20/v3/checks/suites": "/en/enterprise/2.20/user/rest/reference/checks#suites",
"/en/enterprise/2.20/v3/codes_of_conduct": "/en/enterprise/2.20/user/rest/reference/codes-of-conduct",
"/en/enterprise/2.20/v3/emojis": "/en/enterprise/2.20/user/rest/reference/emojis",
"/en/enterprise/2.20/v3/enterprise-admin/admin_stats": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.20/v3/enterprise-admin/global_webhooks": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.20/v3/enterprise-admin": "/en/enterprise/2.20/user/rest/reference/enterprise-admin",
"/en/enterprise/2.20/v3/enterprise-admin/ldap": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.20/v3/enterprise-admin/license": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#license",
"/en/enterprise/2.20/v3/enterprise-admin/management_console": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.20/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/orgs": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.20/v3/enterprise-admin/pre_receive_environments": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.20/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/search_indexing": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.20/v3/enterprise-admin/users": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#users",
"/en/enterprise/2.20/v3/gists/comments": "/en/enterprise/2.20/user/rest/reference/gists#comments",
"/en/enterprise/2.20/v3/gists": "/en/enterprise/2.20/user/rest/reference/gists",
"/en/enterprise/2.20/v3/git/blobs": "/en/enterprise/2.20/user/rest/reference/git#blobs",
"/en/enterprise/2.20/v3/git/commits": "/en/enterprise/2.20/user/rest/reference/git#commits",
"/en/enterprise/2.20/v3/git": "/en/enterprise/2.20/user/rest/reference/git",
"/en/enterprise/2.20/v3/git/refs": "/en/enterprise/2.20/user/rest/reference/git#refs",
"/en/enterprise/2.20/v3/git/tags": "/en/enterprise/2.20/user/rest/reference/git#tags",
"/en/enterprise/2.20/v3/git/trees": "/en/enterprise/2.20/user/rest/reference/git#trees",
"/en/enterprise/2.20/v3/gitignore": "/en/enterprise/2.20/user/rest/reference/gitignore",
"/en/enterprise/2.20/v3/issues/assignees": "/en/enterprise/2.20/user/rest/reference/issues#assignees",
"/en/enterprise/2.20/v3/issues/comments": "/en/enterprise/2.20/user/rest/reference/issues#comments",
"/en/enterprise/2.20/v3/issues/events": "/en/enterprise/2.20/user/rest/reference/issues#events",
"/en/enterprise/2.20/v3/issues": "/en/enterprise/2.20/user/rest/reference/issues",
"/en/enterprise/2.20/v3/issues/issue-event-types": "/en/enterprise/2.20/user/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.20/v3/issues/labels": "/en/enterprise/2.20/user/rest/reference/issues#labels",
"/en/enterprise/2.20/v3/issues/milestones": "/en/enterprise/2.20/user/rest/reference/issues#milestones",
"/en/enterprise/2.20/v3/issues/timeline": "/en/enterprise/2.20/user/rest/reference/issues#timeline",
"/en/enterprise/2.20/v3/licenses": "/en/enterprise/2.20/user/rest/reference/licenses",
"/en/enterprise/2.20/v3/markdown": "/en/enterprise/2.20/user/rest/reference/markdown",
"/en/enterprise/2.20/v3/meta": "/en/enterprise/2.20/user/rest/reference/meta",
"/en/enterprise/2.20/v3/oauth_authorizations": "/en/enterprise/2.20/user/rest/reference/oauth-authorizations",
"/en/enterprise/2.20/v3/orgs/hooks": "/en/enterprise/2.20/user/rest/reference/orgs#hooks",
"/en/enterprise/2.20/v3/orgs": "/en/enterprise/2.20/user/rest/reference/orgs",
"/en/enterprise/2.20/v3/orgs/members": "/en/enterprise/2.20/user/rest/reference/orgs#members",
"/en/enterprise/2.20/v3/orgs/outside_collaborators": "/en/enterprise/2.20/user/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.20/v3/orgs/pre_receive_hooks": "/en/enterprise/2.20/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.20/v3/orgs/teams": "/en/enterprise/2.20/user/rest/reference/orgs#teams",
"/en/enterprise/2.20/v3/projects/cards": "/en/enterprise/2.20/user/rest/reference/projects#cards",
"/en/enterprise/2.20/v3/projects/collaborators": "/en/enterprise/2.20/user/rest/reference/projects#collaborators",
"/en/enterprise/2.20/v3/projects/columns": "/en/enterprise/2.20/user/rest/reference/projects#columns",
"/en/enterprise/2.20/v3/projects": "/en/enterprise/2.20/user/rest/reference/projects",
"/en/enterprise/2.20/v3/pulls/comments": "/en/enterprise/2.20/user/rest/reference/pulls#comments",
"/en/enterprise/2.20/v3/pulls": "/en/enterprise/2.20/user/rest/reference/pulls",
"/en/enterprise/2.20/v3/pulls/review_requests": "/en/enterprise/2.20/user/rest/reference/pulls#review-requests",
"/en/enterprise/2.20/v3/pulls/reviews": "/en/enterprise/2.20/user/rest/reference/pulls#reviews",
"/en/enterprise/2.20/v3/rate_limit": "/en/enterprise/2.20/user/rest/reference/rate-limit",
"/en/enterprise/2.20/v3/reactions": "/en/enterprise/2.20/user/rest/reference/reactions",
"/en/enterprise/2.20/v3/repos/branches": "/en/enterprise/2.20/user/rest/reference/repos#branches",
"/en/enterprise/2.20/v3/repos/collaborators": "/en/enterprise/2.20/user/rest/reference/repos#collaborators",
"/en/enterprise/2.20/v3/repos/comments": "/en/enterprise/2.20/user/rest/reference/repos#comments",
"/en/enterprise/2.20/v3/repos/commits": "/en/enterprise/2.20/user/rest/reference/repos#commits",
"/en/enterprise/2.20/v3/repos/contents": "/en/enterprise/2.20/user/rest/reference/repos#contents",
"/en/enterprise/2.20/v3/repos/deployments": "/en/enterprise/2.20/user/rest/reference/repos#deployments",
"/en/enterprise/2.20/v3/repos/downloads": "/en/enterprise/2.20/user/rest/reference/repos#downloads",
"/en/enterprise/2.20/v3/repos/forks": "/en/enterprise/2.20/user/rest/reference/repos#forks",
"/en/enterprise/2.20/v3/repos/hooks": "/en/enterprise/2.20/user/rest/reference/repos#hooks",
"/en/enterprise/2.20/v3/repos": "/en/enterprise/2.20/user/rest/reference/repos",
"/en/enterprise/2.20/v3/repos/invitations": "/en/enterprise/2.20/user/rest/reference/repos#invitations",
"/en/enterprise/2.20/v3/repos/keys": "/en/enterprise/2.20/user/rest/reference/repos#keys",
"/en/enterprise/2.20/v3/repos/merging": "/en/enterprise/2.20/user/rest/reference/repos#merging",
"/en/enterprise/2.20/v3/repos/pages": "/en/enterprise/2.20/user/rest/reference/repos#pages",
"/en/enterprise/2.20/v3/repos/pre_receive_hooks": "/en/enterprise/2.20/user/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.20/v3/repos/releases": "/en/enterprise/2.20/user/rest/reference/repos#releases",
"/en/enterprise/2.20/v3/repos/statistics": "/en/enterprise/2.20/user/rest/reference/repos#statistics",
"/en/enterprise/2.20/v3/repos/statuses": "/en/enterprise/2.20/user/rest/reference/repos#statuses",
"/en/enterprise/2.20/v3/search": "/en/enterprise/2.20/user/rest/reference/search",
"/en/enterprise/2.20/v3/teams/discussion_comments": "/en/enterprise/2.20/user/rest/reference/teams#discussion-comments",
"/en/enterprise/2.20/v3/teams/discussions": "/en/enterprise/2.20/user/rest/reference/teams#discussions",
"/en/enterprise/2.20/v3/teams": "/en/enterprise/2.20/user/rest/reference/teams",
"/en/enterprise/2.20/v3/teams/members": "/en/enterprise/2.20/user/rest/reference/teams#members",
"/en/enterprise/2.20/v3/users/administration": "/en/enterprise/2.20/user/rest/reference/users#administration",
"/en/enterprise/2.20/v3/users/emails": "/en/enterprise/2.20/user/rest/reference/users#emails",
"/en/enterprise/2.20/v3/users/followers": "/en/enterprise/2.20/user/rest/reference/users#followers",
"/en/enterprise/2.20/v3/users/gpg_keys": "/en/enterprise/2.20/user/rest/reference/users#gpg-keys",
"/en/enterprise/2.20/v3/users": "/en/enterprise/2.20/user/rest/reference/users",
"/en/enterprise/2.20/v3/users/keys": "/en/enterprise/2.20/user/rest/reference/users#keys",
"/en/enterprise/2.21/v3/activity/event_types": "/en/enterprise/2.21/user/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.21/v3/activity/events/types": "/en/enterprise/2.21/user/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.21/v3/activity/events": "/en/enterprise/2.21/user/rest/reference/activity#events",
"/en/enterprise/2.21/v3/activity/feeds": "/en/enterprise/2.21/user/rest/reference/activity#feeds",
"/en/enterprise/2.21/v3/activity": "/en/enterprise/2.21/user/rest/reference/activity",
"/en/enterprise/2.21/v3/activity/notifications": "/en/enterprise/2.21/user/rest/reference/activity#notifications",
"/en/enterprise/2.21/v3/activity/starring": "/en/enterprise/2.21/user/rest/reference/activity#starring",
"/en/enterprise/2.21/v3/activity/watching": "/en/enterprise/2.21/user/rest/reference/activity#watching",
"/en/enterprise/2.21/v3/apps/available-endpoints": "/en/enterprise/2.21/user/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.21/v3/apps": "/en/enterprise/2.21/user/rest/reference/apps",
"/en/enterprise/2.21/v3/apps/installations": "/en/enterprise/2.21/user/rest/reference/apps#installations",
"/en/enterprise/2.21/v3/apps/oauth_applications": "/en/enterprise/2.21/user/rest/reference/apps#oauth-applications",
"/en/enterprise/2.21/v3/apps/permissions": "/en/enterprise/2.21/user/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.21/v3/checks": "/en/enterprise/2.21/user/rest/reference/checks",
"/en/enterprise/2.21/v3/checks/runs": "/en/enterprise/2.21/user/rest/reference/checks#runs",
"/en/enterprise/2.21/v3/checks/suites": "/en/enterprise/2.21/user/rest/reference/checks#suites",
"/en/enterprise/2.21/v3/codes_of_conduct": "/en/enterprise/2.21/user/rest/reference/codes-of-conduct",
"/en/enterprise/2.21/v3/emojis": "/en/enterprise/2.21/user/rest/reference/emojis",
"/en/enterprise/2.21/v3/enterprise-admin/admin_stats": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.21/v3/enterprise-admin/global_webhooks": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.21/v3/enterprise-admin": "/en/enterprise/2.21/user/rest/reference/enterprise-admin",
"/en/enterprise/2.21/v3/enterprise-admin/ldap": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.21/v3/enterprise-admin/license": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#license",
"/en/enterprise/2.21/v3/enterprise-admin/management_console": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.21/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/orgs": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.21/v3/enterprise-admin/pre_receive_environments": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.21/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/search_indexing": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.21/v3/enterprise-admin/users": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#users",
"/en/enterprise/2.21/v3/gists/comments": "/en/enterprise/2.21/user/rest/reference/gists#comments",
"/en/enterprise/2.21/v3/gists": "/en/enterprise/2.21/user/rest/reference/gists",
"/en/enterprise/2.21/v3/git/blobs": "/en/enterprise/2.21/user/rest/reference/git#blobs",
"/en/enterprise/2.21/v3/git/commits": "/en/enterprise/2.21/user/rest/reference/git#commits",
"/en/enterprise/2.21/v3/git": "/en/enterprise/2.21/user/rest/reference/git",
"/en/enterprise/2.21/v3/git/refs": "/en/enterprise/2.21/user/rest/reference/git#refs",
"/en/enterprise/2.21/v3/git/tags": "/en/enterprise/2.21/user/rest/reference/git#tags",
"/en/enterprise/2.21/v3/git/trees": "/en/enterprise/2.21/user/rest/reference/git#trees",
"/en/enterprise/2.21/v3/gitignore": "/en/enterprise/2.21/user/rest/reference/gitignore",
"/en/enterprise/2.21/v3/issues/assignees": "/en/enterprise/2.21/user/rest/reference/issues#assignees",
"/en/enterprise/2.21/v3/issues/comments": "/en/enterprise/2.21/user/rest/reference/issues#comments",
"/en/enterprise/2.21/v3/issues/events": "/en/enterprise/2.21/user/rest/reference/issues#events",
"/en/enterprise/2.21/v3/issues": "/en/enterprise/2.21/user/rest/reference/issues",
"/en/enterprise/2.21/v3/issues/issue-event-types": "/en/enterprise/2.21/user/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.21/v3/issues/labels": "/en/enterprise/2.21/user/rest/reference/issues#labels",
"/en/enterprise/2.21/v3/issues/milestones": "/en/enterprise/2.21/user/rest/reference/issues#milestones",
"/en/enterprise/2.21/v3/issues/timeline": "/en/enterprise/2.21/user/rest/reference/issues#timeline",
"/en/enterprise/2.21/v3/licenses": "/en/enterprise/2.21/user/rest/reference/licenses",
"/en/enterprise/2.21/v3/markdown": "/en/enterprise/2.21/user/rest/reference/markdown",
"/en/enterprise/2.21/v3/meta": "/en/enterprise/2.21/user/rest/reference/meta",
"/en/enterprise/2.21/v3/oauth_authorizations": "/en/enterprise/2.21/user/rest/reference/oauth-authorizations",
"/en/enterprise/2.21/v3/orgs/hooks": "/en/enterprise/2.21/user/rest/reference/orgs#hooks",
"/en/enterprise/2.21/v3/orgs": "/en/enterprise/2.21/user/rest/reference/orgs",
"/en/enterprise/2.21/v3/orgs/members": "/en/enterprise/2.21/user/rest/reference/orgs#members",
"/en/enterprise/2.21/v3/orgs/outside_collaborators": "/en/enterprise/2.21/user/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.21/v3/orgs/pre_receive_hooks": "/en/enterprise/2.21/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.21/v3/orgs/teams": "/en/enterprise/2.21/user/rest/reference/orgs#teams",
"/en/enterprise/2.21/v3/projects/cards": "/en/enterprise/2.21/user/rest/reference/projects#cards",
"/en/enterprise/2.21/v3/projects/collaborators": "/en/enterprise/2.21/user/rest/reference/projects#collaborators",
"/en/enterprise/2.21/v3/projects/columns": "/en/enterprise/2.21/user/rest/reference/projects#columns",
"/en/enterprise/2.21/v3/projects": "/en/enterprise/2.21/user/rest/reference/projects",
"/en/enterprise/2.21/v3/pulls/comments": "/en/enterprise/2.21/user/rest/reference/pulls#comments",
"/en/enterprise/2.21/v3/pulls": "/en/enterprise/2.21/user/rest/reference/pulls",
"/en/enterprise/2.21/v3/pulls/review_requests": "/en/enterprise/2.21/user/rest/reference/pulls#review-requests",
"/en/enterprise/2.21/v3/pulls/reviews": "/en/enterprise/2.21/user/rest/reference/pulls#reviews",
"/en/enterprise/2.21/v3/rate_limit": "/en/enterprise/2.21/user/rest/reference/rate-limit",
"/en/enterprise/2.21/v3/reactions": "/en/enterprise/2.21/user/rest/reference/reactions",
"/en/enterprise/2.21/v3/repos/branches": "/en/enterprise/2.21/user/rest/reference/repos#branches",
"/en/enterprise/2.21/v3/repos/collaborators": "/en/enterprise/2.21/user/rest/reference/repos#collaborators",
"/en/enterprise/2.21/v3/repos/comments": "/en/enterprise/2.21/user/rest/reference/repos#comments",
"/en/enterprise/2.21/v3/repos/commits": "/en/enterprise/2.21/user/rest/reference/repos#commits",
"/en/enterprise/2.21/v3/repos/contents": "/en/enterprise/2.21/user/rest/reference/repos#contents",
"/en/enterprise/2.21/v3/repos/deployments": "/en/enterprise/2.21/user/rest/reference/repos#deployments",
"/en/enterprise/2.21/v3/repos/downloads": "/en/enterprise/2.21/user/rest/reference/repos#downloads",
"/en/enterprise/2.21/v3/repos/forks": "/en/enterprise/2.21/user/rest/reference/repos#forks",
"/en/enterprise/2.21/v3/repos/hooks": "/en/enterprise/2.21/user/rest/reference/repos#hooks",
"/en/enterprise/2.21/v3/repos": "/en/enterprise/2.21/user/rest/reference/repos",
"/en/enterprise/2.21/v3/repos/invitations": "/en/enterprise/2.21/user/rest/reference/repos#invitations",
"/en/enterprise/2.21/v3/repos/keys": "/en/enterprise/2.21/user/rest/reference/repos#keys",
"/en/enterprise/2.21/v3/repos/merging": "/en/enterprise/2.21/user/rest/reference/repos#merging",
"/en/enterprise/2.21/v3/repos/pages": "/en/enterprise/2.21/user/rest/reference/repos#pages",
"/en/enterprise/2.21/v3/repos/pre_receive_hooks": "/en/enterprise/2.21/user/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.21/v3/repos/releases": "/en/enterprise/2.21/user/rest/reference/repos#releases",
"/en/enterprise/2.21/v3/repos/statistics": "/en/enterprise/2.21/user/rest/reference/repos#statistics",
"/en/enterprise/2.21/v3/repos/statuses": "/en/enterprise/2.21/user/rest/reference/repos#statuses",
"/en/enterprise/2.21/v3/search": "/en/enterprise/2.21/user/rest/reference/search",
"/en/enterprise/2.21/v3/teams/discussion_comments": "/en/enterprise/2.21/user/rest/reference/teams#discussion-comments",
"/en/enterprise/2.21/v3/teams/discussions": "/en/enterprise/2.21/user/rest/reference/teams#discussions",
"/en/enterprise/2.21/v3/teams": "/en/enterprise/2.21/user/rest/reference/teams",
"/en/enterprise/2.21/v3/teams/members": "/en/enterprise/2.21/user/rest/reference/teams#members",
"/en/enterprise/2.21/v3/users/administration": "/en/enterprise/2.21/user/rest/reference/users#administration",
"/en/enterprise/2.21/v3/users/emails": "/en/enterprise/2.21/user/rest/reference/users#emails",
"/en/enterprise/2.21/v3/users/followers": "/en/enterprise/2.21/user/rest/reference/users#followers",
"/en/enterprise/2.21/v3/users/gpg_keys": "/en/enterprise/2.21/user/rest/reference/users#gpg-keys",
"/en/enterprise/2.21/v3/users": "/en/enterprise/2.21/user/rest/reference/users",
"/en/enterprise/2.21/v3/users/keys": "/en/enterprise/2.21/user/rest/reference/users#keys",
"/v3/actions/artifacts": "/en/rest/reference/actions#artifacts",
"/v3/actions": "/en/rest/reference/actions",
"/v3/actions/secrets": "/en/rest/reference/actions#secrets",
"/v3/actions/self-hosted-runners": "/en/rest/reference/actions#self-hosted-runners",
"/v3/actions/self_hosted_runners": "/en/rest/reference/actions#self-hosted-runners",
"/v3/actions/workflow-jobs": "/en/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow-runs": "/en/rest/reference/actions#workflow-runs",
"/v3/actions/workflows": "/en/rest/reference/actions#workflows",
"/v3/activity/event_types": "/en/developers/webhooks-and-events/github-event-types",
"/v3/activity/events/types": "/en/developers/webhooks-and-events/webhook-events-and-payloads",
"/v3/activity/events": "/en/rest/reference/activity#events",
"/v3/activity/feeds": "/en/rest/reference/activity#feeds",
"/v3/activity": "/en/rest/reference/activity",
"/v3/activity/notifications": "/en/rest/reference/activity#notifications",
"/v3/activity/starring": "/en/rest/reference/activity#starring",
"/v3/activity/watching": "/en/rest/reference/activity#watching",
"/v3/apps/available-endpoints": "/en/rest/overview/endpoints-available-for-github-apps",
"/v3/apps": "/en/rest/reference/apps",
"/v3/apps/installations": "/en/rest/reference/apps#installations",
"/v3/apps/marketplace": "/en/rest/reference/apps#marketplace",
"/v3/apps/oauth_applications": "/en/rest/reference/apps#oauth-applications",
"/v3/apps/permissions": "/en/rest/reference/permissions-required-for-github-apps",
"/v3/checks": "/en/rest/reference/checks",
"/v3/checks/runs": "/en/rest/reference/checks#runs",
"/v3/checks/suites": "/en/rest/reference/checks#suites",
"/v3/code-scanning": "/en/rest/reference/code-scanning",
"/v3/codes_of_conduct": "/en/rest/reference/codes-of-conduct",
"/v3/emojis": "/en/rest/reference/emojis",
"/v3/enterprise-admin": "/en/rest/reference/enterprise-admin",
"/v3/enterprise-admin/admin_stats": "/en/enterprise/user/rest/reference/enterprise-admin#admin-stats",
"/v3/enterprise-admin/global_webhooks": "/en/enterprise/user/rest/reference/enterprise-admin#global-webhooks",
"/v3/enterprise-admin/ldap": "/en/enterprise/user/rest/reference/enterprise-admin#ldap",
"/v3/enterprise-admin/license": "/en/enterprise/user/rest/reference/enterprise-admin#license",
"/v3/enterprise-admin/management_console": "/en/enterprise/user/rest/reference/enterprise-admin#management-console",
"/v3/enterprise-admin/orgs": "/en/enterprise/user/rest/reference/enterprise-admin#orgs",
"/v3/enterprise-admin/pre_receive_environments": "/en/enterprise/user/rest/reference/enterprise-admin#pre-receive-environments",
"/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise/user/rest/reference/enterprise-admin#pre-receive-hooks",
"/v3/enterprise-admin/search_indexing": "/en/enterprise/user/rest/reference/enterprise-admin#search-indexing",
"/v3/enterprise-admin/users": "/en/enterprise/user/rest/reference/enterprise-admin#users",
"/v3/gists/comments": "/en/rest/reference/gists#comments",
"/v3/gists": "/en/rest/reference/gists",
"/v3/git/blobs": "/en/rest/reference/git#blobs",
"/v3/git/commits": "/en/rest/reference/git#commits",
"/v3/git": "/en/rest/reference/git",
"/v3/git/refs": "/en/rest/reference/git#refs",
"/v3/git/tags": "/en/rest/reference/git#tags",
"/v3/git/trees": "/en/rest/reference/git#trees",
"/v3/gitignore": "/en/rest/reference/gitignore",
"/v3/interactions": "/en/rest/reference/interactions",
"/v3/interactions/orgs": "/en/rest/reference/interactions#orgs",
"/v3/interactions/repos": "/en/rest/reference/interactions#repos",
"/v3/issues/assignees": "/en/rest/reference/issues#assignees",
"/v3/issues/comments": "/en/rest/reference/issues#comments",
"/v3/issues/events": "/en/rest/reference/issues#events",
"/v3/issues": "/en/rest/reference/issues",
"/v3/issues/issue-event-types": "/en/developers/webhooks-and-events/issue-event-types",
"/v3/issues/labels": "/en/rest/reference/issues#labels",
"/v3/issues/milestones": "/en/rest/reference/issues#milestones",
"/v3/issues/timeline": "/en/rest/reference/issues#timeline",
"/v3/licenses": "/en/rest/reference/licenses",
"/v3/markdown": "/en/rest/reference/markdown",
"/v3/meta": "/en/rest/reference/meta",
"/v3/migrations": "/en/rest/reference/migrations",
"/v3/migrations/orgs": "/en/rest/reference/migrations#orgs",
"/v3/migrations/source_imports": "/en/rest/reference/migrations#source-imports",
"/v3/migrations/users": "/en/rest/reference/migrations#users",
"/v3/oauth_authorizations": "/en/rest/reference/oauth-authorizations",
"/v3/orgs/blocking": "/en/rest/reference/orgs#blocking",
"/v3/orgs/hooks": "/en/rest/reference/orgs#hooks",
"/v3/orgs": "/en/rest/reference/orgs",
"/v3/orgs/members": "/en/rest/reference/orgs#members",
"/v3/orgs/migrations": "/en/rest/reference/orgs#migrations",
"/v3/orgs/outside_collaborators": "/en/rest/reference/orgs#outside-collaborators",
"/v3/orgs/pre_receive_hooks": "/en/enterprise/user/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/v3/orgs/teams": "/en/rest/reference/orgs#teams",
"/v3/projects/cards": "/en/rest/reference/projects#cards",
"/v3/projects/collaborators": "/en/rest/reference/projects#collaborators",
"/v3/projects/columns": "/en/rest/reference/projects#columns",
"/v3/projects": "/en/rest/reference/projects",
"/v3/pulls/comments": "/en/rest/reference/pulls#comments",
"/v3/pulls": "/en/rest/reference/pulls",
"/v3/pulls/review_requests": "/en/rest/reference/pulls#review-requests",
"/v3/pulls/reviews": "/en/rest/reference/pulls#reviews",
"/v3/rate_limit": "/en/rest/reference/rate-limit",
"/v3/reactions": "/en/rest/reference/reactions",
"/v3/repos/branches": "/en/rest/reference/repos#branches",
"/v3/repos/collaborators": "/en/rest/reference/repos#collaborators",
"/v3/repos/comments": "/en/rest/reference/repos#comments",
"/v3/repos/commits": "/en/rest/reference/repos#commits",
"/v3/repos/community": "/en/rest/reference/repos#community",
"/v3/repos/contents": "/en/rest/reference/repos#contents",
"/v3/repos/deployments": "/en/rest/reference/repos#deployments",
"/v3/repos/downloads": "/en/rest/reference/repos#downloads",
"/v3/repos/forks": "/en/rest/reference/repos#forks",
"/v3/repos/hooks": "/en/rest/reference/repos#hooks",
"/v3/repos": "/en/rest/reference/repos",
"/v3/repos/invitations": "/en/rest/reference/repos#invitations",
"/v3/repos/keys": "/en/rest/reference/repos#keys",
"/v3/repos/merging": "/en/rest/reference/repos#merging",
"/v3/repos/pages": "/en/rest/reference/repos#pages",
"/v3/repos/pre_receive_hooks": "/en/rest/reference/repos#pre-receive-hooks",
"/v3/repos/releases": "/en/rest/reference/repos#releases",
"/v3/repos/statistics": "/en/rest/reference/repos#statistics",
"/v3/repos/statuses": "/en/rest/reference/repos#statuses",
"/v3/repos/traffic": "/en/rest/reference/repos#traffic",
"/v3/scim": "/en/rest/reference/scim",
"/v3/search": "/en/rest/reference/search",
"/v3/teams/discussion_comments": "/en/rest/reference/teams#discussion-comments",
"/v3/teams/discussions": "/en/rest/reference/teams#discussions",
"/v3/teams": "/en/rest/reference/teams",
"/v3/teams/members": "/en/rest/reference/teams#members",
"/v3/teams/team_sync": "/en/rest/reference/teams#team-sync",
"/v3/users/blocking": "/en/rest/reference/users#blocking",
"/v3/users/emails": "/en/rest/reference/users#emails",
"/v3/users/followers": "/en/rest/reference/users#followers",
"/v3/users/gpg_keys": "/en/rest/reference/users#gpg-keys",
"/v3/users": "/en/rest/reference/users",
"/v3/users/keys": "/en/rest/reference/users#keys"
"/en/enterprise/2.19/v3/activity/event_types": "/en/enterprise-server@2.19/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.19/v3/activity/events/types": "/en/enterprise-server@2.19/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.19/v3/activity/events": "/en/enterprise-server@2.19/rest/reference/activity#events",
"/en/enterprise/2.19/v3/activity/feeds": "/en/enterprise-server@2.19/rest/reference/activity#feeds",
"/en/enterprise/2.19/v3/activity": "/en/enterprise-server@2.19/rest/reference/activity",
"/en/enterprise/2.19/v3/activity/notifications": "/en/enterprise-server@2.19/rest/reference/activity#notifications",
"/en/enterprise/2.19/v3/activity/starring": "/en/enterprise-server@2.19/rest/reference/activity#starring",
"/en/enterprise/2.19/v3/activity/watching": "/en/enterprise-server@2.19/rest/reference/activity#watching",
"/en/enterprise/2.19/v3/apps/available-endpoints": "/en/enterprise-server@2.19/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.19/v3/apps": "/en/enterprise-server@2.19/rest/reference/apps",
"/en/enterprise/2.19/v3/apps/installations": "/en/enterprise-server@2.19/rest/reference/apps#installations",
"/en/enterprise/2.19/v3/apps/permissions": "/en/enterprise-server@2.19/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.19/v3/checks": "/en/enterprise-server@2.19/rest/reference/checks",
"/en/enterprise/2.19/v3/checks/runs": "/en/enterprise-server@2.19/rest/reference/checks#runs",
"/en/enterprise/2.19/v3/checks/suites": "/en/enterprise-server@2.19/rest/reference/checks#suites",
"/en/enterprise/2.19/v3/codes_of_conduct": "/en/enterprise-server@2.19/rest/reference/codes-of-conduct",
"/en/enterprise/2.19/v3/emojis": "/en/enterprise-server@2.19/rest/reference/emojis",
"/en/enterprise/2.19/v3/enterprise-admin/admin_stats": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.19/v3/enterprise-admin/global_webhooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.19/v3/enterprise-admin": "/en/enterprise-server@2.19/rest/reference/enterprise-admin",
"/en/enterprise/2.19/v3/enterprise-admin/ldap": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.19/v3/enterprise-admin/license": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#license",
"/en/enterprise/2.19/v3/enterprise-admin/management_console": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.19/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/orgs": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.19/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.19/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.19/v3/enterprise-admin/search_indexing": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.19/v3/enterprise-admin/users": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#users",
"/en/enterprise/2.19/v3/gists/comments": "/en/enterprise-server@2.19/rest/reference/gists#comments",
"/en/enterprise/2.19/v3/gists": "/en/enterprise-server@2.19/rest/reference/gists",
"/en/enterprise/2.19/v3/git/blobs": "/en/enterprise-server@2.19/rest/reference/git#blobs",
"/en/enterprise/2.19/v3/git/commits": "/en/enterprise-server@2.19/rest/reference/git#commits",
"/en/enterprise/2.19/v3/git": "/en/enterprise-server@2.19/rest/reference/git",
"/en/enterprise/2.19/v3/git/refs": "/en/enterprise-server@2.19/rest/reference/git#refs",
"/en/enterprise/2.19/v3/git/tags": "/en/enterprise-server@2.19/rest/reference/git#tags",
"/en/enterprise/2.19/v3/git/trees": "/en/enterprise-server@2.19/rest/reference/git#trees",
"/en/enterprise/2.19/v3/gitignore": "/en/enterprise-server@2.19/rest/reference/gitignore",
"/en/enterprise/2.19/v3/issues/assignees": "/en/enterprise-server@2.19/rest/reference/issues#assignees",
"/en/enterprise/2.19/v3/issues/comments": "/en/enterprise-server@2.19/rest/reference/issues#comments",
"/en/enterprise/2.19/v3/issues/events": "/en/enterprise-server@2.19/rest/reference/issues#events",
"/en/enterprise/2.19/v3/issues": "/en/enterprise-server@2.19/rest/reference/issues",
"/en/enterprise/2.19/v3/issues/issue-event-types": "/en/enterprise-server@2.19/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.19/v3/issues/labels": "/en/enterprise-server@2.19/rest/reference/issues#labels",
"/en/enterprise/2.19/v3/issues/milestones": "/en/enterprise-server@2.19/rest/reference/issues#milestones",
"/en/enterprise/2.19/v3/issues/timeline": "/en/enterprise-server@2.19/rest/reference/issues#timeline",
"/en/enterprise/2.19/v3/licenses": "/en/enterprise-server@2.19/rest/reference/licenses",
"/en/enterprise/2.19/v3/markdown": "/en/enterprise-server@2.19/rest/reference/markdown",
"/en/enterprise/2.19/v3/meta": "/en/enterprise-server@2.19/rest/reference/meta",
"/en/enterprise/2.19/v3/oauth_authorizations": "/en/enterprise-server@2.19/rest/reference/oauth-authorizations",
"/en/enterprise/2.19/v3/orgs/hooks": "/en/enterprise-server@2.19/rest/reference/orgs#hooks",
"/en/enterprise/2.19/v3/orgs": "/en/enterprise-server@2.19/rest/reference/orgs",
"/en/enterprise/2.19/v3/orgs/members": "/en/enterprise-server@2.19/rest/reference/orgs#members",
"/en/enterprise/2.19/v3/orgs/outside_collaborators": "/en/enterprise-server@2.19/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.19/v3/orgs/pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.19/v3/orgs/teams": "/en/enterprise-server@2.19/rest/reference/orgs#teams",
"/en/enterprise/2.19/v3/projects/cards": "/en/enterprise-server@2.19/rest/reference/projects#cards",
"/en/enterprise/2.19/v3/projects/collaborators": "/en/enterprise-server@2.19/rest/reference/projects#collaborators",
"/en/enterprise/2.19/v3/projects/columns": "/en/enterprise-server@2.19/rest/reference/projects#columns",
"/en/enterprise/2.19/v3/projects": "/en/enterprise-server@2.19/rest/reference/projects",
"/en/enterprise/2.19/v3/pulls/comments": "/en/enterprise-server@2.19/rest/reference/pulls#comments",
"/en/enterprise/2.19/v3/pulls": "/en/enterprise-server@2.19/rest/reference/pulls",
"/en/enterprise/2.19/v3/pulls/review_requests": "/en/enterprise-server@2.19/rest/reference/pulls#review-requests",
"/en/enterprise/2.19/v3/pulls/reviews": "/en/enterprise-server@2.19/rest/reference/pulls#reviews",
"/en/enterprise/2.19/v3/rate_limit": "/en/enterprise-server@2.19/rest/reference/rate-limit",
"/en/enterprise/2.19/v3/reactions": "/en/enterprise-server@2.19/rest/reference/reactions",
"/en/enterprise/2.19/v3/repos/branches": "/en/enterprise-server@2.19/rest/reference/repos#branches",
"/en/enterprise/2.19/v3/repos/collaborators": "/en/enterprise-server@2.19/rest/reference/repos#collaborators",
"/en/enterprise/2.19/v3/repos/comments": "/en/enterprise-server@2.19/rest/reference/repos#comments",
"/en/enterprise/2.19/v3/repos/commits": "/en/enterprise-server@2.19/rest/reference/repos#commits",
"/en/enterprise/2.19/v3/repos/contents": "/en/enterprise-server@2.19/rest/reference/repos#contents",
"/en/enterprise/2.19/v3/repos/deployments": "/en/enterprise-server@2.19/rest/reference/repos#deployments",
"/en/enterprise/2.19/v3/repos/downloads": "/en/enterprise-server@2.19/rest/reference/repos#downloads",
"/en/enterprise/2.19/v3/repos/forks": "/en/enterprise-server@2.19/rest/reference/repos#forks",
"/en/enterprise/2.19/v3/repos/hooks": "/en/enterprise-server@2.19/rest/reference/repos#hooks",
"/en/enterprise/2.19/v3/repos": "/en/enterprise-server@2.19/rest/reference/repos",
"/en/enterprise/2.19/v3/repos/invitations": "/en/enterprise-server@2.19/rest/reference/repos#invitations",
"/en/enterprise/2.19/v3/repos/keys": "/en/enterprise-server@2.19/rest/reference/repos#keys",
"/en/enterprise/2.19/v3/repos/merging": "/en/enterprise-server@2.19/rest/reference/repos#merging",
"/en/enterprise/2.19/v3/repos/pages": "/en/enterprise-server@2.19/rest/reference/repos#pages",
"/en/enterprise/2.19/v3/repos/pre_receive_hooks": "/en/enterprise-server@2.19/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.19/v3/repos/releases": "/en/enterprise-server@2.19/rest/reference/repos#releases",
"/en/enterprise/2.19/v3/repos/statistics": "/en/enterprise-server@2.19/rest/reference/repos#statistics",
"/en/enterprise/2.19/v3/repos/statuses": "/en/enterprise-server@2.19/rest/reference/repos#statuses",
"/en/enterprise/2.19/v3/search": "/en/enterprise-server@2.19/rest/reference/search",
"/en/enterprise/2.19/v3/teams/discussion_comments": "/en/enterprise-server@2.19/rest/reference/teams#discussion-comments",
"/en/enterprise/2.19/v3/teams/discussions": "/en/enterprise-server@2.19/rest/reference/teams#discussions",
"/en/enterprise/2.19/v3/teams": "/en/enterprise-server@2.19/rest/reference/teams",
"/en/enterprise/2.19/v3/teams/members": "/en/enterprise-server@2.19/rest/reference/teams#members",
"/en/enterprise/2.19/v3/users/administration": "/en/enterprise-server@2.19/rest/reference/users#administration",
"/en/enterprise/2.19/v3/users/emails": "/en/enterprise-server@2.19/rest/reference/users#emails",
"/en/enterprise/2.19/v3/users/followers": "/en/enterprise-server@2.19/rest/reference/users#followers",
"/en/enterprise/2.19/v3/users/gpg_keys": "/en/enterprise-server@2.19/rest/reference/users#gpg-keys",
"/en/enterprise/2.19/v3/users": "/en/enterprise-server@2.19/rest/reference/users",
"/en/enterprise/2.19/v3/users/keys": "/en/enterprise-server@2.19/rest/reference/users#keys",
"/en/enterprise/2.20/v3/activity/event_types": "/en/enterprise-server@2.20/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.20/v3/activity/events/types": "/en/enterprise-server@2.20/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.20/v3/activity/events": "/en/enterprise-server@2.20/rest/reference/activity#events",
"/en/enterprise/2.20/v3/activity/feeds": "/en/enterprise-server@2.20/rest/reference/activity#feeds",
"/en/enterprise/2.20/v3/activity": "/en/enterprise-server@2.20/rest/reference/activity",
"/en/enterprise/2.20/v3/activity/notifications": "/en/enterprise-server@2.20/rest/reference/activity#notifications",
"/en/enterprise/2.20/v3/activity/starring": "/en/enterprise-server@2.20/rest/reference/activity#starring",
"/en/enterprise/2.20/v3/activity/watching": "/en/enterprise-server@2.20/rest/reference/activity#watching",
"/en/enterprise/2.20/v3/apps/available-endpoints": "/en/enterprise-server@2.20/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.20/v3/apps": "/en/enterprise-server@2.20/rest/reference/apps",
"/en/enterprise/2.20/v3/apps/installations": "/en/enterprise-server@2.20/rest/reference/apps#installations",
"/en/enterprise/2.20/v3/apps/oauth_applications": "/en/enterprise-server@2.20/rest/reference/apps#oauth-applications",
"/en/enterprise/2.20/v3/apps/permissions": "/en/enterprise-server@2.20/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.20/v3/checks": "/en/enterprise-server@2.20/rest/reference/checks",
"/en/enterprise/2.20/v3/checks/runs": "/en/enterprise-server@2.20/rest/reference/checks#runs",
"/en/enterprise/2.20/v3/checks/suites": "/en/enterprise-server@2.20/rest/reference/checks#suites",
"/en/enterprise/2.20/v3/codes_of_conduct": "/en/enterprise-server@2.20/rest/reference/codes-of-conduct",
"/en/enterprise/2.20/v3/emojis": "/en/enterprise-server@2.20/rest/reference/emojis",
"/en/enterprise/2.20/v3/enterprise-admin/admin_stats": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.20/v3/enterprise-admin/global_webhooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.20/v3/enterprise-admin": "/en/enterprise-server@2.20/rest/reference/enterprise-admin",
"/en/enterprise/2.20/v3/enterprise-admin/ldap": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.20/v3/enterprise-admin/license": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#license",
"/en/enterprise/2.20/v3/enterprise-admin/management_console": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.20/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/orgs": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.20/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.20/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.20/v3/enterprise-admin/search_indexing": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.20/v3/enterprise-admin/users": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#users",
"/en/enterprise/2.20/v3/gists/comments": "/en/enterprise-server@2.20/rest/reference/gists#comments",
"/en/enterprise/2.20/v3/gists": "/en/enterprise-server@2.20/rest/reference/gists",
"/en/enterprise/2.20/v3/git/blobs": "/en/enterprise-server@2.20/rest/reference/git#blobs",
"/en/enterprise/2.20/v3/git/commits": "/en/enterprise-server@2.20/rest/reference/git#commits",
"/en/enterprise/2.20/v3/git": "/en/enterprise-server@2.20/rest/reference/git",
"/en/enterprise/2.20/v3/git/refs": "/en/enterprise-server@2.20/rest/reference/git#refs",
"/en/enterprise/2.20/v3/git/tags": "/en/enterprise-server@2.20/rest/reference/git#tags",
"/en/enterprise/2.20/v3/git/trees": "/en/enterprise-server@2.20/rest/reference/git#trees",
"/en/enterprise/2.20/v3/gitignore": "/en/enterprise-server@2.20/rest/reference/gitignore",
"/en/enterprise/2.20/v3/issues/assignees": "/en/enterprise-server@2.20/rest/reference/issues#assignees",
"/en/enterprise/2.20/v3/issues/comments": "/en/enterprise-server@2.20/rest/reference/issues#comments",
"/en/enterprise/2.20/v3/issues/events": "/en/enterprise-server@2.20/rest/reference/issues#events",
"/en/enterprise/2.20/v3/issues": "/en/enterprise-server@2.20/rest/reference/issues",
"/en/enterprise/2.20/v3/issues/issue-event-types": "/en/enterprise-server@2.20/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.20/v3/issues/labels": "/en/enterprise-server@2.20/rest/reference/issues#labels",
"/en/enterprise/2.20/v3/issues/milestones": "/en/enterprise-server@2.20/rest/reference/issues#milestones",
"/en/enterprise/2.20/v3/issues/timeline": "/en/enterprise-server@2.20/rest/reference/issues#timeline",
"/en/enterprise/2.20/v3/licenses": "/en/enterprise-server@2.20/rest/reference/licenses",
"/en/enterprise/2.20/v3/markdown": "/en/enterprise-server@2.20/rest/reference/markdown",
"/en/enterprise/2.20/v3/meta": "/en/enterprise-server@2.20/rest/reference/meta",
"/en/enterprise/2.20/v3/oauth_authorizations": "/en/enterprise-server@2.20/rest/reference/oauth-authorizations",
"/en/enterprise/2.20/v3/orgs/hooks": "/en/enterprise-server@2.20/rest/reference/orgs#hooks",
"/en/enterprise/2.20/v3/orgs": "/en/enterprise-server@2.20/rest/reference/orgs",
"/en/enterprise/2.20/v3/orgs/members": "/en/enterprise-server@2.20/rest/reference/orgs#members",
"/en/enterprise/2.20/v3/orgs/outside_collaborators": "/en/enterprise-server@2.20/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.20/v3/orgs/pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.20/v3/orgs/teams": "/en/enterprise-server@2.20/rest/reference/orgs#teams",
"/en/enterprise/2.20/v3/projects/cards": "/en/enterprise-server@2.20/rest/reference/projects#cards",
"/en/enterprise/2.20/v3/projects/collaborators": "/en/enterprise-server@2.20/rest/reference/projects#collaborators",
"/en/enterprise/2.20/v3/projects/columns": "/en/enterprise-server@2.20/rest/reference/projects#columns",
"/en/enterprise/2.20/v3/projects": "/en/enterprise-server@2.20/rest/reference/projects",
"/en/enterprise/2.20/v3/pulls/comments": "/en/enterprise-server@2.20/rest/reference/pulls#comments",
"/en/enterprise/2.20/v3/pulls": "/en/enterprise-server@2.20/rest/reference/pulls",
"/en/enterprise/2.20/v3/pulls/review_requests": "/en/enterprise-server@2.20/rest/reference/pulls#review-requests",
"/en/enterprise/2.20/v3/pulls/reviews": "/en/enterprise-server@2.20/rest/reference/pulls#reviews",
"/en/enterprise/2.20/v3/rate_limit": "/en/enterprise-server@2.20/rest/reference/rate-limit",
"/en/enterprise/2.20/v3/reactions": "/en/enterprise-server@2.20/rest/reference/reactions",
"/en/enterprise/2.20/v3/repos/branches": "/en/enterprise-server@2.20/rest/reference/repos#branches",
"/en/enterprise/2.20/v3/repos/collaborators": "/en/enterprise-server@2.20/rest/reference/repos#collaborators",
"/en/enterprise/2.20/v3/repos/comments": "/en/enterprise-server@2.20/rest/reference/repos#comments",
"/en/enterprise/2.20/v3/repos/commits": "/en/enterprise-server@2.20/rest/reference/repos#commits",
"/en/enterprise/2.20/v3/repos/contents": "/en/enterprise-server@2.20/rest/reference/repos#contents",
"/en/enterprise/2.20/v3/repos/deployments": "/en/enterprise-server@2.20/rest/reference/repos#deployments",
"/en/enterprise/2.20/v3/repos/downloads": "/en/enterprise-server@2.20/rest/reference/repos#downloads",
"/en/enterprise/2.20/v3/repos/forks": "/en/enterprise-server@2.20/rest/reference/repos#forks",
"/en/enterprise/2.20/v3/repos/hooks": "/en/enterprise-server@2.20/rest/reference/repos#hooks",
"/en/enterprise/2.20/v3/repos": "/en/enterprise-server@2.20/rest/reference/repos",
"/en/enterprise/2.20/v3/repos/invitations": "/en/enterprise-server@2.20/rest/reference/repos#invitations",
"/en/enterprise/2.20/v3/repos/keys": "/en/enterprise-server@2.20/rest/reference/repos#keys",
"/en/enterprise/2.20/v3/repos/merging": "/en/enterprise-server@2.20/rest/reference/repos#merging",
"/en/enterprise/2.20/v3/repos/pages": "/en/enterprise-server@2.20/rest/reference/repos#pages",
"/en/enterprise/2.20/v3/repos/pre_receive_hooks": "/en/enterprise-server@2.20/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.20/v3/repos/releases": "/en/enterprise-server@2.20/rest/reference/repos#releases",
"/en/enterprise/2.20/v3/repos/statistics": "/en/enterprise-server@2.20/rest/reference/repos#statistics",
"/en/enterprise/2.20/v3/repos/statuses": "/en/enterprise-server@2.20/rest/reference/repos#statuses",
"/en/enterprise/2.20/v3/search": "/en/enterprise-server@2.20/rest/reference/search",
"/en/enterprise/2.20/v3/teams/discussion_comments": "/en/enterprise-server@2.20/rest/reference/teams#discussion-comments",
"/en/enterprise/2.20/v3/teams/discussions": "/en/enterprise-server@2.20/rest/reference/teams#discussions",
"/en/enterprise/2.20/v3/teams": "/en/enterprise-server@2.20/rest/reference/teams",
"/en/enterprise/2.20/v3/teams/members": "/en/enterprise-server@2.20/rest/reference/teams#members",
"/en/enterprise/2.20/v3/users/administration": "/en/enterprise-server@2.20/rest/reference/users#administration",
"/en/enterprise/2.20/v3/users/emails": "/en/enterprise-server@2.20/rest/reference/users#emails",
"/en/enterprise/2.20/v3/users/followers": "/en/enterprise-server@2.20/rest/reference/users#followers",
"/en/enterprise/2.20/v3/users/gpg_keys": "/en/enterprise-server@2.20/rest/reference/users#gpg-keys",
"/en/enterprise/2.20/v3/users": "/en/enterprise-server@2.20/rest/reference/users",
"/en/enterprise/2.20/v3/users/keys": "/en/enterprise-server@2.20/rest/reference/users#keys",
"/en/enterprise/2.21/v3/activity/event_types": "/en/enterprise-server@2.21/developers/webhooks-and-events/github-event-types",
"/en/enterprise/2.21/v3/activity/events/types": "/en/enterprise-server@2.21/developers/webhooks-and-events/webhook-events-and-payloads",
"/en/enterprise/2.21/v3/activity/events": "/en/enterprise-server@2.21/rest/reference/activity#events",
"/en/enterprise/2.21/v3/activity/feeds": "/en/enterprise-server@2.21/rest/reference/activity#feeds",
"/en/enterprise/2.21/v3/activity": "/en/enterprise-server@2.21/rest/reference/activity",
"/en/enterprise/2.21/v3/activity/notifications": "/en/enterprise-server@2.21/rest/reference/activity#notifications",
"/en/enterprise/2.21/v3/activity/starring": "/en/enterprise-server@2.21/rest/reference/activity#starring",
"/en/enterprise/2.21/v3/activity/watching": "/en/enterprise-server@2.21/rest/reference/activity#watching",
"/en/enterprise/2.21/v3/apps/available-endpoints": "/en/enterprise-server@2.21/rest/overview/endpoints-available-for-github-apps",
"/en/enterprise/2.21/v3/apps": "/en/enterprise-server@2.21/rest/reference/apps",
"/en/enterprise/2.21/v3/apps/installations": "/en/enterprise-server@2.21/rest/reference/apps#installations",
"/en/enterprise/2.21/v3/apps/oauth_applications": "/en/enterprise-server@2.21/rest/reference/apps#oauth-applications",
"/en/enterprise/2.21/v3/apps/permissions": "/en/enterprise-server@2.21/rest/reference/permissions-required-for-github-apps",
"/en/enterprise/2.21/v3/checks": "/en/enterprise-server@2.21/rest/reference/checks",
"/en/enterprise/2.21/v3/checks/runs": "/en/enterprise-server@2.21/rest/reference/checks#runs",
"/en/enterprise/2.21/v3/checks/suites": "/en/enterprise-server@2.21/rest/reference/checks#suites",
"/en/enterprise/2.21/v3/codes_of_conduct": "/en/enterprise-server@2.21/rest/reference/codes-of-conduct",
"/en/enterprise/2.21/v3/emojis": "/en/enterprise-server@2.21/rest/reference/emojis",
"/en/enterprise/2.21/v3/enterprise-admin/admin_stats": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#admin-stats",
"/en/enterprise/2.21/v3/enterprise-admin/global_webhooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#global-webhooks",
"/en/enterprise/2.21/v3/enterprise-admin": "/en/enterprise-server@2.21/rest/reference/enterprise-admin",
"/en/enterprise/2.21/v3/enterprise-admin/ldap": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#ldap",
"/en/enterprise/2.21/v3/enterprise-admin/license": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#license",
"/en/enterprise/2.21/v3/enterprise-admin/management_console": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#management-console",
"/en/enterprise/2.21/v3/enterprise-admin/org_pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/orgs": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#orgs",
"/en/enterprise/2.21/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#pre-receive-environments",
"/en/enterprise/2.21/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/repo_pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#repo-pre-receive-hooks",
"/en/enterprise/2.21/v3/enterprise-admin/search_indexing": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#search-indexing",
"/en/enterprise/2.21/v3/enterprise-admin/users": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#users",
"/en/enterprise/2.21/v3/gists/comments": "/en/enterprise-server@2.21/rest/reference/gists#comments",
"/en/enterprise/2.21/v3/gists": "/en/enterprise-server@2.21/rest/reference/gists",
"/en/enterprise/2.21/v3/git/blobs": "/en/enterprise-server@2.21/rest/reference/git#blobs",
"/en/enterprise/2.21/v3/git/commits": "/en/enterprise-server@2.21/rest/reference/git#commits",
"/en/enterprise/2.21/v3/git": "/en/enterprise-server@2.21/rest/reference/git",
"/en/enterprise/2.21/v3/git/refs": "/en/enterprise-server@2.21/rest/reference/git#refs",
"/en/enterprise/2.21/v3/git/tags": "/en/enterprise-server@2.21/rest/reference/git#tags",
"/en/enterprise/2.21/v3/git/trees": "/en/enterprise-server@2.21/rest/reference/git#trees",
"/en/enterprise/2.21/v3/gitignore": "/en/enterprise-server@2.21/rest/reference/gitignore",
"/en/enterprise/2.21/v3/issues/assignees": "/en/enterprise-server@2.21/rest/reference/issues#assignees",
"/en/enterprise/2.21/v3/issues/comments": "/en/enterprise-server@2.21/rest/reference/issues#comments",
"/en/enterprise/2.21/v3/issues/events": "/en/enterprise-server@2.21/rest/reference/issues#events",
"/en/enterprise/2.21/v3/issues": "/en/enterprise-server@2.21/rest/reference/issues",
"/en/enterprise/2.21/v3/issues/issue-event-types": "/en/enterprise-server@2.21/developers/webhooks-and-events/issue-event-types",
"/en/enterprise/2.21/v3/issues/labels": "/en/enterprise-server@2.21/rest/reference/issues#labels",
"/en/enterprise/2.21/v3/issues/milestones": "/en/enterprise-server@2.21/rest/reference/issues#milestones",
"/en/enterprise/2.21/v3/issues/timeline": "/en/enterprise-server@2.21/rest/reference/issues#timeline",
"/en/enterprise/2.21/v3/licenses": "/en/enterprise-server@2.21/rest/reference/licenses",
"/en/enterprise/2.21/v3/markdown": "/en/enterprise-server@2.21/rest/reference/markdown",
"/en/enterprise/2.21/v3/meta": "/en/enterprise-server@2.21/rest/reference/meta",
"/en/enterprise/2.21/v3/oauth_authorizations": "/en/enterprise-server@2.21/rest/reference/oauth-authorizations",
"/en/enterprise/2.21/v3/orgs/hooks": "/en/enterprise-server@2.21/rest/reference/orgs#hooks",
"/en/enterprise/2.21/v3/orgs": "/en/enterprise-server@2.21/rest/reference/orgs",
"/en/enterprise/2.21/v3/orgs/members": "/en/enterprise-server@2.21/rest/reference/orgs#members",
"/en/enterprise/2.21/v3/orgs/outside_collaborators": "/en/enterprise-server@2.21/rest/reference/orgs#outside-collaborators",
"/en/enterprise/2.21/v3/orgs/pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/en/enterprise/2.21/v3/orgs/teams": "/en/enterprise-server@2.21/rest/reference/orgs#teams",
"/en/enterprise/2.21/v3/projects/cards": "/en/enterprise-server@2.21/rest/reference/projects#cards",
"/en/enterprise/2.21/v3/projects/collaborators": "/en/enterprise-server@2.21/rest/reference/projects#collaborators",
"/en/enterprise/2.21/v3/projects/columns": "/en/enterprise-server@2.21/rest/reference/projects#columns",
"/en/enterprise/2.21/v3/projects": "/en/enterprise-server@2.21/rest/reference/projects",
"/en/enterprise/2.21/v3/pulls/comments": "/en/enterprise-server@2.21/rest/reference/pulls#comments",
"/en/enterprise/2.21/v3/pulls": "/en/enterprise-server@2.21/rest/reference/pulls",
"/en/enterprise/2.21/v3/pulls/review_requests": "/en/enterprise-server@2.21/rest/reference/pulls#review-requests",
"/en/enterprise/2.21/v3/pulls/reviews": "/en/enterprise-server@2.21/rest/reference/pulls#reviews",
"/en/enterprise/2.21/v3/rate_limit": "/en/enterprise-server@2.21/rest/reference/rate-limit",
"/en/enterprise/2.21/v3/reactions": "/en/enterprise-server@2.21/rest/reference/reactions",
"/en/enterprise/2.21/v3/repos/branches": "/en/enterprise-server@2.21/rest/reference/repos#branches",
"/en/enterprise/2.21/v3/repos/collaborators": "/en/enterprise-server@2.21/rest/reference/repos#collaborators",
"/en/enterprise/2.21/v3/repos/comments": "/en/enterprise-server@2.21/rest/reference/repos#comments",
"/en/enterprise/2.21/v3/repos/commits": "/en/enterprise-server@2.21/rest/reference/repos#commits",
"/en/enterprise/2.21/v3/repos/contents": "/en/enterprise-server@2.21/rest/reference/repos#contents",
"/en/enterprise/2.21/v3/repos/deployments": "/en/enterprise-server@2.21/rest/reference/repos#deployments",
"/en/enterprise/2.21/v3/repos/downloads": "/en/enterprise-server@2.21/rest/reference/repos#downloads",
"/en/enterprise/2.21/v3/repos/forks": "/en/enterprise-server@2.21/rest/reference/repos#forks",
"/en/enterprise/2.21/v3/repos/hooks": "/en/enterprise-server@2.21/rest/reference/repos#hooks",
"/en/enterprise/2.21/v3/repos": "/en/enterprise-server@2.21/rest/reference/repos",
"/en/enterprise/2.21/v3/repos/invitations": "/en/enterprise-server@2.21/rest/reference/repos#invitations",
"/en/enterprise/2.21/v3/repos/keys": "/en/enterprise-server@2.21/rest/reference/repos#keys",
"/en/enterprise/2.21/v3/repos/merging": "/en/enterprise-server@2.21/rest/reference/repos#merging",
"/en/enterprise/2.21/v3/repos/pages": "/en/enterprise-server@2.21/rest/reference/repos#pages",
"/en/enterprise/2.21/v3/repos/pre_receive_hooks": "/en/enterprise-server@2.21/rest/reference/repos#pre-receive-hooks",
"/en/enterprise/2.21/v3/repos/releases": "/en/enterprise-server@2.21/rest/reference/repos#releases",
"/en/enterprise/2.21/v3/repos/statistics": "/en/enterprise-server@2.21/rest/reference/repos#statistics",
"/en/enterprise/2.21/v3/repos/statuses": "/en/enterprise-server@2.21/rest/reference/repos#statuses",
"/en/enterprise/2.21/v3/search": "/en/enterprise-server@2.21/rest/reference/search",
"/en/enterprise/2.21/v3/teams/discussion_comments": "/en/enterprise-server@2.21/rest/reference/teams#discussion-comments",
"/en/enterprise/2.21/v3/teams/discussions": "/en/enterprise-server@2.21/rest/reference/teams#discussions",
"/en/enterprise/2.21/v3/teams": "/en/enterprise-server@2.21/rest/reference/teams",
"/en/enterprise/2.21/v3/teams/members": "/en/enterprise-server@2.21/rest/reference/teams#members",
"/en/enterprise/2.21/v3/users/administration": "/en/enterprise-server@2.21/rest/reference/users#administration",
"/en/enterprise/2.21/v3/users/emails": "/en/enterprise-server@2.21/rest/reference/users#emails",
"/en/enterprise/2.21/v3/users/followers": "/en/enterprise-server@2.21/rest/reference/users#followers",
"/en/enterprise/2.21/v3/users/gpg_keys": "/en/enterprise-server@2.21/rest/reference/users#gpg-keys",
"/en/enterprise/2.21/v3/users": "/en/enterprise-server@2.21/rest/reference/users",
"/en/enterprise/2.21/v3/users/keys": "/en/enterprise-server@2.21/rest/reference/users#keys",
"/v3/actions/artifacts": "/en/free-pro-team@latest/rest/reference/actions#artifacts",
"/v3/actions": "/en/free-pro-team@latest/rest/reference/actions",
"/v3/actions/secrets": "/en/free-pro-team@latest/rest/reference/actions#secrets",
"/v3/actions/self-hosted-runners": "/en/free-pro-team@latest/rest/reference/actions#self-hosted-runners",
"/v3/actions/self_hosted_runners": "/en/free-pro-team@latest/rest/reference/actions#self-hosted-runners",
"/v3/actions/workflow-jobs": "/en/free-pro-team@latest/rest/reference/actions#workflow-jobs",
"/v3/actions/workflow-runs": "/en/free-pro-team@latest/rest/reference/actions#workflow-runs",
"/v3/actions/workflows": "/en/free-pro-team@latest/rest/reference/actions#workflows",
"/v3/activity/event_types": "/en/free-pro-team@latest/developers/webhooks-and-events/github-event-types",
"/v3/activity/events/types": "/en/free-pro-team@latest/developers/webhooks-and-events/webhook-events-and-payloads",
"/v3/activity/events": "/en/free-pro-team@latest/rest/reference/activity#events",
"/v3/activity/feeds": "/en/free-pro-team@latest/rest/reference/activity#feeds",
"/v3/activity": "/en/free-pro-team@latest/rest/reference/activity",
"/v3/activity/notifications": "/en/free-pro-team@latest/rest/reference/activity#notifications",
"/v3/activity/starring": "/en/free-pro-team@latest/rest/reference/activity#starring",
"/v3/activity/watching": "/en/free-pro-team@latest/rest/reference/activity#watching",
"/v3/apps/available-endpoints": "/en/free-pro-team@latest/rest/overview/endpoints-available-for-github-apps",
"/v3/apps": "/en/free-pro-team@latest/rest/reference/apps",
"/v3/apps/installations": "/en/free-pro-team@latest/rest/reference/apps#installations",
"/v3/apps/marketplace": "/en/free-pro-team@latest/rest/reference/apps#marketplace",
"/v3/apps/oauth_applications": "/en/free-pro-team@latest/rest/reference/apps#oauth-applications",
"/v3/apps/permissions": "/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps",
"/v3/checks": "/en/free-pro-team@latest/rest/reference/checks",
"/v3/checks/runs": "/en/free-pro-team@latest/rest/reference/checks#runs",
"/v3/checks/suites": "/en/free-pro-team@latest/rest/reference/checks#suites",
"/v3/code-scanning": "/en/free-pro-team@latest/rest/reference/code-scanning",
"/v3/codes_of_conduct": "/en/free-pro-team@latest/rest/reference/codes-of-conduct",
"/v3/emojis": "/en/free-pro-team@latest/rest/reference/emojis",
"/v3/enterprise-admin": "/en/free-pro-team@latest/rest/reference/enterprise-admin",
"/v3/enterprise-admin/admin_stats": "/en/enterprise-server/rest/reference/enterprise-admin#admin-stats",
"/v3/enterprise-admin/global_webhooks": "/en/enterprise-server/rest/reference/enterprise-admin#global-webhooks",
"/v3/enterprise-admin/ldap": "/en/enterprise-server/rest/reference/enterprise-admin#ldap",
"/v3/enterprise-admin/license": "/en/enterprise-server/rest/reference/enterprise-admin#license",
"/v3/enterprise-admin/management_console": "/en/enterprise-server/rest/reference/enterprise-admin#management-console",
"/v3/enterprise-admin/orgs": "/en/enterprise-server/rest/reference/enterprise-admin#orgs",
"/v3/enterprise-admin/pre_receive_environments": "/en/enterprise-server/rest/reference/enterprise-admin#pre-receive-environments",
"/v3/enterprise-admin/pre_receive_hooks": "/en/enterprise-server/rest/reference/enterprise-admin#pre-receive-hooks",
"/v3/enterprise-admin/search_indexing": "/en/enterprise-server/rest/reference/enterprise-admin#search-indexing",
"/v3/enterprise-admin/users": "/en/enterprise-server/rest/reference/enterprise-admin#users",
"/v3/gists/comments": "/en/free-pro-team@latest/rest/reference/gists#comments",
"/v3/gists": "/en/free-pro-team@latest/rest/reference/gists",
"/v3/git/blobs": "/en/free-pro-team@latest/rest/reference/git#blobs",
"/v3/git/commits": "/en/free-pro-team@latest/rest/reference/git#commits",
"/v3/git": "/en/free-pro-team@latest/rest/reference/git",
"/v3/git/refs": "/en/free-pro-team@latest/rest/reference/git#refs",
"/v3/git/tags": "/en/free-pro-team@latest/rest/reference/git#tags",
"/v3/git/trees": "/en/free-pro-team@latest/rest/reference/git#trees",
"/v3/gitignore": "/en/free-pro-team@latest/rest/reference/gitignore",
"/v3/interactions": "/en/free-pro-team@latest/rest/reference/interactions",
"/v3/interactions/orgs": "/en/free-pro-team@latest/rest/reference/interactions#orgs",
"/v3/interactions/repos": "/en/free-pro-team@latest/rest/reference/interactions#repos",
"/v3/issues/assignees": "/en/free-pro-team@latest/rest/reference/issues#assignees",
"/v3/issues/comments": "/en/free-pro-team@latest/rest/reference/issues#comments",
"/v3/issues/events": "/en/free-pro-team@latest/rest/reference/issues#events",
"/v3/issues": "/en/free-pro-team@latest/rest/reference/issues",
"/v3/issues/issue-event-types": "/en/free-pro-team@latest/developers/webhooks-and-events/issue-event-types",
"/v3/issues/labels": "/en/free-pro-team@latest/rest/reference/issues#labels",
"/v3/issues/milestones": "/en/free-pro-team@latest/rest/reference/issues#milestones",
"/v3/issues/timeline": "/en/free-pro-team@latest/rest/reference/issues#timeline",
"/v3/licenses": "/en/free-pro-team@latest/rest/reference/licenses",
"/v3/markdown": "/en/free-pro-team@latest/rest/reference/markdown",
"/v3/meta": "/en/free-pro-team@latest/rest/reference/meta",
"/v3/migrations": "/en/free-pro-team@latest/rest/reference/migrations",
"/v3/migrations/orgs": "/en/free-pro-team@latest/rest/reference/migrations#orgs",
"/v3/migrations/source_imports": "/en/free-pro-team@latest/rest/reference/migrations#source-imports",
"/v3/migrations/users": "/en/free-pro-team@latest/rest/reference/migrations#users",
"/v3/oauth_authorizations": "/en/free-pro-team@latest/rest/reference/oauth-authorizations",
"/v3/orgs/blocking": "/en/free-pro-team@latest/rest/reference/orgs#blocking",
"/v3/orgs/hooks": "/en/free-pro-team@latest/rest/reference/orgs#hooks",
"/v3/orgs": "/en/free-pro-team@latest/rest/reference/orgs",
"/v3/orgs/members": "/en/free-pro-team@latest/rest/reference/orgs#members",
"/v3/orgs/migrations": "/en/free-pro-team@latest/rest/reference/orgs#migrations",
"/v3/orgs/outside_collaborators": "/en/free-pro-team@latest/rest/reference/orgs#outside-collaborators",
"/v3/orgs/pre_receive_hooks": "/en/enterprise-server/rest/reference/enterprise-admin#organization-pre-receive-hooks",
"/v3/orgs/teams": "/en/free-pro-team@latest/rest/reference/orgs#teams",
"/v3/projects/cards": "/en/free-pro-team@latest/rest/reference/projects#cards",
"/v3/projects/collaborators": "/en/free-pro-team@latest/rest/reference/projects#collaborators",
"/v3/projects/columns": "/en/free-pro-team@latest/rest/reference/projects#columns",
"/v3/projects": "/en/free-pro-team@latest/rest/reference/projects",
"/v3/pulls/comments": "/en/free-pro-team@latest/rest/reference/pulls#comments",
"/v3/pulls": "/en/free-pro-team@latest/rest/reference/pulls",
"/v3/pulls/review_requests": "/en/free-pro-team@latest/rest/reference/pulls#review-requests",
"/v3/pulls/reviews": "/en/free-pro-team@latest/rest/reference/pulls#reviews",
"/v3/rate_limit": "/en/free-pro-team@latest/rest/reference/rate-limit",
"/v3/reactions": "/en/free-pro-team@latest/rest/reference/reactions",
"/v3/repos/branches": "/en/free-pro-team@latest/rest/reference/repos#branches",
"/v3/repos/collaborators": "/en/free-pro-team@latest/rest/reference/repos#collaborators",
"/v3/repos/comments": "/en/free-pro-team@latest/rest/reference/repos#comments",
"/v3/repos/commits": "/en/free-pro-team@latest/rest/reference/repos#commits",
"/v3/repos/community": "/en/free-pro-team@latest/rest/reference/repos#community",
"/v3/repos/contents": "/en/free-pro-team@latest/rest/reference/repos#contents",
"/v3/repos/deployments": "/en/free-pro-team@latest/rest/reference/repos#deployments",
"/v3/repos/downloads": "/en/free-pro-team@latest/rest/reference/repos#downloads",
"/v3/repos/forks": "/en/free-pro-team@latest/rest/reference/repos#forks",
"/v3/repos/hooks": "/en/free-pro-team@latest/rest/reference/repos#hooks",
"/v3/repos": "/en/free-pro-team@latest/rest/reference/repos",
"/v3/repos/invitations": "/en/free-pro-team@latest/rest/reference/repos#invitations",
"/v3/repos/keys": "/en/free-pro-team@latest/rest/reference/repos#keys",
"/v3/repos/merging": "/en/free-pro-team@latest/rest/reference/repos#merging",
"/v3/repos/pages": "/en/free-pro-team@latest/rest/reference/repos#pages",
"/v3/repos/pre_receive_hooks": "/en/free-pro-team@latest/rest/reference/repos#pre-receive-hooks",
"/v3/repos/releases": "/en/free-pro-team@latest/rest/reference/repos#releases",
"/v3/repos/statistics": "/en/free-pro-team@latest/rest/reference/repos#statistics",
"/v3/repos/statuses": "/en/free-pro-team@latest/rest/reference/repos#statuses",
"/v3/repos/traffic": "/en/free-pro-team@latest/rest/reference/repos#traffic",
"/v3/scim": "/en/free-pro-team@latest/rest/reference/scim",
"/v3/search": "/en/free-pro-team@latest/rest/reference/search",
"/v3/teams/discussion_comments": "/en/free-pro-team@latest/rest/reference/teams#discussion-comments",
"/v3/teams/discussions": "/en/free-pro-team@latest/rest/reference/teams#discussions",
"/v3/teams": "/en/free-pro-team@latest/rest/reference/teams",
"/v3/teams/members": "/en/free-pro-team@latest/rest/reference/teams#members",
"/v3/teams/team_sync": "/en/free-pro-team@latest/rest/reference/teams#team-sync",
"/v3/users/blocking": "/en/free-pro-team@latest/rest/reference/users#blocking",
"/v3/users/emails": "/en/free-pro-team@latest/rest/reference/users#emails",
"/v3/users/followers": "/en/free-pro-team@latest/rest/reference/users#followers",
"/v3/users/gpg_keys": "/en/free-pro-team@latest/rest/reference/users#gpg-keys",
"/v3/users": "/en/free-pro-team@latest/rest/reference/users",
"/v3/users/keys": "/en/free-pro-team@latest/rest/reference/users#keys"
}

View File

@@ -1,5 +1,6 @@
---
title: A sample article
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---

View File

@@ -1,7 +1,7 @@
---
title: A sample TOC
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---
{% link_in_list /sample-article %}

View File

@@ -1,7 +1,7 @@
---
title: Translated TOC
productVersions:
dotcom: '*'
versions:
free-pro-team: '*'
---
### 目次

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const flat = require('flat')
const { last } = require('lodash')
const cheerio = require('cheerio')
@@ -58,9 +57,7 @@ describe('page rendering', () => {
const brokenLinksPerPage = {}
// get an array of the pages product versions
const pageVersions = process.env.FEATURE_NEW_VERSIONS
? getApplicableVersions(page.versions, page.relativePath)
: getApplicableVersions(page.productVersions, page.relativePath)
const pageVersions = getApplicableVersions(page.versions, page.relativePath)
for (const pageVersion of pageVersions) {
// attach page-specific properties to context
@@ -70,9 +67,7 @@ describe('page rendering', () => {
const relevantPermalink = page.permalinks.find(permalink => permalink.pageVersion === pageVersion)
const currentOldVersion = process.env.FEATURE_NEW_VERSIONS
? getOldVersionFromNewVersion(pageVersion)
: pageVersion
const currentOldVersion = getOldVersionFromNewVersion(pageVersion)
// borrowed from middleware/contextualizers/graphql.js
context.graphql = {

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const cheerio = require('cheerio')
const loadPages = require('../../lib/pages')
const loadSiteData = require('../../lib/site-data')
@@ -50,9 +49,7 @@ describe('page rendering', () => {
const brokenLinksPerPage = {}
// get an array of the pages product versions
const pageVersions = process.env.FEATURE_NEW_VERSIONS
? getApplicableVersions(page.versions, page.relativePath)
: getApplicableVersions(page.productVersions, page.relativePath)
const pageVersions = getApplicableVersions(page.versions, page.relativePath)
for (const pageVersion of pageVersions) {
// attach page-specific properties to context

View File

@@ -1,9 +1,6 @@
const { getDOM, getJSON } = require('../helpers')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('breadcrumbs', () => {
jest.setTimeout(300 * 1000)
@@ -24,7 +21,7 @@ describe('breadcrumbs', () => {
expect($breadcrumbs.eq(3).attr('title')).toBe('article: Supported browsers')
})
testFeatureNewVersions('maptopic pages include their own grayed-out breadcrumb', async () => {
test('maptopic pages include their own grayed-out breadcrumb', async () => {
const $ = await getDOM('/github/getting-started-with-github/using-github')
const $breadcrumbs = $('.breadcrumbs a')
@@ -35,18 +32,7 @@ describe('breadcrumbs', () => {
expect($breadcrumbs.eq(2).hasClass('text-gray-light')).toBe(true)
})
testFeatureOldVersions('maptopic pages include their own grayed-out breadcrumb', async () => {
const $ = await getDOM('/github/getting-started-with-github/using-github')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs).toHaveLength(3)
expect($breadcrumbs.eq(0).attr('title')).toBe('product: GitHub.com')
expect($breadcrumbs.eq(1).attr('title')).toBe('category: Getting started')
expect($breadcrumbs.eq(2).attr('title')).toBe('maptopic: Using GitHub')
expect($breadcrumbs.eq(2).hasClass('text-gray-light')).toBe(true)
})
testFeatureNewVersions('works for enterprise user pages', async () => {
test('works for enterprise user pages', async () => {
const $ = await getDOM('/en/enterprise/user/github/getting-started-with-github/supported-browsers')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs).toHaveLength(4)
@@ -54,13 +40,6 @@ describe('breadcrumbs', () => {
expect($breadcrumbs.eq(0).attr('title')).toBe('product: GitHub.com')
})
testFeatureOldVersions('works for enterprise user pages', async () => {
const $ = await getDOM('/en/enterprise/user/github/getting-started-with-github/supported-browsers')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs).toHaveLength(4)
expect($breadcrumbs.eq(0).attr('title')).toBe('product: GitHub Enterprise Server')
})
test('parses Liquid variables inside titles', async () => {
const $ = await getDOM('/en/enterprise/admin/enterprise-support')
const $breadcrumbs = $('.breadcrumbs a')
@@ -68,33 +47,21 @@ describe('breadcrumbs', () => {
expect($breadcrumbs.eq(1).attr('title')).toBe('category: Working with GitHub Support')
})
testFeatureNewVersions('English breadcrumbs link to English pages', async () => {
test('English breadcrumbs link to English pages', async () => {
const $ = await getDOM('/en/github/getting-started-with-github')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs.eq(0).attr('href')).toBe(`/en/${nonEnterpriseDefaultVersion}/github`)
})
testFeatureOldVersions('English breadcrumbs link to English pages', async () => {
const $ = await getDOM('/en/github/getting-started-with-github')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs.eq(0).attr('href')).toBe('/en/github')
})
testFeatureNewVersions('localized breadcrumbs link to localize pages', async () => {
test('localized breadcrumbs link to localize pages', async () => {
const $ = await getDOM('/ja/github/getting-started-with-github')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs.eq(0).attr('href')).toBe(`/ja/${nonEnterpriseDefaultVersion}/github`)
})
testFeatureOldVersions('localized breadcrumbs link to localize pages', async () => {
const $ = await getDOM('/ja/github/getting-started-with-github')
const $breadcrumbs = $('.breadcrumbs a')
expect($breadcrumbs.eq(0).attr('href')).toBe('/ja/github')
})
})
describe('context.breadcrumbs object', () => {
testFeatureNewVersions('works on product index pages', async () => {
test('works on product index pages', async () => {
const breadcrumbs = await getJSON('/en/github?json=breadcrumbs')
const expected = {
product: {
@@ -105,18 +72,7 @@ describe('breadcrumbs', () => {
expect(breadcrumbs).toEqual(expected)
})
testFeatureOldVersions('works on product index pages', async () => {
const breadcrumbs = await getJSON('/en/github?json=breadcrumbs')
const expected = {
product: {
href: '/github',
title: 'GitHub.com'
}
}
expect(breadcrumbs).toEqual(expected)
})
testFeatureNewVersions('works on category index pages', async () => {
test('works on category index pages', async () => {
const breadcrumbs = await getJSON('/en/github/authenticating-to-github?json=breadcrumbs')
const expected = {
product: {
@@ -131,22 +87,7 @@ describe('breadcrumbs', () => {
expect(breadcrumbs).toEqual(expected)
})
testFeatureOldVersions('works on category index pages', async () => {
const breadcrumbs = await getJSON('/en/github/authenticating-to-github?json=breadcrumbs')
const expected = {
product: {
href: '/github',
title: 'GitHub.com'
},
category: {
href: '/github/authenticating-to-github',
title: 'Authentication'
}
}
expect(breadcrumbs).toEqual(expected)
})
testFeatureNewVersions('works on maptopic pages', async () => {
test('works on maptopic pages', async () => {
const breadcrumbs = await getJSON('/en/github/authenticating-to-github/keeping-your-account-and-data-secure?json=breadcrumbs')
const expected = {
product: {
@@ -165,26 +106,7 @@ describe('breadcrumbs', () => {
expect(breadcrumbs).toEqual(expected)
})
testFeatureOldVersions('works on maptopic pages', async () => {
const breadcrumbs = await getJSON('/en/github/authenticating-to-github/keeping-your-account-and-data-secure?json=breadcrumbs')
const expected = {
product: {
href: '/github',
title: 'GitHub.com'
},
category: {
href: '/github/authenticating-to-github',
title: 'Authentication'
},
maptopic: {
href: '/github/authenticating-to-github/keeping-your-account-and-data-secure',
title: 'Keeping your account and data secure'
}
}
expect(breadcrumbs).toEqual(expected)
})
testFeatureNewVersions('works on articles that DO have maptopics ', async () => {
test('works on articles that DO have maptopics ', async () => {
const breadcrumbs = await getJSON('/en/github/authenticating-to-github/creating-a-strong-password?json=breadcrumbs')
const expected = {
product: {
@@ -207,30 +129,7 @@ describe('breadcrumbs', () => {
expect(breadcrumbs).toEqual(expected)
})
testFeatureOldVersions('works on articles that DO have maptopics ', async () => {
const breadcrumbs = await getJSON('/en/github/authenticating-to-github/creating-a-strong-password?json=breadcrumbs')
const expected = {
product: {
href: '/github',
title: 'GitHub.com'
},
category: {
href: '/github/authenticating-to-github',
title: 'Authentication'
},
maptopic: {
href: '/github/authenticating-to-github/keeping-your-account-and-data-secure',
title: 'Keeping your account and data secure'
},
article: {
href: '/github/authenticating-to-github/creating-a-strong-password',
title: 'Creating a strong password'
}
}
expect(breadcrumbs).toEqual(expected)
})
testFeatureNewVersions('works on articles that DO NOT have maptopics ', async () => {
test('works on articles that DO NOT have maptopics ', async () => {
const breadcrumbs = await getJSON('/github/site-policy/github-privacy-statement?json=breadcrumbs')
const expected = {
product: {
@@ -249,25 +148,6 @@ describe('breadcrumbs', () => {
expect(breadcrumbs).toEqual(expected)
})
testFeatureOldVersions('works on articles that DO NOT have maptopics ', async () => {
const breadcrumbs = await getJSON('/github/site-policy/github-privacy-statement?json=breadcrumbs')
const expected = {
product: {
href: '/github',
title: 'GitHub.com'
},
category: {
href: '/github/site-policy',
title: 'Site policy'
},
article: {
href: '/github/site-policy/github-privacy-statement',
title: 'GitHub Privacy Statement'
}
}
expect(breadcrumbs).toEqual(expected)
})
test('returns an empty object on the landing page', async () => {
const breadcrumbs = await getJSON('/en?json=breadcrumbs')
expect(breadcrumbs).toEqual({})

View File

@@ -1,11 +1,7 @@
require('../../lib/feature-flags')
const { getDOM } = require('../helpers')
const { oldestSupported, latest } = require('../../lib/enterprise-server-releases')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('header', () => {
jest.setTimeout(5 * 60 * 1000)
@@ -24,16 +20,11 @@ describe('header', () => {
})
describe('language links', () => {
testFeatureNewVersions('lead to the same page in a different language', async () => {
test('lead to the same page in a different language', async () => {
const $ = await getDOM('/en/github/administering-a-repository/enabling-required-status-checks')
expect($(`#languages-selector a[href="/ja/${nonEnterpriseDefaultVersion}/github/administering-a-repository/enabling-required-status-checks"]`).length).toBe(1)
})
testFeatureOldVersions('lead to the same page in a different language', async () => {
const $ = await getDOM('/en/github/administering-a-repository/enabling-required-status-checks')
expect($('#languages-selector a[href="/ja/github/administering-a-repository/enabling-required-status-checks"]').length).toBe(1)
})
test('display the native name and the English name for each translated language', async () => {
const $ = await getDOM('/en')
expect($('#languages-selector a[href="/en"]').text().trim()).toBe('English')
@@ -76,7 +67,7 @@ describe('header', () => {
})
describe('mobile-only product dropdown links', () => {
testFeatureNewVersions('include github and admin, and emphasize the current product', async () => {
test('include github and admin, and emphasize the current product', async () => {
const $ = await getDOM('/en/articles/enabling-required-status-checks')
const github = $(`#homepages a.active[href="/en/${nonEnterpriseDefaultVersion}/github"]`)
@@ -90,46 +81,18 @@ describe('header', () => {
expect(ghe.attr('class').includes('active')).toBe(false)
})
testFeatureOldVersions('include dotcom and enterprise homepage, and emphasize the current product', async () => {
const $ = await getDOM('/en/articles/enabling-required-status-checks')
const dotcom = $('#homepages a.active[href="/en/github"]')
expect(dotcom.length).toBe(1)
expect(dotcom.text().trim()).toBe('GitHub.com')
expect(dotcom.attr('class').includes('active')).toBe(true)
const ghe = $('#homepages a[href="/en/enterprise/admin"]')
expect(ghe.length).toBe(1)
expect(ghe.text().trim()).toBe('Enterprise Server')
expect(ghe.attr('class').includes('active')).toBe(false)
})
testFeatureNewVersions('point to homepages in the current page\'s language', async () => {
test('point to homepages in the current page\'s language', async () => {
const $ = await getDOM('/ja/articles/enabling-required-status-checks')
expect($(`#homepages a.active[href="/ja/${nonEnterpriseDefaultVersion}/github"]`).length).toBe(1)
expect($(`#homepages a[href="/ja/enterprise-server@${latest}/admin"]`).length).toBe(1)
})
testFeatureOldVersions('point to homepages in the current page\'s language', async () => {
const $ = await getDOM('/ja/articles/enabling-required-status-checks')
expect($('#homepages a.active[href="/ja/github"]').length).toBe(1)
expect($('#homepages a[href="/ja/enterprise/admin"]').length).toBe(1)
})
testFeatureNewVersions('emphasizes the product that corresponds to the current page', async () => {
test('emphasizes the product that corresponds to the current page', async () => {
const $ = await getDOM(`/en/enterprise/${oldestSupported}/user/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address`)
expect($(`#homepages a.active[href="/en/enterprise-server@${latest}/admin"]`).length).toBe(0)
expect($(`#homepages a[href="/en/${nonEnterpriseDefaultVersion}/github"]`).length).toBe(1)
expect($(`#homepages a.active[href="/en/${nonEnterpriseDefaultVersion}/github"]`).length).toBe(1)
})
testFeatureOldVersions('emphasizes the product that corresponds to the current page', async () => {
const $ = await getDOM(`/en/enterprise/${oldestSupported}/user/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address`)
expect($('#homepages a.active[href="/en/enterprise/admin"]').length).toBe(0)
expect($('#homepages a[href="/en/github"]').length).toBe(1)
expect($('#homepages a.active[href="/en/github"]').length).toBe(1)
})
})
})

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const renderContent = require('../../lib/render-content')
describe('octicon tag', () => {

View File

@@ -1,23 +1,14 @@
require('../../lib/feature-flags')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const { getDOM } = require('../helpers')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('page titles', () => {
jest.setTimeout(300 * 1000)
testFeatureNewVersions('English homepage', async () => {
test('English homepage', async () => {
const $ = await getDOM('/en')
expect($('title').text()).toBe('GitHub Documentation')
})
testFeatureOldVersions('dotcom English homepage', async () => {
const $ = await getDOM('/en')
expect($('title').text()).toBe('GitHub.com Help Documentation')
})
test('dotcom English article', async () => {
const $ = await getDOM('/en/articles/authorizing-oauth-apps')
expect($('title').text()).toBe('Authorizing OAuth Apps - GitHub Docs')
@@ -38,7 +29,7 @@ describe('page titles', () => {
expect($('title').text()).toBe('Managing large files - GitHub Docs')
})
testFeatureNewVersions('dynamically parses liquid in page titles (even on subsequent requests)', async () => {
test('dynamically parses liquid in page titles (even on subsequent requests)', async () => {
let $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
expect($('title').text()).toBe('GitHub Enterprise Help Documentation - GitHub Docs')
@@ -49,20 +40,6 @@ describe('page titles', () => {
expect($('title').text()).toBe('GitHub Enterprise Help Documentation - GitHub Docs')
})
testFeatureOldVersions('dynamically parses liquid in page titles (even on subsequent requests)', async () => {
let $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
expect($('h1').text()).toBe(`Enterprise Server ${enterpriseServerReleases.latest}`)
expect($('title').text()).toBe(`Enterprise Server ${enterpriseServerReleases.latest} - GitHub Docs`)
$ = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
expect($('h1').text()).toBe(`Enterprise Server ${enterpriseServerReleases.oldestSupported}`)
expect($('title').text()).toBe(`Enterprise Server ${enterpriseServerReleases.oldestSupported} - GitHub Docs`)
$ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
expect($('h1').text()).toBe(`Enterprise Server ${enterpriseServerReleases.latest}`)
expect($('title').text()).toBe(`Enterprise Server ${enterpriseServerReleases.latest} - GitHub Docs`)
})
// TODO enable this once translated content has synced with the versioning changes
// Note the expected translations may need to be updated, since the English title changed
// from `GitHub.com Help Documentation` to `GitHub Documentation`
@@ -70,9 +47,4 @@ describe('page titles', () => {
expect((await getDOM('/cn'))('title').text()).toBe('GitHub 帮助文档')
expect((await getDOM('/ja'))('title').text()).toBe('GitHub ヘルプドキュメント')
})
testFeatureOldVersions('displays only the site name on localized homepages', async () => {
expect((await getDOM('/cn'))('title').text()).toBe('GitHub.com 帮助文档')
expect((await getDOM('/ja'))('title').text()).toBe('GitHub.com ヘルプドキュメント')
})
})

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const languages = require('../../lib/languages')
const robotsParser = require('robots-parser')
const robotsMiddleware = require('../../middleware/robots')

View File

@@ -1,13 +1,9 @@
require('../../lib/feature-flags')
const lodash = require('lodash')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const { get, getDOM, head } = require('../helpers')
const path = require('path')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('server', () => {
jest.setTimeout(60 * 1000)
@@ -235,16 +231,11 @@ describe('server', () => {
expect($.text().includes('{{ page.title }}')).toBe(true)
})
testFeatureNewVersions('displays links to categories on product TOCs', async () => {
test('displays links to categories on product TOCs', async () => {
const $ = await getDOM('/en/github')
expect($(`article a[href="/en/${nonEnterpriseDefaultVersion}/github/getting-started-with-github"]`)).toHaveLength(1)
})
testFeatureOldVersions('displays links to categories on product TOCs', async () => {
const $ = await getDOM('/en/github')
expect($('article a[href="/en/github/getting-started-with-github"]')).toHaveLength(1)
})
describe('autogenerated mini TOCs', () => {
// TODO disable the mini TOC tests when we replace it with sticky TOC header
test('renders mini TOC in articles with more than one heading', async () => {
@@ -309,103 +300,56 @@ describe('server', () => {
})
describe('English local links', () => {
const latestEnterprisePath = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}`
: `/en/enterprise/${enterpriseServerReleases.latest}`
const latestEnterprisePath = `/en/enterprise-server@${enterpriseServerReleases.latest}`
testFeatureNewVersions('dotcom articles on dotcom have links that include "en"', async () => {
test('dotcom articles on dotcom have links that include "en"', async () => {
const $ = await getDOM('/en/articles/set-up-git')
expect($(`a[href="/en/${nonEnterpriseDefaultVersion}/articles/managing-files-on-github"]`).length).toBe(1)
})
testFeatureOldVersions('dotcom articles on dotcom have links that include "en"', async () => {
const $ = await getDOM('/en/articles/set-up-git')
expect($('a[href="/en/articles/managing-files-on-github"]').length).toBe(1)
})
testFeatureNewVersions('dotcom articles on dotcom have Enterprise Admin links with latest GHE version', async () => {
test('dotcom articles on dotcom have Enterprise Admin links with latest GHE version', async () => {
const $ = await getDOM('/en/articles/setting-up-a-trial-of-github-enterprise-server')
expect($(`a[href="${latestEnterprisePath}/admin/installation/setting-up-a-github-enterprise-server-instance"]`).length).toBe(2)
})
testFeatureOldVersions('dotcom articles on dotcom have Enterprise Admin links with latest GHE version', async () => {
const $ = await getDOM('/en/articles/setting-up-a-trial-of-github-enterprise-server')
expect($(`a[href="${latestEnterprisePath}/admin/installation/setting-up-a-github-enterprise-server-instance"]`).length).toBe(2)
})
testFeatureNewVersions('dotcom articles on GHE have Enterprise user links', async () => {
test('dotcom articles on GHE have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/github/getting-started-with-github/set-up-git`)
expect($(`a[href="${latestEnterprisePath}/articles/managing-files-on-github"]`).length).toBe(1)
})
testFeatureOldVersions('dotcom articles on GHE have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/user/github/getting-started-with-github/set-up-git`)
expect($(`a[href="${latestEnterprisePath}/user/articles/managing-files-on-github"]`).length).toBe(1)
})
testFeatureNewVersions('dotcom categories on GHE have Enterprise user links', async () => {
test('dotcom categories on GHE have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/github/managing-large-files`)
expect($(`article a[href="${latestEnterprisePath}/github/managing-large-files/conditions-for-large-files"]`).length).toBe(1)
})
testFeatureOldVersions('dotcom categories on GHE have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/user/github/managing-large-files`)
expect($(`article a[href="${latestEnterprisePath}/user/github/managing-large-files/conditions-for-large-files"]`).length).toBe(1)
})
testFeatureNewVersions('dotcom-only links on GHE are dotcom-only', async () => {
test('dotcom-only links on GHE are dotcom-only', async () => {
const $ = await getDOM(`${latestEnterprisePath}/github/setting-up-and-managing-your-github-profile/sending-your-github-enterprise-server-contributions-to-your-githubcom-profile`)
expect($(`article a[href="/en/${nonEnterpriseDefaultVersion}/articles/github-privacy-statement"]`).length).toBe(1)
})
testFeatureOldVersions('dotcom-only links on GHE are dotcom-only', async () => {
const $ = await getDOM(`${latestEnterprisePath}/user/github/setting-up-and-managing-your-github-profile/sending-your-github-enterprise-server-contributions-to-your-githubcom-profile`)
expect($('article a[href="/en/articles/github-privacy-statement"]').length).toBe(1)
})
testFeatureNewVersions('desktop links on GHE are dotcom-only', async () => {
test('desktop links on GHE are dotcom-only', async () => {
const $ = await getDOM(`${latestEnterprisePath}/github/getting-started-with-github/set-up-git`)
expect($(`article a[href="/en/${nonEnterpriseDefaultVersion}/desktop/installing-and-configuring-github-desktop"]`).length).toBe(1)
})
testFeatureOldVersions('desktop links on GHE are dotcom-only', async () => {
const $ = await getDOM(`${latestEnterprisePath}/user/github/getting-started-with-github/set-up-git`)
expect($('article a[href="/en/desktop/installing-and-configuring-github-desktop"]').length).toBe(1)
})
testFeatureNewVersions('admin articles that link to non-admin articles have Enterprise user links', async () => {
test('admin articles that link to non-admin articles have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/admin/installation/configuring-the-default-visibility-of-new-repositories-on-your-appliance`)
expect($(`article a[href="${latestEnterprisePath}/github/creating-cloning-and-archiving-repositories/about-repository-visibility"]`).length).toBeGreaterThan(0)
})
testFeatureOldVersions('admin articles that link to non-admin articles have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/admin/installation/configuring-the-default-visibility-of-new-repositories-on-your-appliance`)
expect($(`article a[href="${latestEnterprisePath}/user/github/creating-cloning-and-archiving-repositories/about-repository-visibility"]`).length).toBeGreaterThan(0)
})
testFeatureNewVersions('admin articles that link to Enterprise user articles have Enterprise user links', async () => {
test('admin articles that link to Enterprise user articles have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/admin/user-management/configuring-email-for-notifications`)
expect($('article a[href*="about-email-notifications-for-pushes-to-your-repository"]').length).toBe(1)
})
testFeatureOldVersions('admin articles that link to Enterprise user articles have Enterprise user links', async () => {
const $ = await getDOM(`${latestEnterprisePath}/admin/user-management/configuring-email-for-notifications`)
expect($('article a[href*="about-email-notifications-for-pushes-to-your-repository"]').length).toBe(1)
})
testFeatureNewVersions('articles that link to external links that contain /articles/ are not rewritten', async () => {
const $ = await getDOM(`${latestEnterprisePath}/admin/installation/upgrading-github-enterprise-server`)
expect($('article a[href="https://azure.microsoft.com/en-us/documentation/articles/backup-azure-vms/"]').length).toBe(1)
})
testFeatureOldVersions('articles that link to external links that contain /articles/ are not rewritten', async () => {
test('articles that link to external links that contain /articles/ are not rewritten', async () => {
const $ = await getDOM(`${latestEnterprisePath}/admin/installation/upgrading-github-enterprise-server`)
expect($('article a[href="https://azure.microsoft.com/en-us/documentation/articles/backup-azure-vms/"]').length).toBe(1)
})
})
describe('article versions', () => {
testFeatureNewVersions('includes links to all versions of each article', async () => {
test('includes links to all versions of each article', async () => {
const articlePath = 'github/setting-up-and-managing-your-github-user-account/about-your-personal-dashboard'
const $ = await getDOM(`/en/enterprise-server@${enterpriseServerReleases.latest}/${articlePath}`)
expect($(`.article-versions a.active[href="/en/enterprise-server@${enterpriseServerReleases.latest}/${articlePath}"]`).length).toBe(2)
@@ -415,16 +359,6 @@ describe('server', () => {
expect($(`.article-versions a[href="/en/enterprise/2.13/user/${articlePath}"]`).length).toBe(0)
})
testFeatureOldVersions('includes links to all versions of each article', async () => {
const articlePath = 'github/setting-up-and-managing-your-github-user-account/about-your-personal-dashboard'
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/${articlePath}`)
expect($(`.article-versions a.active[href="/en/enterprise/${enterpriseServerReleases.latest}/user/${articlePath}"]`).length).toBe(2)
expect($(`.article-versions a.active[href="/en/${articlePath}"]`).length).toBe(0)
// 2.13 predates this feature, so it should be excluded:
expect($(`.article-versions a[href="/en/enterprise/2.13/user/${articlePath}"]`).length).toBe(0)
})
test('is not displayed if article has only one version', async () => {
const $ = await getDOM('/en/articles/signing-up-for-a-new-github-account')
expect($('.article-versions').length).toBe(0)
@@ -437,16 +371,11 @@ describe('server', () => {
expect(res.statusCode).toBe(301)
})
testFeatureNewVersions('redirects old articles to their slugified URL', async () => {
test('redirects old articles to their slugified URL', async () => {
const res = await get('/articles/about-github-s-ip-addresses')
expect(res.text).toBe(`Moved Permanently. Redirecting to /en/${nonEnterpriseDefaultVersion}/github/authenticating-to-github/about-githubs-ip-addresses`)
})
testFeatureOldVersions('redirects old articles to their slugified URL', async () => {
const res = await get('/articles/about-github-s-ip-addresses')
expect(res.text).toBe('Moved Permanently. Redirecting to /en/github/authenticating-to-github/about-githubs-ip-addresses')
})
test('redirects / to /en', async () => {
const res = await get('/')
expect(res.statusCode).toBe(301)
@@ -465,18 +394,12 @@ describe('server', () => {
expect(res.headers.location).toBe('https://desktop.github.com')
})
testFeatureNewVersions('redirects /insights/foo paths to /enterprise/user/insights/foo', async () => {
test('redirects /insights/foo paths to /enterprise/user/insights/foo', async () => {
const res = await get('/en/insights/installing-and-configuring-github-insights/about-github-insights')
expect(res.statusCode).toBe(301)
expect(res.headers.location).toBe(`/en/enterprise-server@${enterpriseServerReleases.latest}/insights/installing-and-configuring-github-insights/about-github-insights`)
})
testFeatureOldVersions('redirects /insights/foo paths to /enterprise/user/insights/foo', async () => {
const res = await get('/en/insights/installing-and-configuring-github-insights/about-github-insights')
expect(res.statusCode).toBe(301)
expect(res.headers.location).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/insights/installing-and-configuring-github-insights/about-github-insights`)
})
// this oneoff redirect is temporarily disabled because it introduces too much complexity
// we can reenable it down the road if needed
test.skip('redirects versioned category page', async () => {
@@ -487,45 +410,28 @@ describe('server', () => {
})
describe('categories and map topics', () => {
testFeatureNewVersions('adds links to categories on the dotcom homepage', async () => {
test('adds links to categories on the dotcom homepage', async () => {
const $ = await getDOM('/en/github')
expect($(`article a[href="/en/${nonEnterpriseDefaultVersion}/github/managing-large-files"]`).length).toBe(1)
expect($('article a[href="#managing-large-files"]').length).toBe(0)
})
testFeatureOldVersions('adds links to categories on the dotcom homepage', async () => {
const $ = await getDOM('/en/github')
expect($('article a[href="/en/github/managing-large-files"]').length).toBe(1)
expect($('article a[href="#managing-large-files"]').length).toBe(0)
})
testFeatureNewVersions('adds links to map topics on a category homepage', async () => {
test('adds links to map topics on a category homepage', async () => {
const $ = await getDOM('/en/github/setting-up-and-managing-your-github-user-account')
expect($(`article a[href="/en/${nonEnterpriseDefaultVersion}/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings"]`).length).toBe(1)
expect($('article a[href="#managing-user-account-settings"]').length).toBe(0)
})
testFeatureOldVersions('adds links to map topics on a category homepage', async () => {
const $ = await getDOM('/en/github/setting-up-and-managing-your-github-user-account')
expect($('article a[href="/en/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings"]').length).toBe(1)
expect($('article a[href="#managing-user-account-settings"]').length).toBe(0)
})
test('category page renders with TOC', async () => {
const $ = await getDOM('/en/github/managing-large-files')
expect($('.markdown-body ul li a').length).toBeGreaterThan(5)
})
testFeatureNewVersions('map topic renders with h4 links to articles', async () => {
test('map topic renders with h4 links to articles', async () => {
const $ = await getDOM('/en/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings')
expect($(`a[href="/en/${nonEnterpriseDefaultVersion}/github/setting-up-and-managing-your-github-user-account/changing-your-github-username"] h4`).length).toBe(1)
})
testFeatureOldVersions('map topic renders with h4 links to articles', async () => {
const $ = await getDOM('/en/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings')
expect($('a[href="/en/github/setting-up-and-managing-your-github-user-account/changing-your-github-username"] h4').length).toBe(1)
})
test('map topic renders with one intro for every h4', async () => {
const $ = await getDOM('/en/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings')
const $h4s = $('article a.link-with-intro')
@@ -555,197 +461,107 @@ describe('URLs by language', () => {
})
describe('GitHub Enterprise URLs', () => {
testFeatureNewVersions('renders the GHE user docs homepage', async () => {
test('renders the GHE user docs homepage', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/github`)
expect($(`article a[href="/en/enterprise-server@${enterpriseServerReleases.latest}/github/getting-started-with-github"]`).length).toBe(1)
})
testFeatureOldVersions('renders the GHE user docs homepage', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/github`)
expect($(`article a[href="/en/enterprise/${enterpriseServerReleases.latest}/user/github/getting-started-with-github"]`).length).toBe(1)
})
testFeatureNewVersions('renders the Enterprise Server homepage with correct links', async () => {
test('renders the Enterprise Server homepage with correct links', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
expect($(`section.container-xl a[href="/en/enterprise-server@${enterpriseServerReleases.latest}/admin"]`).length).toBe(1)
expect($(`section.container-xl a[href="/en/enterprise-server@${enterpriseServerReleases.latest}/github"]`).length).toBe(1)
})
testFeatureOldVersions('renders the Enterprise homepage with correct links', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
expect($(`article a[href="/en/enterprise/${enterpriseServerReleases.latest}/admin"]`).length).toBe(1)
expect($(`article a[href="/en/enterprise/${enterpriseServerReleases.latest}/user/github"]`).length).toBe(1)
})
testFeatureNewVersions('renders the Enterprise Admin category homepage', async () => {
test('renders the Enterprise Admin category homepage', async () => {
const adminPath = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin`
const $ = await getDOM(adminPath)
expect($(`article a[href="${adminPath}/installation"]`).length).toBe(1)
expect($.text()).toContain('This guide describes')
})
testFeatureOldVersions('renders the Enterprise Admin category homepage', async () => {
const adminPath = `/en/enterprise/${enterpriseServerReleases.latest}/admin`
const $ = await getDOM(adminPath)
expect($(`article a[href="${adminPath}/installation"]`).length).toBe(1)
expect($.text()).toContain('This guide describes')
})
testFeatureNewVersions('renders an Enterprise Admin category with correct links', async () => {
test('renders an Enterprise Admin category with correct links', async () => {
const installationCategoryHome = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/installation`
const $ = await getDOM(installationCategoryHome)
expect($(`article a[href^="${installationCategoryHome}/"]`).length).toBeGreaterThan(1)
})
testFeatureOldVersions('renders an Enterprise Admin category with correct links', async () => {
const installationCategoryHome = `/en/enterprise/${enterpriseServerReleases.latest}/admin/installation`
const $ = await getDOM(installationCategoryHome)
expect($(`article a[href^="${installationCategoryHome}/"]`).length).toBeGreaterThan(1)
})
testFeatureNewVersions('renders a translated Enterprise Admin category with English links', async () => {
test('renders a translated Enterprise Admin category with English links', async () => {
const installationCategoryHome = `/ja/enterprise-server@${enterpriseServerReleases.latest}/admin/installation`
const $ = await getDOM(installationCategoryHome)
expect($(`article a[href^="${installationCategoryHome}/"]`).length).toBeGreaterThan(1)
})
testFeatureOldVersions('renders a translated Enterprise Admin category with English links', async () => {
const installationCategoryHome = `/ja/enterprise/${enterpriseServerReleases.latest}/admin/installation`
const $ = await getDOM(installationCategoryHome)
expect($(`article a[href^="${installationCategoryHome}/"]`).length).toBeGreaterThan(1)
})
test('renders an Enterprise Admin category article', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/admin/installation/system-overview`)
expect($.text()).toContain('your organization\'s private copy of GitHub')
})
testFeatureNewVersions('renders an Enterprise Admin map topic', async () => {
test('renders an Enterprise Admin map topic', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/admin/enterprise-management/updating-the-virtual-machine-and-physical-resources`)
expect($(`article a[href^="/en/enterprise-server@${enterpriseServerReleases.latest}/admin/enterprise-management/"]`).length).toBeGreaterThan(1)
})
testFeatureOldVersions('renders an Enterprise Admin map topic', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/admin/enterprise-management/updating-the-virtual-machine-and-physical-resources`)
expect($(`article a[href^="/en/enterprise/${enterpriseServerReleases.latest}/admin/enterprise-management/"]`).length).toBeGreaterThan(1)
})
test('renders an Enterprise Admin category article within a map topic', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/admin/installation/upgrade-requirements`)
expect($.text()).toContain('Before upgrading GitHub Enterprise')
})
testFeatureNewVersions('renders Enterprise homepage in Japanese', async () => {
test('renders Enterprise homepage in Japanese', async () => {
const res = await get(`/ja/enterprise-server@${enterpriseServerReleases.latest}`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders Enterprise homepage in Japanese', async () => {
const res = await get(`/ja/enterprise/${enterpriseServerReleases.latest}`)
expect(res.statusCode).toBe(200)
})
testFeatureNewVersions('renders Enterprise User homepage in Japanese', async () => {
test('renders Enterprise User homepage in Japanese', async () => {
const res = await get(`/ja/enterprise-server@${enterpriseServerReleases.latest}/github`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders Enterprise User homepage in Japanese', async () => {
const res = await get(`/ja/enterprise/${enterpriseServerReleases.latest}/user/github`)
expect(res.statusCode).toBe(200)
})
testFeatureNewVersions('renders Enterprise Admin homepage in Japanese', async () => {
test('renders Enterprise Admin homepage in Japanese', async () => {
const res = await get(`/ja/enterprise-server@${enterpriseServerReleases.latest}/admin`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders Enterprise Admin homepage in Japanese', async () => {
const res = await get(`/ja/enterprise/${enterpriseServerReleases.latest}/admin`)
expect(res.statusCode).toBe(200)
})
testFeatureNewVersions('renders Enterprise homepage in Chinese', async () => {
test('renders Enterprise homepage in Chinese', async () => {
const res = await get(`/cn/enterprise-server@${enterpriseServerReleases.latest}`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders Enterprise homepage in Chinese', async () => {
const res = await get(`/cn/enterprise/${enterpriseServerReleases.latest}`)
expect(res.statusCode).toBe(200)
})
testFeatureNewVersions('renders Enterprise User homepage in Chinese', async () => {
test('renders Enterprise User homepage in Chinese', async () => {
const res = await get(`/cn/enterprise-server@${enterpriseServerReleases.latest}/github`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders Enterprise User homepage in Chinese', async () => {
const res = await get(`/cn/enterprise/${enterpriseServerReleases.latest}/user/github`)
expect(res.statusCode).toBe(200)
})
testFeatureNewVersions('renders Enterprise Admin homepage in Chinese', async () => {
test('renders Enterprise Admin homepage in Chinese', async () => {
const res = await get(`/cn/enterprise-server@${enterpriseServerReleases.latest}/admin`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders Enterprise Admin homepage in Chinese', async () => {
const res = await get(`/cn/enterprise/${enterpriseServerReleases.latest}/admin`)
expect(res.statusCode).toBe(200)
})
})
describe('GitHub Desktop URLs', () => {
testFeatureNewVersions('renders the GitHub Desktop homepage with correct links', async () => {
test('renders the GitHub Desktop homepage with correct links', async () => {
const $ = await getDOM('/en/desktop')
expect($(`article a[href^="/en/${nonEnterpriseDefaultVersion}/desktop/"]`).length).toBeGreaterThan(1)
})
testFeatureOldVersions('renders the GitHub Desktop homepage with correct links', async () => {
const $ = await getDOM('/en/desktop')
expect($('article a[href^="/en/desktop/"]').length).toBeGreaterThan(1)
})
testFeatureNewVersions('renders a Desktop category with expected links', async () => {
test('renders a Desktop category with expected links', async () => {
const $ = await getDOM('/en/desktop/installing-and-configuring-github-desktop')
expect($(`article a[href^="/en/${nonEnterpriseDefaultVersion}/desktop/installing-and-configuring-github-desktop/"]`).length).toBeGreaterThan(1)
})
testFeatureOldVersions('renders a Desktop category with expected links', async () => {
const $ = await getDOM('/en/desktop/installing-and-configuring-github-desktop')
expect($('article a[href^="/en/desktop/installing-and-configuring-github-desktop/"]').length).toBeGreaterThan(1)
})
testFeatureNewVersions('renders a Desktop map topic', async () => {
test('renders a Desktop map topic', async () => {
const $ = await getDOM('/en/desktop/installing-and-configuring-github-desktop/installing-and-authenticating-to-github-desktop')
expect($(`article a[href^="/en/${nonEnterpriseDefaultVersion}/desktop/installing-and-configuring-github-desktop/"]`).length).toBeGreaterThan(1)
})
testFeatureOldVersions('renders a Desktop map topic', async () => {
const $ = await getDOM('/en/desktop/installing-and-configuring-github-desktop/installing-and-authenticating-to-github-desktop')
expect($('article a[href^="/en/desktop/installing-and-configuring-github-desktop/"]').length).toBeGreaterThan(1)
})
testFeatureNewVersions('renders a Desktop article within a map topic', async () => {
test('renders a Desktop article within a map topic', async () => {
const res = await get(`/en/${nonEnterpriseDefaultVersion}/desktop/installing-and-configuring-github-desktop/installing-github-desktop`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders a Desktop article within a map topic', async () => {
const res = await get('/en/desktop/installing-and-configuring-github-desktop/installing-github-desktop')
expect(res.statusCode).toBe(200)
})
testFeatureNewVersions('renders the Desktop homepage in Japanese', async () => {
test('renders the Desktop homepage in Japanese', async () => {
const res = await get(`/ja/${nonEnterpriseDefaultVersion}/desktop`)
expect(res.statusCode).toBe(200)
})
testFeatureOldVersions('renders the Desktop homepage in Japanese', async () => {
const res = await get('/ja/desktop')
expect(res.statusCode).toBe(200)
})
})
describe('static assets', () => {
@@ -894,39 +710,21 @@ describe('static routes', () => {
})
describe('index pages', () => {
const nonEnterpriseOnlyPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/github/getting-started-with-github/verifying-your-email-address`
: '/en/github/getting-started-with-github/verifying-your-email-address'
const nonEnterpriseOnlyPath = `/en/${nonEnterpriseDefaultVersion}/github/getting-started-with-github/verifying-your-email-address`
testFeatureNewVersions('includes dotcom-only links in dotcom TOC', async () => {
test('includes dotcom-only links in dotcom TOC', async () => {
const $ = await getDOM('/en/github/getting-started-with-github')
expect($(`article a[href="${nonEnterpriseOnlyPath}"]`).length).toBe(1)
})
testFeatureOldVersions('includes dotcom-only links in dotcom TOC', async () => {
const $ = await getDOM('/en/github/getting-started-with-github')
expect($(`article a[href="${nonEnterpriseOnlyPath}"]`).length).toBe(1)
})
testFeatureNewVersions('excludes dotcom-only from GHE TOC', async () => {
test('excludes dotcom-only from GHE TOC', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/github/getting-started-with-github`)
expect($(`a[href="${nonEnterpriseOnlyPath}"]`).length).toBe(0)
})
testFeatureOldVersions('excludes dotcom-only from GHE TOC', async () => {
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/user/github/getting-started-with-github`)
expect($(`a[href="${nonEnterpriseOnlyPath}"]`).length).toBe(0)
})
testFeatureNewVersions('includes correctly versioned links in GHE', async () => {
test('includes correctly versioned links in GHE', async () => {
const installationLatest = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/installation`
const $ = await getDOM(installationLatest)
expect($(`article a[href^="${installationLatest}/"]`).length).toBeGreaterThan(0)
})
testFeatureOldVersions('includes correctly versioned links in GHE', async () => {
const installationLatest = `/en/enterprise/${enterpriseServerReleases.latest}/admin/installation`
const $ = await getDOM(installationLatest)
expect($(`article a[href^="${installationLatest}/"]`).length).toBeGreaterThan(0)
})
})

View File

@@ -1,10 +1,6 @@
require('../../lib/feature-flags')
const { getDOM } = require('../helpers')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('sidebar', () => {
jest.setTimeout(3 * 60 * 1000)
@@ -18,16 +14,11 @@ describe('sidebar', () => {
done()
})
testFeatureNewVersions('highlights active product on Enterprise pages', async () => {
test('highlights active product on Enterprise pages', async () => {
expect($enterprisePage('.sidebar li.sidebar-product').length).toBe(1)
expect($enterprisePage('.sidebar li.sidebar-product > a').text().trim()).toBe('Enterprise Administrators')
})
testFeatureOldVersions('highlights active product on Enterprise pages', async () => {
expect($enterprisePage('.sidebar li.sidebar-product').length).toBe(1)
expect($enterprisePage('.sidebar li.sidebar-product > a').text().trim()).toBe('Enterprise Server')
})
test('highlights active product on GitHub pages', async () => {
expect($githubPage('.sidebar li.sidebar-product').length).toBe(1)
expect($githubPage('.sidebar li.sidebar-product > a').text().trim()).toBe('GitHub.com')
@@ -38,17 +29,10 @@ describe('sidebar', () => {
expect($homePage('.sidebar a[href="https://electronjs.org/docs"]')).toHaveLength(1)
})
testFeatureNewVersions('adds an `is-current-page` class to the sidebar link to the current page', async () => {
test('adds an `is-current-page` class to the sidebar link to the current page', async () => {
const url = `/en/${nonEnterpriseDefaultVersion}/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings`
const $ = await getDOM(url)
expect($('.sidebar .is-current-page').length).toBe(1)
expect($('.sidebar .is-current-page a').attr('href')).toContain(url)
})
testFeatureOldVersions('adds an `is-current-page` class to the sidebar link to the current page', async () => {
const url = '/en/github/setting-up-and-managing-your-github-user-account/managing-user-account-settings'
const $ = await getDOM(url)
expect($('.sidebar .is-current-page').length).toBe(1)
expect($('.sidebar .is-current-page a').attr('href')).toContain(url)
})
})

View File

@@ -1,18 +1,11 @@
require('../../lib/feature-flags')
const { eachOfLimit } = require('async')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const { get } = require('../helpers')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
let restRedirectFixtures, graphqlRedirectFixtures, developerRedirectFixtures
if (process.env.FEATURE_NEW_VERSIONS) {
restRedirectFixtures = require('../fixtures/new-versions/rest-redirects')
graphqlRedirectFixtures = require('../fixtures/new-versions/graphql-redirects')
developerRedirectFixtures = require('../fixtures/new-versions/developer-redirects')
} else {
restRedirectFixtures = require('../fixtures/rest-redirects')
graphqlRedirectFixtures = require('../fixtures/graphql-redirects')
developerRedirectFixtures = require('../fixtures/developer-redirects')
}
const restRedirectFixtures = require('../fixtures/rest-redirects')
const graphqlRedirectFixtures = require('../fixtures/graphql-redirects')
const developerRedirectFixtures = require('../fixtures/developer-redirects')
const MAX_CONCURRENT_REQUESTS = 50
describe('developer redirects', () => {
@@ -25,8 +18,7 @@ describe('developer redirects', () => {
await get('/v4')
})
if (process.env.FEATURE_NEW_VERSIONS) {
describe('redirects /v4 requests to /graphql with FEATURE_NEW_VERSIONS enabled', () => {
describe('redirects /v4 requests to /graphql', () => {
test('graphql homepage', async () => {
const res = await get('/v4')
expect(res.statusCode).toBe(301)
@@ -68,79 +60,26 @@ describe('developer redirects', () => {
expect(enumRes.headers.location).toBe(enumResFinalPath)
})
})
}
if (!process.env.FEATURE_NEW_VERSIONS) {
describe('redirects /v4 requests to /graphql', () => {
test('graphql homepage', async () => {
const res = await get('/v4')
expect(res.statusCode).toBe(301)
const expectedFinalPath = '/en/graphql'
expect(res.headers.location).toBe(expectedFinalPath)
})
test('graphql enterprise homepage', async () => {
const res = await get('/enterprise/v4', { followAllRedirects: true })
expect(res.statusCode).toBe(200)
const finalPath = (new URL(res.request.url)).pathname
const expectedFinalPath = `/en/enterprise/${enterpriseServerReleases.latest}/user/graphql`
expect(finalPath).toBe(expectedFinalPath)
})
test('graphql overview paths', async () => {
const oldPath = '/v4/breaking_changes'
const newPath = '/graphql/overview/breaking-changes'
const res = await get(oldPath)
expect(res.statusCode).toBe(301)
expect(res.headers.location).toBe(`/en${newPath}`)
const enterpriseRes = await get(`/enterprise${oldPath}`, { followAllRedirects: true })
expect(enterpriseRes.statusCode).toBe(200)
const finalPath = (new URL(enterpriseRes.request.url)).pathname
const expectedFinalPath = `/enterprise/${enterpriseServerReleases.latest}/user${newPath}`
expect(finalPath).toBe(`/en${expectedFinalPath}`)
})
test('graphql reference paths with child pages', async () => {
const sclarRes = await get('/en/v4/scalar/boolean')
expect(sclarRes.statusCode).toBe(301)
const sclarResFinalPath = '/en/graphql/reference/scalars#boolean'
expect(sclarRes.headers.location).toBe(sclarResFinalPath)
const enumRes = await get('/en/v4/enum/searchtype')
expect(enumRes.statusCode).toBe(301)
const enumResFinalPath = '/en/graphql/reference/enums#searchtype'
expect(enumRes.headers.location).toBe(enumResFinalPath)
})
})
}
if (process.env.FEATURE_NEW_VERSIONS) {
test('redirects /v3 requests to /rest', async () => {
let expectedFinalPath
let res = await get('/v3')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest`
: '/en/rest'
expectedFinalPath = `/en/${nonEnterpriseDefaultVersion}/rest`
expect(res.headers.location).toBe(expectedFinalPath)
// REST subresources like activity notifications don't have their own page
// any more, so redirect to an anchor on the resource page
res = await get('/en/v3/activity')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest/reference/activity`
: '/en/rest/reference/activity'
expectedFinalPath = `/en/${nonEnterpriseDefaultVersion}/rest/reference/activity`
expect(res.headers.location).toBe(expectedFinalPath)
// REST subresources like activity notifications don't have their own page
// any more, so redirect to an anchor on the resource page
res = await get('/en/v3/activity/notifications')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest/reference/activity#notifications`
: '/en/rest/reference/activity#notifications'
expectedFinalPath = `/en/${nonEnterpriseDefaultVersion}/rest/reference/activity#notifications`
expect(res.headers.location).toBe(expectedFinalPath)
// trailing slashes are handled separately by the `slashes` module;
@@ -152,56 +91,9 @@ describe('developer redirects', () => {
// non-reference redirects (e.g. guides)
res = await get('/en/v3/guides/basics-of-authentication')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest/guides/basics-of-authentication`
: '/en/rest/guides/basics-of-authentication'
expectedFinalPath = `/en/${nonEnterpriseDefaultVersion}/rest/guides/basics-of-authentication`
expect(res.headers.location).toBe(expectedFinalPath)
})
}
if (!process.env.FEATURE_NEW_VERSIONS) {
test('redirects /v3 requests to /rest', async () => {
let expectedFinalPath
let res = await get('/v3')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest`
: '/en/rest'
expect(res.headers.location).toBe(expectedFinalPath)
// REST subresources like activity notifications don't have their own page
// any more, so redirect to an anchor on the resource page
res = await get('/en/v3/activity')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest/reference/activity`
: '/en/rest/reference/activity'
expect(res.headers.location).toBe(expectedFinalPath)
// REST subresources like activity notifications don't have their own page
// any more, so redirect to an anchor on the resource page
res = await get('/en/v3/activity/notifications')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest/reference/activity#notifications`
: '/en/rest/reference/activity#notifications'
expect(res.headers.location).toBe(expectedFinalPath)
// trailing slashes are handled separately by the `slashes` module;
// any request to a /v3 URL with a trailing slash will be redirected twice
res = await get('/en/v3/activity/notifications/')
expect(res.statusCode).toBe(301)
expect(res.headers.location).toBe('/en/v3/activity/notifications')
// non-reference redirects (e.g. guides)
res = await get('/en/v3/guides/basics-of-authentication')
expect(res.statusCode).toBe(301)
expectedFinalPath = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/rest/guides/basics-of-authentication`
: '/en/rest/guides/basics-of-authentication'
expect(res.headers.location).toBe(expectedFinalPath)
})
}
describe('fixtures', () => {
// this fixtures file includes paths like /apps and /webhooks, plus /enterprise paths
@@ -217,7 +109,6 @@ describe('developer redirects', () => {
)
})
if (process.env.FEATURE_NEW_VERSIONS) {
// this fixtures file includes /v3 and /enterprise/v3 paths
test('rest reference redirects', async () => {
await eachOfLimit(
@@ -233,27 +124,7 @@ describe('developer redirects', () => {
}
)
})
}
if (!process.env.FEATURE_NEW_VERSIONS) {
// this fixtures file includes /v3 and /enterprise/v3 paths
test('rest reference redirects', async () => {
await eachOfLimit(
restRedirectFixtures,
MAX_CONCURRENT_REQUESTS,
async (newPath, oldPath) => {
// REST and GraphQL developer Enterprise paths with a version are only supported up to 2.21.
// We make an exception to always redirect versionless paths to the latest version.
newPath = newPath.replace('/enterprise/user', `/enterprise/${enterpriseServerReleases.latest}/user`)
const res = await get(oldPath)
expect(res.statusCode, `${oldPath} did not redirect to ${newPath}`).toBe(301)
expect(res.headers.location).toBe(newPath)
}
)
})
}
if (process.env.FEATURE_NEW_VERSIONS) {
// this fixtures file includes /v4 and /enterprise/v4 paths
test('graphql reference redirects', async () => {
await eachOfLimit(
@@ -269,24 +140,5 @@ describe('developer redirects', () => {
}
)
})
}
if (!process.env.FEATURE_NEW_VERSIONS) {
// this fixtures file includes /v4 and /enterprise/v4 paths
test('graphql reference redirects', async () => {
await eachOfLimit(
graphqlRedirectFixtures,
MAX_CONCURRENT_REQUESTS,
async (newPath, oldPath) => {
// REST and GraphQL developer Enterprise paths with a version are only supported up to 2.21.
// We make an exception to always redirect versionless paths to the latest version.
newPath = newPath.replace('/enterprise/user', `/enterprise/${enterpriseServerReleases.latest}/user`)
const res = await get(oldPath)
expect(res.statusCode, `${oldPath} did not redirect to ${newPath}`).toBe(301)
expect(res.headers.location).toBe(newPath)
}
)
})
}
})
})

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const path = require('path')
const { isPlainObject } = require('lodash')
const supertest = require('supertest')
@@ -33,21 +32,12 @@ describe('redirects', () => {
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
if (process.env.FEATURE_NEW_VERSIONS) {
expect(page.redirects['/articles']).toBe(`/en/${nonEnterpriseDefaultVersion}/github`)
expect(page.redirects['/en/articles']).toBe(`/en/${nonEnterpriseDefaultVersion}/github`)
expect(page.redirects['/common-issues-and-questions']).toBe(`/en/${nonEnterpriseDefaultVersion}/github`)
expect(page.redirects['/en/common-issues-and-questions']).toBe(`/en/${nonEnterpriseDefaultVersion}/github`)
expect(page.redirects[`/en/enterprise/${enterpriseServerReleases.latest}/user/articles`]).toBe(`/en/enterprise-server@${enterpriseServerReleases.latest}/github`)
expect(page.redirects[`/en/enterprise/${enterpriseServerReleases.latest}/user/common-issues-and-questions`]).toBe(`/en/enterprise-server@${enterpriseServerReleases.latest}/github`)
} else {
expect(page.redirects['/articles']).toBe('/en/github')
expect(page.redirects['/en/articles']).toBe('/en/github')
expect(page.redirects['/common-issues-and-questions']).toBe('/en/github')
expect(page.redirects['/en/common-issues-and-questions']).toBe('/en/github')
expect(page.redirects[`/en/enterprise/${enterpriseServerReleases.latest}/user/articles`]).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/github`)
expect(page.redirects[`/en/enterprise/${enterpriseServerReleases.latest}/user/common-issues-and-questions`]).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/github`)
}
})
test('converts single `redirect_from` strings values into arrays', async () => {
@@ -56,9 +46,7 @@ describe('redirects', () => {
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
const expected = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/github/collaborating-with-issues-and-pull-requests/about-conversations-on-github`
: '/en/github/collaborating-with-issues-and-pull-requests/about-conversations-on-github'
const expected = `/en/${nonEnterpriseDefaultVersion}/github/collaborating-with-issues-and-pull-requests/about-conversations-on-github`
expect(page.redirects['/en/articles/about-discussions-in-issues-and-pull-requests']).toBe(expected)
})
@@ -66,34 +54,26 @@ describe('redirects', () => {
test('are preserved in redirected URLs', async () => {
const res = await get('/enterprise/admin?query=pulls')
expect(res.statusCode).toBe(301)
const expected = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/admin?query=pulls`
: `/en/enterprise/${enterpriseServerReleases.latest}/admin?query=pulls`
const expected = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin?query=pulls`
expect(res.headers.location).toBe(expected)
})
test('have q= converted to query=', async () => {
const res = await get('/en/enterprise/admin?q=pulls')
expect(res.statusCode).toBe(301)
const expected = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/admin?query=pulls`
: `/en/enterprise/${enterpriseServerReleases.latest}/admin?query=pulls`
const expected = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin?query=pulls`
expect(res.headers.location).toBe(expected)
})
test('work with redirected search paths', async () => {
const res = await get('/en/enterprise/admin/search?utf8=%E2%9C%93&query=pulls')
expect(res.statusCode).toBe(301)
const expected = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/admin?utf8=%E2%9C%93&query=pulls`
: `/en/enterprise/${enterpriseServerReleases.latest}/admin?utf8=%E2%9C%93&query=pulls`
const expected = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin?utf8=%E2%9C%93&query=pulls`
expect(res.headers.location).toBe(expected)
})
test('do not work on other paths that include "search"', async () => {
const reqPath = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/configuration/enabling-unified-search-between-github-enterprise-server-and-githubcom`
: `/en/enterprise/${enterpriseServerReleases.latest}/admin/configuration/enabling-unified-search-between-github-enterprise-server-and-githubcom`
const reqPath = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/configuration/enabling-unified-search-between-github-enterprise-server-and-githubcom`
const res = await get(reqPath)
expect(res.statusCode).toBe(200)
})
@@ -142,18 +122,13 @@ describe('redirects', () => {
test('redirect_from for renamed pages', async () => {
const { res } = await get('/ja/desktop/contributing-to-projects/changing-a-remote-s-url-from-github-desktop')
expect(res.statusCode).toBe(301)
const expected = process.env.FEATURE_NEW_VERSIONS
? `/ja/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop/changing-a-remotes-url-from-github-desktop`
: '/ja/desktop/contributing-and-collaborating-using-github-desktop/changing-a-remotes-url-from-github-desktop'
const expected = `/ja/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop/changing-a-remotes-url-from-github-desktop`
expect(res.headers.location).toBe(expected)
})
})
describe('enterprise home page', () => {
const enterpriseHome = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}`
: `/en/enterprise/${enterpriseServerReleases.latest}`
const enterpriseHome = `/en/enterprise-server@${enterpriseServerReleases.latest}`
const japaneseEnterpriseHome = enterpriseHome.replace('/en/', '/ja/')
test('/enterprise', async () => {
@@ -210,10 +185,7 @@ describe('redirects', () => {
})
describe('enterprise admin', () => {
const enterpriseAdmin = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/admin`
: `/en/enterprise/${enterpriseServerReleases.latest}/admin`
const enterpriseAdmin = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin`
const japaneseEnterpriseAdmin = enterpriseAdmin.replace('/en/', '/ja/')
test('no language code redirects to english', async () => {
@@ -245,9 +217,7 @@ describe('redirects', () => {
expect(res.statusCode).toBe(301)
const redirectRes = await get(res.headers.location)
expect(redirectRes.statusCode).toBe(200)
const expected = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/enterprise-management/upgrading-github-enterprise-server`
: `/en/enterprise/${enterpriseServerReleases.latest}/admin/enterprise-management/upgrading-github-enterprise-server`
const expected = `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/enterprise-management/upgrading-github-enterprise-server`
expect(res.headers.location).toBe(expected)
})
@@ -265,10 +235,7 @@ describe('redirects', () => {
})
describe('enterprise user homepage', () => {
const enterpriseUser = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/github`
: `/en/enterprise/${enterpriseServerReleases.latest}/user/github`
const enterpriseUser = `/en/enterprise-server@${enterpriseServerReleases.latest}/github`
const japaneseEnterpriseUser = enterpriseUser.replace('/en/', '/ja/')
test('no product redirects to GitHub.com product', async () => {
@@ -297,10 +264,7 @@ describe('redirects', () => {
})
describe('enterprise user article', () => {
const userArticle = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/github/getting-started-with-github/set-up-git`
: `/en/enterprise/${enterpriseServerReleases.latest}/user/github/getting-started-with-github/set-up-git`
const userArticle = `/en/enterprise-server@${enterpriseServerReleases.latest}/github/getting-started-with-github/set-up-git`
const japaneseUserArticle = userArticle.replace('/en/', '/ja/')
test('no product redirects to GitHub.com product on the latest version', async () => {
@@ -335,11 +299,8 @@ describe('redirects', () => {
})
describe('enterprise user article with frontmatter redirect', () => {
const userArticle = process.env.FEATURE_NEW_VERSIONS
? `/en/enterprise-server@${enterpriseServerReleases.latest}/github/getting-started-with-github/access-permissions-on-github`
: `/en/enterprise/${enterpriseServerReleases.latest}/user/github/getting-started-with-github/access-permissions-on-github`
const userArticle = `/en/enterprise-server@${enterpriseServerReleases.latest}/github/getting-started-with-github/access-permissions-on-github`
const redirectFromPath = '/articles/what-are-the-different-access-permissions'
const japaneseUserArticle = userArticle.replace('/en/', '/ja/')
test('redirects to expected article', async () => {
@@ -368,10 +329,7 @@ describe('redirects', () => {
})
describe('desktop guide', () => {
const desktopGuide = process.env.FEATURE_NEW_VERSIONS
? `/en/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop/creating-an-issue-or-pull-request`
: '/en/desktop/contributing-and-collaborating-using-github-desktop/creating-an-issue-or-pull-request'
const desktopGuide = `/en/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop/creating-an-issue-or-pull-request`
const japaneseDesktopGuides = desktopGuide.replace('/en/', '/ja/')
test('no language code redirects to english', async () => {

View File

@@ -1,20 +1,16 @@
require('../../lib/feature-flags')
const path = require('path')
const Page = require('../../lib/page')
const loadRedirects = require('../../lib/redirects/precompile')
const findPage = require('../../lib/find-page')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('find page', () => {
jest.setTimeout(1000 * 1000)
testFeatureNewVersions('falls back to the English page if it can\'t find a localized page', async () => {
test('falls back to the English page if it can\'t find a localized page', async () => {
const page = new Page({
relativePath: 'page-that-does-not-exist-in-translations-dir.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
const pages = [page]
@@ -28,27 +24,10 @@ describe('find page', () => {
expect(typeof localizedPage.title).toBe('string')
})
testFeatureOldVersions('falls back to the English page if it can\'t find a localized page', async () => {
const page = new Page({
relativePath: 'page-that-does-not-exist-in-translations-dir.md',
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
const pages = [page]
// add named keys
for (const page of pages) {
pages[`/en/${page.relativePath}`] = page
}
const localizedPage = findPage(page.relativePath, pages, {}, 'ja')
expect(typeof localizedPage.title).toBe('string')
})
testFeatureNewVersions('follows redirects', async () => {
test('follows redirects', async () => {
const page = new Page({
relativePath: 'page-with-redirects.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
const pages = [page]
@@ -62,22 +41,4 @@ describe('find page', () => {
const redirectedPage = findPage('some-old-path', pages, redirects, 'en')
expect(typeof redirectedPage.title).toBe('string')
})
testFeatureOldVersions('follows redirects', async () => {
const page = new Page({
relativePath: 'page-with-redirects.md',
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
const pages = [page]
// add named keys
for (const page of pages) {
pages[`/en/${page.relativePath.replace('.md', '')}`] = page
}
const redirects = await loadRedirects(pages)
const redirectedPage = findPage('some-old-path', pages, redirects, 'en')
expect(typeof redirectedPage.title).toBe('string')
})
})

View File

@@ -1,20 +1,16 @@
require('../../lib/feature-flags')
const { liquid } = require('../../lib/render-content')
const loadPages = require('../../lib/pages')
const entities = new (require('html-entities').XmlEntities)()
const { set } = require('lodash')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('liquid helper tags', () => {
const context = {}
let pages
beforeAll(async (done) => {
pages = await loadPages()
context.currentLanguage = 'en'
context.currentVersion = process.env.FEATURE_NEW_VERSIONS ? nonEnterpriseDefaultVersion : 'dotcom'
context.currentVersion = nonEnterpriseDefaultVersion
context.pages = pages
context.redirects = []
context.site = {}
@@ -48,7 +44,7 @@ describe('liquid helper tags', () => {
expect(output).toBe(expected)
})
testFeatureNewVersions('link_with_intro tag', async () => {
test('link_with_intro tag', async () => {
const template = '{% link_with_intro /contributing-and-collaborating-using-github-desktop %}'
const page = pages[`/en/${nonEnterpriseDefaultVersion}/desktop/contributing-and-collaborating-using-github-desktop`]
const expected = `<a class="link-with-intro Bump-link--hover no-underline" href="/en/desktop/contributing-and-collaborating-using-github-desktop">
@@ -59,18 +55,7 @@ describe('liquid helper tags', () => {
expect(output).toBe(expected)
})
testFeatureOldVersions('link_with_intro tag', async () => {
const template = '{% link_with_intro /contributing-and-collaborating-using-github-desktop %}'
const page = pages['/en/desktop/contributing-and-collaborating-using-github-desktop']
const expected = `<a class="link-with-intro Bump-link--hover no-underline" href="/en/desktop/contributing-and-collaborating-using-github-desktop">
<h4 class="link-with-intro-title">${page.title}<span class="Bump-link-symbol">→</span></h4>
</a>
<p class="link-with-intro-intro">${page.intro}</p>`
const output = entities.decode(await liquid.parseAndRender(template, context))
expect(output).toBe(expected)
})
testFeatureNewVersions('homepage_link_with_intro tag', async () => {
test('homepage_link_with_intro tag', async () => {
const template = '{% homepage_link_with_intro /github/writing-on-github/basic-writing-and-formatting-syntax %}'
const page = pages[`/en/${nonEnterpriseDefaultVersion}/github/writing-on-github/basic-writing-and-formatting-syntax`]
const expected = `<a class="link-with-intro Bump-link--hover no-underline d-block offset-lg-2 col-lg-8 mb-5" href="/en/github/writing-on-github/basic-writing-and-formatting-syntax">
@@ -81,17 +66,6 @@ describe('liquid helper tags', () => {
expect(output).toBe(expected)
})
testFeatureOldVersions('homepage_link_with_intro tag', async () => {
const template = '{% homepage_link_with_intro /github/writing-on-github/basic-writing-and-formatting-syntax %}'
const page = pages['/en/github/writing-on-github/basic-writing-and-formatting-syntax']
const expected = `<a class="link-with-intro Bump-link--hover no-underline d-block offset-lg-2 col-lg-8 mb-5" href="/en/github/writing-on-github/basic-writing-and-formatting-syntax">
<h4 class="link-with-intro-title h4-mktg">${page.title}<span class="Bump-link-symbol">→</span></h4>
<p class="link-with-intro-intro f5">${page.intro}</p>
</a>`
const output = await liquid.parseAndRender(template, context)
expect(output).toBe(expected)
})
test('link_in_list tag', async () => {
const template = '{% link_in_list /contributing-and-collaborating-using-github-desktop %}'
const expected = '- <a class="article-link link Bump-link--hover no-underline" href="/en/desktop/contributing-and-collaborating-using-github-desktop">Contributing and collaborating using GitHub Desktop</a>'

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const { liquid } = require('../../lib/render-content')
const template = `
{% if page.version ver_gt "2.13" %}up to date{% endif %}

View File

@@ -1,16 +1,10 @@
require('../../lib/feature-flags')
const path = require('path')
const cheerio = require('cheerio')
const Page = require('../../lib/page')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
// get the `free-pro-team` segment of `free-pro-team@latest`
const nonEnterpriseDefaultPlan = process.env.FEATURE_NEW_VERSIONS && nonEnterpriseDefaultVersion.split('@')[0]
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
const describeFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? describe : describe.skip
const describeFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? describe.skip : describe
const nonEnterpriseDefaultPlan = nonEnterpriseDefaultVersion.split('@')[0]
const opts = {
relativePath: 'github/collaborating-with-issues-and-pull-requests/about-branches.md',
@@ -25,16 +19,7 @@ describe('Page class', () => {
expect(page.fullPath.includes(page.relativePath)).toBe(true)
})
testFeatureNewVersions('does not error out on translated TOC with no links', () => {
const page = new Page({
relativePath: 'translated-toc-with-no-links-index.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
languageCode: 'ja'
})
expect(typeof page.title).toBe('string')
})
testFeatureOldVersions('does not error out on translated TOC with no links', () => {
test('does not error out on translated TOC with no links', () => {
const page = new Page({
relativePath: 'translated-toc-with-no-links-index.md',
basePath: path.join(__dirname, '../fixtures'),
@@ -43,51 +28,7 @@ describe('Page class', () => {
expect(typeof page.title).toBe('string')
})
describeFeatureNewVersions('showMiniToc page property', () => {
const article = new Page({
relativePath: 'sample-article.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
languageCode: 'en'
})
const articleWithFM = new Page({
showMiniToc: false,
relativePath: article.relativePath,
basePath: article.basePath,
languageCode: article.languageCode
})
const tocPage = new Page({
relativePath: 'sample-toc-index.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
languageCode: 'en'
})
const mapTopic = new Page({
mapTopic: true,
relativePath: article.relativePath,
basePath: article.basePath,
languageCode: article.languageCode
})
test('is true by default on articles', () => {
expect(article.showMiniToc).toBe(true)
})
test('is false on articles when set in frontmatter', () => {
expect(articleWithFM.showMiniToc).toBe(false)
})
test('is undefined by default on index.md pages', () => {
expect(tocPage.showMiniToc).toBeUndefined()
})
test('is undefined by default on map topics', () => {
expect(mapTopic.showMiniToc).toBeUndefined()
})
})
describeFeatureOldVersions('showMiniToc page property', () => {
describe('showMiniToc page property', () => {
const article = new Page({
relativePath: 'sample-article.md',
basePath: path.join(__dirname, '../fixtures'),
@@ -132,7 +73,7 @@ describe('Page class', () => {
})
describe('page.render(context)', () => {
testFeatureNewVersions('rewrites links to include the current language prefix and version', async () => {
test('rewrites links to include the current language prefix and version', async () => {
const page = new Page(opts)
const context = {
page: { version: nonEnterpriseDefaultVersion },
@@ -148,23 +89,7 @@ describe('Page class', () => {
expect($(`a[href="/en/${nonEnterpriseDefaultVersion}/articles/about-pull-requests"]`).length).toBeGreaterThan(0)
})
testFeatureOldVersions('rewrites links to include the current language prefix', async () => {
const page = new Page(opts)
const context = {
page: { version: 'dotcom' },
currentVersion: 'dotcom',
currentPath: '/en/github/collaborating-with-issues-and-pull-requests/about-branches',
currentLanguage: 'en'
}
const rendered = await page.render(context)
const $ = cheerio.load(rendered)
expect(page.markdown.includes('(/articles/about-pull-requests)')).toBe(true)
expect(page.markdown.includes('(/en/articles/about-pull-requests)')).toBe(false)
expect($('a[href="/articles/about-pull-requests"]').length).toBe(0)
expect($('a[href="/en/articles/about-pull-requests"]').length).toBeGreaterThan(0)
})
testFeatureNewVersions('does not rewrite links that include deprecated enterprise release numbers', async () => {
test('does not rewrite links that include deprecated enterprise release numbers', async () => {
const page = new Page({
relativePath: 'admin/enterprise-management/migrating-from-github-enterprise-1110x-to-2123.md',
basePath: path.join(__dirname, '../../content'),
@@ -183,26 +108,7 @@ describe('Page class', () => {
expect($('a[href="/en/enterprise/11.10.340/admin/articles/upgrading-to-the-latest-release"]').length).toBeGreaterThan(0)
})
testFeatureOldVersions('does not rewrite links that include deprecated enterprise release numbers', async () => {
const page = new Page({
relativePath: 'enterprise/admin/enterprise-management/migrating-from-github-enterprise-1110x-to-2123.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
const context = {
page: { version: enterpriseServerReleases.latest },
currentVersion: enterpriseServerReleases.latest,
currentPath: `/en/enterprise/${enterpriseServerReleases.latest}/admin/enterprise-management/migrating-from-github-enterprise-1110x-to-2123`,
currentLanguage: 'en'
}
const rendered = await page.render(context)
const $ = cheerio.load(rendered)
expect(page.markdown.includes('(/enterprise/11.10.340/admin/articles/upgrading-to-the-latest-release/)')).toBe(true)
expect($(`a[href="/en/enterprise/${enterpriseServerReleases.latest}/admin/articles/upgrading-to-the-latest-release"]`).length).toBe(0)
expect($('a[href="/en/enterprise/11.10.340/admin/articles/upgrading-to-the-latest-release"]').length).toBeGreaterThan(0)
})
testFeatureNewVersions('does not rewrite links to external redirects', async () => {
test('does not rewrite links to external redirects', async () => {
const page = new Page(opts)
page.markdown = `${page.markdown}\n\nSee [Capistrano](/capistrano).`
const context = {
@@ -215,20 +121,6 @@ describe('Page class', () => {
const $ = cheerio.load(rendered)
expect($('a[href="/capistrano"]').length).toBe(1)
})
testFeatureOldVersions('does not rewrite links to external redirects', async () => {
const page = new Page(opts)
page.markdown = `${page.markdown}\n\nSee [Capistrano](/capistrano).`
const context = {
page: { version: 'dotcom' },
currentVersion: 'dotcom',
currentPath: '/en/github/collaborating-with-issues-and-pull-requests/about-branches',
currentLanguage: 'en'
}
const rendered = await page.render(context)
const $ = cheerio.load(rendered)
expect($('a[href="/capistrano"]').length).toBe(1)
})
})
test('preserves `languageCode`', () => {
@@ -236,85 +128,49 @@ describe('Page class', () => {
expect(page.languageCode).toBe('en')
})
testFeatureNewVersions('parentProductId getter', () => {
test('parentProductId getter', () => {
let page = new Page({
relativePath: 'github/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/new-versions/products'),
basePath: path.join(__dirname, '../fixtures/products'),
languageCode: 'en'
})
expect(page.parentProductId).toBe('github')
page = new Page({
relativePath: 'actions/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/new-versions/products'),
basePath: path.join(__dirname, '../fixtures/products'),
languageCode: 'en'
})
expect(page.parentProductId).toBe('actions')
page = new Page({
relativePath: 'admin/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/new-versions/products'),
basePath: path.join(__dirname, '../fixtures/products'),
languageCode: 'en'
})
expect(page.parentProductId).toBe('admin')
})
testFeatureOldVersions('parentProductId getter', () => {
let page = new Page({
relativePath: 'github/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/products'),
languageCode: 'en'
})
expect(page.parentProductId).toBe('github')
page = new Page({
relativePath: 'actions/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/products'),
languageCode: 'en'
})
expect(page.parentProductId).toBe('actions')
page = new Page({
relativePath: 'enterprise/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/products'),
languageCode: 'en'
})
expect(page.parentProductId).toBe('enterpriseServer')
})
describe('permalinks', () => {
test('is an array', () => {
const page = new Page(opts)
expect(Array.isArray(page.permalinks)).toBe(true)
})
testFeatureNewVersions('has a key for every supported enterprise version (and no deprecated versions)', () => {
test('has a key for every supported enterprise version (and no deprecated versions)', () => {
const page = new Page(opts)
const pageVersions = page.permalinks.map(permalink => permalink.pageVersion)
expect(enterpriseServerReleases.supported.every(version => pageVersions.includes(`enterprise-server@${version}`))).toBe(true)
expect(enterpriseServerReleases.deprecated.every(version => !pageVersions.includes(`enterprise-server@${version}`))).toBe(true)
})
testFeatureOldVersions('has a key for every supported enterprise version (and no deprecated versions)', () => {
const page = new Page(opts)
const pageVersions = page.permalinks.map(permalink => permalink.pageVersion)
expect(enterpriseServerReleases.supported.every(version => pageVersions.includes(version))).toBe(true)
expect(enterpriseServerReleases.deprecated.every(version => !pageVersions.includes(version))).toBe(true)
})
testFeatureNewVersions('sets versioned values', () => {
test('sets versioned values', () => {
const page = new Page(opts)
expect(page.permalinks.find(permalink => permalink.pageVersion === nonEnterpriseDefaultVersion).href).toBe(`/en/${nonEnterpriseDefaultVersion}/github/collaborating-with-issues-and-pull-requests/about-branches`)
expect(page.permalinks.find(permalink => permalink.pageVersion === `enterprise-server@${enterpriseServerReleases.oldestSupported}`).href).toBe(`/en/enterprise-server@${enterpriseServerReleases.oldestSupported}/github/collaborating-with-issues-and-pull-requests/about-branches`)
})
testFeatureOldVersions('sets dotcom and enterprise values', () => {
const page = new Page(opts)
expect(page.permalinks.find(permalink => permalink.pageVersion === 'dotcom').href).toBe('/en/github/collaborating-with-issues-and-pull-requests/about-branches')
expect(page.permalinks.find(permalink => permalink.pageVersion === enterpriseServerReleases.oldestSupported).href).toBe(`/en/enterprise/${enterpriseServerReleases.oldestSupported}/user/github/collaborating-with-issues-and-pull-requests/about-branches`)
})
testFeatureNewVersions('homepage permalinks', () => {
test('homepage permalinks', () => {
const page = new Page({
relativePath: 'index.md',
basePath: path.join(__dirname, '../../content'),
@@ -325,16 +181,7 @@ describe('Page class', () => {
expect(page.permalinks.find(permalink => permalink.pageVersion === 'homepage').href).toBe('/en')
})
testFeatureOldVersions('homepage permalinks', () => {
const page = new Page({
relativePath: 'index.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect(page.permalinks[0].href).toBe('/en')
})
testFeatureNewVersions('permalinks for dotcom-only pages', () => {
test('permalinks for dotcom-only pages', () => {
const page = new Page({
relativePath: 'github/getting-started-with-github/signing-up-for-a-new-github-account.md',
basePath: path.join(__dirname, '../../content'),
@@ -344,20 +191,10 @@ describe('Page class', () => {
expect(page.permalinks.length).toBe(1)
})
testFeatureOldVersions('permalinks for dotcom-only pages', () => {
const page = new Page({
relativePath: 'github/getting-started-with-github/signing-up-for-a-new-github-account.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect(page.permalinks.find(permalink => permalink.pageVersion === 'dotcom').href).toBe('/en/github/getting-started-with-github/signing-up-for-a-new-github-account')
expect(page.permalinks.length).toBe(1)
})
testFeatureNewVersions('permalinks for enterprise-only pages', () => {
test('permalinks for enterprise-only pages', () => {
const page = new Page({
relativePath: 'products/admin/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
expect(page.permalinks.find(permalink => permalink.pageVersion === `enterprise-server@${enterpriseServerReleases.latest}`).href).toBe(`/en/enterprise-server@${enterpriseServerReleases.latest}/products/admin/some-category/some-article`)
@@ -366,39 +203,17 @@ describe('Page class', () => {
expect(pageVersions.includes(nonEnterpriseDefaultVersion)).toBe(false)
})
testFeatureOldVersions('permalinks for enterprise-only pages', () => {
const page = new Page({
relativePath: 'products/enterprise/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
expect(page.permalinks.find(permalink => permalink.pageVersion === enterpriseServerReleases.latest).href).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/products/enterprise/some-category/some-article`)
const pageVersions = page.permalinks.map(permalink => permalink.pageVersion)
expect(pageVersions.length).toBeGreaterThan(1)
expect(pageVersions.includes('dotcom')).toBe(false)
})
testFeatureNewVersions('permalinks for non-GitHub.com products without Enterprise versions', () => {
test('permalinks for non-GitHub.com products without Enterprise versions', () => {
const page = new Page({
relativePath: 'products/actions/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
expect(page.permalinks.find(permalink => permalink.pageVersion === nonEnterpriseDefaultVersion).href).toBe(`/en/${nonEnterpriseDefaultVersion}/products/actions/some-category/some-article`)
expect(page.permalinks.length).toBe(1)
})
testFeatureOldVersions('permalinks for non-GitHub.com products without Enterprise versions', () => {
const page = new Page({
relativePath: 'products/actions/some-category/some-article.md',
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
expect(page.permalinks.find(permalink => permalink.pageVersion === 'dotcom').href).toBe('/en/products/actions/some-category/some-article')
expect(page.permalinks.length).toBe(1)
})
testFeatureNewVersions('permalinks for non-GitHub.com products with Enterprise versions', () => {
test('permalinks for non-GitHub.com products with Enterprise versions', () => {
const page = new Page({
relativePath: '/insights/installing-and-configuring-github-insights/about-github-insights.md',
basePath: path.join(__dirname, '../../content'),
@@ -409,18 +224,6 @@ describe('Page class', () => {
expect(pageVersions.length).toBeGreaterThan(1)
expect(pageVersions.includes(nonEnterpriseDefaultVersion)).toBe(false)
})
testFeatureOldVersions('permalinks for non-GitHub.com products with Enterprise versions', () => {
const page = new Page({
relativePath: '/insights/installing-and-configuring-github-insights/about-github-insights.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect(page.permalinks.find(permalink => permalink.pageVersion === enterpriseServerReleases.latest).href).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/insights/installing-and-configuring-github-insights/about-github-insights`)
const pageVersions = page.permalinks.map(permalink => permalink.pageVersion)
expect(pageVersions.length).toBeGreaterThan(1)
expect(pageVersions.includes('dotcom')).toBe(false)
})
})
describe('Page.parseFrontmatter()', () => {
@@ -453,16 +256,7 @@ describe('Page class', () => {
})
})
testFeatureNewVersions('fixes translated frontmatter that includes verdadero', async () => {
const page = new Page({
relativePath: 'article-with-mislocalized-frontmatter.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
languageCode: 'ja'
})
expect(page.mapTopic).toBe(true)
})
testFeatureOldVersions('fixes translated frontmatter that includes verdadero', async () => {
test('fixes translated frontmatter that includes verdadero', async () => {
const page = new Page({
relativePath: 'article-with-mislocalized-frontmatter.md',
basePath: path.join(__dirname, '../fixtures'),
@@ -476,7 +270,7 @@ describe('Page class', () => {
// There are none of these in the content at this time!
})
testFeatureNewVersions('pages that apply to newer enterprise versions', async () => {
test('pages that apply to newer enterprise versions', async () => {
const page = new Page({
relativePath: 'github/administering-a-repository/managing-the-automatic-deletion-of-branches.md',
basePath: path.join(__dirname, '../../content'),
@@ -486,17 +280,7 @@ describe('Page class', () => {
expect(page.versions['enterprise-server']).toBe('>=2.19')
})
testFeatureOldVersions('pages that apply to newer enterprise versions', async () => {
const page = new Page({
relativePath: 'github/administering-a-repository/managing-the-automatic-deletion-of-branches.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect('dotcom' in page.productVersions).toBe(true)
expect(page.productVersions.enterprise).toBe('>=2.19')
})
testFeatureNewVersions('index page', async () => {
test('index page', async () => {
const page = new Page({
relativePath: 'index.md',
basePath: path.join(__dirname, '../../content'),
@@ -506,27 +290,7 @@ describe('Page class', () => {
expect(page.versions['enterprise-server']).toBe('*')
})
testFeatureOldVersions('index page', async () => {
const page = new Page({
relativePath: 'index.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect(page.productVersions.dotcom).toBe('*')
})
// Note there is no more enterprise/index.md page with the latest versioning changes
testFeatureOldVersions('enterprise index page', async () => {
const page = new Page({
relativePath: 'enterprise/index.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect('dotcom' in page.productVersions).toBe(false)
expect(page.productVersions.enterprise).toBe('*')
})
testFeatureNewVersions('enterprise admin index page', async () => {
test('enterprise admin index page', async () => {
const page = new Page({
relativePath: 'admin/index.md',
basePath: path.join(__dirname, '../../content'),
@@ -536,34 +300,11 @@ describe('Page class', () => {
expect(nonEnterpriseDefaultPlan in page.versions).toBe(false)
expect(page.versions['enterprise-server']).toBe('*')
})
testFeatureOldVersions('enterprise admin index page', async () => {
const page = new Page({
relativePath: 'enterprise/admin/index.md',
basePath: path.join(__dirname, '../../content'),
languageCode: 'en'
})
expect('dotcom' in page.productVersions).toBe(false)
expect(page.productVersions.enterprise).toBe('*')
})
})
})
describe('catches errors thrown in Page class', () => {
testFeatureNewVersions('frontmatter parsing error', () => {
function getPage () {
return new Page({
relativePath: 'page-with-frontmatter-error.md',
basePath: path.join(__dirname, '../fixtures/new-versions'),
languageCode: 'en'
})
}
expect(getPage).toThrowError('invalid frontmatter entry')
})
testFeatureOldVersions('frontmatter parsing error', () => {
test('frontmatter parsing error', () => {
function getPage () {
return new Page({
relativePath: 'page-with-frontmatter-error.md',
@@ -575,7 +316,7 @@ describe('catches errors thrown in Page class', () => {
expect(getPage).toThrowError('invalid frontmatter entry')
})
testFeatureNewVersions('missing versions frontmatter', () => {
test('missing versions frontmatter', () => {
function getPage () {
return new Page({
relativePath: 'page-with-missing-product-versions.md',
@@ -586,16 +327,4 @@ describe('catches errors thrown in Page class', () => {
expect(getPage).toThrowError('versions')
})
testFeatureOldVersions('missing productVersions', () => {
function getPage () {
return new Page({
relativePath: 'page-with-missing-product-versions.md',
basePath: path.join(__dirname, '../fixtures'),
languageCode: 'en'
})
}
expect(getPage).toThrowError('productVersions')
})
})

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const path = require('path')
const loadPages = require('../../lib/pages')
const languageCodes = Object.keys(require('../../lib/languages'))

View File

@@ -1,17 +1,13 @@
require('../../lib/feature-flags')
const Permalink = require('../../lib/permalink')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
// Permalink constructor requires: languageCode, pageVersion, relativePath, title
// Permalink.derive requires: languageCode, relativePath, title, versions (<- FM prop)
describe('Permalink class', () => {
// We can only use Permalink.derive to get the special 'homepage' permalink
testFeatureNewVersions('derives info for unversioned homepage', () => {
test('derives info for unversioned homepage', () => {
const versions = {
'free-pro-team': '*',
'enterprise-server': '*'
@@ -22,68 +18,35 @@ describe('Permalink class', () => {
expect(homepagePermalink.href).toBe('/en')
})
testFeatureOldVersions('derives info for homepage', () => {
const permalink = new Permalink('en', 'dotcom', 'index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe('GitHub.com')
expect(permalink.href).toBe('/en')
})
testFeatureNewVersions('derives info for non-enterprise versioned homepage', () => {
test('derives info for non-enterprise versioned homepage', () => {
const permalink = new Permalink('en', nonEnterpriseDefaultVersion, 'index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe('Free, Pro, and Team')
expect(permalink.href).toBe(`/en/${nonEnterpriseDefaultVersion}`)
})
testFeatureNewVersions('derives info for enterprise server versioned homepage', () => {
test('derives info for enterprise server versioned homepage', () => {
const permalink = new Permalink('en', `enterprise-server@${enterpriseServerReleases.latest}`, 'index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe(`Enterprise Server ${enterpriseServerReleases.latest}`)
expect(permalink.href).toBe(`/en/enterprise-server@${enterpriseServerReleases.latest}`)
})
testFeatureNewVersions('derives info for GitHub.com homepage', () => {
test('derives info for GitHub.com homepage', () => {
const permalink = new Permalink('en', nonEnterpriseDefaultVersion, 'github/index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe('Free, Pro, and Team')
expect(permalink.href).toBe(`/en/${nonEnterpriseDefaultVersion}/github`)
})
testFeatureOldVersions('derives info for GitHub.com homepage', () => {
const permalink = new Permalink('en', 'dotcom', 'github/index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe('GitHub.com')
expect(permalink.href).toBe('/en/github')
})
testFeatureNewVersions('derives info for enterprise version of GitHub.com homepage', () => {
test('derives info for enterprise version of GitHub.com homepage', () => {
const permalink = new Permalink('en', `enterprise-server@${enterpriseServerReleases.latest}`, 'github/index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe(`Enterprise Server ${enterpriseServerReleases.latest}`)
expect(permalink.href).toBe(`/en/enterprise-server@${enterpriseServerReleases.latest}/github`)
})
testFeatureOldVersions('derives info for enterprise version of GitHub.com homepage', () => {
const permalink = new Permalink('en', enterpriseServerReleases.latest, 'github/index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe(`Enterprise Server ${enterpriseServerReleases.latest}`)
expect(permalink.href).toBe(`/en/enterprise/${enterpriseServerReleases.latest}/user/github`)
})
// Note enterprise/index.md no longer exists after the latest versioning changes
testFeatureOldVersions('derives info for enterprise homepage', () => {
const permalink = new Permalink('en', enterpriseServerReleases.latest, 'enterprise/index.md', 'Hello World')
expect(permalink.pageVersionTitle).toBe(`Enterprise Server ${enterpriseServerReleases.latest}`)
expect(permalink.href).toBe(`/en/enterprise/${enterpriseServerReleases.latest}`)
})
testFeatureNewVersions('preserves input properties', () => {
test('preserves input properties', () => {
const permalink = new Permalink('en', nonEnterpriseDefaultVersion, 'index.md', 'Hello World')
expect(permalink.languageCode).toBe('en')
expect(permalink.pageVersion).toBe(nonEnterpriseDefaultVersion)
expect(permalink.relativePath).toBe('index.md')
expect(permalink.title).toBe('Hello World')
})
testFeatureOldVersions('preserves input properties', () => {
const permalink = new Permalink('en', 'dotcom', 'index.md', 'Hello World')
expect(permalink.languageCode).toBe('en')
expect(permalink.pageVersion).toBe('dotcom')
expect(permalink.relativePath).toBe('index.md')
expect(permalink.title).toBe('Hello World')
})
})

View File

@@ -1,13 +1,9 @@
require('../../lib/feature-flags')
const revalidator = require('revalidator')
const products = require('../../lib/all-products')
const schema = require('../../lib/products-schema')
const { getDOM, getJSON } = require('../helpers')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const testFeatureNewVersions = process.env.FEATURE_NEW_VERSIONS ? test : test.skip
const testFeatureOldVersions = process.env.FEATURE_NEW_VERSIONS ? test.skip : test
describe('products module', () => {
test('is an object with product ids as keys', () => {
expect('github' in products).toBe(true)
@@ -26,7 +22,7 @@ describe('products module', () => {
describe('mobile-only products nav', () => {
jest.setTimeout(5 * 60 * 1000)
testFeatureNewVersions('renders current product on various product pages for each product', async () => {
test('renders current product on various product pages for each product', async () => {
// Note the unversioned homepage at `/` does not have a product selected in the mobile dropdown
expect((await getDOM('/github'))('#current-product').text().trim()).toBe('GitHub.com')
@@ -41,22 +37,6 @@ describe('mobile-only products nav', () => {
// localized
expect((await getDOM('/ja/desktop'))('#current-product').text().trim()).toBe('GitHub Desktop')
})
testFeatureOldVersions('renders current product on various product pages for each product', async () => {
expect((await getDOM('/'))('#current-product').text().trim()).toBe('GitHub.com')
expect((await getDOM('/github'))('#current-product').text().trim()).toBe('GitHub.com')
// Enterprise user and server
expect((await getDOM('/en/enterprise/admin'))('#current-product').text().trim()).toBe('Enterprise Server')
expect((await getDOM('/en/enterprise/user/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address'))('#current-product').text().trim()).toBe('GitHub.com')
expect((await getDOM('/desktop'))('#current-product').text().trim()).toBe('GitHub Desktop')
expect((await getDOM('/actions'))('#current-product').text().trim()).toBe('GitHub Actions')
// localized
expect((await getDOM('/ja/desktop'))('#current-product').text().trim()).toBe('GitHub Desktop')
})
})
describe('products middleware', () => {
@@ -67,20 +47,13 @@ describe('products middleware', () => {
expect(Array.isArray(products)).toBe(true)
})
testFeatureNewVersions('adds res.context.currentProduct string on homepage', async () => {
test('adds res.context.currentProduct string on homepage', async () => {
const currentProduct = await getJSON('/en?json=currentProduct')
expect(currentProduct).toBe('homepage')
})
testFeatureNewVersions('adds res.context.currentProduct object', async () => {
test('adds res.context.currentProduct object', async () => {
const currentProduct = await getJSON(`/en/${nonEnterpriseDefaultVersion}/github?json=currentProduct`)
expect(currentProduct).toBe('github')
})
testFeatureOldVersions('adds res.context.currentProduct object', async () => {
const currentProduct = await getJSON('/en?json=currentProduct')
expect('id' in currentProduct).toBe(true)
expect('name' in currentProduct).toBe(true)
expect('dir' in currentProduct).toBe(true)
})
})

View File

@@ -1,10 +1,6 @@
require('../../lib/feature-flags')
const loadPages = require('../../lib/pages')
const renderContent = require('../../lib/render-content')
const allVersions = Object.keys(require('../../lib/all-versions'))
const { oldVersions } = require('../../lib/old-versions-utils')
const versions = process.env.FEATURE_NEW_VERSIONS ? allVersions : oldVersions
describe('toc links', () => {
jest.setTimeout(3 * 60 * 1000)
@@ -17,7 +13,7 @@ describe('toc links', () => {
const issues = []
for (const pageVersion of versions) {
for (const pageVersion of allVersions) {
for (const page of englishIndexPages) {
// skip page if it doesn't have a permalink for the current product version
if (!page.permalinks.some(permalink => permalink.pageVersion === pageVersion)) continue

View File

@@ -1,4 +1,3 @@
require('../../lib/feature-flags')
const revalidator = require('revalidator')
const allVersions = require('../../lib/all-versions')
const { latest } = require('../../lib/enterprise-server-releases')
@@ -6,9 +5,7 @@ const schema = require('../../lib/versions-schema')
const { getJSON } = require('../helpers')
const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
const describeIf = process.env.FEATURE_NEW_VERSIONS ? describe : describe.skip
describeIf('versions module', () => {
describe('versions module', () => {
test('is an object with versions as keys', () => {
expect(nonEnterpriseDefaultVersion in allVersions).toBe(true)
expect(`enterprise-server@${latest}` in allVersions).toBe(true)
@@ -23,7 +20,7 @@ describeIf('versions module', () => {
})
})
describeIf('versions middleware', () => {
describe('versions middleware', () => {
jest.setTimeout(5 * 60 * 1000)
test('adds res.context.allVersions object', async () => {