Philipp Horstenkamp aa9afe998d
All checks were successful
Try out action / Try action (push) Successful in 22s
Lint / pre-commit Lint (push) Successful in 41s
Initiated the action. (#1)
Reviewed-on: #1
Co-authored-by: Philipp Horstenkamp <philipp@horstenkamp.de>
Co-committed-by: Philipp Horstenkamp <philipp@horstenkamp.de>
2024-05-28 23:29:17 +02:00

83 lines
2.2 KiB
JavaScript

const core = require("@actions/core");
function parseVersion(str) {
if (typeof str != "string") {
throw new Error("When parsing a version number a string is expected.");
}
var arr = str.split(".");
// parse int or default to 0
var maj = parseInt(arr[0]) || 0;
var min = parseInt(arr[1]) || 0;
var patch = parseInt(arr[2]) || 0;
return {
major: maj,
minor: min,
patch: patch,
};
}
async function increaseVersionPart(url_pattern, version, version_part) {
let test_vor_existence = version;
while (true) {
const url_with_version = url_pattern.replace(
/{{VERSION}}/g,
test_vor_existence,
);
if (url_with_version == url_pattern) {
throw new Error("The url does not contain an {{VERSION}} marker!");
}
let status = await fetch(url_with_version, {
method: "GET",
}).then((response) => response.status);
if (status === 200) {
version = test_vor_existence;
const version_parsed = parseVersion(test_vor_existence);
if (version_part == "minor") {
test_vor_existence = `${version_parsed.major}.${
version_parsed.minor + 1
}.0`;
} else if (version_part == "micro") {
test_vor_existence = `${version_parsed.major}.${version_parsed.minor}.${
version_parsed.patch + 1
}`;
} else {
throw new Error("The verision part to be updated isn't reconised!");
}
} else {
return version;
}
}
}
async function increaseVersion(url_pattern, version) {
let minor = await increaseVersionPart(
url_pattern,
version,
(version_part = "minor"),
);
return await increaseVersionPart(
url_pattern,
minor,
(version_part = "micro"),
);
}
async function main() {
try {
const url_pattern = core.getInput("url-pattern");
const start_version = core.getInput("start-version");
const current_version = `${await increaseVersion(
url_pattern,
start_version,
)}`;
core.info(`The new version determend is ${current_version}`);
core.setOutput("current_version", `${current_version}`);
} catch (error) {
core.setFailed(`Action failed with error: ${error}`);
}
}
main();