.. _release-guide: Release Guide ============= This document describes the steps for making a new SeQuant release. Version Numbering ----------------- SeQuant uses `semantic versioning `_: ``MAJOR.MINOR.MICRO`` with an optional prerelease identifier (e.g., ``alpha.1``, ``beta.2``, ``rc.1``). The canonical version is defined in the top-level ``CMakeLists.txt`` and propagated automatically to all other locations via CMake template substitution. Files to Update --------------- Only **two files** require manual version updates: 1. **CMakeLists.txt** (lines ~37--40) — the source of truth: .. code-block:: cmake set(SEQUANT_MAJOR_VERSION 2) set(SEQUANT_MINOR_VERSION 3) set(SEQUANT_MICRO_VERSION 0) set(SEQUANT_PRERELEASE_ID ) Clear ``SEQUANT_PRERELEASE_ID`` for a final release, or set it to e.g. ``alpha.1`` for a pre-release. 2. **CITATION.cff** (lines ~5--6): .. code-block:: yaml version: 2.3.0 date-released: 2026-03-15 Update both the version string and the release date. Auto-populated Files (no manual edits needed) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The following files use ``@SEQUANT_VERSION@`` (or similar) placeholders that CMake fills in at configure time: - ``SeQuant/version.hpp.in`` — C++ version macros - ``cmake/sequant-config.cmake.in`` — installed CMake package config - ``doc/.doxygen/Doxyfile.in`` — Doxygen project number - ``doc/.sphinx/conf.py.in`` — Sphinx docs version Release Checklist ----------------- 1. **Create a release branch** (if not already on one), e.g. the 2.3.Z releases would live on the v2.3.x branch: .. code-block:: bash git checkout -b vX.Y.x master 2. **Bump versions** in ``CMakeLists.txt`` and ``CITATION.cff`` as described above. 3. **Commit the version bump**: .. code-block:: bash git add CMakeLists.txt CITATION.cff git commit -m "bump version to X.Y.Z" 4. **Verify the build** — ensure the project configures, builds, and tests pass: .. code-block:: bash cmake -B build -S . cmake --build build ctest --test-dir build 5. **Tag the release**: .. code-block:: bash git tag -a vX.Y.Z -m "SeQuant X.Y.Z" 6. **Push the branch and tag**: .. code-block:: bash git push origin vX.Y.Z git push origin --tags 7. **Create a GitHub release** from the tag at `github.com/ValeevGroup/SeQuant/releases `_. Use the auto-generated release notes as a starting point. 8. **Post-release**: on ``master``, bump the version to the next development pre-release (e.g., ``X.Y+1.0`` with ``SEQUANT_PRERELEASE_ID`` set to ``alpha``) and update ``CITATION.cff`` accordingly.