Files
godot-interactive-changelog/build/utils/compose-io.js
2023-11-26 22:25:49 +01:00

120 lines
3.8 KiB
JavaScript

const fs = require('fs').promises;
const fsConstants = require('fs').constants;
const buildCommon = require('./build-common.js');
class DataIO {
constructor() {
// Configurable parameters.
this.data_owner = "godotengine";
this.data_repo = "godot";
this.data_version = "";
this.checkout_dir = "";
// Execution flags.
this.update_data = false
this.skip_checkout = false;
this.skip_gitlog = false;
this.skip_github = false;
// Loaded configuration.
this.config = null;
this.git_tag = "";
this.first_commit = ""
this.last_commit = "";
this.releases = [];
}
parseArgs() {
process.argv.forEach((arg) => {
if (arg.indexOf("owner:") === 0) {
this.data_owner = arg.substring(6);
}
if (arg.indexOf("repo:") === 0) {
this.data_repo = arg.substring(5);
}
if (arg.indexOf("version:") === 0) {
this.data_version = arg.substring(8);
}
if (arg.indexOf("dir:") === 0) {
this.checkout_dir = arg.substring(4);
}
if (arg === "update-data") {
this.update_data = true;
}
if (arg === "skip-checkout") {
this.skip_checkout = true;
}
if (arg === "skip-gitlog") {
this.skip_gitlog = true;
}
if (arg === "skip-github") {
this.skip_github = true;
}
});
if (this.data_owner === "" || this.data_repo === "" || this.data_version === "") {
console.error(" Error reading command-line arguments: owner, repo, and version cannot be empty.");
process.exitCode = buildCommon.ExitCodes.IOFailure;
return;
}
}
async loadConfig() {
try {
console.log("[*] Loading version configuration from a file.");
const configPath = `./configs/${this.data_owner}.${this.data_repo}.${this.data_version}.json`;
await fs.access(configPath, fsConstants.R_OK);
const configContent = await fs.readFile(configPath, { encoding: 'utf-8' });
this.config = JSON.parse(configContent);
this.git_tag = this.config.git_tag || this.config.ref;
this.first_commit = this.config.from_ref || "";
this.last_commit = this.config.ref || "";
this.releases = this.config.releases || [];
} catch (err) {
console.error(" Error loading version config file: " + err);
process.exitCode = buildCommon.ExitCodes.IOFailure;
return;
}
}
async loadData(fileName) {
try {
console.log("[*] Loading version database from a file.");
await buildCommon.ensureDir("./data");
const databasePath = `./data/${fileName}`;
await fs.access(databasePath, fsConstants.R_OK);
const dataContent = await fs.readFile(databasePath, { encoding: 'utf-8' });
return JSON.parse(dataContent);
} catch (err) {
console.error(" Error loading version database file: " + err);
process.exitCode = buildCommon.ExitCodes.IOFailure;
return null;
}
}
async saveData(fileName, dataObject) {
try {
console.log("[*] Storing version database to a file.");
await buildCommon.ensureDir("./data");
await fs.writeFile(`./data/${fileName}`, JSON.stringify(dataObject, null, 4), { encoding: 'utf-8' });
} catch (err) {
console.error(" Error saving version database file: " + err);
process.exitCode = buildCommon.ExitCodes.IOFailure;
return;
}
}
}
module.exports = DataIO;