Skip to content

Cmake improvements versioning release#200

Merged
caitlinross merged 6 commits into
ROSS-org:masterfrom
caitlinross:cmake-improvements-versioning-release
May 22, 2026
Merged

Cmake improvements versioning release#200
caitlinross merged 6 commits into
ROSS-org:masterfrom
caitlinross:cmake-improvements-versioning-release

Conversation

@caitlinross
Copy link
Copy Markdown
Member

@caitlinross caitlinross commented May 22, 2026

Starting improvements in CMake and formalizing a release-process infrastructure that the rest of the modernization will use.

CMake minimum bumped to 3.16

cmake_minimum_required moves from 3.5 (2016) to 3.16 (late 2019). 3.5 predates a lot of the modern target/install/export machinery the rest of the modernization plan uses. 3.16 ships with Ubuntu 20.04, RHEL 9, and is a reasonable floor for current HPC environments.

Versioning sourced from a tracked .version file

The project version is now read from .version at the repo root rather than from git describe. Previously, git describe returned sentinels (GITDIR-NOTFOUND, etc.) for tarball downloads, shallow clones, and no-tag builds, and the version-parsing regex would silently produce empty strings. With .version as the source of truth, tarball downloads from GitHub now report the correct release version. git describe is still consulted, but only to enrich the runtime ROSS_VERSION string with a -N-g<sha>-dirty suffix on developer builds.

Formal release process and changelog

Added Documentation/RELEASE_PROCESS.md documenting the release workflow end-to-end: how to cut a release, what gets tagged, what gets pushed where. Previously this was tribal knowledge and happened by tagging master with release notes written ad hoc on GitHub.

Also added a changelog-fragment system:

  • CHANGELOG.md at repo root accumulates per-release notes
  • Documentation/dev/ holds per-PR fragment files named <slug>.<category>.md (categories: feature, bugfix, removal, build, misc; breaking changes marked inline with **[Breaking]**)
  • scripts/compile-changelog.sh compiles pending fragments into a new CHANGELOG section at release time

Two main wins: zero merge conflicts on changelog entries (each PR writes its own file(s)), and release notes become a review artifact rather than something written hastily at tag time. Fragments for PRs #197 and #198 are included retroactively so the v9.0.0 release notes will be complete.

The PR template (.github/PULL_REQUEST_TEMPLATE.md) is also refreshed: TravisCI references gone, changelog-fragment requirement added.


Checklist

  • Builds cleanly with -Wall and -Wextra
  • CI is green
  • Added a changelog fragment under Documentation/dev/, unless the change is invisible to anyone outside the PR (test refactors, internal renames, comment-only tweaks)
  • Confirmed nothing in CODES breaks. Build CODES against this branch's installed ROSS
  • For new features: blog post on the ROSS website, with link in this PR

@codecov
Copy link
Copy Markdown

codecov Bot commented May 22, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 47.86%. Comparing base (ad2198d) to head (b120905).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #200   +/-   ##
=======================================
  Coverage   47.86%   47.86%           
=======================================
  Files          37       37           
  Lines        4745     4745           
  Branches      857      857           
=======================================
  Hits         2271     2271           
  Misses       2469     2469           
  Partials        5        5           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Bumps the top-level cmake_minimum_required from 3.5 to 3.16, needed
for modern install/export machinery used
in later phases of the CMake modernization plan.

Replaces PROJECT(ROSS_TOP C) with a modern project(ross VERSION ...
DESCRIPTION ... HOMEPAGE_URL ... LANGUAGES C) call. The version is
parsed from git_describe_working_tree, which now runs at top level
before project() rather than inside core/.

Adds a regex-guarded fallback to 0.0.0 with a WARNING when
git-describe cannot produce a numeric version (tarball / shallow
clone / no-tag builds) — project(VERSION ...) errors on malformed
input rather than no-op'ing the way the old string(REGEX REPLACE)
calls did.
Improve the versioning process so that we have a .version file that will
be updated at release time.
We will start following a more formal release process as well as
providing a way for developers to add info on changes that should go in
release notes, making it easier to write these notes for the future.
@caitlinross caitlinross force-pushed the cmake-improvements-versioning-release branch from 5b3a2cd to b120905 Compare May 22, 2026 21:42
@caitlinross caitlinross merged commit a7f15a7 into ROSS-org:master May 22, 2026
4 checks passed
@caitlinross caitlinross deleted the cmake-improvements-versioning-release branch May 22, 2026 22:34
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.

1 participant