name: Release on: push: tags: - 'v*.*.*' permissions: contents: read jobs: prepare: name: Prepare Release runs-on: ubuntu-latest permissions: contents: read outputs: version: ${{ steps.version.outputs.version }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version-file: go.work - name: Verify tag and VERSION id: version run: | version=$(go run ./backend/cmd/versionctl print) go run ./backend/cmd/versionctl verify-tag "${GITHUB_REF_NAME}" printf 'version=%s\n' "$version" >> "$GITHUB_OUTPUT" build-linux: name: Build Linux Assets needs: prepare runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version-file: go.work - name: Setup Bun uses: oven-sh/setup-bun@v2 - name: Install Linux desktop build dependencies run: | sudo apt-get update sudo apt-get install -y libayatana-appindicator3-dev libgtk-3-dev - name: Build Linux release assets run: make release-assets-linux - name: Upload Linux release assets uses: actions/upload-artifact@v4 with: name: release-linux path: build/release/* build-windows: name: Build Windows Assets needs: prepare runs-on: windows-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version-file: go.work - name: Setup Bun uses: oven-sh/setup-bun@v2 - name: Setup MSYS2 toolchain uses: msys2/setup-msys2@v2 with: update: true install: >- make mingw-w64-x86_64-gcc - name: Build Windows release assets shell: msys2 {0} run: make release-assets-windows - name: Upload Windows release assets uses: actions/upload-artifact@v4 with: name: release-windows path: build/release/* build-macos: name: Build macOS Assets needs: prepare runs-on: macos-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version-file: go.work - name: Setup Bun uses: oven-sh/setup-bun@v2 - name: Build macOS release assets run: make release-assets-macos - name: Upload macOS release assets uses: actions/upload-artifact@v4 with: name: release-macos path: build/release/* draft-release: name: Create Draft Release needs: [prepare, build-linux, build-windows, build-macos] runs-on: ubuntu-latest permissions: contents: write steps: - name: Download release assets uses: actions/download-artifact@v4 with: pattern: release-* merge-multiple: true path: dist - name: Publish draft release uses: softprops/action-gh-release@v2 with: name: v${{ needs.prepare.outputs.version }} tag_name: ${{ github.ref_name }} draft: true files: | dist/*