name: Release on: workflow_dispatch: permissions: contents: write defaults: run: shell: bash jobs: init: name: Init runs-on: ubuntu-latest outputs: version: ${{ steps.get_version.outputs.value }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Get version from manifest uses: SebRollen/toml-action@9062fbef52816d61278d24ce53c8070440e1e8dd id: get_version with: file: Cargo.toml field: package.version build: needs: ["init"] strategy: fail-fast: false matrix: include: - name: Windows x86_64 runner-os: windows-latest artifact-name: lune-${{ needs.init.outputs.version }}-windows-x86_64 cargo-target: x86_64-pc-windows-msvc - name: Linux x86_64 runner-os: ubuntu-latest artifact-name: lune-${{ needs.init.outputs.version }}-linux-x86_64 cargo-target: x86_64-unknown-linux-gnu - name: Linux aarch64 runner-os: ubuntu-latest artifact-name: lune-${{ needs.init.outputs.version }}-linux-aarch64 cargo-target: aarch64-unknown-linux-gnu - name: macOS x86_64 runner-os: macos-latest artifact-name: lune-${{ needs.init.outputs.version }}-macos-x86_64 cargo-target: x86_64-apple-darwin - name: macOS aarch64 runner-os: macos-latest artifact-name: lune-${{ needs.init.outputs.version }}-macos-aarch64 cargo-target: aarch64-apple-darwin name: Build - ${{ matrix.name }} runs-on: ${{ matrix.runner-os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.cargo-target }} - name: Install Just uses: extractions/setup-just@v1 - name: Install build tooling (aarch64-unknown-linux-gnu) if: matrix.cargo-target == 'aarch64-unknown-linux-gnu' run: | sudo apt-get update -y sudo apt-get install -y musl-tools clang llvm sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - name: Build binary run: just build --locked --release --target ${{ matrix.cargo-target }} - name: Create release archive run: just zip-release ${{ matrix.cargo-target }} - name: Upload release artifact uses: actions/upload-artifact@v3 with: name: ${{ matrix.artifact-name }} path: release.zip release: name: Release runs-on: ubuntu-latest needs: ["init", "build"] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Just uses: extractions/setup-just@v1 - name: Download releases uses: actions/download-artifact@v3 with: path: ./releases - name: Unpack releases run: just unpack-releases "./releases" - name: Create release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: name: ${{ needs.init.outputs.version }} tag_name: v${{ needs.init.outputs.version }} fail_on_unmatched_files: true files: ./releases/*.zip draft: true