Repository navigation
Releases
Releases · pauldruce/RFL
v0.2.0: Decoupled Dependencies, Canonical Layout & Native Windows Wheels
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
FetchContentconsumers (#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, andmise(#55). - Expanded Example Workflows: Adds CMake integration, standalone
Makefiletargets, and directg++compilation workflows across example directories (#55). - Native Windows MSVC Support: Compiles natively under MSVC on Windows and publishes precompiled
win_amd64wheels 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
cibuildwheelv4 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
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
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_amd64wheels 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
cibuildwheelv4 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
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 userfl_core(or the namespaced aliasesRFL::core/RFL::rfl). - Legacy Target Archival: Historical simulation code is archived under
legacy/(targetrfl_legacy, aliasRFL::legacy). - CMake Integration: Projects consuming RFL via CMake should link
RFL::coreusingtarget_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(andRFL::rfl) forFetchContentand modular builds. - Source Layout Standardisation: Promoted modern C++ library to
src/RFL/core(rfl_core) and archived historical code tosrc/RFL/legacy(rfl_legacy).
2. Packaging & Distribution
- Implemented
cibuildwheelbuild configuration insrc/RFL/pyproject.toml. - Automated dynamic library vendoring (
openblas,gsl,armadillo) inside wheels usingauditwheel(Linux) anddelocate(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
carmaheader library intopybind11extension 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
- Published EP-1: Research-Driven Architecture Modernisation.
- Published EP-2: Multi-Platform Package and Binary Distribution.
- Created canonical ep-template.md and release-note-template.md.
- Standardised technical documentation, docstrings, and comments using ASD-STE100 and British English.
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.