CI: gulp task in support of refcache cleanup & some refcache updates (#2948)

This commit is contained in:
Patrice Chalin 2023-06-30 07:21:14 -04:00 committed by GitHub
parent 4f41f0b042
commit 5556f797d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 441 additions and 412 deletions

3
gulp-src/README.txt Normal file
View File

@ -0,0 +1,3 @@
# Gulp task files
All files in this directory, except for `helpers.js`, are gulp tasks.

9
gulp-src/_util.js Normal file
View File

@ -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);

15
gulp-src/default.js Normal file
View File

@ -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);

57
gulp-src/prune.js Normal file
View File

@ -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);

3
gulpfile.js Normal file
View File

@ -0,0 +1,3 @@
const requireDir = require('require-dir');
requireDir('./gulp-src');

View File

@ -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