-
Notifications
You must be signed in to change notification settings - Fork 2
/
zip.js
83 lines (77 loc) · 2.37 KB
/
zip.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const archiver = require("archiver");
const { spawnSync } = require("child_process");
const fs = require("fs");
const iterator = require("./iterator");
const pubDate = process.argv[2];
if (!pubDate) {
console.log("Usage: node lib/zip.js <pubdateISO>");
process.exit(1);
}
var archives = {};
iterator(function (srcname, name, variant, meta) {
if (meta.pubdateISO === pubDate) {
const archivename = meta.archivename || meta.filename;
archives[archivename] =
archives[archivename] || archiver("zip", { zlib: { level: 9 } });
archives[archivename].pipe(
fs.createWriteStream(`${__dirname}/../zip/${archivename}.zip`),
);
fs.readdirSync(`${__dirname}/../docs/${name}`, {
withFileTypes: true,
}).forEach(function (doc) {
if (doc.isDirectory()) {
archives[archivename].directory(
`${__dirname}/../docs/${name}/${doc.name}/`,
(meta.partname ? meta.partname + "/" : "") + doc.name,
);
} else if (doc.name !== ".DS_Store") {
archives[archivename].append(
fs.createReadStream(`${__dirname}/../docs/${name}/${doc.name}`),
{
name:
(meta.partname ? meta.partname + "/" : "") +
meta.filename +
doc.name.match(/\.[^.]+$/)[0],
},
);
}
});
if (meta.additionalArtifacts)
for (const additional of meta.additionalArtifacts) {
const repoDir = `${__dirname}/../../${additional.repo}`;
if (additional.branch) gitSwitch(repoDir, additional);
archives[archivename].append(
fs.createReadStream(`${repoDir}/${additional.path}`),
{ name: additional.path },
);
}
}
});
for (var archivename in archives) {
console.log(archivename);
archives[archivename].finalize();
}
function gitSwitch(repoDir, artifact) {
try {
const switchResult = spawnSync("git", ["switch", artifact.branch], {
cwd: repoDir,
});
if (switchResult.status !== 0) {
console.error(
`❌ Could not switch repo ${artifact.repo} to branch ${artifact.branch}`,
);
return false;
}
const pullResult = spawnSync("git", ["pull"], {
cwd: repoDir,
});
if (pullResult.status !== 0) {
console.error(`❌ Could not pull ${artifact.repo}`);
return false;
}
return true;
} catch (e) {
console.error(e);
return false;
}
}