Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7390687
fix: resolve 4 critical bugs in FASTA/VCF output
Paururo Mar 31, 2026
ea0942f
perf: eliminate redundant genotype storage in VariablePositionInfo
Paururo Mar 31, 2026
cd39aed
fix: resolve 7 minor issues (#9-#15)
Paururo Mar 31, 2026
90a3f92
perf: rewrite with streaming 2-pass architecture
Paururo Mar 31, 2026
968c123
fix: resolve all audit issues (score 8.2 → 9.5/10)
Paururo Mar 31, 2026
b01c540
perf: custom streaming parser — 2× faster, zero external deps for I/O
Paururo Mar 31, 2026
0351fd1
perf: restore bio parser + all optimizations — best of both worlds
Paururo Mar 31, 2026
7634bc8
fix: 6 bugs found in code audit
Paururo Mar 31, 2026
ae5151a
fix: 6 more bugs from deep audit (B7-B12)
Paururo Mar 31, 2026
d7d51df
polish: 10/10 — remove all unsafe, add error context, clean exit
Paururo Mar 31, 2026
3078730
bench: add benchmark plots and data (SNPick vs snp-sites)
Paururo Mar 31, 2026
083f522
bench: add length-scaling benchmark (50 seqs × 100K-4.4M bp)
Paururo Mar 31, 2026
b5c69c5
perf: hybrid bio+mmap architecture, 8x unrolled bitmask loop
Paururo Mar 31, 2026
5a7efc4
perf: full mmap architecture, remove bio dependency
Paururo Mar 31, 2026
4af0910
fix: multi-line FASTA support in pass 2 + error context
Paururo Mar 31, 2026
0dae40a
fix(critical): multi-line FASTA pass2 with mixed line widths
Paururo Mar 31, 2026
4b2e3c6
refactor: modular architecture — split monolith into 6 files
Paururo Mar 31, 2026
1811ad7
polish: module docs, madvise hint, 3 new tests → 10/10
Paururo Mar 31, 2026
f59d651
perf: prefault mmap pages + sequential scan ordering
Paururo Mar 31, 2026
dbe5481
perf: parallel bitmask scan with rayon
Paururo Mar 31, 2026
ac0c213
docs: rewrite README — pathotypr-style, clean nav, benchmarks
Paururo Mar 31, 2026
c42632b
docs: add bioconda downloads badge
Paururo Mar 31, 2026
fad3b9d
ci: add Build & Release workflow on PR merge to main
Paururo Mar 31, 2026
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
127 changes: 127 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: Build & Release

on:
pull_request:
branches: [ main ]
types: [ closed ]

permissions:
contents: write

env:
CARGO_TERM_COLOR: always

jobs:
# Only run if the PR was actually merged (not just closed)
release:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.tag }}
steps:
- uses: actions/checkout@v4

- name: Get version from Cargo.toml
id: version
run: |
VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
echo "📦 Version: $VERSION"

- name: Check if tag already exists
run: |
if git ls-remote --tags origin | grep -q "refs/tags/${{ steps.version.outputs.tag }}$"; then
echo "⚠️ Tag ${{ steps.version.outputs.tag }} already exists — skipping release."
echo "SKIP=true" >> "$GITHUB_ENV"
fi

# Build matrix for cross-platform binaries
build:
needs: release
if: needs.release.outputs.version != ''
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
name: snpick-linux-x86_64
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
name: snpick-linux-aarch64
- target: x86_64-apple-darwin
os: macos-13
name: snpick-macos-x86_64
- target: aarch64-apple-darwin
os: macos-14
name: snpick-macos-aarch64

runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Install cross-compilation tools (Linux aarch64)
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu

- name: Build release binary
run: cargo build --release --target ${{ matrix.target }}
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc

- name: Package binary
run: |
mkdir -p dist
cp target/${{ matrix.target }}/release/snpick dist/${{ matrix.name }}
chmod +x dist/${{ matrix.name }}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.name }}
path: dist/${{ matrix.name }}

# Create GitHub release with all binaries
publish:
needs: [release, build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: binaries

- name: List binaries
run: find binaries -type f | sort

- name: Generate checksums
run: |
cd binaries
find . -type f -name 'snpick-*' -exec sh -c '
for f; do sha256sum "$f"; done
' _ {} + | sort > ../SHA256SUMS.txt
cat ../SHA256SUMS.txt

- name: Create release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.release.outputs.tag }}
name: SNPick ${{ needs.release.outputs.tag }}
generate_release_notes: true
files: |
binaries/snpick-linux-x86_64/snpick-linux-x86_64
binaries/snpick-linux-aarch64/snpick-linux-aarch64
binaries/snpick-macos-x86_64/snpick-macos-x86_64
binaries/snpick-macos-aarch64/snpick-macos-aarch64
SHA256SUMS.txt
14 changes: 10 additions & 4 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Rust

on:
push:
branches: [ "main" ]
branches: [ "main", "1.0.1" ]
pull_request:
branches: [ "main" ]

Expand All @@ -11,12 +11,18 @@ env:

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Clippy
run: cargo clippy -- -D warnings

- name: Build
run: cargo build --verbose
- name: Run tests

- name: Test
run: cargo test --verbose

- name: Build (release)
run: cargo build --release
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
target/
test_*.fasta
test_*.vcf
*.vcf
!src/
Loading
Loading