CI: gulp task in support of refcache cleanup & some refcache updates (#2948)
This commit is contained in:
parent
4f41f0b042
commit
5556f797d2
|
@ -0,0 +1,3 @@
|
|||
# Gulp task files
|
||||
|
||||
All files in this directory, except for `helpers.js`, are gulp tasks.
|
|
@ -0,0 +1,9 @@
|
|||
const yargs = require('yargs/yargs');
|
||||
const { hideBin } = require('yargs/helpers');
|
||||
|
||||
exports.taskArgs = () =>
|
||||
yargs(hideBin(process.argv).slice(1))
|
||||
.strict()
|
||||
.help('info')
|
||||
// To avoid "task did not complete" errors, prevent help option from exiting
|
||||
.exitProcess(false);
|
|
@ -0,0 +1,15 @@
|
|||
const gulp = require('gulp');
|
||||
|
||||
const usage = `
|
||||
Usage:
|
||||
npx gulp --tasks # for a list of tasks
|
||||
npx gulp <task> --info for task argument info`;
|
||||
|
||||
const usageTask = (done) => {
|
||||
console.log(usage);
|
||||
done();
|
||||
};
|
||||
|
||||
usageTask.description = 'Display usage instructions';
|
||||
|
||||
gulp.task('default', usageTask);
|
|
@ -0,0 +1,57 @@
|
|||
// cSpell:ignore refcache
|
||||
|
||||
const gulp = require('gulp');
|
||||
const fs = require('fs').promises;
|
||||
const { taskArgs } = require('./_util');
|
||||
|
||||
const refcacheFile = 'static/refcache.json';
|
||||
const n_default = 25;
|
||||
|
||||
// The refcacheFile is a JSON map with each map entry of the form, e.g.:
|
||||
//
|
||||
// "https://cncf.io": {
|
||||
// "StatusCode": 206,
|
||||
// "LastSeen": "2023-06-29T13:38:47.996793-04:00"
|
||||
// },
|
||||
|
||||
// Prune the oldest <n> entries from refcacheFile in a way that avoids
|
||||
// reordering entries (makes diffs easier to manage).
|
||||
async function pruneTask() {
|
||||
const argv = taskArgs().options({
|
||||
num: {
|
||||
alias: 'n',
|
||||
type: 'number',
|
||||
description: 'Number of oldest refcache entries to drop.',
|
||||
default: n_default,
|
||||
},
|
||||
}).argv;
|
||||
|
||||
const n = argv.num > 0 ? argv.num : n_default;
|
||||
|
||||
if (argv.info) return; // Info was already displayed
|
||||
|
||||
try {
|
||||
const json = await fs.readFile(refcacheFile, 'utf8');
|
||||
const entries = JSON.parse(json);
|
||||
|
||||
// Create a sorted array of URL keys and `LastSeen` dates
|
||||
const sortedUrlsAndDates = Object.keys(entries)
|
||||
.map((url) => [url, entries[url].LastSeen])
|
||||
.sort((a, b) => new Date(a[1]) - new Date(b[1]));
|
||||
|
||||
// Get oldest argv.num keys
|
||||
const oldestKeys = sortedUrlsAndDates.slice(0, n).map((item) => item[0]);
|
||||
|
||||
// Remove oldest entries
|
||||
oldestKeys.forEach((key) => delete entries[key]);
|
||||
|
||||
const prettyJson = JSON.stringify(entries, null, 2) + '\n';
|
||||
await fs.writeFile(refcacheFile, prettyJson, 'utf8');
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
pruneTask.description = `Prune the oldest '--num <n>' entries from ${refcacheFile} file (default ${n_default}).`;
|
||||
|
||||
gulp.task('prune', pruneTask);
|
|
@ -0,0 +1,3 @@
|
|||
const requireDir = require('require-dir');
|
||||
|
||||
requireDir('./gulp-src');
|
|
@ -67,11 +67,13 @@
|
|||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.14",
|
||||
"cspell": "^6.31.1",
|
||||
"gulp": "^4.0.2",
|
||||
"hugo-extended": "0.113.0",
|
||||
"netlify-cli": "^15.0.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss-cli": "^10.1.0",
|
||||
"prettier": "^2.8.4",
|
||||
"require-dir": "^1.2.0",
|
||||
"textlint": "^13.1.4",
|
||||
"textlint-filter-rule-allowlist": "^4.0.0",
|
||||
"textlint-filter-rule-comments": "^1.2.2",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue