style: global and simpler prettier config
this also removes precommit scripts because they were cumbersome
This commit is contained in:
parent
90d6b31264
commit
23ddc68ade
2
.github/COMMIT_GUIDELINES.md
vendored
2
.github/COMMIT_GUIDELINES.md
vendored
@ -22,4 +22,4 @@ test
|
|||||||
|
|
||||||
And where scope is one of ui-toolkit, my-joy-beta, cloudapi-gql, boilerplate, and create-instance.
|
And where scope is one of ui-toolkit, my-joy-beta, cloudapi-gql, boilerplate, and create-instance.
|
||||||
|
|
||||||
*The recommended method to commit should be by running npm run commit.*
|
_The recommended method to commit should be by running npm run commit._
|
||||||
|
16
.github/ISSUE_TEMPLATE.md
vendored
16
.github/ISSUE_TEMPLATE.md
vendored
@ -1,27 +1,17 @@
|
|||||||
## I'm submitting a...
|
## I'm submitting a...
|
||||||
|
|
||||||
- [ ] bug report
|
* [ ] bug report
|
||||||
- [ ] feature request
|
* [ ] feature request
|
||||||
- [ ] design request
|
* [ ] design request
|
||||||
|
|
||||||
## What is the current behavior?
|
## What is the current behavior?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem
|
## If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## What is the expected behavior?
|
## What is the expected behavior?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## What is the motivation / use case for changing the behavior?
|
## What is the motivation / use case for changing the behavior?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## If the current behavior is a bug, please provide your browser
|
## If the current behavior is a bug, please provide your browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Other information
|
## Other information
|
||||||
|
12
.github/PULL_REQUEST_TEMPLATE.md
vendored
12
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,22 +1,14 @@
|
|||||||
**Please check if the PR fulfills these requirements**
|
**Please check if the PR fulfills these requirements**
|
||||||
- [ ] The commit message follows our [guidelines](https://github.com/yldio/joyent-portal/blob/master/.github/COMMIT_GUIDELINES.md)
|
|
||||||
- [ ] Tests for the changes have been added (for bug fixes / features)
|
|
||||||
|
|
||||||
|
* [ ] The commit message follows our [guidelines](https://github.com/yldio/joyent-portal/blob/master/.github/COMMIT_GUIDELINES.md)
|
||||||
|
* [ ] Tests for the changes have been added (for bug fixes / features)
|
||||||
|
|
||||||
**What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...)
|
**What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Does this PR close an issue?** (If not please create one)
|
**Does this PR close an issue?** (If not please create one)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**What is the new behavior (if this is a feature change)?**
|
**What is the new behavior (if this is a feature change)?**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Does this PR introduce a breaking change?** (What changes might users need to make in their application due to this PR?)
|
**Does this PR introduce a breaking change?** (What changes might users need to make in their application due to this PR?)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**Other information**
|
**Other information**
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
{
|
{
|
||||||
"ignoreDevDependencies": true,
|
"ignoreDevDependencies": true,
|
||||||
"allowedPackages": [{
|
"allowedPackages": [
|
||||||
|
{
|
||||||
"name": "colors",
|
"name": "colors",
|
||||||
"extraFieldsForDocumentation": "Licence is MIT, but was not found by tool: https://github.com/Marak/colors.js/blob/v0.5.1/MIT-LICENSE.txt",
|
"extraFieldsForDocumentation":
|
||||||
|
"Licence is MIT, but was not found by tool: https://github.com/Marak/colors.js/blob/v0.5.1/MIT-LICENSE.txt",
|
||||||
"date": "17 January 2017",
|
"date": "17 January 2017",
|
||||||
"reason": "MIT Licenced"
|
"reason": "MIT Licenced"
|
||||||
}],
|
}
|
||||||
|
],
|
||||||
"allowedLicenses": [
|
"allowedLicenses": [
|
||||||
"CC-BY-4.0",
|
"CC-BY-4.0",
|
||||||
"CC0-1.0",
|
"CC0-1.0",
|
||||||
|
24
.prettierignore
Normal file
24
.prettierignore
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
.git/*
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
license
|
||||||
|
yarn.lock
|
||||||
|
.travis.yml
|
||||||
|
|
||||||
|
.yarnclean
|
||||||
|
.eslintignore
|
||||||
|
.prettierignore
|
||||||
|
.npmignore
|
||||||
|
.gitignore
|
||||||
|
.dockerignore
|
||||||
|
|
||||||
|
dist
|
||||||
|
build
|
||||||
|
|
||||||
|
*.ico
|
||||||
|
*.html
|
||||||
|
*.log
|
||||||
|
*.svg
|
||||||
|
*.map
|
||||||
|
*.png
|
||||||
|
*.snap
|
31
.prettierrc
Normal file
31
.prettierrc
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"jsxBracketSameLine": false,
|
||||||
|
"printWidth": 80,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"useTabs": false,
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
".prettierrc",
|
||||||
|
".eslintrc",
|
||||||
|
".babelrc",
|
||||||
|
".tern-project",
|
||||||
|
".stylelintrc",
|
||||||
|
".lighthouserc"
|
||||||
|
],
|
||||||
|
"options": {
|
||||||
|
"parser": "json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["package.json"],
|
||||||
|
"options": {
|
||||||
|
"printWidth": 180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -1,8 +1,5 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
|
31
package.json
31
package.json
@ -16,29 +16,17 @@
|
|||||||
"build:test": "lerna run build:test --parallel --stream",
|
"build:test": "lerna run build:test --parallel --stream",
|
||||||
"test:run": "lerna run test --parallel --stream",
|
"test:run": "lerna run test --parallel --stream",
|
||||||
"test:ci:run": "lerna exec 'yarn run test:ci'",
|
"test:ci:run": "lerna exec 'yarn run test:ci'",
|
||||||
"format": "./scripts/format",
|
"format": "prettier --config .prettierrc --write '**/*'",
|
||||||
"lint-staged": "./scripts/run-staged-pkg --lint",
|
|
||||||
"format-staged": "./scripts/format --staged",
|
|
||||||
"lint-license": "./scripts/license-to-fail",
|
|
||||||
"lint-docs": "./scripts/quality-docs",
|
|
||||||
"clean": "lerna clean --yes",
|
"clean": "lerna clean --yes",
|
||||||
"commitmsg": "commitlint -e",
|
"commitmsg": "commitlint -e",
|
||||||
"precommit": "CI=1 redrun -s lint-staged format-staged",
|
"precommit": "pretty-quick --staged",
|
||||||
"commit": "commit"
|
"commit": "commit"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^4.2.1",
|
"@commitlint/cli": "^4.2.1",
|
||||||
"@commitlint/config-angular": "^4.2.1",
|
"@commitlint/config-angular": "^4.2.1",
|
||||||
"@commitlint/prompt-cli": "^4.2.1",
|
"@commitlint/prompt-cli": "^4.2.1",
|
||||||
"apr-awaitify": "^3.0.3",
|
|
||||||
"apr-filter": "^3.0.3",
|
|
||||||
"apr-for-each": "^3.0.3",
|
|
||||||
"apr-main": "^4.0.3",
|
|
||||||
"apr-map": "^3.0.3",
|
|
||||||
"apr-parallel": "^3.0.3",
|
|
||||||
"apr-reduce": "^3.0.3",
|
|
||||||
"babel-eslint": "^8.2.2",
|
"babel-eslint": "^8.2.2",
|
||||||
"checksum": "^0.1.1",
|
|
||||||
"eslint": "^4.18.1",
|
"eslint": "^4.18.1",
|
||||||
"eslint-config-prettier": "^2.9.0",
|
"eslint-config-prettier": "^2.9.0",
|
||||||
"eslint-config-react-app": "^2.1.0",
|
"eslint-config-react-app": "^2.1.0",
|
||||||
@ -49,17 +37,11 @@
|
|||||||
"eslint-plugin-markdown": "^1.0.0-beta.6",
|
"eslint-plugin-markdown": "^1.0.0-beta.6",
|
||||||
"eslint-plugin-prettier": "^2.6.0",
|
"eslint-plugin-prettier": "^2.6.0",
|
||||||
"eslint-plugin-react": "^7.7.0",
|
"eslint-plugin-react": "^7.7.0",
|
||||||
"execa": "^0.9.0",
|
|
||||||
"force-array": "^3.1.0",
|
|
||||||
"husky": "^0.14.3",
|
"husky": "^0.14.3",
|
||||||
"lerna": "^2.9.0",
|
"lerna": "^2.9.0",
|
||||||
"license-to-fail": "^2.2.0",
|
|
||||||
"lodash.uniq": "^4.5.0",
|
|
||||||
"prettier": "1.11.0",
|
"prettier": "1.11.0",
|
||||||
"quality-docs": "^3.3.0",
|
"pretty-quick": "^1.4.1",
|
||||||
"redrun": "^5.10.5",
|
"redrun": "^5.10.5"
|
||||||
"staged-git-files": "0.0.4",
|
|
||||||
"yargs": "^10.0.3"
|
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"axios": "0.16.2",
|
"axios": "0.16.2",
|
||||||
@ -74,8 +56,5 @@
|
|||||||
"breeze-nexttick": "0.2.1",
|
"breeze-nexttick": "0.2.1",
|
||||||
"isarray": "1.0.0"
|
"isarray": "1.0.0"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": ["packages/*", "bundle"]
|
||||||
"packages/*",
|
|
||||||
"bundle"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
{
|
{
|
||||||
"ignore": ["_document.js"],
|
"ignore": ["_document.js"],
|
||||||
"presets": [["joyent-portal", {
|
"presets": [
|
||||||
|
[
|
||||||
|
"joyent-portal",
|
||||||
|
{
|
||||||
"aliases": true,
|
"aliases": true,
|
||||||
"autoAliases": true
|
"autoAliases": true
|
||||||
}]]
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
"jsx": true,
|
"jsx": true,
|
||||||
"node": true,
|
"node": true,
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"configPath": "../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
"configPath":
|
||||||
|
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,10 @@ export default (opts = {}) => {
|
|||||||
credentials: 'same-origin',
|
credentials: 'same-origin',
|
||||||
fetch,
|
fetch,
|
||||||
headers: {
|
headers: {
|
||||||
'X-CSRF-Token': global.cookie.replace(/(?:(?:^|.*;\s*)crumb\s*=\s*([^;]*).*$)|^.*$/, '$1')
|
'X-CSRF-Token': global.cookie.replace(
|
||||||
|
/(?:(?:^|.*;\s*)crumb\s*=\s*([^;]*).*$)|^.*$/,
|
||||||
|
'$1'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
...opts
|
...opts
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
{
|
{
|
||||||
"ignore": ["_document.js", "_aliases.js"],
|
"ignore": ["_document.js", "_aliases.js"],
|
||||||
"presets": [["joyent-portal", {
|
"presets": [
|
||||||
|
[
|
||||||
|
"joyent-portal",
|
||||||
|
{
|
||||||
"aliases": true,
|
"aliases": true,
|
||||||
"autoAliases": true
|
"autoAliases": true
|
||||||
}]]
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
"jsx": true,
|
"jsx": true,
|
||||||
"node": true,
|
"node": true,
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"configPath": "../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
"configPath":
|
||||||
|
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
|
@ -343,9 +343,19 @@ export const Tbody = Baseline(({ children, ...rest }) => (
|
|||||||
export const Td = Baseline(({ children, ...rest }) => (
|
export const Td = Baseline(({ children, ...rest }) => (
|
||||||
<Propagate {...rest}>
|
<Propagate {...rest}>
|
||||||
{value => (
|
{value => (
|
||||||
<BaseTd {...rest} {...value} {...rest} name="td">
|
<BaseTd {...rest} {...value} name="td">
|
||||||
{children}
|
{children}
|
||||||
</BaseTd>
|
</BaseTd>
|
||||||
)}
|
)}
|
||||||
</Propagate>
|
</Propagate>
|
||||||
));
|
));
|
||||||
|
|
||||||
|
export const Pagination = ({ children, colSpan, ...rest }) => (
|
||||||
|
<Tfoot>
|
||||||
|
<Tr {...rest}>
|
||||||
|
<Th colSpan={colSpan} hasBorder="bottom" middle center>
|
||||||
|
{children}
|
||||||
|
</Th>
|
||||||
|
</Tr>
|
||||||
|
</Tfoot>
|
||||||
|
);
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
"libs": [
|
"libs": ["ecmascript", "browser"],
|
||||||
"ecmascript",
|
|
||||||
"browser"
|
|
||||||
],
|
|
||||||
"plugins": {
|
"plugins": {
|
||||||
"doc_comment": true,
|
"doc_comment": true,
|
||||||
"local-scope": true,
|
"local-scope": true,
|
||||||
"jsx": true,
|
"jsx": true,
|
||||||
"node": true,
|
"node": true,
|
||||||
"webpack": {
|
"webpack": {
|
||||||
"configPath": "../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
"configPath":
|
||||||
|
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,8 @@
|
|||||||
"dev": "NODE_ENV=development joyent-react-scripts start",
|
"dev": "NODE_ENV=development joyent-react-scripts start",
|
||||||
"build": "NODE_ENV=production joyent-react-scripts build",
|
"build": "NODE_ENV=production joyent-react-scripts build",
|
||||||
"fmt": "prettier --write --single-quote *.js src/*.js src/**/*.js",
|
"fmt": "prettier --write --single-quote *.js src/*.js src/**/*.js",
|
||||||
"lint-ci":
|
"lint-ci": "eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
|
||||||
"eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
|
"lint": "eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
|
||||||
"lint":
|
|
||||||
"eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
|
|
||||||
"prepublish": "echo 0"
|
"prepublish": "echo 0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
#### Requisites
|
#### Requisites
|
||||||
|
|
||||||
- [ ] [Install node.js](https://nodejs.org/en/download/current/)
|
* [ ] [Install node.js](https://nodejs.org/en/download/current/)
|
||||||
- [ ] [Install Yarn](https://yarnpkg.com/en/docs/install)
|
* [ ] [Install Yarn](https://yarnpkg.com/en/docs/install)
|
||||||
- [ ] [Setup node-triton](https://github.com/joyent/node-triton#setup)
|
* [ ] [Setup node-triton](https://github.com/joyent/node-triton#setup)
|
||||||
|
|
||||||
## via [webconsole-instances](https://github.com/joyent/webconsole-instances)
|
## via [webconsole-instances](https://github.com/joyent/webconsole-instances)
|
||||||
|
|
||||||
|
171
scripts/format
171
scripts/format
@ -1,171 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const { config } = require('../package.json');
|
|
||||||
const { exists } = require('mz/fs');
|
|
||||||
const sgf = require('staged-git-files');
|
|
||||||
const forceArray = require('force-array');
|
|
||||||
const awaitify = require('apr-awaitify');
|
|
||||||
const asyncFilter = require('apr-filter');
|
|
||||||
const map = require('apr-map');
|
|
||||||
const reduce = require('apr-reduce');
|
|
||||||
const parallel = require('apr-parallel');
|
|
||||||
const execa = require('execa');
|
|
||||||
const globby = require('globby');
|
|
||||||
const main = require('apr-main');
|
|
||||||
const argv = require('yargs').argv;
|
|
||||||
const path = require('path');
|
|
||||||
const checksum = require('checksum');
|
|
||||||
|
|
||||||
const getStaged = awaitify(sgf);
|
|
||||||
const asyncChecksum = awaitify(checksum.file);
|
|
||||||
|
|
||||||
const ROOT = path.join(__dirname, '../');
|
|
||||||
const SCRIPTS = path.resolve(__dirname);
|
|
||||||
|
|
||||||
const statuses = ['Added', 'Modified'];
|
|
||||||
|
|
||||||
const filter = (files = []) =>
|
|
||||||
files
|
|
||||||
.filter(file => !/node_modules|dist/.test(file))
|
|
||||||
.map(file => path.resolve(ROOT, file));
|
|
||||||
|
|
||||||
const run = async (files = []) => {
|
|
||||||
const filteredFiles = filter(files);
|
|
||||||
|
|
||||||
const _files = filteredFiles.reduce(
|
|
||||||
(files, file) => {
|
|
||||||
const ext = path.extname(file).replace(/^./, '');
|
|
||||||
|
|
||||||
if (!ext) {
|
|
||||||
return files;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Object.assign(files, {
|
|
||||||
[ext]: (files[ext] || []).concat(file)
|
|
||||||
});
|
|
||||||
},
|
|
||||||
{
|
|
||||||
js: [],
|
|
||||||
gql: [],
|
|
||||||
json: []
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return parallel({
|
|
||||||
js: () =>
|
|
||||||
_files.js.length
|
|
||||||
? execa(
|
|
||||||
'prettier',
|
|
||||||
['--write', '--single-quote', '--parser=babylon'].concat(_files.js),
|
|
||||||
{
|
|
||||||
stdio: 'inherit'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
: Promise.resolve(),
|
|
||||||
gql: () =>
|
|
||||||
_files.gql.length
|
|
||||||
? execa(
|
|
||||||
'prettier',
|
|
||||||
['--write', '--single-quote', '--parser=graphql'].concat(
|
|
||||||
_files.gql
|
|
||||||
),
|
|
||||||
{
|
|
||||||
stdio: 'inherit'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
: Promise.resolve(),
|
|
||||||
json: () =>
|
|
||||||
_files.json.length
|
|
||||||
? execa(
|
|
||||||
'prettier',
|
|
||||||
['--write', '--single-quote', '--parser=json'].concat(_files.json),
|
|
||||||
{
|
|
||||||
stdio: 'inherit'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
: Promise.resolve()
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const add = async filename => execa('git', ['add', filename]);
|
|
||||||
|
|
||||||
const all = async () => {
|
|
||||||
const files = await globby(
|
|
||||||
['{packages,prototypes}/**/*.{js,gql,json}', 'scripts/*'],
|
|
||||||
{
|
|
||||||
cwd: path.join(__dirname, '..')
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return run(files);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getUnstaged = async () => {
|
|
||||||
const unstaged = await execa('git', ['ls-files', '-m']);
|
|
||||||
return unstaged.stdout.split('\n');
|
|
||||||
};
|
|
||||||
|
|
||||||
const staged = async () => {
|
|
||||||
const unstaged = (await getUnstaged())
|
|
||||||
.map(file => path.resolve(ROOT, file))
|
|
||||||
.filter(file => /\.js|gql|json$/.test(file) || file.indexOf(SCRIPTS) === 0);
|
|
||||||
|
|
||||||
const files = (await getStaged())
|
|
||||||
.filter(({ status }) => statuses.indexOf(status) >= 0)
|
|
||||||
.map(file =>
|
|
||||||
Object.assign({}, file, { filename: path.resolve(ROOT, file.filename) })
|
|
||||||
)
|
|
||||||
.filter(
|
|
||||||
file =>
|
|
||||||
/\.js|gql|json$/.test(file.filename) ||
|
|
||||||
file.filename.indexOf(SCRIPTS) === 0
|
|
||||||
);
|
|
||||||
|
|
||||||
const existing = await asyncFilter(files, ({ filename }) => exists(filename));
|
|
||||||
|
|
||||||
if (!existing.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const checksums = await map(existing, async file => {
|
|
||||||
const checksum = await asyncChecksum(file.filename);
|
|
||||||
return Object.assign({}, file, { checksum });
|
|
||||||
});
|
|
||||||
|
|
||||||
const filenames = existing.map(file => file.filename);
|
|
||||||
await run(filenames);
|
|
||||||
|
|
||||||
const changed = await asyncFilter(
|
|
||||||
checksums,
|
|
||||||
async ({ filename, checksum }) => {
|
|
||||||
const newChecksum = await asyncChecksum(filename);
|
|
||||||
return checksum != newChecksum;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const modifieds = await reduce(
|
|
||||||
changed,
|
|
||||||
async (modifieds, file) => {
|
|
||||||
const isUnstaged = unstaged.filter(f => f === file.filename).length;
|
|
||||||
if (
|
|
||||||
(file.status === 'Modified' || file.status === 'Added') &&
|
|
||||||
isUnstaged
|
|
||||||
) {
|
|
||||||
modifieds.push(file);
|
|
||||||
} else {
|
|
||||||
await add(file.filename);
|
|
||||||
}
|
|
||||||
return modifieds;
|
|
||||||
},
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
|
|
||||||
if (modifieds.length) {
|
|
||||||
modifieds.forEach(modified =>
|
|
||||||
console.log('PARTIALLY STAGED FILE ', modified.filename)
|
|
||||||
);
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
main(argv._.length ? run(argv._) : argv.staged ? staged() : all());
|
|
@ -1,30 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const forEach = require('apr-for-each');
|
|
||||||
const execa = require('execa');
|
|
||||||
const globby = require('globby');
|
|
||||||
const main = require('apr-main');
|
|
||||||
const argv = require('yargs').argv;
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const config = path.join(__dirname, '../.licensesrc.json');
|
|
||||||
const CWD = path.join(__dirname, '..');
|
|
||||||
const BIN = path.join(CWD, 'node_modules/.bin/license-to-fail');
|
|
||||||
|
|
||||||
const run = async (dirs = []) =>
|
|
||||||
forEach(dirs, async dir =>
|
|
||||||
execa(BIN, [config], {
|
|
||||||
cwd: dir,
|
|
||||||
stdio: 'inherit'
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
const all = async () => {
|
|
||||||
const files = await globby(['{packages,prototypes}/*/', '.'], {
|
|
||||||
cwd: CWD
|
|
||||||
});
|
|
||||||
|
|
||||||
return run(files.filter(pathname => !/node_modules/.test(pathname)));
|
|
||||||
};
|
|
||||||
|
|
||||||
main(argv._.length ? run(argv._) : all());
|
|
@ -1,25 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const forEach = require('apr-for-each');
|
|
||||||
const execa = require('execa');
|
|
||||||
const globby = require('globby');
|
|
||||||
const main = require('apr-main');
|
|
||||||
const argv = require('yargs').argv;
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const run = async (files = []) =>
|
|
||||||
forEach(files, async file =>
|
|
||||||
execa('quality-docs', [file], {
|
|
||||||
stdio: 'inherit'
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
const all = async () => {
|
|
||||||
const files = await globby(['{packages,prototypes}/**/*.md', './*.md'], {
|
|
||||||
cwd: path.join(__dirname, '..')
|
|
||||||
});
|
|
||||||
|
|
||||||
return run(files.filter(pathname => !/node_modules/.test(pathname)));
|
|
||||||
};
|
|
||||||
|
|
||||||
main(argv._.length ? run(argv._) : all());
|
|
@ -1,151 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
const { readFile, exists } = require('mz/fs');
|
|
||||||
const sgf = require('staged-git-files');
|
|
||||||
const execa = require('execa');
|
|
||||||
const awaitify = require('apr-awaitify');
|
|
||||||
const asyncFilter = require('apr-filter');
|
|
||||||
const main = require('apr-main');
|
|
||||||
const map = require('apr-map');
|
|
||||||
const reduce = require('apr-reduce');
|
|
||||||
const globby = require('globby');
|
|
||||||
const path = require('path');
|
|
||||||
const uniq = require('lodash.uniq');
|
|
||||||
const argv = require('yargs').argv;
|
|
||||||
const checksum = require('checksum');
|
|
||||||
const { lstatSync, readdirSync } = require('fs');
|
|
||||||
const { join } = require('path');
|
|
||||||
|
|
||||||
const ROOT = path.join(__dirname, '..');
|
|
||||||
const getStaged = awaitify(sgf);
|
|
||||||
|
|
||||||
const statuses = [
|
|
||||||
'Added',
|
|
||||||
'Copied',
|
|
||||||
'Deleted',
|
|
||||||
'Modified',
|
|
||||||
'Renamed',
|
|
||||||
'Unmerged'
|
|
||||||
];
|
|
||||||
|
|
||||||
const exec = (args = []) =>
|
|
||||||
execa('lerna', args, {
|
|
||||||
stdio: 'inherit'
|
|
||||||
});
|
|
||||||
|
|
||||||
const lint = scope => exec(['run', 'lint', '--scope', scope]);
|
|
||||||
const test = scope => exec(['run', 'test', '--scope', scope]);
|
|
||||||
|
|
||||||
const run = async scope => {
|
|
||||||
if (argv.lint) {
|
|
||||||
await lint(scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argv.test) {
|
|
||||||
await test(scope);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const runLint = async scope => {
|
|
||||||
await lint(scope);
|
|
||||||
};
|
|
||||||
|
|
||||||
const runTest = async scope => {
|
|
||||||
await test(scope);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getUnstaged = async () => {
|
|
||||||
const unstaged = await execa('git', ['ls-files', '-m']);
|
|
||||||
return unstaged.stdout.split('\n');
|
|
||||||
};
|
|
||||||
|
|
||||||
const asyncChecksum = awaitify(checksum.file);
|
|
||||||
|
|
||||||
const add = async filename => execa('git', ['add', filename]);
|
|
||||||
|
|
||||||
const runLintAndGitAdd = async (staged, pkgs) => {
|
|
||||||
const unstaged = (await getUnstaged()).map(file => path.resolve(ROOT, file));
|
|
||||||
|
|
||||||
const existing = await asyncFilter(staged, ({ filename }) =>
|
|
||||||
exists(filename)
|
|
||||||
);
|
|
||||||
|
|
||||||
const checksums = await map(existing, async file => {
|
|
||||||
const checksum = await asyncChecksum(file.filename);
|
|
||||||
return Object.assign({}, file, { checksum });
|
|
||||||
});
|
|
||||||
|
|
||||||
await map(pkgs.map(({ name }) => name), runLint);
|
|
||||||
|
|
||||||
const changed = await asyncFilter(
|
|
||||||
checksums,
|
|
||||||
async ({ filename, checksum }) => {
|
|
||||||
const newChecksum = await asyncChecksum(filename);
|
|
||||||
return checksum != newChecksum;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const modifieds = await reduce(
|
|
||||||
changed,
|
|
||||||
async (modifieds, file) => {
|
|
||||||
const isUnstaged = unstaged.filter(f => f === file.filename).length;
|
|
||||||
if (
|
|
||||||
(file.status === 'Modified' || file.status === 'Added') &&
|
|
||||||
isUnstaged
|
|
||||||
) {
|
|
||||||
modifieds.push(file);
|
|
||||||
} else {
|
|
||||||
await add(file.filename);
|
|
||||||
}
|
|
||||||
return modifieds;
|
|
||||||
},
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
|
|
||||||
if (modifieds.length) {
|
|
||||||
modifieds.forEach(modified =>
|
|
||||||
console.log('PARTIALLY STAGED FILE ', modified.filename)
|
|
||||||
);
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const gather = async () => {
|
|
||||||
const isDirectory = source => lstatSync(source).isDirectory();
|
|
||||||
const getDirectories = source =>
|
|
||||||
readdirSync(source)
|
|
||||||
.map(name => join(source, name))
|
|
||||||
.filter(isDirectory);
|
|
||||||
|
|
||||||
const locations = await globby(
|
|
||||||
getDirectories('./packages').concat(getDirectories('./prototypes')),
|
|
||||||
{ cwd: ROOT }
|
|
||||||
);
|
|
||||||
|
|
||||||
const staged = (await getStaged())
|
|
||||||
.filter(({ status }) => statuses.indexOf(status) >= 0)
|
|
||||||
// .map(({ filename }) => path.resolve(ROOT, filename));
|
|
||||||
.map(file =>
|
|
||||||
Object.assign({}, file, { filename: path.resolve(ROOT, file.filename) })
|
|
||||||
);
|
|
||||||
|
|
||||||
const folders = uniq(
|
|
||||||
locations
|
|
||||||
.map(folder => path.resolve(ROOT, folder))
|
|
||||||
.filter(folder => staged.some(i => i.filename.indexOf(folder) >= 0))
|
|
||||||
);
|
|
||||||
|
|
||||||
const pkgs = await map(folders, async folder =>
|
|
||||||
JSON.parse(await readFile(path.join(folder, 'package.json'), 'utf-8'))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (argv.lint) {
|
|
||||||
await runLintAndGitAdd(staged, pkgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argv.test) {
|
|
||||||
await await map(pkgs.map(({ name }) => name), runTest);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
main(gather());
|
|
Loading…
Reference in New Issue
Block a user