diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..56b8a5d --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,13 @@ +name: Build Docker Image + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Build Docker image + run: docker build -t notify-bridge:dev . diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 239cc7e..66db31d 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -13,14 +13,28 @@ jobs: release: runs-on: ubuntu-latest steps: - - name: Checkout + - name: Fetch RELEASE_NOTES.md only uses: actions/checkout@v4 with: - fetch-depth: 0 + sparse-checkout: RELEASE_NOTES.md + sparse-checkout-cone-mode: false + + - name: Checkout full repo for Docker build + uses: actions/checkout@v4 - name: Extract version from tag id: version - run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT + run: | + TAG="${{ gitea.ref_name }}" + VERSION="${TAG#v}" + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + IS_PRE="false" + if echo "$TAG" | grep -qE '(alpha|beta|rc)'; then + IS_PRE="true" + fi + echo "is_pre=$IS_PRE" >> "$GITHUB_OUTPUT" - name: Login to Gitea Container Registry uses: docker/login-action@v3 @@ -38,12 +52,14 @@ jobs: context: . push: true tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }} - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.tag }} + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }} + ${{ steps.version.outputs.is_pre == 'false' && format('{0}/{1}:latest', env.REGISTRY, env.IMAGE_NAME) || '' }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max - name: Trigger Portainer redeploy + if: steps.version.outputs.is_pre == 'false' continue-on-error: true run: | if [ -n "${{ secrets.DOCKER_REDEPLOY_WEBHOOK_URL }}" ]; then @@ -58,7 +74,7 @@ jobs: id: changelog run: | PREV_TAG=$(git tag --sort=-v:refname | head -2 | tail -1) - if [ -z "$PREV_TAG" ] || [ "$PREV_TAG" = "${{ github.ref_name }}" ]; then + if [ -z "$PREV_TAG" ] || [ "$PREV_TAG" = "${{ gitea.ref_name }}" ]; then CHANGELOG=$(git log --oneline --no-decorate HEAD~20..HEAD) else CHANGELOG=$(git log --oneline --no-decorate ${PREV_TAG}..HEAD) @@ -66,7 +82,14 @@ jobs: echo "$CHANGELOG" > /tmp/changelog.txt - name: Create Gitea Release + env: + RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} run: | + TAG="${{ steps.version.outputs.tag }}" + VERSION="${{ steps.version.outputs.version }}" + IS_PRE="${{ steps.version.outputs.is_pre }}" + BASE_URL="https://${{ env.REGISTRY }}/api/v1/repos/${{ env.IMAGE_NAME }}" + if [ -f RELEASE_NOTES.md ]; then export RELEASE_NOTES=$(cat RELEASE_NOTES.md) echo "Found RELEASE_NOTES.md" @@ -76,7 +99,7 @@ jobs: fi BODY=$(python3 -c " - import json, os, sys + import json, os release_notes = os.environ.get('RELEASE_NOTES', '') changelog = open('/tmp/changelog.txt').read().strip() @@ -90,8 +113,23 @@ jobs: print(json.dumps('\n\n'.join(sections))) ") - curl -s -X POST \ - "https://${{ env.REGISTRY }}/api/v1/repos/${{ env.IMAGE_NAME }}/releases" \ - -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + RELEASE=$(curl -s -X POST "$BASE_URL/releases" \ + -H "Authorization: token $RELEASE_TOKEN" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"${{ github.ref_name }}\",\"name\":\"Notify Bridge ${{ steps.version.outputs.VERSION }}\",\"body\":${BODY}}" + -d "{ + \"tag_name\": \"$TAG\", + \"name\": \"Notify Bridge $VERSION\", + \"body\": $BODY, + \"draft\": false, + \"prerelease\": $IS_PRE + }") + + # Fallback: if release already exists for this tag, reuse it + RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])" 2>/dev/null) + if [ -z "$RELEASE_ID" ]; then + echo "::warning::Release already exists for tag $TAG — reusing existing release" + RELEASE=$(curl -s "$BASE_URL/releases/tags/$TAG" \ + -H "Authorization: token $RELEASE_TOKEN") + RELEASE_ID=$(echo "$RELEASE" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") + fi + echo "Created release $RELEASE_ID for $TAG"