Skip to content

Add release process with cross-platform binaries and Docker container#1

Merged
ewels merged 7 commits into
mainfrom
add-release-process
Feb 12, 2026
Merged

Add release process with cross-platform binaries and Docker container#1
ewels merged 7 commits into
mainfrom
add-release-process

Conversation

@adamrtalbot
Copy link
Copy Markdown
Contributor

Summary

Adds a complete release process for building and distributing duprust:

  • Release workflow (.github/workflows/release.yml) — triggered by pushing a version tag (v*)
  • CI workflow (.github/workflows/ci.yml) — runs tests, formatting, and clippy on every PR
  • Dockerfile — multi-stage build optimized for rust-htslib static linking
  • .dockerignore — keeps Docker build context lean

Release Pipeline

Pushing a tag like v0.1.0 triggers a 4-job pipeline:

Job Description
create-release Creates a draft GitHub Release
build-binaries Builds for 4 platforms (matrix), uploads tarballs + SHA256 checksums
docker Builds multi-arch Docker image, pushes to GHCR
publish-release Un-drafts the release once all builds succeed

Binary Targets

Platform Runner Method
Linux x86_64 ubuntu-latest Native build
Linux aarch64 ubuntu-latest Cross-compiled via cross
macOS x86_64 macos-13 Native (Intel runner)
macOS aarch64 macos-latest Native (Apple Silicon runner)

Docker

  • Registry: ghcr.io/ewels/duprust
  • Architectures: linux/amd64, linux/arm64
  • Tags: semver (1.2.3, 1.2, 1, latest)
  • Multi-stage Dockerfile: builds on rust:1-bookworm, runtime on debian:bookworm-slim

Usage

# Create a release
git tag v0.1.0
git push origin v0.1.0

# Pull the Docker image (once released)
docker pull ghcr.io/ewels/duprust:latest

CI Checks

Every PR now runs:

  • cargo build + cargo test --release on Ubuntu and macOS
  • cargo fmt --check
  • cargo clippy -- -D warnings

adamrtalbot and others added 7 commits February 12, 2026 18:24
- GitHub Actions release workflow triggered by version tags (v*)
- Builds binaries for Linux (x86_64, aarch64), macOS (x86_64, aarch64)
- Multi-arch Docker image published to GHCR (ghcr.io/ewels/duprust)
- CI workflow with test, fmt, and clippy checks on PRs
- Multi-stage Dockerfile optimized for rust-htslib static builds

Generated by Claude Code
- Add libfontconfig1-dev to apt-get in ci.yml, release.yml, and Dockerfile
  (required by plotters via yeslogic-fontconfig-sys)
- Run cargo fmt on all source files to pass formatting check

Generated by Claude Code
- is_multiple_of instead of manual modulo check
- Iterator enumerate instead of needless_range_loop
- allow too_many_arguments on private draw helper
- range contains instead of manual bounds check
- std::mem::take instead of drain().collect()

Generated by Claude Code
# Conflicts:
#	src/counting.rs
#	src/plots.rs
Copy link
Copy Markdown
Member

@ewels ewels left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice ✨

@ewels ewels merged commit cdb69a3 into main Feb 12, 2026
4 checks passed
@ewels ewels deleted the add-release-process branch February 12, 2026 22:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants