actions/release/index.js

83 lines
1.9 KiB
JavaScript
Raw Normal View History

2024-08-22 16:26:38 +00:00
import core from "@actions/core";
import gitea from "gitea-api";
async function run() {
try {
const host = core.getInput("host");
const token = core.getInput("token");
const repository = core.getInput("repository");
2024-08-22 17:54:46 +00:00
const target_commitish = core.getInput("target-commitish");
2024-08-22 18:58:11 +00:00
const prerelease = core.getInput("prerelease") === "true";
2024-08-22 16:26:38 +00:00
const [owner, repo] = repository.split("/");
2024-08-22 17:03:09 +00:00
const client = new gitea.GiteaApi({
2024-08-22 16:26:38 +00:00
BASE: `https://${host}/api/v1`,
WITH_CREDENTIALS: true,
TOKEN: token,
});
2024-08-22 17:27:30 +00:00
let releases = await client.repository.repoListReleases({
owner,
repo,
2024-08-22 17:03:09 +00:00
});
2024-08-22 17:27:30 +00:00
let newVersion = getNewestRelease(releases);
2024-08-22 17:54:46 +00:00
let response = await client.repository.repoCreateRelease({
owner,
repo,
2024-08-22 18:58:11 +00:00
body: {
tag_name: newVersion,
target_commitish,
prerelease,
2024-08-22 18:59:50 +00:00
name: `Release ${newVersion}`,
2024-08-22 18:58:11 +00:00
},
2024-08-22 17:54:46 +00:00
});
2024-08-22 17:55:25 +00:00
console.log(`🎉 Release ready at ${response.html_url}`);
2024-08-22 16:26:38 +00:00
} catch (error) {
console.log(error);
core.setFailed(error.message);
}
}
2024-08-22 17:27:30 +00:00
/**
*
2024-08-22 17:41:43 +00:00
* @typedef {import("gitea-api").Release} Release
2024-08-22 17:27:30 +00:00
* @param {Release[]} releases
* @returns {number}
*/
2024-08-22 17:41:43 +00:00
function getNewestRelease(releases) {
2024-08-22 17:27:30 +00:00
const initialVersion = core.getInput("initial-version");
2024-08-22 17:36:53 +00:00
const semVerParser = (version) => {
2024-08-22 17:49:43 +00:00
return version
.replace("v", "")
.split(".")
.map((v) => parseInt(v, 10));
2024-08-22 17:27:30 +00:00
};
const isSemVerGreater = (a, b) => {
return (
a[0] > b[0] ||
(a[0] === b[0] && a[1] > b[1]) ||
(a[0] === b[0] && a[1] === b[1] && a[2] > b[2])
);
};
let version = semVerParser(initialVersion);
for (let release of releases) {
let releaseVersion = semVerParser(release.tag_name);
if (isSemVerGreater(releaseVersion, version)) {
version = releaseVersion;
}
}
return `v${version[0]}.${version[1]}.${version[2] + 1}`;
}
2024-08-22 16:26:38 +00:00
run();