Stable release #7
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| # Cut a release by pushing a tag: `git tag v0.1.0 && git push origin v0.1.0`. | |
| # `workflow_dispatch` builds the same artifacts WITHOUT publishing a release | |
| # (uploaded as workflow artifacts) — a safe dry run before tagging. | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| permissions: | |
| contents: write # required to create/attach a GitHub Release | |
| jobs: | |
| build: | |
| name: build ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Fully static Linux binaries (no glibc/bzip2/lzma runtime dependency): | |
| # the -sys crates build htslib/bzip2/lzma/zlib from bundled C source. | |
| # Each builds NATIVELY on its arch's runner — no cross-compiler needed. | |
| - target: x86_64-unknown-linux-musl | |
| os: ubuntu-latest | |
| # aarch64-unknown-linux-musl is deferred: rust-htslib 0.44.1 fails to compile | |
| # on aarch64 (a c_char signedness mismatch, E0308 — an upstream bug). Tracked | |
| # as a separate issue; re-add the runner once rust-htslib builds on aarch64. | |
| # macOS builds on Apple Silicon runners (macos-14, plentiful). The | |
| # aarch64 build is native; the x86_64 build is cross-compiled from arm64 | |
| # (the SDK ships both arches; the cc crate adds `-arch x86_64`) so the | |
| # release never waits on the scarce/deprecated Intel macos-13 runners. | |
| - target: aarch64-apple-darwin | |
| os: macos-14 | |
| - target: x86_64-apple-darwin | |
| os: macos-14 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install musl toolchain + cmake (Linux) | |
| if: runner.os == 'Linux' | |
| # cmake: hts-sys 2.2.0 forces libz-sys/zlib-ng, whose build uses CMake. | |
| run: sudo apt-get update && sudo apt-get install -y musl-tools cmake | |
| - uses: actions-rs/toolchain@v1 | |
| with: | |
| toolchain: stable | |
| target: ${{ matrix.target }} | |
| profile: minimal | |
| override: true | |
| - name: Cache cargo artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-release-${{ matrix.target }}-${{ hashFiles('Cargo.lock') }} | |
| - name: Build (release, ${{ matrix.target }}) | |
| env: | |
| # musl needs the musl C compiler for the bundled htslib/bzip2/lzma builds. | |
| CC_x86_64_unknown_linux_musl: musl-gcc | |
| # hts-sys 2.2.0 forces libz-sys/zlib-ng, whose CMake build probes for a C++ | |
| # compiler. zlib-ng's sources are C (built with the musl CC above); the host | |
| # `g++` is the right arch on this native runner and satisfies CMake's probe. | |
| CXX_x86_64_unknown_linux_musl: g++ | |
| run: cargo build --release --target ${{ matrix.target }} --bin rosalind | |
| - name: Stage the bundle | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| name="rosalind-${{ matrix.target }}" | |
| stage="dist/$name" | |
| mkdir -p "$stage" | |
| cp "target/${{ matrix.target }}/release/rosalind" "$stage/" | |
| cp README.md CONTRACT.md LICENSE-APACHE LICENSE-MIT "$stage/" | |
| mkdir -p "$stage/examples/data" | |
| cp -R examples/data/illumina_toy "$stage/examples/data/" | |
| tar -C dist -czf "dist/$name.tar.gz" "$name" | |
| # Portable checksum (shasum on macOS, sha256sum on Linux). | |
| if command -v sha256sum >/dev/null 2>&1; then | |
| (cd dist && sha256sum "$name.tar.gz" > "$name.tar.gz.sha256") | |
| else | |
| (cd dist && shasum -a 256 "$name.tar.gz" > "$name.tar.gz.sha256") | |
| fi | |
| - name: Upload workflow artifact (dry run) | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: rosalind-${{ matrix.target }} | |
| path: | | |
| dist/rosalind-${{ matrix.target }}.tar.gz | |
| dist/rosalind-${{ matrix.target }}.tar.gz.sha256 | |
| - name: Attach to the GitHub Release (tag builds only) | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: | | |
| dist/rosalind-${{ matrix.target }}.tar.gz | |
| dist/rosalind-${{ matrix.target }}.tar.gz.sha256 | |
| fail_on_unmatched_files: true | |
| body: | | |
| Prebuilt `rosalind` binaries — the memory contract, runnable in 60 seconds. | |
| ```sh | |
| curl -fsSL https://raw.githubusercontent.com/logannye/rosalind/main/install.sh | sh | |
| ``` | |
| Each tarball bundles the binary, the `illumina_toy` contract-demo fixtures, and the | |
| licenses. See the README "Quickstart (60 seconds)". |