Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
55c13e2
chore: prepare build for public release
keithlostracco Jul 26, 2026
da1a519
deps: update anim to v0.3.0
keithlostracco Jul 26, 2026
48866e7
test: add a standalone pytest suite for the Python bindings
keithlostracco Jul 26, 2026
c2885c0
chore: update keyframer and widgets modules for improved functionalit…
keithlostracco Jul 26, 2026
6c15919
docs: document keyframe value semantics and add channel[i] = kf
keithlostracco Jul 26, 2026
cd163b6
test: add the TouchDesigner integration harness
keithlostracco Jul 26, 2026
7c4e3bb
fix: correct output sample counts and two parameter defaults
keithlostracco Jul 26, 2026
d193838
docs: add licensing, README and contributor docs; open up CI
keithlostracco Jul 26, 2026
48e62d7
feat: persist animations into the .toe
keithlostracco Jul 26, 2026
835de01
deps: follow anim to half-open rate sampling
keithlostracco Jul 26, 2026
16e64e5
feat: expose RangeEnd, and cover AnimationViewCHOP in the TD suite
keithlostracco Jul 26, 2026
f2544ac
chore: commit the wired test project and the keyframer import fix
keithlostracco Jul 26, 2026
d4d8845
test: scan the cooked output for NaN (issue #15)
keithlostracco Jul 26, 2026
38d3308
fix: write every declared sample of the cooked output
keithlostracco Jul 26, 2026
96f217c
deps: update anim to v0.4.0
keithlostracco Jul 27, 2026
29a1c12
ci: use a CMake that knows Visual Studio 2026
keithlostracco Jul 27, 2026
65fcee6
ci: refuse a release tag that is not on main
keithlostracco Jul 27, 2026
753872c
ci: check the CHANGELOG covers the declared version
keithlostracco Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,11 @@
# Auto detect text files and perform LF normalization
* text=auto

# Shell scripts must keep LF even when checked out on Windows -- a CRLF shebang
# line makes them unrunnable on macOS/Linux.
*.sh text eol=lf

# TouchDesigner project and component files are binary; never touch line endings
# or try to merge them.
*.toe binary
*.tox binary
142 changes: 79 additions & 63 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,94 +7,110 @@ on:
branches: [ main, develop ]

jobs:
# release.yml takes its release body from the CHANGELOG section matching the
# tag, and refuses to publish if there is none. That check only ever runs on a
# tag, which is the worst moment to find the section missing or renamed. Run
# the same extraction on every push instead.
#
# The version comes from CMakeLists.txt rather than a tag, so this also keeps
# the declared project version and the CHANGELOG from drifting apart -- they
# were out of step before 0.4.0, the build claiming 1.0.0 while the tags were
# 0.3.x.
changelog:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4

- name: Check the CHANGELOG covers the declared version
run: |
version=$(sed -n 's/^project(AnimationCHOP VERSION \([0-9][0-9.]*\).*/\1/p' CMakeLists.txt)
if [ -z "$version" ]; then
echo "::error::Could not read the project version from CMakeLists.txt." >&2
exit 1
fi
echo "Project version: $version"

# The same extraction release.yml uses, matching the heading by prefix
# rather than by regex -- a version interpolated into one turns [0.4.0]
# into a character class.
awk -v head="## [$version]" '
index($0, head) == 1 { found = 1; next }
found && index($0, "## [") == 1 { exit }
found && /^\[.*\]: / { exit }
found && index($0, "<!--") == 1 { exit }
found { print }
' CHANGELOG.md \
| sed -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;};/\n$/ba' > RELEASE_NOTES.md

if [ ! -s RELEASE_NOTES.md ]; then
echo "::error::CHANGELOG.md has no '## [$version]' section, or it is empty. Add one before releasing $version." >&2
exit 1
fi
echo "Release notes for $version would be $(wc -l < RELEASE_NOTES.md) lines:"
cat RELEASE_NOTES.md

build:
strategy:
fail-fast: false
matrix:
os: [windows-latest, macos-latest]
build_type: [Release]

runs-on: ${{ matrix.os }}

steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ vars.AUTH_PULL_REPO_ID }}
private-key: ${{ secrets.AUTH_PULL_REPO_SECRET }}
owner: Actualize-Interactive
repositories: AnimationCHOP,anim

steps:
# anim is a public submodule, so the default checkout token is enough --
# no app token needed.
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ steps.generate-token.outputs.token }}

# CMake 3.25 predates Visual Studio 2026, which windows-latest now ships
# (runner image windows-2025-vs2026). With no generator for it, CMake finds
# no Visual Studio instance, silently falls back to NMake Makefiles, and
# then fails with CMAKE_CXX_COMPILER not set. This is the version anim
# builds with, on the same images.
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.25'

- name: Setup Python (Windows)
if: runner.os == 'Windows'
uses: actions/setup-python@v4
uses: lukka/get-cmake@v4.4.0
with:
python-version: '3.11'

- name: Setup Python (macOS)
if: runner.os == 'macOS'
uses: actions/setup-python@v4
cmakeVersion: '4.4.0'

# uv provides the Python 3.11 that runs pytest. The operators themselves
# build against the vendored headers (Windows) or TouchDesigner's framework
# (macOS), not this interpreter.
- name: Setup uv
uses: astral-sh/setup-uv@v5

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Configure CMake (Windows)
if: runner.os == 'Windows'
run: |
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}

- name: Configure CMake (macOS)
if: runner.os == 'macOS'
run: |
mkdir build
cd build
# Find Python and set CMAKE variables
python3-config --cflags
python3-config --ldflags
cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}

- name: Build project (Windows)
if: runner.os == 'Windows'
run: |
cd build
cmake --build . --config ${{ matrix.build_type }}
echo "Listing build outputs:"
dir bin

- name: Build project (macOS)
if: runner.os == 'macOS'
run: |
cd build
cmake --build . --config ${{ matrix.build_type }}
echo "Listing build outputs:"
ls -la bin/


- name: Configure
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DANIMATIONCHOP_BUILD_TESTS=ON

- name: Build
run: cmake --build build --config ${{ matrix.build_type }}

- name: Test
run: ctest --test-dir build --build-config ${{ matrix.build_type }} --output-on-failure

- name: Upload build artifacts (Windows)
if: runner.os == 'Windows'
uses: actions/upload-artifact@v4
with:
name: AnimationCHOPs-windows-${{ matrix.build_type }}
path: |
build/bin/Release/AnimationCHOP.dll
build/bin/Release/AnimationViewCHOP.dll
build/bin/${{ matrix.build_type }}/AnimationCHOP.dll
build/bin/${{ matrix.build_type }}/AnimationViewCHOP.dll

- name: Upload build artifacts (macOS)
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
with:
name: AnimationCHOPs-macos-${{ matrix.build_type }}
path: |
build/bin/AnimationCHOP.dylib
build/bin/AnimationViewCHOP.dylib
build/bin/AnimationCHOP.plugin
build/bin/AnimationViewCHOP.plugin
41 changes: 0 additions & 41 deletions .github/workflows/copilot-setup-steps.yml

This file was deleted.

Loading
Loading