Skip to content

Commit 5556f79

Browse files
authored
CI: gulp task in support of refcache cleanup & some refcache updates (open-telemetry#2948)
1 parent 4f41f0b commit 5556f79

File tree

7 files changed

+441
-412
lines changed

7 files changed

+441
-412
lines changed

gulp-src/README.txt

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

gulp-src/_util.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const yargs = require('yargs/yargs');
2+
const { hideBin } = require('yargs/helpers');
3+
4+
exports.taskArgs = () =>
5+
yargs(hideBin(process.argv).slice(1))
6+
.strict()
7+
.help('info')
8+
// To avoid "task did not complete" errors, prevent help option from exiting
9+
.exitProcess(false);

gulp-src/default.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const gulp = require('gulp');
2+
3+
const usage = `
4+
Usage:
5+
npx gulp --tasks # for a list of tasks
6+
npx gulp <task> --info for task argument info`;
7+
8+
const usageTask = (done) => {
9+
console.log(usage);
10+
done();
11+
};
12+
13+
usageTask.description = 'Display usage instructions';
14+
15+
gulp.task('default', usageTask);

gulp-src/prune.js

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// cSpell:ignore refcache
2+
3+
const gulp = require('gulp');
4+
const fs = require('fs').promises;
5+
const { taskArgs } = require('./_util');
6+
7+
const refcacheFile = 'static/refcache.json';
8+
const n_default = 25;
9+
10+
// The refcacheFile is a JSON map with each map entry of the form, e.g.:
11+
//
12+
// "https://cncf.io": {
13+
// "StatusCode": 206,
14+
// "LastSeen": "2023-06-29T13:38:47.996793-04:00"
15+
// },
16+
17+
// Prune the oldest <n> entries from refcacheFile in a way that avoids
18+
// reordering entries (makes diffs easier to manage).
19+
async function pruneTask() {
20+
const argv = taskArgs().options({
21+
num: {
22+
alias: 'n',
23+
type: 'number',
24+
description: 'Number of oldest refcache entries to drop.',
25+
default: n_default,
26+
},
27+
}).argv;
28+
29+
const n = argv.num > 0 ? argv.num : n_default;
30+
31+
if (argv.info) return; // Info was already displayed
32+
33+
try {
34+
const json = await fs.readFile(refcacheFile, 'utf8');
35+
const entries = JSON.parse(json);
36+
37+
// Create a sorted array of URL keys and `LastSeen` dates
38+
const sortedUrlsAndDates = Object.keys(entries)
39+
.map((url) => [url, entries[url].LastSeen])
40+
.sort((a, b) => new Date(a[1]) - new Date(b[1]));
41+
42+
// Get oldest argv.num keys
43+
const oldestKeys = sortedUrlsAndDates.slice(0, n).map((item) => item[0]);
44+
45+
// Remove oldest entries
46+
oldestKeys.forEach((key) => delete entries[key]);
47+
48+
const prettyJson = JSON.stringify(entries, null, 2) + '\n';
49+
await fs.writeFile(refcacheFile, prettyJson, 'utf8');
50+
} catch (err) {
51+
console.error(err);
52+
}
53+
}
54+
55+
pruneTask.description = `Prune the oldest '--num <n>' entries from ${refcacheFile} file (default ${n_default}).`;
56+
57+
gulp.task('prune', pruneTask);

gulpfile.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const requireDir = require('require-dir');
2+
3+
requireDir('./gulp-src');

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,13 @@
6767
"devDependencies": {
6868
"autoprefixer": "^10.4.14",
6969
"cspell": "^6.31.1",
70+
"gulp": "^4.0.2",
7071
"hugo-extended": "0.113.0",
7172
"netlify-cli": "^15.0.1",
7273
"npm-run-all": "^4.1.5",
7374
"postcss-cli": "^10.1.0",
7475
"prettier": "^2.8.4",
76+
"require-dir": "^1.2.0",
7577
"textlint": "^13.1.4",
7678
"textlint-filter-rule-allowlist": "^4.0.0",
7779
"textlint-filter-rule-comments": "^1.2.2",

0 commit comments

Comments
 (0)