Add get-prod-locales and lint-locales scripts
This commit is contained in:
parent
318964251d
commit
4f3c2498a6
@ -77,12 +77,16 @@
|
||||
"build:download": "browserify frontend/src/download.js -g uglifyify -o public/download.js",
|
||||
"build:version": "node scripts/version",
|
||||
"build:l10n": "cp node_modules/l20n/dist/web/l20n.min.js public",
|
||||
"get-prod-locales": "node scripts/get-prod-locales",
|
||||
"dev": "npm run build && npm start",
|
||||
"format": "prettier '{frontend/src/,scripts/,server/,test/**/!(bundle)}*.js' 'public/*.css' --single-quote --write",
|
||||
"get-prod-locales": "node scripts/get-prod-locales",
|
||||
"get-prod-locales:write": "npm run get-prod-locales -- --write",
|
||||
"lint": "npm-run-all lint:*",
|
||||
"lint:css": "stylelint 'public/*.css'",
|
||||
"lint:js": "eslint .",
|
||||
"lint-locales": "node scripts/lint-locales",
|
||||
"lint-locales:dev": "npm run lint-locales",
|
||||
"lint-locales:prod": "npm run lint-locales -- --production",
|
||||
"start": "node server/server",
|
||||
"test": "npm-run-all test:*",
|
||||
"test:unit": "mocha test/unit",
|
||||
|
@ -1,3 +1,6 @@
|
||||
rules:
|
||||
node/shebang: off
|
||||
security/detect-child-process: off
|
||||
|
||||
no-console: off
|
||||
no-process-exit: off
|
||||
|
@ -1,45 +1,49 @@
|
||||
/* eslint-disable no-console */
|
||||
#!/usr/bin/env node
|
||||
|
||||
const { exec } = require('child_process');
|
||||
const cp = require('child_process');
|
||||
const { promisify } = require('util');
|
||||
const fs = require('fs');
|
||||
|
||||
const pkg = require('../package.json');
|
||||
|
||||
const availableLanguages = pkg.availableLanguages.sort();
|
||||
const exec = promisify(cp.exec);
|
||||
|
||||
const compareLocales =
|
||||
'compare-locales l10n.toml . `ls public/locales` --data=json';
|
||||
const arrayDiff = (current, package) =>
|
||||
current.filter(locale => !package.includes(locale));
|
||||
|
||||
exec(compareLocales, (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
const cmd = 'compare-locales l10n.toml . `ls public/locales` --data=json';
|
||||
|
||||
exec(cmd)
|
||||
.then(({ stdout }) => JSON.parse(stdout))
|
||||
.then(({ summary }) => {
|
||||
const locales = Object.keys(summary)
|
||||
.filter(locale => {
|
||||
const loc = summary[locale];
|
||||
const hasMissing = loc.hasOwnProperty('missing');
|
||||
const hasErrors = loc.hasOwnProperty('errors');
|
||||
return !hasMissing && !hasErrors;
|
||||
})
|
||||
.sort();
|
||||
|
||||
if (locales.join(',') !== availableLanguages.join(',')) {
|
||||
const missingLanguages = arrayDiff(locales, availableLanguages);
|
||||
|
||||
console.log('current 100%:', JSON.stringify(locales));
|
||||
console.log('package.json:', JSON.stringify(availableLanguages));
|
||||
console.log('missing prod:', JSON.stringify(missingLanguages));
|
||||
|
||||
if (process.argv.includes('--write')) {
|
||||
const pkgPath = require.resolve('../package.json');
|
||||
pkg.availableLanguages = locales;
|
||||
const str = JSON.stringify(pkg, null, 2) + '\n';
|
||||
console.log('Updating /package.json availableLanguages');
|
||||
fs.writeFileSync(pkgPath, str, 'utf-8');
|
||||
}
|
||||
} else {
|
||||
console.log('Production locales are up to date!');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
const missingLocales = (current, package) =>
|
||||
current.filter(locale => !package.includes(locale));
|
||||
const { summary } = JSON.parse(stdout);
|
||||
const locales = Object.keys(summary)
|
||||
.filter(locale => {
|
||||
const loc = summary[locale];
|
||||
const hasMissing = loc.hasOwnProperty('missing');
|
||||
const hasErrors = loc.hasOwnProperty('errors');
|
||||
return !hasMissing && !hasErrors;
|
||||
})
|
||||
.sort();
|
||||
|
||||
if (locales.join(',') !== availableLanguages.join(',')) {
|
||||
const missing = missingLocales(locales, availableLanguages);
|
||||
console.log('current 100%:', JSON.stringify(locales));
|
||||
console.log('package.json:', JSON.stringify(availableLanguages));
|
||||
console.log('missing prod:', JSON.stringify(missing));
|
||||
|
||||
if (process.argv.includes('--write')) {
|
||||
const pkgPath = require.resolve('../package.json');
|
||||
pkg.availableLanguages = locales;
|
||||
const str = JSON.stringify(pkg, null, 2) + '\n';
|
||||
console.log('Updating /package.json availableLanguages');
|
||||
fs.writeFileSync(pkgPath, str, 'utf-8');
|
||||
}
|
||||
} else {
|
||||
console.log('Production locales are up to date!');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
51
scripts/lint-locales.js
Normal file
51
scripts/lint-locales.js
Normal file
@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const cp = require('child_process');
|
||||
const { promisify } = require('util');
|
||||
const pkg = require('../package.json');
|
||||
const conf = require('../server/config');
|
||||
|
||||
const exec = promisify(cp.exec);
|
||||
const cmd = `compare-locales l10n.toml . ${getLocales()} --data=json`;
|
||||
|
||||
console.log(cmd);
|
||||
|
||||
exec(cmd)
|
||||
.then(({ stdout }) => JSON.parse(stdout))
|
||||
.then(({ details }) => filterErrors(details))
|
||||
.then(results => {
|
||||
if (results.length) {
|
||||
results.forEach(({ locale, data }) => {
|
||||
console.log(locale);
|
||||
data.forEach(msg => console.log(`- ${msg}`));
|
||||
console.log('');
|
||||
});
|
||||
process.exit(2);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
function filterErrors(details) {
|
||||
return Object.keys(details)
|
||||
.sort()
|
||||
.map(locale => {
|
||||
const data = details[locale]
|
||||
.filter(item => item.hasOwnProperty('error'))
|
||||
.map(({ error }) => error);
|
||||
return { locale, data };
|
||||
})
|
||||
.filter(({ data }) => data.length);
|
||||
}
|
||||
|
||||
function getLocales() {
|
||||
// If we're in a "production" env (or passed the `--production` flag), only
|
||||
// check the locales from the package.json file's `availableLanguages` array.
|
||||
if (conf.env === 'production' || process.argv.includes('--production')) {
|
||||
return pkg.availableLanguages.sort().join(' ');
|
||||
}
|
||||
// Lint all the locales.
|
||||
return '`ls public/locales`';
|
||||
}
|
Loading…
Reference in New Issue
Block a user