name: Release Workflow on: push: tags: - "v*.*.*" - "v*.*.*-beta.*" - "v*.*.*-alpha.*" jobs: determine-release-type: runs-on: ubuntu-latest outputs: release_type: ${{ steps.set-type.outputs.release_type }} tagname: ${{ github.ref_name }} steps: - name: Set release type id: set-type run: | TAG=${GITHUB_REF#refs/tags/} if [[ $TAG == *-alpha* ]]; then echo "release_type=alpha" >> $GITHUB_OUTPUT elif [[ $TAG == *-beta* ]]; then echo "release_type=beta" >> $GITHUB_OUTPUT else echo "release_type=release" >> $GITHUB_OUTPUT fi build-images: timeout-minutes: 15 needs: [determine-release-type] runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v5 with: fetch-depth: 0 ref: ${{ github.ref }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/zerobyte tags: | type=semver,pattern={{version}},prefix=v type=semver,pattern={{major}},prefix=v,enable=${{ needs.determine-release-type.outputs.release_type == 'release' }} type=semver,pattern={{major}}.{{minor}},prefix=v,enable=${{ needs.determine-release-type.outputs.release_type == 'release' }} type=semver,pattern={{major}}.{{minor}}.{{patch}},prefix=v,enable=${{ needs.determine-release-type.outputs.release_type == 'release' }} flavor: | latest=${{ needs.determine-release-type.outputs.release_type == 'release' }} - name: Build and push images uses: docker/build-push-action@v6 with: context: . target: production platforms: linux/amd64,linux/arm64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | APP_VERSION=${{ needs.determine-release-type.outputs.tagname }} cache-from: type=registry,ref=ghcr.io/nicotsx/zerobyte:buildcache cache-to: type=registry,ref=ghcr.io/nicotsx/zerobyte:buildcache,mode=max publish-release: runs-on: ubuntu-latest needs: [build-images, determine-release-type] if: needs.determine-release-type.outputs.release_type == 'release' outputs: id: ${{ steps.create_release.outputs.id }} steps: - name: Create GitHub release id: create_release uses: softprops/action-gh-release@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: body: | **${{ needs.determine-release-type.outputs.tagname }}** tag_name: ${{ needs.determine-release-type.outputs.tagname }} name: ${{ needs.determine-release-type.outputs.tagname }} draft: false prerelease: true files: cli/runtipi-cli-*