mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 23:04:52 +09:00
Ctl ended up calling its main class for "Control" for historical
reasons, along with its config file and plugin entrypoint.
The plugin entrypoint was renamed to ctl in 808eda0513. This
finishes that renaming by also renaming the main class, default config
file, config-control command, and main entrypoint.
The config-control command is renamed to config to be consistent with
the host and controller's config commands.
The term "control" is still kept in the config and message locations as
a common specifier for both ctl and web_ui.
121 lines
2.8 KiB
JavaScript
121 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!
|
|
*/
|
|
|
|
import path from "node:path";
|
|
import fs from "node:fs/promises";
|
|
import yargs from "yargs";
|
|
|
|
import npmPackage from "./package.json" with { type: "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-ctl.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 (import.meta.main) {
|
|
main();
|
|
}
|