name: Release on: push: tags: - 'v*' env: REGISTRY: git.dolgolyov-family.by IMAGE_NAME: alexei.dolgolyov/notify-bridge jobs: release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Extract version from tag id: version run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ gitea.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest 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 continue-on-error: true run: | if [ -n "${{ secrets.DOCKER_REDEPLOY_WEBHOOK_URL }}" ]; then echo "Triggering Portainer redeploy..." curl -sf -X POST "${{ secrets.DOCKER_REDEPLOY_WEBHOOK_URL }}" \ --max-time 30 || echo "::warning::Portainer webhook failed" else echo "DOCKER_REDEPLOY_WEBHOOK_URL not set — skipping auto-deploy" fi - name: Generate changelog id: changelog run: | PREV_TAG=$(git tag --sort=-v:refname | head -2 | tail -1) if [ -z "$PREV_TAG" ] || [ "$PREV_TAG" = "${{ github.ref_name }}" ]; then CHANGELOG=$(git log --oneline --no-decorate HEAD~20..HEAD) else CHANGELOG=$(git log --oneline --no-decorate ${PREV_TAG}..HEAD) fi echo "$CHANGELOG" > /tmp/changelog.txt - name: Create Gitea Release run: | if [ -f RELEASE_NOTES.md ]; then export RELEASE_NOTES=$(cat RELEASE_NOTES.md) echo "Found RELEASE_NOTES.md" else export RELEASE_NOTES="" echo "No RELEASE_NOTES.md found" fi BODY=$(python3 -c " import json, os, sys release_notes = os.environ.get('RELEASE_NOTES', '') changelog = open('/tmp/changelog.txt').read().strip() sections = [] if release_notes.strip(): sections.append(release_notes.strip()) if changelog: sections.append('## Changelog\n\n' + changelog) 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 }}" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"${{ github.ref_name }}\",\"name\":\"Notify Bridge ${{ steps.version.outputs.VERSION }}\",\"body\":${BODY}}"