name: release on: push: branches: - main - next pull_request: workflow_dispatch: env: CARGO_INCREMENTAL: 0 jobs: release: name: ${{ matrix.target }} permissions: contents: write runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-musl release-target: linux-amd64 deb: true - os: ubuntu-latest target: arm-unknown-linux-musleabihf release-target: linux-arm - os: ubuntu-latest target: armv7-unknown-linux-musleabihf release-target: linux-arm7 - os: ubuntu-latest target: aarch64-unknown-linux-musl release-target: linux-arm64 deb: true - os: macos-11 target: x86_64-apple-darwin release-target: darwin-amd64 - os: macos-11 target: aarch64-apple-darwin release-target: darwin-arm64 steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 0 - name: Get version id: get_version run: sed -En 's/^version = "(.*)"/value=\1/p' Cargo.toml >> $GITHUB_OUTPUT - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true target: ${{ matrix.target }} - name: Setup cache uses: Swatinem/rust-cache@v2 with: key: ${{ matrix.target }} - name: Build binary uses: actions-rs/cargo@v1 with: command: build args: --release --locked --target=${{ matrix.target }} --color=always --verbose use-cross: ${{ runner.os == 'Linux' }} - name: Install cargo-deb if: ${{ matrix.deb == true }} uses: actions-rs/install@v0.1 with: crate: cargo-deb - name: Build deb if: ${{ matrix.deb == true }} uses: actions-rs/cargo@v1 with: command: deb args: --no-build --no-strip --output=. --target=${{ matrix.target }} - name: Package (*nix) if: runner.os != 'Windows' run: > tar -cv LICENSE README.md man/ -C target/${{ matrix.target }}/release/ toolkit | gzip --best > 'toolkit-${{ steps.get_version.outputs.value }}-${{ matrix.release-target }}.tar.gz' - name: Upload artifact uses: actions/upload-artifact@v3 with: name: ${{ matrix.release-target }} path: | *.deb *.tar.gz *.zip - name: Create release if: ${{ github.ref == 'refs/heads/main' && startsWith(github.event.head_commit.message, 'chore(release)') }} uses: softprops/action-gh-release@v1 with: draft: true files: | *.deb *.tar.gz *.zip name: v${{ steps.get_version.outputs.value }} tag_name: v${{ steps.get_version.outputs.value }}