diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..3cd3c4e --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,115 @@ +name: Release + +on: + push: + branches: [main] + +concurrency: + group: release + cancel-in-progress: true + +jobs: + build-and-release: + name: Build and Release + runs-on: macos-latest + environment: main + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + cache: "npm" + + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Cache cargo + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + src-tauri/target + key: ${{ runner.os }}-cargo-release-${{ hashFiles('src-tauri/Cargo.lock') }} + restore-keys: ${{ runner.os }}-cargo-release- + + - name: Install dependencies + run: npm ci + + - name: Build Tauri app + run: npm run tauri build + + - name: Get version + id: version + run: echo "version=$(jq -r .version src-tauri/tauri.conf.json)" >> "$GITHUB_OUTPUT" + + - name: Check if release already exists + id: check + run: | + if gh release view "v${{ steps.version.outputs.version }}" > /dev/null 2>&1; then + echo "exists=true" >> "$GITHUB_OUTPUT" + else + echo "exists=false" >> "$GITHUB_OUTPUT" + fi + env: + GH_TOKEN: ${{ github.token }} + + - name: Get DMG path + if: steps.check.outputs.exists == 'false' + id: dmg + run: | + DMG_PATH=$(find src-tauri/target/release/bundle/dmg -name "*.dmg" | head -1) + DMG_NAME=$(basename "$DMG_PATH") + echo "path=$DMG_PATH" >> "$GITHUB_OUTPUT" + echo "name=$DMG_NAME" >> "$GITHUB_OUTPUT" + + - name: Create GitHub Release + if: steps.check.outputs.exists == 'false' + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ steps.version.outputs.version }} + name: v${{ steps.version.outputs.version }} + files: ${{ steps.dmg.outputs.path }} + generate_release_notes: true + make_latest: true + + - name: Update Homebrew Tap + if: steps.check.outputs.exists == 'false' + env: + HOMEBREW_TAP_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }} + run: | + VERSION="${{ steps.version.outputs.version }}" + DMG_NAME="${{ steps.dmg.outputs.name }}" + DMG_URL="https://github.com/${{ github.repository }}/releases/download/v${VERSION}/${DMG_NAME}" + SHA256=$(shasum -a 256 "${{ steps.dmg.outputs.path }}" | awk '{print $1}') + + git clone "https://x-access-token:${HOMEBREW_TAP_TOKEN}@github.com/ryunosuke121/homebrew-tap.git" tap + cd tap + + mkdir -p Casks + cat > Casks/hyut.rb <