From 61948a51c63317b4b268341c5063d40e86546b50 Mon Sep 17 00:00:00 2001 From: benya Date: Sun, 15 Feb 2026 21:10:10 +0300 Subject: [PATCH] ci(release): detect existing releases via list endpoint - check /releases list by tag_name instead of /releases/tags - skip git tag push when tag already exists on origin --- .gitea/workflows/release.yml | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 9449a9c..353f903 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -71,17 +71,26 @@ jobs: run: | $version = "${{ steps.extract_version.outputs.version }}" $tag = "v$version" - $apiUrl = "https://git.daemonlord.ru/api/v1/repos/${{ gitea.repository }}/releases/tags/$tag" + $apiUrl = "https://git.daemonlord.ru/api/v1/repos/${{ gitea.repository }}/releases?page=1&limit=100" $headers = @{ Authorization = "token ${{ secrets.API_TOKEN }}" } $utf8NoBom = New-Object System.Text.UTF8Encoding($false) try { - $response = Invoke-WebRequest -Uri $apiUrl -Headers $headers -Method Get -UseBasicParsing - if ($response.StatusCode -eq 200) { + $response = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get + $found = $false + foreach ($release in $response) { + if ($release.tag_name -eq $tag) { + $found = $true + break + } + } + if ($found) { Write-Host "Release $tag already exists, stopping job." [System.IO.File]::AppendAllText($env:GITHUB_ENV, "CONTINUE=false`n", $utf8NoBom) + } else { + Write-Host "Release $tag not found, continuing workflow..." } } catch { - Write-Host "Release $tag not found, continuing workflow..." + Write-Host "Failed to query releases list, continuing workflow..." } - name: Run tests @@ -132,8 +141,13 @@ jobs: run: | $version = "${{ steps.extract_version.outputs.version }}" $tag = "v$version" - git tag "$tag" - git push origin "$tag" + $tagLine = (git ls-remote --tags origin "refs/tags/$tag" | Select-Object -First 1) + if ([string]::IsNullOrWhiteSpace($tagLine)) { + git tag "$tag" + git push origin "$tag" + } else { + Write-Host "Tag $tag already exists on origin, skipping tag push." + } - name: Create Gitea Release if: env.CONTINUE == 'true'