79 lines
1.7 KiB
JavaScript
79 lines
1.7 KiB
JavaScript
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");
|
|
const target_commitish = core.getInput("target-commitish");
|
|
|
|
const [owner, repo] = repository.split("/");
|
|
|
|
const client = new gitea.GiteaApi({
|
|
BASE: `https://${host}/api/v1`,
|
|
WITH_CREDENTIALS: true,
|
|
TOKEN: token,
|
|
});
|
|
|
|
let releases = await client.repository.repoListReleases({
|
|
owner,
|
|
repo,
|
|
});
|
|
|
|
let newVersion = getNewestRelease(releases);
|
|
|
|
let response = await client.repository.repoCreateRelease({
|
|
owner,
|
|
repo,
|
|
tag_name: newVersion,
|
|
target_commitish,
|
|
name: newVersion,
|
|
});
|
|
console.log(`🎉 Release ready at ${response.html_url}`);
|
|
} catch (error) {
|
|
console.log(error);
|
|
core.setFailed(error.message);
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @typedef {import("gitea-api").Release} Release
|
|
* @param {Release[]} releases
|
|
* @returns {number}
|
|
*/
|
|
function getNewestRelease(releases) {
|
|
const initialVersion = core.getInput("initial-version");
|
|
|
|
const semVerParser = (version) => {
|
|
return version
|
|
.replace("v", "")
|
|
.split(".")
|
|
.map((v) => parseInt(v, 10));
|
|
};
|
|
|
|
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}`;
|
|
}
|
|
|
|
run();
|