name: Release on: push: branches: [main] env: IMAGE: ${{ vars.REGISTRY_HOST }}/${{ gitea.repository_owner }}/catalyst jobs: release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-node@v4 with: node-version: 'lts/*' cache: npm - run: npm ci - run: npm test - name: Read version run: | VERSION=$(node -p "require('./package.json').version") echo "VERSION=${VERSION}" >> $GITEA_ENV - name: Assert tag does not exist run: | if git ls-remote --tags origin "refs/tags/v${{ env.VERSION }}" | grep -q .; then echo "ERROR: tag v${{ env.VERSION }} already exists — bump version in package.json before merging to main." exit 1 fi - name: Create and push tag run: | git config user.name "gitea-actions" git config user.email "actions@gitea" git tag "v${{ env.VERSION }}" git push origin "v${{ env.VERSION }}" - name: Generate release notes run: | LAST_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") if [ -n "$LAST_TAG" ]; then NOTES=$(git log "${LAST_TAG}..HEAD" --pretty=format:"- %s" --no-merges) else NOTES=$(git log --pretty=format:"- %s" --no-merges) fi NOTES_JSON=$(printf '%s' "$NOTES" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))") echo "NOTES=${NOTES_JSON}" >> $GITEA_ENV - name: Docker metadata id: meta uses: docker/metadata-action@v5 with: images: ${{ env.IMAGE }} tags: | type=semver,pattern={{version}},value=v${{ env.VERSION }} type=semver,pattern={{major}}.{{minor}},value=v${{ env.VERSION }} type=sha,prefix=,format=short type=raw,value=latest - name: Log in to registry uses: docker/login-action@v3 with: registry: ${{ vars.REGISTRY_HOST }} username: ${{ gitea.actor }} password: ${{ secrets.TOKEN }} - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} - name: Create Gitea release run: | curl -sf -X POST \ -H "Authorization: token ${{ secrets.TOKEN }}" \ -H "Content-Type: application/json" \ "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases" \ -d "{ \"tag_name\": \"v${{ env.VERSION }}\", \"name\": \"Catalyst v${{ env.VERSION }}\", \"body\": \"### Changes\n\n${{ env.NOTES }}\n\n### Image\n\n\`${{ env.IMAGE }}:${{ env.VERSION }}\`\", \"draft\": false, \"prerelease\": false }"