1
0
mirror of synced 2026-01-07 00:01:39 -05:00
Files
docs/tests/meta/repository-references.js
James M. Greene 08db1c970c Refactor Staging deployment workflow to support open source PRs (#20459)
* Add a Staging build workflow

* Remove all commented out code from build workflow

It will be handled in https://github.com/github/docs-engineering/issues/726

* Use pinned version of upload-artifact action

* Tweaks to build

* Minor deployment script refactoring

* Update the Staging deployment workflow

* Missed refactoring tweak

* Add relevant comments

* Update Heroku app naming convention for Actions deploy to include 'gha-' prefix

* Update Heroku app ConfigVars and SourceBlob for optional prebuilt app

* Remove obsolete 'dist/' dir from PR build artifact

See https://github.com/github/docs-internal/pull/20405

* Ensure a new enough version of npm is used

* Switch to creating a tarball for upload

* Remove obsolete 'layouts' dir from file list

* Ditch the verbosity for 'tar'... too many files

* Add tarball support to deploy

* Add esm workaround to deploy script

See https://github.com/actions/github-script/issues/168

* Temporarily ignore staging deploy workflow from workflow linter

* Update deployment to use a Heroku Build Source instead of a GitHub Actions Artifact

* Update undeploy workflow to use ESM workaround

See https://github.com/actions/github-script/issues/168

* Add 'esm' package to optionalDependencies to better support workaround

See https://github.com/actions/github-script/issues/168

* Add Slack notifications for workflow failures

* Wrap AppSetup polling in try-catch

* Improve dyno monitoring

* Rename 'script/deploy' to have a .js extension #esm

* Update script references to include the extension

* Use non-deprecated Sources API for Heroku

* Use normal quotes

* Stub in a step to mark deployment inactive after timing out

* Apply suggestions from code review

Co-authored-by: Rachael Sewell <rachmari@github.com>

Co-authored-by: Rachael Sewell <rachmari@github.com>
2021-08-25 20:45:51 +00:00

85 lines
2.4 KiB
JavaScript

import walkSync from 'walk-sync'
import readFileAsync from '../../lib/readfile-async.js'
const REPO_REGEXP = /\/\/github\.com\/github\/(?!docs[/'"\n])([\w-.]+)/gi
// These are a list of known public repositories in the GitHub organization
const ALLOW_LIST = new Set([
'site-policy',
'roadmap',
'linguist',
'super-linter',
'backup-utils',
'codeql-action-sync-tool',
'codeql-action',
'platform-samples',
'github-services',
'explore',
'enterprise-releases',
'markup',
'hubot',
'VisualStudio',
'codeql',
'gitignore',
'feedback',
'semantic',
'git-lfs',
'git-sizer',
'dmca',
'gov-takedowns',
'janky',
'rest-api-description',
'smimesign',
'tweetsodium',
'choosealicense.com',
'renaming',
'localization-support',
'docs',
'securitylab',
])
describe('check if a GitHub-owned private repository is referenced', () => {
// This tests exists to make sure we don't reference private GitHub owned repositories
// in our open-source repository. If this is failing, and the repo is public,
// feel free to add it to the list above. Or if the feature requires referencing an
// internal repo, add the feature to the ignore list below.
const filenames = walkSync(process.cwd(), {
directories: false,
ignore: [
'.git',
'.github/actions-scripts/enterprise-server-issue-templates/*.md',
'.github/review-template.md',
'.github/workflows/sync-search-indices.yml',
'.next',
'contributing/search.md',
'node_modules',
'translations',
'lib/rest/**/*.json',
'lib/webhooks/**/*.json',
'ownership.yaml',
'docs/index.yaml',
'lib/excluded-links.js',
'content/early-access',
'data/early-access',
'data/release-notes', // These include links to internal issues in Liquid comments.
'**/*.png', // Do not check images or font files.
'**/*.jpg', // We could just put all of assets/* here, but that would prevent any
'**/*.gif', // READMEs or other text-based files from being checked.
'**/*.pdf',
'**/*.ico',
'**/*.woff',
'script/deploy.js',
'script/README.md',
],
})
test.each(filenames)('in file %s', async (filename) => {
const file = await readFileAsync(filename, 'utf8')
const matches = Array.from(file.matchAll(REPO_REGEXP))
.map(([, repoName]) => repoName)
.filter((repoName) => !ALLOW_LIST.has(repoName))
expect(matches).toHaveLength(0)
})
})