Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 14 additions & 20 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
53 changes: 53 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
[package]
name = "rustqc"
version = "0.2.1"
version = "0.3.0"
edition = "2021"
rust-version = "1.87"
authors = ["Phil Ewels <phil.ewels@seqera.io>", "Jon Manning <jonathan.manning@seqera.io>"]
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]]
Expand Down