diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml index 677a76e..386f4e0 100644 --- a/.gitea/workflows/build-release.yml +++ b/.gitea/workflows/build-release.yml @@ -67,25 +67,32 @@ jobs: -o bin/${OUTPUT_NAME} ./cmd/safelineApi echo "BINARY_NAME=${OUTPUT_NAME}" >> $GITHUB_ENV - - name: Create or Update Release + - name: Create Release (first run only) run: | VERSION="${{ steps.version.outputs.VERSION }}" REPO="${{ gitea.repository }}" SERVER="${{ gitea.server_url }}" TOKEN="${{ secrets.GITEA_TOKEN }}" - # Try to create release (ignore error if already exists) - curl -X POST "${SERVER}/api/v1/repos/${REPO}/releases" \ - -H "Authorization: token ${TOKEN}" \ - -H "Content-Type: application/json" \ - -d '{ - "tag_name": "'${VERSION}'", - "target_commitish": "main", - "name": "Release '${VERSION}'", - "body": "# SafelineAPI '${VERSION}'\n\n## Available Downloads\n\n### Linux\n- **amd64**: safelineApi-linux-amd64\n- **ARM64**: safelineApi-linux-arm64\n- **ARMv7**: safelineApi-linux-armv7\n- **386**: safelineApi-linux-386\n- **PowerPC 64LE**: safelineApi-linux-ppc64le\n\n### Windows\n- **amd64**: safelineApi-windows-amd64.exe\n- **386**: safelineApi-windows-386.exe", - "draft": false, - "prerelease": false - }' || true + # Check if release exists + RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "${SERVER}/api/v1/repos/${REPO}/releases/tags/${VERSION}" \ + -H "Authorization: token ${TOKEN}") + + if [ "$RESPONSE" = "404" ]; then + # Create release if it doesn't exist + curl -X POST "${SERVER}/api/v1/repos/${REPO}/releases" \ + -H "Authorization: token ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d '{ + "tag_name": "'${VERSION}'", + "name": "Release '${VERSION}'", + "body": "# SafelineAPI '${VERSION}'\n\n## Available Downloads\n\n### Linux\n- **amd64**: safelineApi-linux-amd64\n- **ARM64**: safelineApi-linux-arm64\n- **ARMv7**: safelineApi-linux-armv7\n- **386**: safelineApi-linux-386\n- **PowerPC 64LE**: safelineApi-linux-ppc64le\n\n### Windows\n- **amd64**: safelineApi-windows-amd64.exe\n- **386**: safelineApi-windows-386.exe", + "draft": false, + "prerelease": false + }' + fi + + echo "Release checked/created" - name: Upload Binary Asset run: | @@ -95,11 +102,21 @@ jobs: TOKEN="${{ secrets.GITEA_TOKEN }}" BINARY="${{ env.BINARY_NAME }}" - # Get release ID - RELEASE_ID=$(curl -s "${SERVER}/api/v1/repos/${REPO}/releases/tags/${VERSION}" \ - -H "Authorization: token ${TOKEN}" | grep '"id"' | head -1 | grep -o '[0-9]*') + # Get release data + RELEASE_DATA=$(curl -s "${SERVER}/api/v1/repos/${REPO}/releases/tags/${VERSION}" \ + -H "Authorization: token ${TOKEN}") + + RELEASE_ID=$(echo "$RELEASE_DATA" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') + + if [ -z "$RELEASE_ID" ]; then + echo "Failed to get release ID" + echo "$RELEASE_DATA" + exit 1 + fi + + echo "Uploading $BINARY to release $RELEASE_ID" # Upload the binary curl -X POST "${SERVER}/api/v1/repos/${REPO}/releases/${RELEASE_ID}/assets" \ -H "Authorization: token ${TOKEN}" \ - -F "attachment=@bin/${BINARY}" || true + -F "attachment=@bin/${BINARY}"