name: Release on: push: tags: - v* jobs: # Better to check first, runners other than ubuntu-latest take up more free minutes check: name: Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check run: cargo check --all-features --locked build: needs: [check] strategy: matrix: include: - os: ubuntu-latest host: linux arch: x86_64 target: x86_64-unknown-linux-gnu - os: windows-latest host: windows arch: x86_64 target: x86_64-pc-windows-msvc - os: macos-latest host: macos arch: x86_64 target: x86_64-apple-darwin # not included in free minutes # TODO: find a replacement (can't cross compile for aarch64 on x86_64 due to OpenSSL) # - os: macos-latest-xlarge # host: macos # arch: aarch64 # target: aarch64-apple-darwin runs-on: ${{ matrix.os }} name: Build for ${{ matrix.host }}-${{ matrix.arch }} steps: - uses: actions/checkout@v4 - name: Set env shell: bash run: | BIN_NAME=pesde ARCHIVE_NAME=$BIN_NAME-$(echo ${{ github.ref_name }} | cut -c 2-)-${{ matrix.host }}-${{ matrix.arch }}.zip echo "BIN_NAME=$BIN_NAME" >> $GITHUB_ENV echo "ARCHIVE_NAME=$ARCHIVE_NAME" >> $GITHUB_ENV - name: Build run: cargo build --bins --all-features --release --target ${{ matrix.target }} --locked - name: Archive shell: bash run: | if [ ${{ matrix.host }} = "windows" ]; then cp target/${{ matrix.target }}/release/${{ env.BIN_NAME }}.exe ${{ env.BIN_NAME }}.exe 7z a ${{ env.ARCHIVE_NAME }} ${{ env.BIN_NAME }}.exe else cp target/${{ matrix.target }}/release/${{ env.BIN_NAME }} ${{ env.BIN_NAME }} zip -r ${{ env.ARCHIVE_NAME }} ${{ env.BIN_NAME }} fi - name: Upload assets uses: actions/upload-artifact@v4 with: name: ${{ env.ARCHIVE_NAME }} path: ${{ env.ARCHIVE_NAME }} publish: name: Publish to crates.io runs-on: ubuntu-latest needs: [build] steps: - uses: actions/checkout@v4 - name: Publish run: cargo publish --token ${{ secrets.CRATES_IO_TOKEN }} --allow-dirty --locked create_release: name: Create Release runs-on: ubuntu-latest permissions: contents: write pull-requests: read needs: [build, publish] steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/download-artifact@v4 with: path: artifacts merge-multiple: true - name: Generate a changelog uses: orhun/git-cliff-action@v3 id: git-cliff with: config: cliff.toml args: --verbose --current --strip header env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_REPO: ${{ github.repository }} - name: Create Release id: create_release uses: softprops/action-gh-release@v1 with: token: ${{ secrets.GITHUB_TOKEN }} tag_name: ${{ github.ref_name }} name: ${{ github.ref_name }} body: ${{ steps.git-cliff.outputs.content }} draft: true prerelease: false files: artifacts/*