Skip to content

Prepare 0.2.0 for public release - #50

Merged
keithlostracco merged 12 commits into
mainfrom
release-prep-0.2.0
Jul 25, 2026
Merged

Prepare 0.2.0 for public release#50
keithlostracco merged 12 commits into
mainfrom
release-prep-0.2.0

Conversation

@keithlostracco

Copy link
Copy Markdown
Contributor

Final pass over the repository before making it public, plus the two API
renames that should land before the API is frozen.

Breaking changes

Both are mechanical find-and-replace for callers:

Before After
Id::isValid() Id::is_valid()
GrabbedHandle::none GrabbedHandle::None
GrabbedHandle::in_handle GrabbedHandle::InHandle
GrabbedHandle::out_handle GrabbedHandle::OutHandle

GrabbedHandle was the only enum still lowercase after the earlier PascalCase
conversion. Version bumped to 0.2.0 accordingly.

Fixes

  • build.ps1 and build.sh ran ctest without -C, which finds no tests at
    all
    on multi-config generators such as Visual Studio. build.ps1 also
    called Pop-Location with no matching Push-Location, and the two scripts
    disagreed on whether to build the examples.
  • .gitignore matched *.cmake repository-wide, so any module added under
    cmake/ would have been silently untracked. The !anim-config.cmake.in
    negation next to it was a no-op — that filename never matched *.cmake.
  • The version was written in three files; CMakeLists.txt is now the only
    source, with the Doxygen and Sphinx configs deriving it.

Housekeeping

  • Removed examples/gl_loader.cpp — unreferenced by any build file or source
    since the examples moved to glad.
  • Replaced five if (true) blocks in curve_visualization with a table of
    curve specs, and a REQUIRE(true) placeholder assertion with static_asserts
    that actually enforce the contract.
  • Pinned the docs toolchain, which was fully unpinned and one upstream release
    away from breaking the Pages deploy. Verified against Sphinx 9.1.
  • Added CHANGELOG.md, CODE_OF_CONDUCT.md, SECURITY.md, issue and PR
    templates, and Dependabot. All reporting runs through GitHub; no email
    addresses are published.
  • Updated the workflow actions, which were several majors behind, and added
    least-privilege permissions blocks. Removed the
    FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 workaround — its cutover date has passed
    and every action now ships on Node 24.

Verification

Run locally on Windows/MSVC:

  • Clean build from a pristine clone, 70/70 tests pass
  • Both examples compile; test_anim_integration runs green
  • Docs build with zero warnings from both build_docs.sh and build_docs.ps1
  • Each commit builds independently

The action version bumps are the one thing that could not be verified locally —
CI on this PR is the real check.

Not included

Flipping the repository to public, and enabling private vulnerability reporting
(only available once public — SECURITY.md links to it).

…s to PascalCase

Brings the public API in line with the project's naming conventions:
methods are lower_snake_case, enumerators are PascalCase.

Both are breaking changes for callers, but mechanical ones:
  Id::isValid()             -> Id::is_valid()
  GrabbedHandle::none       -> GrabbedHandle::None
  GrabbedHandle::in_handle  -> GrabbedHandle::InHandle
  GrabbedHandle::out_handle -> GrabbedHandle::OutHandle

GrabbedHandle was the only enum left lowercase after the earlier
PascalCase conversion.
A hand-rolled Windows OpenGL loader left over from before the examples
moved to glad. No build file or source has referenced it since; it was
not compiled by any target.
curve_visualization built its five demo curves inside five 'if (true)'
blocks with the bodies duplicated per interpolation style. Replaced with
a table of curve specs and one loop; the curves produced are unchanged.

The 'Cannot create channel without ID' test asserted REQUIRE(true) and
explained the real check in a comment. Replaced with static_asserts that
actually enforce it: Channel must not be default-constructible, copy-
constructible, or copy-assignable.
Both scripts ran ctest without -C, which finds no tests at all on
multi-config generators such as Visual Studio, and build.ps1 called
Pop-Location with no matching Push-Location. They also disagreed on
whether to build the examples.

