diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85f99e0..f79ddd7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -421,29 +421,23 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | + # Upload every archive format produced by the Package step: + # `.tar.gz` for Linux/macOS and `.zip` for Windows, each with + # its matching `.sha256` checksum file. gh release upload "${{ needs.create-tag-and-release.outputs.tag }}" \ /tmp/binaries/*.tar.gz \ + /tmp/binaries/*.zip \ /tmp/binaries/*.sha256 # ------------------------------------------------------------------ - # 5. Publish to crates.io (release only, last step) + # 5. Publish to crates.io — intentionally omitted # ------------------------------------------------------------------ - publish-crate: - name: Publish to crates.io - if: needs.check-release.outputs.is_release == 'true' - needs: [check-release, upload-binaries] - runs-on: ubuntu-latest - permissions: - id-token: write - contents: read - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # ratchet:actions/checkout@v6.0.2 - - - name: Authenticate with crates.io - id: auth - uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # ratchet:rust-lang/crates-io-auth-action@v1.0.4 - - - name: Publish to crates.io - run: cargo publish --no-verify - env: - CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} + # + # The AI4S-YB fork is not published to crates.io because the `rustqc` + # name there belongs to the upstream `seqeralabs` project. Releases + # are distributed via GitHub Releases (binaries) and GHCR (Docker + # images) only. + # + # To enable crates.io publishing, rename the crate in Cargo.toml + # (e.g. `rustqc-ai4syb`) or coordinate with the upstream owner, then + # restore a `publish-crate` job from the repo history. diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b67cce..d3b606d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,58 @@ # RustQC Changelog +## [Version 0.3.0](https://github.com/AI4S-YB/RustQC/releases/tag/v0.3.0) - 2026-04-22 + +First release of the AI4S-YB fork. Focus: Windows support and a pure-Rust +alignment-file backend. This is a **hard fork** of `seqeralabs/RustQC` v0.2.1 +and is not published to crates.io. + +### Breaking changes + +- **CRAM input is no longer supported.** The `rust-htslib` (HTSlib C library) + backend was replaced with [`noodles`](https://github.com/zaeleus/noodles). + `noodles-cram` 0.88 uses Rust 1.88+ syntax (let-chains), which conflicts + with the project's MSRV of 1.87, so CRAM was dropped rather than bumping + the toolchain. BAM and SAM remain fully supported. CRAM can return by + raising MSRV to ≥ 1.88 and re-adding `noodles-cram`. + +### New features + +- **Native Windows builds.** `x86_64-pc-windows-msvc` is now a first-class + target. Release artifacts include `rustqc-windows-x86_64.zip` alongside + the existing `.tar.gz` archives for Linux and macOS. + +### Internal changes + +- New `src/rna/bam_io.rs` facade module centralizes the semantic differences + between `rust-htslib` and `noodles` (MAPQ=255 sentinel handling, 1-based + ↔ 0-based position conversion, aux-tag integer extraction, CIGAR op + collection, QNAME `*` fallback, 4-bit encoded-base access for sequence + hashing). `open()` auto-detects SAM vs BAM and transcodes SAM through + noodles at load time so downstream code only sees `bam::Record`. +- Build pipeline simplified: the htslib-era C dependency chain + (`hts-sys`, `openssl-sys`, `curl-sys`, `libz-sys`, `bzip2-sys`, + `lzma-sys`, `libclang`) is gone. Linux CI deps shrank from eight + system packages to two (`libfontconfig1-dev`, `pkg-config`). +- `build.rs` no longer shells out to `date`; `qualimap/report.rs` + uses `chrono::Local` for local-time formatting. These were the + last POSIX-only hold-outs blocking Windows. +- `plotters`'s `fontconfig-dlopen` feature is now gated behind + `cfg(not(windows))`. + +### Known regressions + +- Multithreaded BGZF decode (the old `bam.set_threads(n)` path) is + disabled. Large BAM throughput is lower than upstream v0.2.1 until + `noodles_bgzf::io::MultithreadedReader` is wired in; correctness is + unaffected. See `TODO(noodles-threading)` markers in + `src/rna/dupradar/counting.rs`. + +### Tests + +- All 234 unit and integration tests pass on Linux, macOS and Windows. +- `preseq lc_extrap` output is byte-identical to the pre-migration + reference (`tests/data/test.preseq_lc_extrap.txt`). + ## [Version 0.2.1](https://github.com/seqeralabs/RustQC/releases/tag/v0.2.1) - 2026-04-09 ### Bug fixes diff --git a/Cargo.lock b/Cargo.lock index 814e13c..302a8bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1169,7 +1169,7 @@ dependencies = [ [[package]] name = "rustqc" -version = "0.2.1" +version = "0.3.0" dependencies = [ "anyhow", "cc", diff --git a/Cargo.toml b/Cargo.toml index b93853c..584c055 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "rustqc" -version = "0.2.1" +version = "0.3.0" edition = "2021" rust-version = "1.87" authors = ["Phil Ewels ", "Jon Manning "] description = "Fast RNA-seq QC in a single pass: dupRadar, featureCounts, 8 RSeQC tools, preseq, samtools stats, and Qualimap — reimplemented in Rust" license = "GPL-3.0-or-later" -repository = "https://github.com/seqeralabs/RustQC" +repository = "https://github.com/AI4S-YB/RustQC" readme = "README.md" keywords = ["bioinformatics", "rna-seq", "duplication", "qc", "rseqc"] categories = ["command-line-utilities", "science"] -homepage = "https://seqeralabs.github.io/RustQC/" +homepage = "https://github.com/AI4S-YB/RustQC" exclude = ["benchmark/", "docs/", "paper/", "tests/", ".github/", "Dockerfile", ".dockerignore", ".pre-commit-config.yaml", "netlify.toml", "CONTRIBUTING.md", "AGENTS.md"] [[bin]]