Skip to content

Releases

v0.2.0: Decoupled Dependencies, Canonical Layout & Native Windows Wheels

Choose a tag to compare

@pauldruce pauldruce released this 18 Sep 14:10
d5cb74b

Highlights & Breaking Changes

  • Canonical Root Packaging & Downstream Isolation: Relocates build manifests and directories to the repository root. Isolates internal test targets and GoogleTest from downstream FetchContent consumers (#54, #55).
  • AddressSanitizer Gating & Optimisation: Replaces unconditional ASan flags with RFL_ENABLE_ASAN, eliminating symbol pollution in static libraries and accelerating test execution (#47, #55).
  • Streamlined Build Architecture & Please Removal: Removes obsolete Please build manifests in favour of CMake, scikit-build-core, and mise (#55).
  • Expanded Example Workflows: Adds CMake integration, standalone Makefile targets, and direct g++ compilation workflows across example directories (#55).
  • Native Windows MSVC Support: Compiles natively under MSVC on Windows and publishes precompiled win_amd64 wheels to PyPI (#21, #48, #50).
  • Dependency Decoupling with FetchContent: CMake automatically fetches Armadillo when missing from the system (#22, #43).
  • Resource-Efficient CI Pipeline: Introduces job-level path filtering, compiler caching (ccache), and tiered PR smoke tests to cut compute time (#42).
  • Release Automation & Integrity Gates: Enforces dynamic Git tag versioning, PR milestone verification, documentation link checking, and changelog release gates (#51).
  • Breaking Change (Python 3.8): Dropped Python 3.8 support to align with cibuildwheel v4 and active scientific Python baselines (#40).

🚀 Features & Enhancements

  • feat(examples): add CMake and standalone Makefile workflows with comprehensive documentation by @pauldruce in #55
  • feat(ci,cmake): implement native Windows support and Python wheels (#21) by @pauldruce in #48
  • feat(cmake,ci): decouple dependencies using FetchContent and unify CI workflows (#22) by @pauldruce in #43
  • feat(ci,release): dynamic versioning, changelog automation, and release integrity gates by @pauldruce in #51
  • feat(packaging): dynamic PEP 440 pre-release versioning for PyPI release candidates by @pauldruce in #41

🐛 Bug Fixes

  • fix(cmake): migrate CMakeLists.txt and pyproject.toml to root, standardise source layout in src/core, and isolate downstream consumer test targets (#54) by @pauldruce in #55
  • fix(cmake): gate AddressSanitizer behind RFL_ENABLE_ASAN to prevent static library symbol leakage (#47) by @pauldruce in #55
  • fix(ci,windows): install lapack in vcpkg and isolate armadillo cache keys by @pauldruce in #50
  • fix(ci,cmake): support legacy dependencies under CMake 4.x and declutter step summary by @pauldruce in #44
  • fix(ci): bump actions to Node 24 runtimes to eliminate deprecation warnings by @pauldruce in #45

🧰 Build & CI/CD Architecture

  • release(tooling): establish pre-release qualification suite, isolate example outputs, and harden changelog verification by @pauldruce in #63
  • chore(build): remove obsolete Please build system and enforce repository-wide CSpell checks by @pauldruce in #55
  • fix(ci,release): improve changelog PR detection and self-reference release PRs by @pauldruce in #53
  • chore(release): prepare v0.2.0 release and CHANGELOG.md by @pauldruce in #52
  • ci(deps): bump actions/setup-python from 5 to 7 in the github-actions group across 1 directory by @dependabot[bot] in #61
  • ci(deps): bump the github-actions group with 7 updates by @dependabot[bot] in #37

📚 Documentation & Governance

  • docs: document example workflows, migrate active backlog tasks to GitHub issues, and remove obsolete v0.1.0 release document (#57, #58, #59, #60) by @pauldruce in #55
  • docs(eps): add EP-3 for resource-efficient CI/CD pipeline & modern build architecture by @pauldruce in #42
  • docs: post-v0.1.0 release updates, README overhaul, and PyPI metadata by @pauldruce in #39

Full Changelog: v0.1.0...v0.2.0

v0.2.0rc2

v0.2.0rc2 Pre-release
Pre-release

Choose a tag to compare

@pauldruce pauldruce released this 15 Sep 22:36
46213a4

Release candidate 2 for v0.2.0 incorporating canonical root layout, example workflows, Please removal, and CodeQL enhancements.

Highlights

  • Canonical Root Packaging: Relocates build manifests and directories to the repository root. Isolates internal test targets and GoogleTest from downstream FetchContent consumers (#54, #55).
  • AddressSanitizer Gating: Replaces unconditional ASan flags with RFL_ENABLE_ASAN, eliminating symbol pollution in static libraries (#47, #55).
  • Streamlined Build Architecture: Removes Please build manifests in favour of CMake, scikit-build-core, and mise (#55).
  • Expanded Example Workflows: Adds CMake integration, standalone Makefile targets, and direct g++ compilation workflows across example directories (#55).
  • CI & CodeQL Enhancements: Resolved CodeQL configure deadlocks and enhanced verify_changelog.py to exempt automated dependency updates (#55, #61).
  • Native Windows MSVC Support: Compiles natively under MSVC on Windows and publishes precompiled win_amd64 wheels to PyPI (#21, #48, #50).

v0.2.0rc1: Release Candidate 1

Pre-release

Choose a tag to compare

@pauldruce pauldruce released this 13 Sep 13:01
5d7a8a1

Release Candidate 1 for v0.2.0

This release candidate verifies dynamic versioning, native Windows MSVC wheels, CMake FetchContent decoupling, and automated PyPI pre-release publishing.

Highlights & Breaking Changes

  • Native Windows MSVC Support: Compiles natively under MSVC on Windows and publishes precompiled win_amd64 wheels to PyPI (#21, #48, #50).
  • Dependency Decoupling with FetchContent: CMake automatically fetches Armadillo when missing from the system (#22, #43).
  • Resource-Efficient CI Pipeline: Introduces job-level path filtering, compiler caching (ccache), and tiered PR smoke tests to cut compute time (#42).
  • Release Automation & Integrity Gates: Enforces dynamic Git tag versioning, PR milestone verification, documentation link checking, and changelog release gates (#51).
  • Breaking Change (Python 3.8): Dropped Python 3.8 support to align with cibuildwheel v4 and active scientific Python baselines (#40).

🚀 Features & Enhancements

  • feat(ci,cmake): implement native Windows support and Python wheels (#21) by @pauldruce in #48
  • feat(cmake,ci): decouple dependencies using FetchContent and unify CI workflows (#22) by @pauldruce in #43
  • feat(ci,release): dynamic versioning, changelog automation, and release integrity gates by @pauldruce in #51
  • feat(packaging): dynamic PEP 440 pre-release versioning for PyPI release candidates by @pauldruce in #41

🐛 Bug Fixes

  • fix(ci,windows): install lapack in vcpkg and isolate armadillo cache keys by @pauldruce in #50
  • fix(ci,cmake): support legacy dependencies under CMake 4.x and declutter step summary by @pauldruce in #44
  • fix(ci): bump actions to Node 24 runtimes to eliminate deprecation warnings by @pauldruce in #45

🧰 Build & CI/CD Architecture

  • fix(ci,release): improve changelog PR detection and self-reference release PRs by @pauldruce in #53
  • chore(release): prepare v0.2.0 release and CHANGELOG.md by @pauldruce in #52
  • ci(deps): bump the github-actions group with 7 updates by @dependabot[bot] in #37

📚 Documentation & Governance

  • docs(eps): add EP-3 for resource-efficient CI/CD pipeline & modern build architecture by @pauldruce in #42
  • docs: post-v0.1.0 release updates, README overhaul, and PyPI metadata by @pauldruce in #39

Full Changelog: v0.1.0...v0.2.0rc1

v0.1.0: Packaging & Core Architecture Modernisation

Choose a tag to compare

@pauldruce pauldruce released this 02 Sep 19:40
b2859cc

RFL v0.1.0 Release Notes

Warning

Initial Package Release (Beta Phase)

RFL version 0.1.0 is the initial packaged release (v0.y.z). It establishes the canonical CMake target names and modernised library layout:

  • Directory & Target Restructuring: The modern C++ library is located in core/. Target references use rfl_core (or the namespaced aliases RFL::core / RFL::rfl).
  • Legacy Target Archival: Historical simulation code is archived under legacy/ (target rfl_legacy, alias RFL::legacy).
  • CMake Integration: Projects consuming RFL via CMake should link RFL::core using target_link_libraries(<target> PRIVATE RFL::core).

RFL version 0.1.0 introduces automated multi-platform Python wheel packaging, zero-copy NumPy matrix interoperability, CMake FetchContent target exports, and a restructured source layout.


1. Highlights

  • PyPI Binary Wheels: Precompiled wheels for Linux (manylinux_2_28_x86_64) and macOS (x86_64, arm64) across Python 3.8 to 3.13 (pip install pyrfl).
  • Zero-Copy NumPy Interoperability: Native bidirectional memory mapping between Armadillo complex matrices (arma::cx_mat) and NumPy arrays (numpy.ndarray) via Carma.
  • CMake In-Tree Targets: Exported namespaced alias RFL::core (and RFL::rfl) for FetchContent and modular builds.
  • Source Layout Standardisation: Promoted modern C++ library to src/RFL/core (rfl_core) and archived historical code to src/RFL/legacy (rfl_legacy).

2. Packaging & Distribution

  • Implemented cibuildwheel build configuration in src/RFL/pyproject.toml.
  • Automated dynamic library vendoring (openblas, gsl, armadillo) inside wheels using auditwheel (Linux) and delocate (macOS).
  • Configured automated PyPI publishing on release publication via OpenID Connect (OIDC) Trusted Publishing.
  • Added source distribution (sdist) generation and automated release asset bundling.

3. Python Bindings & Performance

  • Integrated carma header library into pybind11 extension module.
  • Enabled direct extraction of Dirac operator eigenvalue spectra without intermediate array duplication.
  • Preserved hermetic build support with Please (pleasew) and standard CMake.

4. Documentation & Governance


5. Compatibility & Requirements

Precompiled Python Wheels

  • Linux (x86_64): manylinux_2_28 (glibc ≥ 2.28, Python 3.8–3.13).
  • macOS Apple Silicon (arm64): macOS ≥ 14.0 Sonoma (Python 3.8–3.13).
  • macOS Intel (x86_64): macOS ≥ 15.0 Sequoia (Python 3.8–3.13).

C++ Core & CMake Integration

  • C++ Standard: C++17 conforming compiler (GCC ≥ 10, Clang ≥ 11, Apple Clang ≥ 13, MSVC ≥ 2019).
  • Linear Algebra: Armadillo ≥ 11.4.0, OpenBLAS / LAPACK.
  • Stochastic Engine: GNU Scientific Library (GSL) ≥ 2.6.
  • Build System: CMake ≥ 3.20.