Both now configure out-of-source from the repository root, pass the
configuration through to both the build and ctest, and build the library
and tests only. Use examples/run_example.* for the viewer.
The '*.cmake' rule matched repository-wide, so any module added under
cmake/ would be silently untracked. The accompanying
'!anim-config.cmake.in' negation was a no-op, since that filename never
matched '*.cmake' to begin with.

Generated files are now listed by name. Out-of-source artifacts were
already covered by the build directory rules.
The version was repeated in CMakeLists.txt, docs/Doxyfile and
docs/sphinx/conf.py, so a release bump had to touch three files and
could silently drift.

project() in CMakeLists.txt is now the only place it is written.
Doxyfile reads it from $(ANIM_VERSION), which both docs build scripts
export after parsing CMakeLists.txt, and conf.py parses the same file.
Also corrects the Sphinx copyright to match LICENSE (2025-2026).
The requirements were entirely unpinned, so any upstream release could
break the Pages deploy with no change on our side.

Pinned to compatible-release ranges, verified by building the full site
cleanly against Sphinx 9.1.0, breathe 4.36.0, exhale 0.3.7 and
sphinx-rtd-theme 3.1.0. Dependabot will propose major bumps as pull
requests that CI validates.
The Id::is_valid and GrabbedHandle renames are breaking changes to the
public API, so this is a minor bump rather than a patch.
Community health files ahead of making the repository public.

Reporting runs entirely through GitHub: security issues via private
vulnerability reporting, everything else via issues. No email addresses
are published.

Changelog entries for 0.1.x are summarized retrospectively, since
history was rewritten between the v0.1.1 and v0.1.2 tags and cannot be
reconstructed commit by commit.

Dependabot covers the workflow actions and the docs toolchain. The C++
dependencies are FetchContent git tags, which it cannot parse.
The workflows pinned actions that were several majors behind
(checkout v4, cache v4, setup-python v5, the Pages actions, and
action-gh-release v2), and pulled lukka/get-cmake from a floating
@latest tag.

All are now on current versions and get-cmake is pinned. The
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 workaround is removed: it was added
for a 2026-06-02 cutover that has passed, and every action now ships on
Node 24.

ci and release gain an explicit top-level 'permissions: contents: read';
the release job keeps its own contents: write. The source archive now
includes CHANGELOG.md.
CONTRIBUTING stated only that enumerators are PascalCase, which left the
lower_snake_case method convention implicit and did not explain the
m_ prefix. Spells all three out, and asks contributors to add a
changelog entry for user-visible changes.

README now documents the PowerShell docs build script alongside the
bash one, and points at examples/run_example.* for the viewer, since the
top-level build scripts no longer build the examples.
The windows-latest image moved from windows-2025 to windows-2025-vs2026.
CMake 3.26, which the workflows pinned, has no generator for Visual
Studio 2026, so it fell back to NMake Makefiles, found no nmake, and
failed configure with CMAKE_CXX_COMPILER not set. A generator for it
first appears in CMake 4.2.

Building with CMake 4 removes compatibility with cmake_minimum_required
below 3.5, which glad 0.1.36 declares, so the examples set
CMAKE_POLICY_VERSION_MINIMUM to 3.5. That is scoped to the examples
directory: neither the library, the test suite, nor anything consuming
anim inherits it. It can go once glad is bumped.

The build cache key is namespaced by CMake version so caches written by
3.26 are not restored into a 4.4 configure.

Verified locally against CMake 4.4.0: library, tests and both examples
build, and all 70 tests pass.
@keithlostracco
keithlostracco merged commit e5ac643 into main Jul 25, 2026
5 checks passed
@keithlostracco
keithlostracco deleted the release-prep-0.2.0 branch July 25, 2026 23:08
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