# ClawX Release Workflow # Builds and publishes releases for macOS, Windows, and Linux name: Release on: push: tags: - 'v*' workflow_dispatch: inputs: version: description: 'Version to release (e.g., 1.0.0)' required: true permissions: contents: write jobs: release: strategy: matrix: include: - os: macos-latest platform: mac - os: windows-latest platform: win - os: ubuntu-latest platform: linux runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Setup pnpm uses: pnpm/action-setup@v2 with: version: 8 - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Setup pnpm cache uses: actions/cache@v4 with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build Vite run: pnpm run build:vite # macOS specific steps - name: Build macOS if: matrix.platform == 'mac' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # For code signing (optional) # CSC_LINK: ${{ secrets.MAC_CERTS }} # CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTS_PASSWORD }} # For notarization (optional) # APPLE_ID: ${{ secrets.APPLE_ID }} # APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} # APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} run: pnpm run package:mac # Windows specific steps - name: Build Windows if: matrix.platform == 'win' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # For code signing (optional) # CSC_LINK: ${{ secrets.WIN_CERTS }} # CSC_KEY_PASSWORD: ${{ secrets.WIN_CERTS_PASSWORD }} run: pnpm run package:win # Linux specific steps - name: Build Linux if: matrix.platform == 'linux' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: pnpm run package:linux - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: release-${{ matrix.platform }} path: | release/*.dmg release/*.zip release/*.exe release/*.AppImage release/*.deb release/*.yml release/*.yaml retention-days: 7 publish: needs: release runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: release-artifacts - name: List artifacts run: ls -la release-artifacts/ - name: Create GitHub Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: | release-artifacts/**/*.dmg release-artifacts/**/*.zip release-artifacts/**/*.exe release-artifacts/**/*.AppImage release-artifacts/**/*.deb release-artifacts/**/*.yml release-artifacts/**/*.yaml draft: false prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') }} generate_release_notes: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}