From 36531662d381fe29dccd9c4d1b3e3293b48456d5 Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Wed, 5 Aug 2026 20:38:35 +0200 Subject: [PATCH] final changes to the release edition --- .github/workflows/release-docker.yml | 85 ++++++++++++++++------------ 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml index 6b44a9a..08b8ef1 100644 --- a/.github/workflows/release-docker.yml +++ b/.github/workflows/release-docker.yml @@ -42,53 +42,64 @@ jobs: EVENT_NAME: ${{ gitea.event_name }} REF_NAME: ${{ gitea.ref_name }} RELEASE_TYPE: ${{ gitea.event.inputs.release_type || 'patch' }} - RUN_NUMBER: ${{ gitea.run_number }} DOCKER_API_VERSION: '1.44' run: | + latest_stable_tag() { + local releases_file="$1" + python3 -c "import json, sys; releases = json.load(open(sys.argv[1], encoding='utf-8')); print(next((release.get('tag_name', '').strip() for release in releases if not release.get('prerelease') and not release.get('draft')), ''))" "$releases_file" + } + + next_dev_suffix() { + local releases_file="$1" + local base_tag="$2" + python3 -c "import json, re, sys; releases_path, base_tag = sys.argv[1], sys.argv[2].strip(); pattern = re.compile(r'^' + re.escape(base_tag) + r'-dev\\.(\\d+)$'); releases = json.load(open(releases_path, encoding='utf-8')); highest = max([int(match.group(1)) for release in releases for match in [pattern.match(release.get('tag_name', '').strip())] if match], default=0); print(highest + 1)" "$releases_file" "$base_tag" + } + + make_dev_tag() { + local releases_file="$1" + local stable_tag="$2" + local major minor patch next_suffix + + if [[ "$stable_tag" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then + major=${BASH_REMATCH[1]} + minor=${BASH_REMATCH[2]} + patch=${BASH_REMATCH[3]} + else + major=0 + minor=8 + patch=31 + fi + + patch=$((patch + 1)) + next_suffix="$(next_dev_suffix "$releases_file" "v${major}.${minor}.${patch}")" + printf 'v%s.%s.%s-dev.%s' "$major" "$minor" "$patch" "$next_suffix" + } + + releases_file="$(mktemp)" + trap 'rm -f "${releases_file:-}"' EXIT + if [ "$EVENT_NAME" = "push" ] && [ "$REF_NAME" = "main" ]; then prerelease=true - latest_tag="v0.8.31" - if meta_json=$(curl -fsSL -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/json" "https://git.invario-software.eu/api/v1/repos/$REPO/releases/latest" 2>/dev/null); then - tag_name=$(printf "%s" "$meta_json" | sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' | head -n1) - if [ -n "$tag_name" ]; then - latest_tag="$tag_name" - fi + if ! curl -fsSL -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/json" "https://git.invario-software.eu/api/v1/repos/$REPO/releases" -o "$releases_file"; then + echo "Error: could not fetch release list" + exit 1 fi - - if [[ "$latest_tag" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then - major=${BASH_REMATCH[1]} - minor=${BASH_REMATCH[2]} - patch=${BASH_REMATCH[3]} - else - major=0 - minor=8 - patch=31 + latest_tag="$(latest_stable_tag "$releases_file")" + if [ -z "$latest_tag" ]; then + latest_tag="v0.8.31" fi - - patch=$((patch + 1)) - TAG="v${major}.${minor}.${patch}-dev.${RUN_NUMBER:-0}" + TAG="$(make_dev_tag "$releases_file" "$latest_tag")" elif [ "$EVENT_NAME" = "workflow_dispatch" ] && [ "$RELEASE_TYPE" = "dev" ]; then prerelease=true - latest_tag="v0.8.31" - if meta_json=$(curl -fsSL -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/json" "https://git.invario-software.eu/api/v1/repos/$REPO/releases/latest" 2>/dev/null); then - tag_name=$(printf "%s" "$meta_json" | sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' | head -n1) - if [ -n "$tag_name" ]; then - latest_tag="$tag_name" - fi + if ! curl -fsSL -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/json" "https://git.invario-software.eu/api/v1/repos/$REPO/releases" -o "$releases_file"; then + echo "Error: could not fetch release list" + exit 1 fi - - if [[ "$latest_tag" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then - major=${BASH_REMATCH[1]} - minor=${BASH_REMATCH[2]} - patch=${BASH_REMATCH[3]} - else - major=0 - minor=8 - patch=31 + latest_tag="$(latest_stable_tag "$releases_file")" + if [ -z "$latest_tag" ]; then + latest_tag="v0.8.31" fi - - patch=$((patch + 1)) - TAG="v${major}.${minor}.${patch}-dev.${RUN_NUMBER:-0}" + TAG="$(make_dev_tag "$releases_file" "$latest_tag")" elif [ "$EVENT_NAME" = "push" ] && [ -n "$REF_NAME" ]; then prerelease=false TAG="$REF_NAME"