-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.js
68 lines (57 loc) · 1.87 KB
/
build.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
// @ts-nocheck
const fs = require("fs");
const yaml = require("js-yaml");
const ncc = require("@zeit/ncc");
const path = require("path");
let diffs = undefined;
for (let i = 0; i < process.argv.length; i++) {
if (process.argv[i] === "--diff") {
diffs = process.argv[i + 1].split("\n");
}
}
/** Recursively find all actions */
function findActionsToBuild(base, files, result) {
files = files || fs.readdirSync(base);
result = result || [];
files.forEach((file) => {
const newBase = path.join(base, file);
if (fs.statSync(newBase).isDirectory()) {
result = findActionsToBuild(newBase, fs.readdirSync(newBase), result);
} else {
if (file.includes("action.yml") || file.includes("action.yaml")) {
// If diffs is defined, then only build actions in diff.
if (!diffs || diffs.some((diffFile) => diffFile.startsWith(base))) {
result.push(base);
}
}
}
});
return result;
}
async function buildAction(path) {
const doc = yaml.safeLoad(fs.readFileSync(`${path}/action.yml`, "utf8"));
const entryPoints = [doc.runs.pre, doc.runs.main, doc.runs.post];
for (const entryPoint of entryPoints) {
if (!entryPoint || !entryPoint.startsWith("dist/")) continue;
console.log(`Building script ${entryPoint}`);
const inputFile = entryPoint.replace("dist/", `${path}/`).replace(".js", ".ts");
const { code } = await ncc(inputFile, {
minify: false,
sourceMap: false,
quiet: true,
});
if (!fs.existsSync(`${path}/dist`)) {
fs.mkdirSync(`${path}/dist`);
}
fs.writeFileSync(`${path}/${entryPoint}`, code, "utf8");
}
}
async function build() {
const actionsToBuild = findActionsToBuild(".");
for (const actionPath of actionsToBuild) {
console.log(`Action ${actionPath}`);
await buildAction(path.join(__dirname, `./${actionPath}`));
console.log("");
}
}
build();