| # Licensed under the Apache-2.0 license |
| |
| name: Release |
| |
| on: |
| push: |
| tags: |
| - 'v*' |
| |
| env: |
| CARGO_TERM_COLOR: always |
| RUST_BACKTRACE: 1 |
| |
| jobs: |
| create-release: |
| name: Create Release |
| runs-on: ubuntu-latest |
| outputs: |
| upload_url: ${{ steps.create_release.outputs.upload_url }} |
| steps: |
| - name: Create Release |
| id: create_release |
| uses: actions/create-release@v1 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| with: |
| tag_name: ${{ github.ref }} |
| release_name: Release ${{ github.ref }} |
| draft: false |
| prerelease: false |
| |
| build-release: |
| name: Build Release |
| needs: create-release |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| include: |
| - os: ubuntu-latest |
| target: x86_64-unknown-linux-gnu |
| binary_name: openprot |
| asset_name: openprot-linux-x86_64 |
| - os: windows-latest |
| target: x86_64-pc-windows-msvc |
| binary_name: openprot.exe |
| asset_name: openprot-windows-x86_64.exe |
| - os: macos-latest |
| target: x86_64-apple-darwin |
| binary_name: openprot |
| asset_name: openprot-macos-x86_64 |
| |
| steps: |
| - uses: actions/checkout@v5 |
| |
| - name: Install Rust toolchain |
| uses: dtolnay/rust-toolchain@stable |
| with: |
| targets: ${{ matrix.target }} |
| |
| - name: Cache cargo registry |
| uses: actions/cache@v4 |
| with: |
| path: | |
| ~/.cargo/registry |
| ~/.cargo/git |
| target |
| key: ${{ runner.os }}-${{ matrix.target }}-release-cargo-${{ hashFiles('**/Cargo.lock') }} |
| |
| - name: Build release |
| run: cargo build --release --target ${{ matrix.target }} |
| |
| - name: Strip binary (Unix) |
| if: matrix.os != 'windows-latest' |
| run: strip target/${{ matrix.target }}/release/${{ matrix.binary_name }} |
| |
| - name: Create archive (Unix) |
| if: matrix.os != 'windows-latest' |
| run: | |
| mkdir -p dist |
| cp target/${{ matrix.target }}/release/${{ matrix.binary_name }} dist/ |
| cp README.md dist/ |
| cp LICENSE dist/ |
| tar -czf ${{ matrix.asset_name }}.tar.gz -C dist . |
| |
| - name: Create archive (Windows) |
| if: matrix.os == 'windows-latest' |
| run: | |
| mkdir dist |
| cp target/${{ matrix.target }}/release/${{ matrix.binary_name }} dist/ |
| cp README.md dist/ |
| cp LICENSE dist/ |
| Compress-Archive -Path dist/* -DestinationPath ${{ matrix.asset_name }}.zip |
| |
| - name: Upload Release Asset (Unix) |
| if: matrix.os != 'windows-latest' |
| uses: actions/upload-release-asset@v1 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| with: |
| upload_url: ${{ needs.create-release.outputs.upload_url }} |
| asset_path: ./${{ matrix.asset_name }}.tar.gz |
| asset_name: ${{ matrix.asset_name }}.tar.gz |
| asset_content_type: application/gzip |
| |
| - name: Upload Release Asset (Windows) |
| if: matrix.os == 'windows-latest' |
| uses: actions/upload-release-asset@v1 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| with: |
| upload_url: ${{ needs.create-release.outputs.upload_url }} |
| asset_path: ./${{ matrix.asset_name }}.zip |
| asset_name: ${{ matrix.asset_name }}.zip |
| asset_content_type: application/zip |
| |
| publish-crates: |
| name: Publish to crates.io |
| runs-on: ubuntu-latest |
| needs: build-release |
| if: startsWith(github.ref, 'refs/tags/') |
| steps: |
| - uses: actions/checkout@v5 |
| |
| - name: Install Rust toolchain |
| uses: dtolnay/rust-toolchain@stable |
| |
| - name: Cache cargo registry |
| uses: actions/cache@v4 |
| with: |
| path: | |
| ~/.cargo/registry |
| ~/.cargo/git |
| target |
| key: ${{ runner.os }}-publish-cargo-${{ hashFiles('**/Cargo.lock') }} |
| |
| - name: Publish to crates.io |
| run: cargo publish --token ${{ secrets.CRATES_IO_TOKEN }} |
| working-directory: ./openprot |