From 28e5c163bfe6500cb80b2342c2327257b2a558c1 Mon Sep 17 00:00:00 2001 From: Adrien Beaudouin Date: Thu, 22 Aug 2024 19:27:30 +0200 Subject: [PATCH] init auto release project --- release/action.yaml | 3 ++ release/index.js | 71 ++++++++++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/release/action.yaml b/release/action.yaml index 65ae358..82444e2 100644 --- a/release/action.yaml +++ b/release/action.yaml @@ -10,6 +10,9 @@ inputs: default: ${{ gitea.repository }} token: description: "Gitea token to create a release" + initial-version: + description: "Initial version to start from" + default: "v0.0.0" runs: using: node20 diff --git a/release/index.js b/release/index.js index f435869..5c9f971 100644 --- a/release/index.js +++ b/release/index.js @@ -2,6 +2,8 @@ import core from "@actions/core"; import gitea from "gitea-api"; +import type { Release } from "gitea-api/dist/models/release"; + async function run() { try { const host = core.getInput("host"); @@ -16,38 +18,14 @@ async function run() { TOKEN: token, }); - let release = await client.repository.repoGetReleaseByTag({ - owner: owner, - repo: repo, - tag: body.tag_name, - }); - const release_id = release.id; - let target_commitish = release.target_commitish; - if ( - body.target_commitish && - body.target_commitish !== release.target_commitish - ) { - console.log( - `Updating commit from "${release.target_commitish}" to "${body.target_commitish}"` - ); - } - target_commitish = body.target_commitish; - release = client.repository.repoEditRelease({ - owner: owner, - repo: repo, - id: release_id, - body: { - body: body.body || release.body, - draft: body.draft !== undefined ? body.draft : release.draft, - name: body.name || release.name, - prerelease: - body.prerelease !== undefined ? body.prerelease : release.prerelease, - tag_name: body.tag_name || release.tag_name, - target_commitish: target_commitish, - }, + let releases = await client.repository.repoListReleases({ + owner, + repo, }); - console.log(`TEST ${host} ${token} ${repository} ${owner} ${repo}`); + let newVersion = getNewestRelease(releases); + + console.log(`NEW RELEASE ${newVersion}`); // console.log(`🎉 Release ready at ${response.html_url}`); } catch (error) { console.log(error); @@ -55,4 +33,37 @@ async function run() { } } +/** + * + * @param {Release[]} releases + * @returns {number} + */ +async function getNewestRelease(releases) { + const initialVersion = core.getInput("initial-version"); + + const semVerParser = ([major, minor, patch]) => { + return version.replace("v", "").split(".").map(parseFloat); + }; + + 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();