Skip to content

Prepare 0.4.0 for public release - #13

Merged
keithlostracco merged 1 commit into
mainfrom
prep/public-release-0.4.0
Jul 26, 2026
Merged

Prepare 0.4.0 for public release#13
keithlostracco merged 1 commit into
mainfrom
prep/public-release-0.4.0

Conversation

@keithlostracco

Copy link
Copy Markdown
Contributor

What does this change?

Everything outstanding before the repository is flipped public, plus one real bug.

Crash fix. execute() reported an event-loop initialization failure by calling strcmp on m_warning, but only one of the seven failure paths in initializeAsyncio() sets it — the other six set m_error and leave m_warning null. So any genuine failure (asyncio failing to import, the loop failing to construct) dereferenced a null pointer inside TouchDesigner instead of showing the error. Those six paths already log themselves, so only the remaining one needs surfacing here.

Versioning. project(VERSION) was 1.0.0 while releases were tagged v0.x, so the macOS bundle reported a version matching no release. Now 0.4.0. Also sets MACOSX_BUNDLE_BUNDLE_NAME, which Info.plist.in substitutes but CMake was never given — CFBundleName shipped empty.

Release pipeline. Releases are now cut by pushing a v*.*.* tag rather than by publishing in the GitHub UI. The workflow builds, tests, and packages on both platforms before publishing anything — the release build previously ran no tests at all — refuses a tag that is not an ancestor of main, and takes its notes from the CHANGELOG.md entry for that tag. This matches the shape used in anim.

Both workflows now declare least-privilege permissions, pin the same toolchain as the other repositories (lukka/get-cmake@v4.4.0), and drop the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 workaround — that cutover was 2026-06-02.

Community material. CHANGELOG.md (with retrospective entries back to 0.1.0), issue forms, a pull request template, and Dependabot coverage for the workflow actions and the pytest requirements.

Docs. Install-from-release instructions, including clearing the quarantine attribute on macOS; the plugin registry API (set_plugin, get_plugin, has_plugin, del_plugin, clear_plugins) and get_callback_count, all exposed but never documented; and corrected debug sections in README.md and TESTING.md, which described an output that does not exist and a parameter under the wrong name.

Why?

The repository is still private and was one merged PR short of publication. The crash was the only item that had to be fixed before strangers run this.

How was it tested?

  • cmake --workflow --preset dev — 16/16 passing.
  • Verified CMake 4.4.0 configures, builds, and passes the suite before switching the workflows to it. toml11 v3.8.1 emits only a deprecation warning under CMake 4.
  • Dry-ran the release-notes awk extraction against the new 0.4.0 changelog entry.
  • All workflow and issue-template YAML parsed.
  • CI on this PR is the first live run of the rewritten workflows.

Deliberate deviation from anim

No build cache step. Its payoff in anim is GLFW/ImGui/ImPlot; here it would cache a CMakeCache.txt holding a setup-python path that changes with every 3.11.x patch — a stale-cache failure for no real gain.

Breaking changes

None. No operator parameter names or Python API signatures changed.

Follow-ups (not in this PR)

After merge: tag v0.4.0 on the merge commit to exercise the new release path, flip the repository public, then set the description and topics and enable private vulnerability reporting, Dependabot alerts, and secret scanning — none of which can be enabled while the repository is private.

Fix a null-pointer crash on the event loop's initialization failure path.
execute() reported the failure by calling strcmp on m_warning, but only one
of the seven failure paths in initializeAsyncio() sets it -- the rest set
m_error and leave m_warning null. Any real failure, such as asyncio failing
to import, dereferenced null inside TouchDesigner instead of showing the
error. Those paths already log themselves, so only the remaining one needs
surfacing here.

Also fix the empty CFBundleName in the macOS bundle (Info.plist.in
substitutes MACOSX_BUNDLE_BUNDLE_NAME, which CMake was never given) and set
the project version to 0.4.0, so the bundle stops reporting a 1.0.0 that
corresponds to no release.

Cut releases by pushing a v*.*.* tag rather than by publishing in the GitHub
UI. The workflow now builds, tests, and packages on both platforms before
anything is published -- the release build previously ran no tests at all --
refuses a tag that is not an ancestor of main, and takes its notes from the
CHANGELOG entry for the tag. Both workflows declare least-privilege
permissions and pin the same toolchain as the other repositories. Drop the
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 workaround; that cutover has passed.

Add the material a public repository needs: a changelog, issue forms, a pull
request template, and Dependabot coverage for the workflow actions and the
pytest requirements. Document installing a release build without compiling,
including clearing the quarantine attribute on macOS, and document the
plugin registry API, which was exposed but never written up. Correct the
debug sections in README.md and TESTING.md, which described an output that
does not exist and a parameter under the wrong name.
@keithlostracco
keithlostracco merged commit 2d99b30 into main Jul 26, 2026
2 checks passed
@keithlostracco
keithlostracco deleted the prep/public-release-0.4.0 branch July 26, 2026 23:35
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