diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index acffa7f..9edd9c1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,7 +1,7 @@ name: Build portable releases run-name: >- - Portable release ${{ (github.ref_type == 'tag' && github.ref_name) || inputs.release_tag || github.ref_name }} + ${{ github.event_name == 'push' && github.ref_type == 'branch' && 'Warm build caches' || 'Portable release' }} ${{ (github.ref_type == 'tag' && github.ref_name) || inputs.release_tag || github.ref_name }} on: workflow_dispatch: @@ -16,9 +16,15 @@ on: default: true type: boolean push: + branches: + - main tags: - 'v*' +concurrency: + group: portable-${{ github.ref }}-${{ github.event_name == 'push' && github.ref_type == 'branch' && 'cache' || 'release' }} + cancel-in-progress: ${{ github.event_name == 'push' && github.ref_type == 'branch' }} + permissions: contents: read @@ -96,6 +102,8 @@ jobs: suffix: zip runs-on: ${{ matrix.runner }} timeout-minutes: 60 + env: + PACKAGE_RELEASE: ${{ github.event_name == 'workflow_dispatch' || github.ref_type == 'tag' }} steps: - uses: actions/checkout@v7 with: @@ -104,21 +112,24 @@ jobs: with: bun-version: 1.3.14 - uses: dtolnay/rust-toolchain@1.97.0 - - name: Cache Bun packages - uses: actions/cache@v5 + - name: Restore Bun packages + id: bun-cache + uses: actions/cache/restore@v5 with: path: ~/.bun/install/cache - key: bun-${{ runner.os }}-${{ runner.arch }}-1.3.14-${{ hashFiles('bun.lock') }} + key: bun-${{ matrix.runner }}-1.3.14-${{ hashFiles('bun.lock') }} restore-keys: | - bun-${{ runner.os }}-${{ runner.arch }}-1.3.14- + bun-${{ matrix.runner }}-1.3.14- - name: Cache Rust dependencies and build outputs uses: Swatinem/rust-cache@v2 with: + key: ${{ matrix.runner }} workspaces: src-tauri -> target cache-workspace-crates: true - cache-on-failure: true - - name: Cache bundled core archive - uses: actions/cache@v5 + save-if: ${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }} + - name: Restore bundled core archive + id: core-cache + uses: actions/cache/restore@v5 with: path: cpa-core key: core-v2-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('core-version.txt') }} @@ -154,8 +165,20 @@ jobs: --arch "${{ matrix.arch }}" --download true shell: bash + - name: Save Bun packages + if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && steps.bun-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v5 + with: + path: ~/.bun/install/cache + key: ${{ steps.bun-cache.outputs.cache-primary-key }} + - name: Save bundled core archive + if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && steps.core-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v5 + with: + path: cpa-core + key: ${{ steps.core-cache.outputs.cache-primary-key }} - name: Build signed macOS DMG - if: matrix.os == 'darwin' + if: env.PACKAGE_RELEASE == 'true' && matrix.os == 'darwin' shell: bash env: APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} @@ -252,14 +275,15 @@ jobs: --wait xcrun stapler staple "$output_dmg" - name: Archive Linux release - if: matrix.os == 'linux' + if: env.PACKAGE_RELEASE == 'true' && matrix.os == 'linux' run: tar -czf "${{ steps.package.outputs.stem }}.tar.gz" -C release "${{ steps.package.outputs.stem }}" - name: Archive Windows release - if: matrix.os == 'windows' + if: env.PACKAGE_RELEASE == 'true' && matrix.os == 'windows' shell: pwsh run: | Compress-Archive -Path "release/${{ steps.package.outputs.stem }}" -DestinationPath "${{ steps.package.outputs.stem }}.zip" - uses: actions/upload-artifact@v7 + if: env.PACKAGE_RELEASE == 'true' with: name: ${{ steps.package.outputs.stem }} path: ${{ steps.package.outputs.stem }}.${{ matrix.suffix }}