mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
These packages are obsoleted by the promises API to the built-in Node fs module. The fs-extra package is also causing problems with broken APIs that don't behave the same as Node's fs module, and throwing errors without code properties on them.
122 lines
2.9 KiB
JavaScript
122 lines
2.9 KiB
JavaScript
/**
|
|
* Clean the repository of build and execution artifacts.
|
|
*
|
|
* clean: A quick clean that removes all build artifacts making the output safe to publish
|
|
* clean-tests: Removes all build and test artifacts should not be required if tests are setup correctly.
|
|
* clean-all: Removes all build, test, and execution artifacts. Including cluster config and logs!
|
|
*/
|
|
|
|
"use strict";
|
|
const path = require("path");
|
|
const fs = require("node:fs/promises");
|
|
const yargs = require("yargs");
|
|
|
|
const npmPackage = require("./package.json");
|
|
const workspaces = npmPackage.workspaces
|
|
.map(p => p.slice(0, -2))
|
|
.filter(p => !p.includes("external_plugins"));
|
|
|
|
let DRY = false;
|
|
|
|
/**
|
|
* Attempt to remove a file / directory if it exists.
|
|
*
|
|
* @param {string} filePath The path to remove.
|
|
*/
|
|
async function tryRemove(filePath) {
|
|
try {
|
|
await fs.access(filePath);
|
|
console.log(filePath);
|
|
} catch {
|
|
return;
|
|
}
|
|
|
|
if (!DRY) {
|
|
await fs.rm(filePath, { force: true, recursive: true, maxRetries: 10 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Removes all build artifacts
|
|
*/
|
|
async function removeBuildArtifacts() {
|
|
const tasks = [];
|
|
|
|
for (const workspace of workspaces) {
|
|
const basePath = path.resolve(workspace);
|
|
const packages = await fs.readdir(basePath);
|
|
for (const packageName of packages) {
|
|
tasks.push(
|
|
tryRemove(path.join(basePath, packageName, "dist"))
|
|
);
|
|
tasks.push(
|
|
tryRemove(path.join(basePath, packageName, "node_modules", ".cache"))
|
|
);
|
|
}
|
|
}
|
|
|
|
await Promise.all(tasks);
|
|
}
|
|
|
|
/**
|
|
* Removes all test artifacts
|
|
*/
|
|
async function removeTestArtifacts() {
|
|
const artifacts = [
|
|
".nyc_output", "coverage", "temp", "static",
|
|
];
|
|
|
|
await Promise.all(artifacts.map(artifact => tryRemove(path.resolve(artifact))));
|
|
}
|
|
|
|
/**
|
|
* Removes all execution artifacts
|
|
*/
|
|
async function removeExecutionArtifacts() {
|
|
const artifacts = [
|
|
"database", "instances", "logs", "mods",
|
|
"config-control.json", "config-controller.json", "config-host.json",
|
|
"FactorioAdminToken.txt", "plugin-list.json",
|
|
];
|
|
|
|
await Promise.all(artifacts.map(artifact => tryRemove(path.resolve(artifact))));
|
|
}
|
|
|
|
/**
|
|
* Main function for this script
|
|
*/
|
|
async function main() {
|
|
await yargs(process.argv.slice(2))
|
|
.scriptName("clean")
|
|
.option("dry-run", {
|
|
alias: "dry",
|
|
nargs: 0,
|
|
describe: "Will not delete any files",
|
|
default: false,
|
|
type: "boolean",
|
|
})
|
|
.command("all", "Remove all artifacts", () => {}, argv => {
|
|
DRY = argv.dry;
|
|
removeBuildArtifacts();
|
|
removeTestArtifacts();
|
|
removeExecutionArtifacts();
|
|
})
|
|
.command("tests", "Remove all build and test artifacts", () => {}, argv => {
|
|
DRY = argv.dry;
|
|
removeBuildArtifacts();
|
|
removeTestArtifacts();
|
|
})
|
|
.command("$0", "Remove all build artifacts", () => {}, argv => {
|
|
DRY = argv.dry;
|
|
removeBuildArtifacts();
|
|
})
|
|
.demandCommand(1, "A command must be specified")
|
|
.strict()
|
|
.parse();
|
|
}
|
|
|
|
// Run main if started from command line
|
|
if (module === require.main) {
|
|
main();
|
|
}
|