feat(ci): Ensure guide directory structure in CI
This commit is contained in:
139
package-lock.json
generated
139
package-lock.json
generated
@ -2752,6 +2752,12 @@
|
|||||||
"stream-shift": "^1.0.0"
|
"stream-shift": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"each-limit": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/each-limit/-/each-limit-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-OAFACDNnqK9kKZvKwV/dWxqXcZY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"ecc-jsbn": {
|
"ecc-jsbn": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||||
@ -3123,6 +3129,12 @@
|
|||||||
"through": "^2.3.8"
|
"through": "^2.3.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"eventemitter3": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"exec-sh": {
|
"exec-sh": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
|
||||||
@ -6727,6 +6739,18 @@
|
|||||||
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
|
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"lodash.isobject": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"lodash.isundefined": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz",
|
||||||
|
"integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"lodash.sortby": {
|
"lodash.sortby": {
|
||||||
"version": "4.7.0",
|
"version": "4.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
|
||||||
@ -8332,6 +8356,108 @@
|
|||||||
"once": "^1.3.0"
|
"once": "^1.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"readdirp-walk": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/readdirp-walk/-/readdirp-walk-1.6.0.tgz",
|
||||||
|
"integrity": "sha1-B1ZfV6uTqWfW3mRPRmPAE1b1oLo=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"eventemitter3": "^1.1.1",
|
||||||
|
"micromatch": "^2.3.5",
|
||||||
|
"walk-filtered": "^0.8.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"arr-diff": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"arr-flatten": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"array-unique": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"braces": {
|
||||||
|
"version": "1.8.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
|
||||||
|
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"expand-range": "^1.8.1",
|
||||||
|
"preserve": "^0.2.0",
|
||||||
|
"repeat-element": "^1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expand-brackets": {
|
||||||
|
"version": "0.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
|
||||||
|
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-posix-bracket": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extglob": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
|
||||||
|
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extglob": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-extglob": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-glob": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extglob": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kind-of": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
|
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-buffer": "^1.1.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"micromatch": {
|
||||||
|
"version": "2.3.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
|
||||||
|
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"arr-diff": "^2.0.0",
|
||||||
|
"array-unique": "^0.2.1",
|
||||||
|
"braces": "^1.8.2",
|
||||||
|
"expand-brackets": "^0.1.4",
|
||||||
|
"extglob": "^0.3.1",
|
||||||
|
"filename-regex": "^2.0.0",
|
||||||
|
"is-extglob": "^1.0.0",
|
||||||
|
"is-glob": "^2.0.1",
|
||||||
|
"kind-of": "^3.0.2",
|
||||||
|
"normalize-path": "^2.0.1",
|
||||||
|
"object.omit": "^2.0.0",
|
||||||
|
"parse-glob": "^3.0.4",
|
||||||
|
"regex-cache": "^0.4.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"realpath-native": {
|
"realpath-native": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz",
|
||||||
@ -9800,6 +9926,19 @@
|
|||||||
"browser-process-hrtime": "^0.1.2"
|
"browser-process-hrtime": "^0.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"walk-filtered": {
|
||||||
|
"version": "0.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/walk-filtered/-/walk-filtered-0.8.0.tgz",
|
||||||
|
"integrity": "sha1-RsMaJG7HTO9QwOtLSxVjvHYaAKU=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"each-limit": "^1.0.0",
|
||||||
|
"graceful-fs": "^4.1.2",
|
||||||
|
"lodash.isobject": "^3.0.2",
|
||||||
|
"lodash.isundefined": "^3.0.1",
|
||||||
|
"object-assign": "^4.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"walker": {
|
"walker": {
|
||||||
"version": "1.0.7",
|
"version": "1.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"test-ci": "npm test",
|
"test-ci": "npm test",
|
||||||
"test:client": "cd ./client && npm test && cd ../",
|
"test:client": "cd ./client && npm test && cd ../",
|
||||||
"test:curriculum": "echo 'Warning: TODO - Define Testing.'",
|
"test:curriculum": "echo 'Warning: TODO - Define Testing.'",
|
||||||
|
"test:guide:directorys": "node ./tools/scripts/ci/ensure-guide-page-naming.js",
|
||||||
"test:server": "echo 'Warning: TODO - Define Testing.'",
|
"test:server": "echo 'Warning: TODO - Define Testing.'",
|
||||||
"test:tools": "jest ./tools",
|
"test:tools": "jest ./tools",
|
||||||
"start-develop": "node ./tools/scripts/start-develop.js"
|
"start-develop": "node ./tools/scripts/start-develop.js"
|
||||||
@ -25,6 +26,7 @@
|
|||||||
"jest": "^23.6.0",
|
"jest": "^23.6.0",
|
||||||
"lerna": "^3.4.0",
|
"lerna": "^3.4.0",
|
||||||
"npm-run-all": "^4.1.3",
|
"npm-run-all": "^4.1.3",
|
||||||
|
"readdirp-walk": "^1.6.0",
|
||||||
"tree-kill": "^1.2.0"
|
"tree-kill": "^1.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
65
tools/scripts/ci/ensure-guide-page-naming.js
Normal file
65
tools/scripts/ci/ensure-guide-page-naming.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const fs = require('fs');
|
||||||
|
const readdirp = require('readdirp-walk');
|
||||||
|
|
||||||
|
const guideRoot = path.resolve(__dirname, '../../../guide');
|
||||||
|
|
||||||
|
const allowedLangDirNames = [
|
||||||
|
'arabic',
|
||||||
|
'chinese',
|
||||||
|
'english',
|
||||||
|
'portuguese',
|
||||||
|
'russian',
|
||||||
|
'spanish'
|
||||||
|
];
|
||||||
|
|
||||||
|
function checkDirName(dirName, fullPath) {
|
||||||
|
if (dirName.replace(/(\s|\_)/, '') !== dirName) {
|
||||||
|
const newDirName = dirName.replace(/\s/g, '-');
|
||||||
|
fs.renameSync(fullPath, fullPath.replace(dirName, newDirName));
|
||||||
|
// throw new Error(
|
||||||
|
// `Invalid character found in a folder named '${dirName}', please use '-' for spaces
|
||||||
|
// ${fullPath}
|
||||||
|
// `
|
||||||
|
// );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dirName.toLowerCase() !== dirName) {
|
||||||
|
const newPath = fullPath.replace(dirName, dirName.toLowerCase());
|
||||||
|
console.log(`renaming ${dirName} to ${dirName.toLowerCase()}`);
|
||||||
|
fs.renameSync(fullPath, newPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkFileName(fileName, fullPath) {
|
||||||
|
if (fileName !== 'index.md') {
|
||||||
|
throw new Error(
|
||||||
|
`${fileName} is not a valid file name, please use 'index.md'
|
||||||
|
${fullPath}
|
||||||
|
`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkFile(file) {
|
||||||
|
const { stat, depth, name, fullPath } = file;
|
||||||
|
if (depth === 1) {
|
||||||
|
if (stat.isFile()) {
|
||||||
|
throw new Error(`${name} is not valid in the ${guideRoot} directory`);
|
||||||
|
}
|
||||||
|
if (!allowedLangDirNames.includes(name)) {
|
||||||
|
throw new Error(`${name} should not be in the ${guideRoot} directory`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stat.isDirectory()) {
|
||||||
|
return checkDirName(name, fullPath);
|
||||||
|
}
|
||||||
|
return checkFileName(name, fullPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
readdirp({ root: guideRoot })
|
||||||
|
.on('data', checkFile)
|
||||||
|
.on('end', () => {
|
||||||
|
/* eslint-disable no-process-exit */
|
||||||
|
process.exit(0);
|
||||||
|
});
|
Reference in New Issue
Block a user