mirror of
https://github.com/primer/css.git
synced 2024-09-20 21:28:20 +03:00
Merge pull request #1263 from primer/primer_script_cleanup
Cleanup unused scripts
This commit is contained in:
commit
a3c4bc263e
@ -84,7 +84,6 @@ Our [`package.json`](package.json) houses a collection of [run-scripts] that we
|
||||
* `now-build` and `now-start` are run on [Now] to build and start the docs site server. `now-test` runs them both in order.
|
||||
* `start` runs the documentation site locally (alias: `dev`).
|
||||
* `test-urls` compares a (pre-generated) list of paths from the **deprecated** [Primer Style Guide](https://styleguide.github.com/primer/) to files in `pages/css`, and lets us know if we've inadvertently deleted or renamed anything.
|
||||
* `test-migrate` tests the [`primer-migrate`](MIGRATING.md#primer-migrate) command line utility.
|
||||
|
||||
The above list may not always be up-to-date. You can list all of the available scripts by calling `npm run` with no other arguments.
|
||||
|
||||
|
@ -1,86 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* XXX: we use Node.js native modules only here to avoid
|
||||
* requiring any runtime dependencies when folks install
|
||||
* @primer/css
|
||||
*/
|
||||
|
||||
const fs = require('fs')
|
||||
const {promisify} = require('util')
|
||||
const readFile = promisify(fs.readFile)
|
||||
const writeFile = promisify(fs.writeFile)
|
||||
const {dirname, join} = require('path')
|
||||
|
||||
const IMPORT_PATTERN = /\@import\s+['"]([^'"]+)['"]/g
|
||||
const replacements = [
|
||||
[/primer-marketing-(\w+)(\/lib)?/, '@primer/css/marketing/$1'],
|
||||
[/primer-(\w+)(\/lib)?/, '@primer/css/$1'],
|
||||
[/primer\b/, '@primer/css']
|
||||
]
|
||||
|
||||
const paths = process.argv.slice(2)
|
||||
const warn = (...args) => console.warn(...args)
|
||||
|
||||
if (paths.length) {
|
||||
Promise.all(
|
||||
paths.map(path => {
|
||||
return migrate(path).then(reps => report(reps, path))
|
||||
})
|
||||
).catch(die)
|
||||
} else {
|
||||
readFile('/dev/stdin', 'utf8')
|
||||
.then(input => {
|
||||
const [output, reps] = replace(input)
|
||||
report(reps, 'stdin')
|
||||
process.stdout.write(output)
|
||||
})
|
||||
.catch(die)
|
||||
}
|
||||
|
||||
function migrate(path) {
|
||||
return readFile(path, 'utf8').then(input => {
|
||||
if (!IMPORT_PATTERN.test(input)) {
|
||||
warn(`No SCSS imports found in ${path}`)
|
||||
return false
|
||||
}
|
||||
|
||||
const [output, reps] = replace(input)
|
||||
if (reps.length) {
|
||||
return writeFile(path, output, 'utf8').then(() => reps)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function replace(input) {
|
||||
const reps = []
|
||||
const output = input.replace(IMPORT_PATTERN, (str, path) => {
|
||||
for (const [from, to] of replacements) {
|
||||
if (from.test(path)) {
|
||||
const replaced = str.replace(from, to)
|
||||
reps.push([path, path.replace(from, to)])
|
||||
return replaced
|
||||
}
|
||||
}
|
||||
return str
|
||||
})
|
||||
return [output, reps]
|
||||
}
|
||||
|
||||
function report(reps, path) {
|
||||
if (reps.length) {
|
||||
warn(`Replaced ${reps.length} imports in ${path}:`)
|
||||
for (const [i, [from, to]] of Object.entries(reps)) {
|
||||
warn(` ${Number(i) + 1}. (${from}) -> (${to})`)
|
||||
}
|
||||
} else {
|
||||
warn(`No legacy imports found in ${path}`)
|
||||
}
|
||||
}
|
||||
|
||||
function die(error) {
|
||||
console.error(error)
|
||||
process.exitCode = 1
|
||||
}
|
@ -1,134 +0,0 @@
|
||||
const Octokit = require('@octokit/rest')
|
||||
|
||||
const commitMetadata = new Map()
|
||||
|
||||
const noteGroups = {
|
||||
breaking: {title: ':boom: Breaking changes'},
|
||||
enhancement: {title: ':rocket: Enhancements'},
|
||||
fix: {title: ':bug: Bug fixes'},
|
||||
docs: {title: ':memo: Documentation'},
|
||||
internal: {title: ':house: Internal'},
|
||||
polish: {title: ':nail_care: Polish'}
|
||||
}
|
||||
|
||||
const releaseLabels = {
|
||||
'Tag: Breaking Change': {releaseType: 'major', group: 'breaking'},
|
||||
'Tag: Enhancement': {releaseType: 'minor', group: 'enhancement'},
|
||||
'Tag: Bug Fix': {releaseType: 'patch', group: 'fix'},
|
||||
'Tag: Documentation': {releaseType: 'patch', group: 'docs'},
|
||||
'Tag: Internal': {releaseType: 'patch', group: 'internal'},
|
||||
'Tag: Polish': {releaseType: 'patch', group: 'polish'}
|
||||
}
|
||||
|
||||
const repoContext = {owner: 'primer', repo: 'css'}
|
||||
const githubOptions = {
|
||||
userAgent: '@primer/css changelog'
|
||||
}
|
||||
const {GITHUB_TOKEN} = process.env
|
||||
if (GITHUB_TOKEN) {
|
||||
githubOptions.auth = GITHUB_TOKEN
|
||||
}
|
||||
|
||||
const github = new Octokit(githubOptions)
|
||||
|
||||
module.exports = {analyzeCommits, generateNotes}
|
||||
|
||||
async function analyzeCommits(options, context) {
|
||||
const {commits, logger} = context
|
||||
|
||||
const releaseTypes = new Map()
|
||||
|
||||
for (const commit of commits) {
|
||||
const match = commit.message.match(/Merge pull request #(\d+)/)
|
||||
if (match) {
|
||||
const [, pullNumber] = match
|
||||
logger.log(`Fetching PR #${pullNumber}...`)
|
||||
// eslint-disable-next-line camelcase
|
||||
const {data: pull} = await github.pulls.get(Object.assign({pull_number: pullNumber}, repoContext))
|
||||
|
||||
const labels = pull.labels.map(label => label.name)
|
||||
if (labels.length) {
|
||||
logger.log(`Got labels: "${labels.join('", "')}"`)
|
||||
for (const label of labels) {
|
||||
const {releaseType, group} = releaseLabels[label] || {}
|
||||
if (releaseType) {
|
||||
logger.info(`Label "${label}" matches release type: ${releaseType}`)
|
||||
|
||||
if (!releaseTypes.has(releaseType)) {
|
||||
releaseTypes.set(releaseType, [])
|
||||
}
|
||||
releaseTypes.get(releaseType).push({pull, label})
|
||||
|
||||
commitMetadata.set(commit.hash, {pull, group})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.log(`No PR number found in commit: "${commit.message}"`)
|
||||
}
|
||||
}
|
||||
|
||||
let returnReleaseType
|
||||
|
||||
for (const releaseType of ['major', 'minor', 'patch']) {
|
||||
if (releaseTypes.has(releaseType)) {
|
||||
const pulls = releaseTypes.get(releaseType)
|
||||
logger.info(`Found ${pulls.length} pulls for release type: ${releaseType}`)
|
||||
for (const {pull, label} of pulls) {
|
||||
logger.info(`- PR #${pull.number} labeled "${label}"`)
|
||||
if (!returnReleaseType) {
|
||||
returnReleaseType = releaseType
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return returnReleaseType
|
||||
}
|
||||
|
||||
async function generateNotes(options, context) {
|
||||
const {
|
||||
commits,
|
||||
logger,
|
||||
nextRelease: {version}
|
||||
} = context
|
||||
|
||||
logger.info(`Finding metadata for ${commitMetadata.size} commits...`)
|
||||
const releaseCommits = commits.map(commit => commitMetadata.get(commit.hash)).filter(Boolean)
|
||||
|
||||
if (releaseCommits.length) {
|
||||
logger.info(`Got ${releaseCommits.length} release commits!`)
|
||||
|
||||
const groupItems = new Map()
|
||||
const committers = new Set()
|
||||
const {owner, repo} = repoContext
|
||||
const baseURL = `https://github.com/${owner}/${repo}`
|
||||
for (const {pull, group} of releaseCommits) {
|
||||
if (!groupItems.has(group)) {
|
||||
groupItems.set(group, [])
|
||||
}
|
||||
const {
|
||||
number,
|
||||
title,
|
||||
user: {login}
|
||||
} = pull
|
||||
groupItems.get(group).push(`- [#${number}](${baseURL}/${number}) ${title}`)
|
||||
committers.add(login)
|
||||
}
|
||||
|
||||
return [
|
||||
`## ${version}`,
|
||||
...Object.entries(noteGroups)
|
||||
.filter(([group]) => groupItems.has(group))
|
||||
.map(([group, {title}]) => `\n### ${title}\n${groupItems.get(group).join('\n')}`),
|
||||
'',
|
||||
`### Committers`,
|
||||
...Array.from(committers)
|
||||
.sort()
|
||||
.map(login => `- [@${login}](https://github.com/${login})`),
|
||||
''
|
||||
].join('\n')
|
||||
} else {
|
||||
logger.info(`No release commits. :(`)
|
||||
}
|
||||
}
|
10
package.json
10
package.json
@ -18,9 +18,6 @@
|
||||
"github",
|
||||
"design-system"
|
||||
],
|
||||
"bin": {
|
||||
"primer-migrate": "bin/primer-migrate"
|
||||
},
|
||||
"scripts": {
|
||||
"fresh": "rm -rf node_modules; npm install",
|
||||
"dist": "script/dist.js",
|
||||
@ -34,9 +31,8 @@
|
||||
"dev": "cd docs && npm install && npm run develop",
|
||||
"start-storybook": "start-storybook -p 8001",
|
||||
"build-storybook": "build-storybook -o .storybuild",
|
||||
"test": "npm-run-all -s test-urls test-migrate",
|
||||
"test": "npm-run-all -s test-urls",
|
||||
"test-urls": "script/test-doc-urls.js",
|
||||
"test-migrate": "script/test-migrate",
|
||||
"release": "changeset publish"
|
||||
},
|
||||
"dependencies": {
|
||||
@ -46,7 +42,6 @@
|
||||
"devDependencies": {
|
||||
"@changesets/changelog-github": "^0.3.0",
|
||||
"@changesets/cli": "^2.14.1",
|
||||
"@octokit/rest": "^16.34.0",
|
||||
"@storybook/addon-viewport": "5.3.18",
|
||||
"@storybook/react": "5.3.18",
|
||||
"autoprefixer": "9.8.6",
|
||||
@ -85,7 +80,6 @@
|
||||
"typographic-base": "^1.0.4",
|
||||
"unified": "^7.1.0",
|
||||
"unist-util-select": "^2.0.2",
|
||||
"unist-util-stringify-position": "^2.0.1",
|
||||
"unist-util-visit": "^1.4.1"
|
||||
"unist-util-stringify-position": "^2.0.1"
|
||||
}
|
||||
}
|
||||
|
@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
dir=$(mktemp -d)
|
||||
|
||||
cat << BEFORE > $dir/input.scss
|
||||
@import 'primer-core/index.scss';
|
||||
@import "primer/index.scss";
|
||||
@import "primer-marketing-utilities/index.scss";
|
||||
@import "primer-marketing-utilities/lib/layout.scss";
|
||||
@import "../node_modules/primer-product/index.scss";
|
||||
@import "primer-product";
|
||||
@import "primer";
|
||||
@import "primer-avatars/lib/avatar.scss";
|
||||
@import "primer-navigation/lib/subnav.scss";
|
||||
BEFORE
|
||||
|
||||
cat << AFTER > $dir/expected.scss
|
||||
@import '@primer/css/core/index.scss';
|
||||
@import "@primer/css/index.scss";
|
||||
@import "@primer/css/marketing/utilities/index.scss";
|
||||
@import "@primer/css/marketing/utilities/layout.scss";
|
||||
@import "../node_modules/@primer/css/product/index.scss";
|
||||
@import "@primer/css/product";
|
||||
@import "@primer/css";
|
||||
@import "@primer/css/avatars/avatar.scss";
|
||||
@import "@primer/css/navigation/subnav.scss";
|
||||
AFTER
|
||||
|
||||
cat $dir/input.scss | bin/primer-migrate > $dir/output.scss
|
||||
diff $dir/{expected,output}.scss || (
|
||||
echo "Uh-oh, there was a diff!"
|
||||
exit 1
|
||||
)
|
||||
echo "Success!"
|
Loading…
Reference in New Issue
Block a user