mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 23:04:52 +09:00
120 lines
2.8 KiB
JavaScript
120 lines
2.8 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("fs-extra");
|
|
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) {
|
|
if (await fs.exists(filePath)) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(filePath);
|
|
}
|
|
|
|
if (!DRY) {
|
|
await fs.remove(filePath);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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();
|
|
}
|