Skip to content

Commit ef684f4

Browse files
authored
Merge pull request #35370 from github/repo-sync
Repo sync
2 parents 5e50aa6 + 1ad5033 commit ef684f4

File tree

17 files changed

+91
-95
lines changed

17 files changed

+91
-95
lines changed

.github/actions/warmup-remotejson-cache/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ runs:
3333
- name: Run script
3434
if: ${{ inputs.restore-only == '' }}
3535
shell: bash
36-
run: node src/archives/scripts/warmup-remotejson.js
36+
run: npm run warmup-remotejson
3737

3838
- name: Cache .remotejson-cache (save)
3939
if: ${{ inputs.restore-only == '' }}

.github/workflows/purge-old-workflow-runs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name: Purge old workflow runs
77
on:
88
workflow_dispatch:
99
schedule:
10-
- cron: '20 */2 * * *' # Run every 2 hours at 20 minutes past the hour
10+
- cron: '20 * * * *' # Run every hour at 20 minutes past the hour
1111

1212
permissions:
1313
contents: write

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
"update-internal-links": "tsx src/links/scripts/update-internal-links.ts",
8989
"validate-asset-images": "tsx src/assets/scripts/validate-asset-images.ts",
9090
"validate-github-github-docs-urls": "tsx src/links/scripts/validate-github-github-docs-urls/index.ts",
91-
"warmup-remotejson": "node src/archives/scripts/warmup-remotejson.js"
91+
"warmup-remotejson": "tsx src/archives/scripts/warmup-remotejson.ts"
9292
},
9393
"lint-staged": {
9494
"*.{js,mjs,ts,tsx}": "eslint --cache --fix",

src/archives/lib/is-archived-version.d.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/archives/lib/is-archived-version.js renamed to src/archives/lib/is-archived-version.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
import patterns from '#src/frame/lib/patterns.js'
2-
import { deprecated } from '#src/versions/lib/enterprise-server-releases.js'
1+
import patterns from '@/frame/lib/patterns.js'
2+
import { deprecated } from '@/versions/lib/enterprise-server-releases.js'
3+
import type { ExtendedRequest } from '@/types'
34

4-
export function isArchivedVersion(req) {
5+
type IsArchivedInfo = {
6+
isArchived?: boolean
7+
requestedVersion?: string
8+
}
9+
10+
export function isArchivedVersion(req: ExtendedRequest): IsArchivedInfo {
511
// if this is an assets path, use the referrer
612
// if this is a docs path, use the req.path
713
const pathToCheck = patterns.assetPaths.test(req.path) ? req.get('referrer') : req.path
814
return isArchivedVersionByPath(pathToCheck || '')
915
}
1016

11-
export function isArchivedVersionByPath(pathToCheck) {
17+
export function isArchivedVersionByPath(pathToCheck: string): IsArchivedInfo {
1218
// ignore paths that don't have an enterprise version number
1319
if (
1420
!(
@@ -22,10 +28,10 @@ export function isArchivedVersionByPath(pathToCheck) {
2228
// extract enterprise version from path, e.g. 2.16
2329
const requestedVersion = pathToCheck.includes('enterprise-server@')
2430
? pathToCheck.match(patterns.getEnterpriseServerNumber)?.[1]
25-
: pathToCheck.match(patterns.getEnterpriseVersionNumber)[1]
31+
: pathToCheck.match(patterns.getEnterpriseVersionNumber)?.[1]
2632

2733
// bail if the request version is not deprecated
28-
if (!deprecated.includes(requestedVersion)) {
34+
if (!requestedVersion || !deprecated.includes(requestedVersion)) {
2935
return {}
3036
}
3137

src/archives/lib/old-versions-utils.js renamed to src/archives/lib/old-versions-utils.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import path from 'path'
2-
import { supported, latest } from '#src/versions/lib/enterprise-server-releases.js'
3-
import patterns from '#src/frame/lib/patterns.js'
4-
import nonEnterpriseDefaultVersion from '#src/versions/lib/non-enterprise-default-version.js'
5-
import { allVersions } from '#src/versions/lib/all-versions.js'
2+
import { supported, latest } from '@/versions/lib/enterprise-server-releases.js'
3+
import patterns from '@/frame/lib/patterns.js'
4+
import nonEnterpriseDefaultVersion from '@/versions/lib/non-enterprise-default-version.js'
5+
import { allVersions } from '@/versions/lib/all-versions.js'
66
const latestNewVersion = `enterprise-server@${latest}`
77
const oldVersions = ['dotcom'].concat(supported)
88
const newVersions = Object.keys(allVersions)
@@ -18,7 +18,7 @@ const newVersions = Object.keys(allVersions)
1818
// return an old version like 2.21.
1919
// Fall back to latest GHES version if one can't be found,
2020
// for example, if the new version is private-instances@latest.
21-
export function getOldVersionFromNewVersion(newVersion) {
21+
export function getOldVersionFromNewVersion(newVersion: string) {
2222
return newVersion === nonEnterpriseDefaultVersion
2323
? 'dotcom'
2424
: oldVersions.find((oldVersion) => newVersion.includes(oldVersion)) || latest
@@ -27,15 +27,15 @@ export function getOldVersionFromNewVersion(newVersion) {
2727
// Given an old version like 2.21,
2828
// return a new version like enterprise-server@2.21.
2929
// Fall back to latest GHES version if one can't be found.
30-
export function getNewVersionFromOldVersion(oldVersion) {
30+
export function getNewVersionFromOldVersion(oldVersion: string) {
3131
return oldVersion === 'dotcom'
3232
? nonEnterpriseDefaultVersion
3333
: newVersions.find((newVersion) => newVersion.includes(oldVersion)) || latestNewVersion
3434
}
3535

3636
// Given an old path like /enterprise/2.21/user/github/category/article,
3737
// return an old version like 2.21.
38-
export function getOldVersionFromOldPath(oldPath) {
38+
export function getOldVersionFromOldPath(oldPath: string) {
3939
// We should never be calling this function on a path that starts with a new version,
4040
// so we can assume the path either uses the old /enterprise format or it's dotcom.
4141
if (!patterns.enterprise.test(oldPath)) return 'dotcom'
@@ -46,7 +46,7 @@ export function getOldVersionFromOldPath(oldPath) {
4646

4747
// Given an old path like /en/enterprise/2.21/user/github/category/article,
4848
// return a new path like /en/enterprise-server@2.21/github/category/article.
49-
export function getNewVersionedPath(oldPath, languageCode = '') {
49+
export function getNewVersionedPath(oldPath: string, languageCode = '') {
5050
// It's possible a new version has been injected into an old path
5151
// via syntax like: /en/enterprise/{{ currentVersion }}/admin/category/article
5252
// which could resolve to /en/enterprise/private-instances@latest/admin/category/article,
@@ -58,7 +58,7 @@ export function getNewVersionedPath(oldPath, languageCode = '') {
5858

5959
// If no new version was found, assume path contains an old version, like 2.21
6060
if (!newVersion) {
61-
const oldVersion = getOldVersionFromOldPath(oldPath, languageCode)
61+
const oldVersion = getOldVersionFromOldPath(oldPath)
6262
newVersion = getNewVersionFromOldVersion(oldVersion)
6363
}
6464

src/archives/middleware/archived-enterprise-versions-assets.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import got from 'got'
22
import type { Response, NextFunction } from 'express'
33

44
import patterns from '@/frame/lib/patterns.js'
5-
import { isArchivedVersion } from '@/archives/lib/is-archived-version.js'
5+
import { isArchivedVersion } from '@/archives/lib/is-archived-version'
66
import {
77
setFastlySurrogateKey,
88
SURROGATE_ENUMS,

src/archives/middleware/archived-enterprise-versions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from '@/versions/lib/enterprise-server-releases.js'
1111
import patterns from '@/frame/lib/patterns.js'
1212
import versionSatisfiesRange from '@/versions/lib/version-satisfies-range.js'
13-
import { isArchivedVersion } from '@/archives/lib/is-archived-version.js'
13+
import { isArchivedVersion } from '@/archives/lib/is-archived-version'
1414
import {
1515
setFastlySurrogateKey,
1616
SURROGATE_ENUMS,

src/archives/scripts/warmup-remotejson.js renamed to src/archives/scripts/warmup-remotejson.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@
1919
// [end-readme]
2020

2121
import { program } from 'commander'
22-
import semver from 'semver'
22+
import semver, { SemVer } from 'semver'
2323

24-
import getRemoteJSON from '#src/frame/lib/get-remote-json.js'
24+
import getRemoteJSON from '@/frame/lib/get-remote-json.js'
2525
import {
2626
deprecated,
27-
firstReleaseStoredInBlobStorage,
2827
lastVersionWithoutArchivedRedirectsFile,
2928
} from '#src/versions/lib/enterprise-server-releases.js'
3029

@@ -36,18 +35,14 @@ program
3635

3736
main()
3837

39-
function version2url(version) {
40-
const inBlobStorage = semver.gte(
41-
semver.coerce(version).raw,
42-
semver.coerce(firstReleaseStoredInBlobStorage).raw,
43-
)
38+
function version2url(version: string | SemVer) {
4439
return `https://github.github.com/docs-ghes-${version}/redirects.json`
4540
}
4641

47-
function withArchivedRedirectsFile(version) {
42+
function withArchivedRedirectsFile(version: string | SemVer) {
4843
return semver.eq(
49-
semver.coerce(version).raw,
50-
semver.coerce(lastVersionWithoutArchivedRedirectsFile).raw,
44+
semver.coerce(version)?.raw || '',
45+
semver.coerce(lastVersionWithoutArchivedRedirectsFile)?.raw || '',
5146
)
5247
}
5348

src/archives/tests/deprecated-enterprise-versions.js renamed to src/archives/tests/deprecated-enterprise-versions.ts

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { describe, expect, test, vi } from 'vitest'
22

3-
import enterpriseServerReleases from '#src/versions/lib/enterprise-server-releases.js'
4-
import { get, getDOM } from '#src/tests/helpers/e2etest.js'
5-
import { SURROGATE_ENUMS } from '#src/frame/middleware/set-fastly-surrogate-key.js'
3+
import enterpriseServerReleases from '@/versions/lib/enterprise-server-releases.js'
4+
import { get, getDOM } from '@/tests/helpers/e2etest-ts'
5+
import { SURROGATE_ENUMS } from '@/frame/middleware/set-fastly-surrogate-key.js'
66

77
describe('enterprise deprecation', () => {
88
vi.setConfig({ testTimeout: 60 * 1000 })
@@ -45,8 +45,8 @@ describe('enterprise deprecation', () => {
4545

4646
test('handles requests for deprecated Enterprise pages ( >=2.13 )', async () => {
4747
expect(enterpriseServerReleases.deprecated.includes('2.13')).toBe(true)
48-
const $ = await getDOM('/en/enterprise/2.13/user/articles/about-branches')
49-
expect($.res.statusCode).toBe(200)
48+
const { $, res } = await getDOM('/en/enterprise/2.13/user/articles/about-branches')
49+
expect(res.statusCode).toBe(200)
5050
expect($('h1').first().text()).toBe('About branches')
5151
})
5252

@@ -60,27 +60,27 @@ describe('enterprise deprecation', () => {
6060

6161
test('handles requests for deprecated Enterprise pages ( <2.13 )', async () => {
6262
expect(enterpriseServerReleases.deprecated.includes('2.12')).toBe(true)
63-
const $ = await getDOM('/enterprise/2.12/user/articles/about-branches')
64-
expect($.res.statusCode).toBe(200)
63+
const { $, res } = await getDOM('/enterprise/2.12/user/articles/about-branches')
64+
expect(res.statusCode).toBe(200)
6565
expect($('h2').text()).toBe('About branches')
6666
})
6767

6868
test('handles requests for deprecated Enterprise version 11.10.340', async () => {
6969
expect(enterpriseServerReleases.deprecated.includes('11.10.340')).toBe(true)
70-
const $ = await getDOM('/enterprise/11.10.340/admin/articles/adding-teams')
71-
expect($.res.statusCode).toBe(200)
70+
const { $, res } = await getDOM('/enterprise/11.10.340/admin/articles/adding-teams')
71+
expect(res.statusCode).toBe(200)
7272
expect($('h2').text()).toBe('Adding teams')
7373
})
7474

7575
test('has working admin guide links ( <2.13 )', async () => {
7676
const guidesPath = '/enterprise/2.12/admin'
77-
let $ = await getDOM(`${guidesPath}/guides`)
78-
const firstLink = $('[class="guide-section"]').children('a').attr('href')
77+
const { $: $1 } = await getDOM(`${guidesPath}/guides`)
78+
const firstLink = $1('[class="guide-section"]').children('a').attr('href')
7979

80-
$ = await getDOM(`${guidesPath}/${firstLink}`)
81-
expect($.res.statusCode).toBe(200)
80+
const { $: $2, res } = await getDOM(`${guidesPath}/${firstLink}`)
81+
expect(res.statusCode).toBe(200)
8282
// this test assumes the Installation guide is the first link on the guides page
83-
expect($('h2').text()).toBe('Installing and configuring GitHub Enterprise')
83+
expect($2('h2').text()).toBe('Installing and configuring GitHub Enterprise')
8484
})
8585
})
8686

@@ -139,22 +139,22 @@ describe('recently deprecated redirects', () => {
139139

140140
describe('deprecation banner', () => {
141141
test('renders a deprecation warning banner on oldest supported Enterprise version', async () => {
142-
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
142+
const { $ } = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
143143
expect($('[data-testid=deprecation-banner]').length).toBe(1)
144144
})
145145

146146
test('does not render a deprecation warning banner on other Enterprise versions', async () => {
147-
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
147+
const { $ } = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}`)
148148
expect($('[data-testid=deprecation-banner]').length).toBe(0)
149149
})
150150

151151
test('deprecation warning banner includes a date', async () => {
152-
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
152+
const { $ } = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
153153
expect($('[data-testid=deprecation-banner] b').text().endsWith('discontinued on .')).toBe(false)
154154
})
155155

156156
test('deprecation warning banner includes the right text depending on the date', async () => {
157-
const $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
157+
const { $ } = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}`)
158158
const expectedString = enterpriseServerReleases.isOldestReleaseDeprecated
159159
? 'was discontinued'
160160
: 'will be discontinued'
@@ -164,24 +164,28 @@ describe('deprecation banner', () => {
164164

165165
describe('does not render survey prompt or contribution button', () => {
166166
test('does not render survey prompt', async () => {
167-
let $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/github`)
168-
expect($('[data-testid="survey-form"]').length).toBeGreaterThan(0)
169-
$ = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}/github`)
167+
const { $: $1 } = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/github`)
168+
expect($1('[data-testid="survey-form"]').length).toBeGreaterThan(0)
169+
const { $: $2 } = await getDOM(
170+
`/en/enterprise/${enterpriseServerReleases.oldestSupported}/github`,
171+
)
170172
if (enterpriseServerReleases.isOldestReleaseDeprecated) {
171-
expect($('[data-testid="survey-form"]').length).toBe(0)
173+
expect($2('[data-testid="survey-form"]').length).toBe(0)
172174
} else {
173-
expect($('[data-testid="survey-form"]').length).toBeGreaterThan(0)
175+
expect($2('[data-testid="survey-form"]').length).toBeGreaterThan(0)
174176
}
175177
})
176178

177179
test('does not render contribution button', async () => {
178-
let $ = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/github`)
179-
expect($('.contribution').length).toBeGreaterThan(0)
180-
$ = await getDOM(`/en/enterprise/${enterpriseServerReleases.oldestSupported}/github`)
180+
const { $: $1 } = await getDOM(`/en/enterprise/${enterpriseServerReleases.latest}/github`)
181+
expect($1('.contribution').length).toBeGreaterThan(0)
182+
const { $: $2 } = await getDOM(
183+
`/en/enterprise/${enterpriseServerReleases.oldestSupported}/github`,
184+
)
181185
if (enterpriseServerReleases.isOldestReleaseDeprecated) {
182-
expect($('.contribution').length).toBe(0)
186+
expect($2('.contribution').length).toBe(0)
183187
} else {
184-
expect($('[data-testid=survey-form]').length).toBeGreaterThan(0)
188+
expect($2('[data-testid=survey-form]').length).toBeGreaterThan(0)
185189
}
186190
})
187191
})

src/content-render/unified/rewrite-local-links.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import stripAnsi from 'strip-ansi'
55
import { visit } from 'unist-util-visit'
66
import { distance } from 'fastest-levenshtein'
77
import { getPathWithoutLanguage, getVersionStringFromPath } from '#src/frame/lib/path-utils.js'
8-
import { getNewVersionedPath } from '#src/archives/lib/old-versions-utils.js'
8+
import { getNewVersionedPath } from '#src/archives/lib/old-versions-utils.ts'
99
import patterns from '#src/frame/lib/patterns.js'
1010
import { deprecated, latest } from '#src/versions/lib/enterprise-server-releases.js'
1111
import nonEnterpriseDefaultVersion from '#src/versions/lib/non-enterprise-default-version.js'

src/frame/middleware/helmet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { NextFunction, Request, Response } from 'express'
22
import helmet from 'helmet'
3-
import { isArchivedVersion } from '@/archives/lib/is-archived-version.js'
3+
import { isArchivedVersion } from '@/archives/lib/is-archived-version'
44
import versionSatisfiesRange from '@/versions/lib/version-satisfies-range.js'
55
import { languagePrefixPathRegex } from '@/languages/lib/languages.js'
66

src/pageinfo/middleware.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import shortVersions from '@/versions/middleware/short-versions.js'
1414
import contextualize from '@/frame/middleware/context/context'
1515
import features from '@/versions/middleware/features.js'
1616
import getRedirect from '@/redirects/lib/get-redirect.js'
17-
import { isArchivedVersionByPath } from '@/archives/lib/is-archived-version.js'
17+
import { isArchivedVersionByPath } from '@/archives/lib/is-archived-version'
1818
import { readCompressedJsonFile } from '@/frame/lib/read-json-file.js'
1919

2020
const router = express.Router()

0 commit comments

Comments
 (0)