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 prerelease = core.getInput("prerelease") === "true"; 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, body: { tag_name: newVersion, target_commitish, prerelease, }, }); 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();