name: Build and publish on: push: tags: - 'v*' env: BINARY_NAME: tmux-helper jobs: build: name: Build binaries runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest] include: - os: ubuntu-latest platform_name: linux-amd64 - os: macos-latest platform_name: macos-arm64 steps: - uses: actions/checkout@v4 - name: Pre-build (Linux) if: matrix.os == 'ubuntu-latest' run: sudo apt install -y libdbus-1-dev pkg-config libdbus-1-3 libfuse-dev - name: Pre-build (macOS) if: matrix.os == 'macos-latest' run: brew install dbus - name: Build binary run: cargo build --release - name: Rename binary run: | mkdir -p ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} cp target/release/${{ env.BINARY_NAME }} ${{ env.BINARY_NAME }}_${{ matrix.platform_name }}/${{ env.BINARY_NAME }} - uses: actions/upload-artifact@v4 with: name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} path: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} release: name: Create Release Page needs: build runs-on: ubuntu-latest permissions: contents: write outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - uses: actions/checkout@v4 - uses: ncipollo/release-action@v1 id: create_release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: allowUpdates: true tag: ${{ github.ref_name }} upload: name: Upload Release Assets needs: release runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest] include: - os: ubuntu-latest platform_name: linux-amd64 - os: macos-latest platform_name: macos-arm64 steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 name: Download ${{ matrix.platform_name }} artifact with: name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} path: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} - name: Upload Release Asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }}/${{ env.BINARY_NAME }} asset_name: ${{ env.BINARY_NAME }}_${{ matrix.platform_name }} asset_content_type: application/octet-stream