dancerudiments 0.2.0__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.gitattributes +4 -0
- dancerudiments-0.2.3/.github/workflows/nuget-verify.yml +40 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/release.yml +10 -5
- dancerudiments-0.2.3/CHANGELOG.md +19 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/CMakeLists.txt +3 -3
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/PKG-INFO +10 -2
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/README.md +7 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/DanceRudiments.csproj +4 -2
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/README.md +4 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/conanfile.py +1 -1
- dancerudiments-0.2.3/docs/branding/README.md +13 -0
- dancerudiments-0.2.3/docs/branding/logo-monochrome.svg +6 -0
- dancerudiments-0.2.3/docs/branding/logo.png +0 -0
- dancerudiments-0.2.3/docs/branding/logo.svg +6 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/csharp.md +5 -1
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/index.html +1 -1
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/package-lock.json +2 -2
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/package.json +4 -3
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/packaging/CPP_BINARY_README.md +4 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/pyproject.toml +4 -3
- dancerudiments-0.2.3/tests/csharp/packaging/test_publish_verification.py +33 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_package_docs.py +9 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/check_package_docs.py +7 -1
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/csharp_package.py +10 -4
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/ci.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/csharp.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/demo-release.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/initial-collection.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/patterns.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/release-tag.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.github/workflows/visualizer.yml +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/.gitignore +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/AUTHORS.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/LICENSE +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/.gitignore +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/NativeMethods.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/Offset3.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/PatternDefinition.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/PatternLibrary.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/Rudiments.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/native/CMakeLists.txt +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/native/c_api.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/platforms.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/python/module.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/typescript/defaults.ts +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/typescript/index.ts +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/typescript/wasm.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/cmake/DanceRudimentsConfig.cmake.in +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/atlas/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/atlas/atlas.score.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/atlas/definitions.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/atlas/manifest.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/club/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/club/club.score.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/club/definitions.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/club/manifest.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/club/rhythms.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/club/sources.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/continuum/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/continuum/continuum.score.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/continuum/definitions.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/continuum/manifest.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/dancefloor/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/dancefloor/definitions.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/dancefloor/manifest.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/dancefloor/recipes.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/dancefloor/rhythms.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/dancefloor/sources.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/defaults.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/expansion/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/expansion/definitions.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/expansion/expansion.score.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/expansion/manifest.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/THIRD_PARTY_NOTICES.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/definitions.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/initial.score.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/manifest.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/preview_data.inc +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/preview_sampler.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/preview_wasm.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/sources/akwf/AKWF_0001_256.h +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/sources/akwf/AKWF_0010_256.h +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/sources/akwf/AKWF_R_asym_saw_05_256.h +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/sources/akwf/AKWF_R_asym_saw_15_256.h +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/sources/d3-ease/LICENSE +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/collections/initial/sources/groove/1_funk_80_beat_4-4.mid.b64 +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/authoring.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/bindings.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/ci-reproducibility.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/dancefloor.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/default-library.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/images/capture.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/images/visualizer-amen-desktop.png +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/images/visualizer-midi-score.png +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/images/visualizer-mobile.png +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/midi-harness.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/release-demo.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/docs/troubleshooting.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/README.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/cpp/CMakeLists.txt +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/cpp/main.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/csharp/.gitignore +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/csharp/Program.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/csharp/Quickstart.csproj +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/javascript/node.mjs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/pulse.score.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/python/quickstart.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/python/sample_motion.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/typescript/.gitignore +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/typescript/app.ts +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/typescript/index.html +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/typescript/tsconfig.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/bindings/typescript/wasm.d.ts +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/examples/patterns/starter.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/app.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/beats.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/dancerudiments.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/index.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/initial/app.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/initial/style.css +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/initial/template.html +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/initial-collection.html +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/harness/style.css +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/c_api.h +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/collections/atlas.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/collections/club.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/collections/continuum.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/collections/dancefloor.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/collections/expansion.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/collections/initial.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/dance_rudiments.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/detail/default_includes.inc +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/detail/default_registry.inc +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/include/dancerudiments/sampled_pattern.hpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/__init__.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/__main__.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/_reproducibility.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/_validation.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/cli.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/collections.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/compiler.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/curves.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/events.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/initial_sources.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/io.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/model.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/THIRD_PARTY_NOTICES.md +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/atlas.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/club.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/continuum.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/dancefloor.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/expansion.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/python/dancerudiments_authoring/packs/initial.json +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/release_version-v3.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/src/dance_rudiments.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/src/sampled_pattern.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/browser/test_initial_gallery.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/consumer/CMakeLists.txt +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/consumer/main.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_c_api.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_club.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_continuum.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_dancefloor.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_default_registration.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_initial_collection.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_main.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/cpp/test_sampled_pattern.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/csharp/.gitignore +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/csharp/DanceRudiments.Tests.csproj +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/csharp/Program.cs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/csharp/packaging/test_packaging.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_atlas.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_authoring.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_club.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_continuum.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_dancefloor.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_defaults.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_expansion.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_harness_beats.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_initial_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_native.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_release_demo_compact.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_release_version.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/python/test_reproducibility.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/typescript/beat-player.test.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/typescript/defaults.test.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/typescript/initial-wasm.test.mjs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/typescript/patterns.test.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/typescript/runtime.test.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tests/typescript/wasm-smoke.mjs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_atlas_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_club_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_club_demo.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_continuum_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_dancefloor_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_dancefloor_demo.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_default_catalogue.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_expansion_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_harness.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/build_initial_collection.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/capture_readme_screenshots.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/check_release_version.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/club_demo_assets/app.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/club_demo_assets/style.css +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/club_demo_assets/template.html +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/compile_patterns.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/dancefloor_demo_assets/app.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/dancefloor_demo_assets/style.css +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/dancefloor_demo_assets/template.html +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/export_default_catalogue.cpp +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/export_harness_midi.mjs +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/harness_beats.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/release_demo.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/release_demo_assets/app.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/release_demo_assets/beat_player.js +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/release_demo_assets/style.css +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/release_demo_assets/template.html +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/release_version.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/render_club_demo.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/render_dancefloor_demo.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/render_release_demo.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tools/test_midi_harness.py +0 -0
- {dancerudiments-0.2.0 → dancerudiments-0.2.3}/tsconfig.json +0 -0
|
@@ -26,3 +26,7 @@ collections/dancefloor/** text eol=lf
|
|
|
26
26
|
harness/index.html text eol=lf
|
|
27
27
|
harness/index.json text eol=lf
|
|
28
28
|
harness/beats.json text eol=lf
|
|
29
|
+
|
|
30
|
+
# Keep original DanceFlow artwork byte-identical across platform packages.
|
|
31
|
+
**/branding/*.svg text eol=lf
|
|
32
|
+
**/branding/*.png binary
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Verify NuGet publication
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version:
|
|
7
|
+
description: Existing DanceRudiments version to verify on NuGet.org
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
verify:
|
|
16
|
+
runs-on: ubuntu-22.04
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v6
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
21
|
+
- uses: actions/setup-python@v6
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.13'
|
|
24
|
+
- name: Download the package already attached to its GitHub Release
|
|
25
|
+
env:
|
|
26
|
+
GH_TOKEN: ${{ github.token }}
|
|
27
|
+
VERSION: ${{ inputs.version }}
|
|
28
|
+
shell: bash
|
|
29
|
+
run: |
|
|
30
|
+
set -euo pipefail
|
|
31
|
+
[[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
|
|
32
|
+
mkdir -p artifacts/nuget
|
|
33
|
+
gh release download "v$VERSION" --repo "$GITHUB_REPOSITORY" \
|
|
34
|
+
--pattern "DanceRudiments.$VERSION.nupkg" --dir artifacts/nuget
|
|
35
|
+
- name: Wait for NuGet.org indexing and verify the published payload
|
|
36
|
+
env:
|
|
37
|
+
VERSION: ${{ inputs.version }}
|
|
38
|
+
run: |
|
|
39
|
+
python tools/csharp_package.py verify-published \
|
|
40
|
+
"artifacts/nuget/DanceRudiments.$VERSION.nupkg" --version "$VERSION"
|
|
@@ -106,7 +106,12 @@ jobs:
|
|
|
106
106
|
mkdir -p npm-package-check
|
|
107
107
|
npm pack --ignore-scripts --pack-destination npm-package-check
|
|
108
108
|
python3 tools/check_package_docs.py --archive npm-package-check/*.tgz
|
|
109
|
-
-
|
|
109
|
+
- uses: actions/upload-artifact@v6
|
|
110
|
+
with:
|
|
111
|
+
name: npm-distribution
|
|
112
|
+
path: npm-package-check/*.tgz
|
|
113
|
+
if-no-files-found: error
|
|
114
|
+
- run: npm publish ./npm-package-check/*.tgz --ignore-scripts --access public
|
|
110
115
|
env:
|
|
111
116
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
112
117
|
|
|
@@ -159,19 +164,19 @@ jobs:
|
|
|
159
164
|
if-no-files-found: error
|
|
160
165
|
|
|
161
166
|
attach-github-release:
|
|
162
|
-
needs: [cpp-archives, python-wheels, python-sdist]
|
|
167
|
+
needs: [cpp-archives, python-wheels, python-sdist, publish-npm]
|
|
163
168
|
runs-on: ubuntu-latest
|
|
164
169
|
permissions:
|
|
165
170
|
contents: write
|
|
166
171
|
steps:
|
|
167
172
|
- uses: actions/download-artifact@v7
|
|
168
173
|
with:
|
|
169
|
-
pattern: "cpp
|
|
174
|
+
pattern: "{cpp-*,wheels-*,python-sdist,npm-distribution}"
|
|
170
175
|
path: release-assets
|
|
171
176
|
merge-multiple: true
|
|
172
177
|
- name: Write SHA-256 checksums
|
|
173
178
|
working-directory: release-assets
|
|
174
|
-
run: sha256sum *.zip > SHA256SUMS.txt
|
|
179
|
+
run: sha256sum *.zip *.whl *.tar.gz *.tgz > SHA256SUMS.txt
|
|
175
180
|
- name: Wait for the tag preflight to create the GitHub Release
|
|
176
181
|
env:
|
|
177
182
|
GH_TOKEN: ${{ github.token }}
|
|
@@ -186,7 +191,7 @@ jobs:
|
|
|
186
191
|
- name: Attach verified packages
|
|
187
192
|
env:
|
|
188
193
|
GH_TOKEN: ${{ github.token }}
|
|
189
|
-
run: gh release upload "$GITHUB_REF_NAME" release-assets/*.zip release-assets/SHA256SUMS.txt --repo "$GITHUB_REPOSITORY"
|
|
194
|
+
run: gh release upload "$GITHUB_REF_NAME" release-assets/*.zip release-assets/*.whl release-assets/*.tar.gz release-assets/*.tgz release-assets/SHA256SUMS.txt --repo "$GITHUB_REPOSITORY"
|
|
190
195
|
|
|
191
196
|
publish-conan:
|
|
192
197
|
needs: validate
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.3 - 2026-10-08
|
|
4
|
+
|
|
5
|
+
- Preserve the canonical My Songs author link in the branding guide and validate it in source checks as well as real archives. Fixes the 0.2.2 Python/native packaging guard failure; already published 0.2.2 assets remain immutable.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 0.2.2 - 2026-10-08
|
|
9
|
+
|
|
10
|
+
- Add an original tool-specific vector logo and PNG companion in the shared DanceFlow visual style.
|
|
11
|
+
- Clarify package descriptions from reviewed documentation and KeywordMoves literal-source evidence, without claims of measured search demand.
|
|
12
|
+
- Link package descriptions and READMEs to Kieran Simkin’s website and retain branding files in installable packages.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 0.2.1 - 2026-10-08
|
|
16
|
+
|
|
17
|
+
- Verify delayed NuGet indexing with bounded, authenticated publication evidence rather than treating an immediate index miss as publication failure.
|
|
18
|
+
- Preserve the existing motion catalogue and bindings unchanged.
|
|
19
|
+
- Keep all package manifests aligned with the fresh release version.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
cmake_minimum_required(VERSION 3.20)
|
|
2
|
-
project(DanceRudiments VERSION 0.2.
|
|
3
|
-
DESCRIPTION "
|
|
2
|
+
project(DanceRudiments VERSION 0.2.3
|
|
3
|
+
DESCRIPTION "Deterministic rhythmic position functions for DanceFlow. Music: https://kieransimkin.co.uk/my-songs/"
|
|
4
4
|
HOMEPAGE_URL "https://kieransimkin.co.uk/my-songs/"
|
|
5
5
|
LANGUAGES CXX)
|
|
6
6
|
|
|
@@ -114,7 +114,7 @@ install(FILES collections/initial/sources/d3-ease/LICENSE
|
|
|
114
114
|
set(DANCERUDIMENTS_DOC_DIR "${CMAKE_INSTALL_DATADIR}/DanceRudiments")
|
|
115
115
|
install(FILES README.md AUTHORS.md DESTINATION "${DANCERUDIMENTS_DOC_DIR}")
|
|
116
116
|
install(DIRECTORY docs/ DESTINATION "${DANCERUDIMENTS_DOC_DIR}/docs"
|
|
117
|
-
FILES_MATCHING PATTERN "*.md" PATTERN "*.png" PATTERN "capture.json")
|
|
117
|
+
FILES_MATCHING PATTERN "*.md" PATTERN "*.png" PATTERN "*.svg" PATTERN "capture.json")
|
|
118
118
|
install(DIRECTORY examples/bindings/ DESTINATION "${DANCERUDIMENTS_DOC_DIR}/examples/bindings"
|
|
119
119
|
PATTERN "dist" EXCLUDE PATTERN "bin" EXCLUDE PATTERN "obj" EXCLUDE PATTERN "__pycache__" EXCLUDE)
|
|
120
120
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dancerudiments
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.2.3
|
|
4
|
+
Summary: Deterministic rhythmic position functions with C++, Python, TypeScript/WASM and C# bindings. https://kieransimkin.co.uk/my-songs/
|
|
5
5
|
Author: Kieran Simkin
|
|
6
6
|
License-Expression: MIT AND BSD-3-Clause AND CC0-1.0 AND CC-BY-4.0
|
|
7
7
|
Classifier: Programming Language :: C++
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Classifier: Topic :: Multimedia :: Sound/Audio
|
|
10
10
|
Classifier: Topic :: Software Development :: Libraries
|
|
11
|
+
Project-URL: DanceFlow ecosystem, https://kieransimkin.co.uk/danceflow/
|
|
11
12
|
Project-URL: Music / My Songs, https://kieransimkin.co.uk/my-songs/
|
|
12
13
|
Project-URL: Homepage, https://github.com/kieransimkin/DanceRudiments
|
|
13
14
|
Project-URL: Repository, https://github.com/kieransimkin/DanceRudiments
|
|
@@ -17,6 +18,13 @@ Description-Content-Type: text/markdown
|
|
|
17
18
|
|
|
18
19
|
# DanceRudiments
|
|
19
20
|
|
|
21
|
+
[](https://kieransimkin.co.uk/danceflow/)
|
|
22
|
+
|
|
23
|
+
By **[Kieran Simkin](https://kieransimkin.co.uk/)** · [DanceFlow ecosystem](https://kieransimkin.co.uk/danceflow/) · [Vector logo and usage guide](docs/branding/README.md).
|
|
24
|
+
|
|
25
|
+
Deterministic rhythmic position functions with C++, Python, TypeScript/WASM and C# bindings. https://kieransimkin.co.uk/
|
|
26
|
+
|
|
27
|
+
|
|
20
28
|
By **[Kieran Simkin — My Songs](https://kieransimkin.co.uk/my-songs/)** · Part of the **DanceFlow** motion workflow.
|
|
21
29
|
|
|
22
30
|
[Visualizer](#visualizer) · [Language bindings](#language-bindings) · [C++](#c-binding) · [Python](#python-binding) · [C# / .NET](#csharp-binding) · [TypeScript / JavaScript](#typescriptwasm-binding)
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# DanceRudiments
|
|
2
2
|
|
|
3
|
+
[](https://kieransimkin.co.uk/danceflow/)
|
|
4
|
+
|
|
5
|
+
By **[Kieran Simkin](https://kieransimkin.co.uk/)** · [DanceFlow ecosystem](https://kieransimkin.co.uk/danceflow/) · [Vector logo and usage guide](docs/branding/README.md).
|
|
6
|
+
|
|
7
|
+
Deterministic rhythmic position functions with C++, Python, TypeScript/WASM and C# bindings. https://kieransimkin.co.uk/
|
|
8
|
+
|
|
9
|
+
|
|
3
10
|
By **[Kieran Simkin — My Songs](https://kieransimkin.co.uk/my-songs/)** · Part of the **DanceFlow** motion workflow.
|
|
4
11
|
|
|
5
12
|
[Visualizer](#visualizer) · [Language bindings](#language-bindings) · [C++](#c-binding) · [Python](#python-binding) · [C# / .NET](#csharp-binding) · [TypeScript / JavaScript](#typescriptwasm-binding)
|
{dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/DanceRudiments.csproj
RENAMED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
<!-- Kieran Simkin / DanceFlow: https://kieransimkin.co.uk/my-songs/ -->
|
|
3
3
|
<PropertyGroup>
|
|
4
4
|
<TargetFramework>net8.0</TargetFramework>
|
|
5
|
-
<Version>0.2.
|
|
5
|
+
<Version>0.2.3</Version>
|
|
6
6
|
<PackageId>DanceRudiments</PackageId>
|
|
7
7
|
<Authors>Kieran Simkin</Authors>
|
|
8
|
-
<Description>
|
|
8
|
+
<Description>Deterministic rhythmic position functions with native C# bindings. Music: https://kieransimkin.co.uk/my-songs/</Description>
|
|
9
9
|
<PackageProjectUrl>https://kieransimkin.co.uk/my-songs/</PackageProjectUrl>
|
|
10
10
|
<RepositoryUrl>https://github.com/kieransimkin/DanceRudiments</RepositoryUrl>
|
|
11
11
|
<RepositoryType>git</RepositoryType>
|
|
12
12
|
<PackageLicenseExpression>MIT AND BSD-3-Clause AND CC0-1.0 AND CC-BY-4.0</PackageLicenseExpression>
|
|
13
13
|
<PackageReadmeFile>README.md</PackageReadmeFile>
|
|
14
|
+
<PackageIcon>docs/branding/logo.png</PackageIcon>
|
|
14
15
|
<PackageTags>DanceFlow;animation;music;rhythm;native;CSharp;Amen</PackageTags>
|
|
15
16
|
<Nullable>enable</Nullable>
|
|
16
17
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
</PropertyGroup>
|
|
29
30
|
<ItemGroup>
|
|
30
31
|
<None Include="../README.md" Pack="true" PackagePath="README.md" />
|
|
32
|
+
<None Include="../../../docs/branding/*" Pack="true" PackagePath="docs/branding/" />
|
|
31
33
|
<None Include="../../../AUTHORS.md" Pack="true" PackagePath="AUTHORS.md" />
|
|
32
34
|
<None Include="../../../LICENSE" Pack="true" PackagePath="licenses/" />
|
|
33
35
|
<None Include="../../../collections/initial/THIRD_PARTY_NOTICES.md" Pack="true" PackagePath="licenses/" />
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# DanceRudiments for C# / .NET
|
|
2
2
|
|
|
3
|
+
[](https://kieransimkin.co.uk/danceflow/)
|
|
4
|
+
|
|
5
|
+
[DanceFlow](https://kieransimkin.co.uk/danceflow/) · [Kieran Simkin](https://kieransimkin.co.uk/)
|
|
6
|
+
|
|
3
7
|
By **[Kieran Simkin — My Songs](https://kieransimkin.co.uk/my-songs/)**, part of DanceFlow.
|
|
4
8
|
|
|
5
9
|
A C# interface to the **original C++ rhythmic movement library**, not a managed
|
|
@@ -11,7 +11,7 @@ class DanceRudimentsConan(ConanFile):
|
|
|
11
11
|
license = "MIT AND BSD-3-Clause AND CC0-1.0 AND CC-BY-4.0"
|
|
12
12
|
author = "Kieran Simkin — https://kieransimkin.co.uk/my-songs/"
|
|
13
13
|
homepage = "https://kieransimkin.co.uk/my-songs/"
|
|
14
|
-
description = "
|
|
14
|
+
description = "Deterministic rhythmic position functions for DanceFlow. Music: https://kieransimkin.co.uk/my-songs/"
|
|
15
15
|
settings = "os", "compiler", "build_type", "arch"
|
|
16
16
|
exports_sources = "CMakeLists.txt", "cmake/**", "include/**", "src/**", "LICENSE", "collections/initial/THIRD_PARTY_NOTICES.md", "collections/initial/sources/d3-ease/LICENSE", "README.md", "AUTHORS.md", "docs/**", "examples/bindings/**"
|
|
17
17
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# DanceRudiments visual identity
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
By [Kieran Simkin](https://kieransimkin.co.uk/), part of [DanceFlow](https://kieransimkin.co.uk/danceflow/).
|
|
6
|
+
|
|
7
|
+
Music and author website: https://kieransimkin.co.uk/my-songs/
|
|
8
|
+
|
|
9
|
+
Stepped path and beat nodes: discrete deterministic rhythmic positions.
|
|
10
|
+
|
|
11
|
+
Original vector artwork, created 8 October 2026. Shared family: 128-unit square, rounded 30-unit frame, 5.5-unit rounded strokes, plum `#171124`, mint `#bff7df`, gold `#f5ce85`. The symbol remains unique without colour. `logo.svg` is the self-contained dark badge; `logo-monochrome.svg` is a transparent dark mark for light surfaces; `logo.png` is the 256px registry/export companion. Prefer SVG for scaling and label tiny marks with the tool name. No external fonts, scripts, remote references, animation or model-generated assets.
|
|
12
|
+
|
|
13
|
+
Use the files unchanged at a square aspect ratio, with at least 8/128 of their width as clear space. The monochrome mark needs a light background. Do not imply an official association with model providers, React, WordPress or operating-system vendors. Source artwork follows this repository's licence; dependency and third-party notices retain their own terms.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">DanceRudiments logo</title>
|
|
3
|
+
<desc id="desc">Stepped path and beat nodes: discrete deterministic rhythmic positions. Original DanceFlow family mark by Kieran Simkin.</desc>
|
|
4
|
+
|
|
5
|
+
<g fill="none" stroke="#171124" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round"><path d="M30 88V68h22V46h22V30h20"/><circle cx="30" cy="88" r="6" fill="#171124" stroke="none"/><circle cx="52" cy="68" r="6" fill="#171124" stroke="none"/><circle cx="74" cy="46" r="6" fill="#171124" stroke="none"/><path d="M76 88h20M88 78v20" stroke="#171124"/></g>
|
|
6
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">DanceRudiments logo</title>
|
|
3
|
+
<desc id="desc">Stepped path and beat nodes: discrete deterministic rhythmic positions. Original DanceFlow family mark by Kieran Simkin.</desc>
|
|
4
|
+
<rect x="3" y="3" width="122" height="122" rx="30" fill="#171124"/><rect x="8" y="8" width="112" height="112" rx="25" fill="none" stroke="#f5ce85" stroke-opacity=".35" stroke-width="1.5"/>
|
|
5
|
+
<g fill="none" stroke="#bff7df" stroke-width="5.5" stroke-linecap="round" stroke-linejoin="round"><path d="M30 88V68h22V46h22V30h20"/><circle cx="30" cy="88" r="6" fill="#f5ce85" stroke="none"/><circle cx="52" cy="68" r="6" fill="#f5ce85" stroke="none"/><circle cx="74" cy="46" r="6" fill="#f5ce85" stroke="none"/><path d="M76 88h20M88 78v20" stroke="#f5ce85"/></g>
|
|
6
|
+
</svg>
|
|
@@ -224,7 +224,11 @@ After successful native, managed and installed-package tests:
|
|
|
224
224
|
- **NuGet.org** receives `DanceRudiments.<version>.nupkg` plus managed symbols. The
|
|
225
225
|
workflow downloads the indexed package and compares payload members, allowing
|
|
226
226
|
NuGet.org's added repository signature rather than assuming ZIP bytes remain
|
|
227
|
-
identical. Indexing can take
|
|
227
|
+
identical. Indexing can take several minutes; verification waits for up to about
|
|
228
|
+
15 minutes of transient CDN/indexing responses before failing. A payload mismatch
|
|
229
|
+
still fails immediately. If NuGet indexing outlives the release job, run the
|
|
230
|
+
manual **Verify NuGet publication** workflow for that already-published version;
|
|
231
|
+
it verifies the release asset without attempting another upload.
|
|
228
232
|
- **GitHub Packages** receives the same nupkg under
|
|
229
233
|
`https://nuget.pkg.github.com/kieransimkin/index.json`. `GITHUB_TOKEN` with
|
|
230
234
|
`packages: write` authenticates; `RepositoryUrl` links the package to this repo.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kieransimkin/dance-rudiments",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@kieransimkin/dance-rudiments",
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.3",
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"typescript": "^5.9.0"
|
|
12
12
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kieransimkin/dance-rudiments",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.3",
|
|
4
|
+
"description": "Deterministic rhythmic position functions with C++, Python, TypeScript/WASM and C# bindings. https://kieransimkin.co.uk/my-songs/",
|
|
5
5
|
"license": "MIT AND BSD-3-Clause AND CC0-1.0 AND CC-BY-4.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/typescript/index.js",
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"examples/bindings/",
|
|
45
45
|
"docs/troubleshooting.md",
|
|
46
46
|
"docs/csharp.md",
|
|
47
|
-
"bindings/csharp/README.md"
|
|
47
|
+
"bindings/csharp/README.md",
|
|
48
|
+
"docs/branding/"
|
|
48
49
|
],
|
|
49
50
|
"repository": {
|
|
50
51
|
"type": "git",
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# DanceRudiments C++ static library
|
|
2
2
|
|
|
3
|
+
[](https://kieransimkin.co.uk/danceflow/)
|
|
4
|
+
|
|
5
|
+
[DanceFlow](https://kieransimkin.co.uk/danceflow/) · [Kieran Simkin](https://kieransimkin.co.uk/)
|
|
6
|
+
|
|
3
7
|
By **[Kieran Simkin — My Songs](https://kieransimkin.co.uk/my-songs/)**.
|
|
4
8
|
|
|
5
9
|
The illustrated multi-language guide and runnable examples are installed under
|
|
@@ -4,8 +4,8 @@ build-backend = "scikit_build_core.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dancerudiments"
|
|
7
|
-
version = "0.2.
|
|
8
|
-
description = "
|
|
7
|
+
version = "0.2.3"
|
|
8
|
+
description = "Deterministic rhythmic position functions with C++, Python, TypeScript/WASM and C# bindings. https://kieransimkin.co.uk/my-songs/"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT AND BSD-3-Clause AND CC0-1.0 AND CC-BY-4.0"
|
|
11
11
|
requires-python = ">=3.9"
|
|
@@ -21,6 +21,7 @@ classifiers = [
|
|
|
21
21
|
dancerudiments-compile = "dancerudiments_authoring.cli:main"
|
|
22
22
|
|
|
23
23
|
[project.urls]
|
|
24
|
+
"DanceFlow ecosystem" = "https://kieransimkin.co.uk/danceflow/"
|
|
24
25
|
"Music / My Songs" = "https://kieransimkin.co.uk/my-songs/"
|
|
25
26
|
Homepage = "https://github.com/kieransimkin/DanceRudiments"
|
|
26
27
|
Repository = "https://github.com/kieransimkin/DanceRudiments"
|
|
@@ -29,7 +30,7 @@ Issues = "https://github.com/kieransimkin/DanceRudiments/issues"
|
|
|
29
30
|
[tool.scikit-build]
|
|
30
31
|
cmake.args = ["-DDANCERUDIMENTS_BUILD_PYTHON=ON", "-DDANCERUDIMENTS_BUILD_TESTS=OFF"]
|
|
31
32
|
wheel.packages = ["python/dancerudiments_authoring"]
|
|
32
|
-
sdist.include = ["CMakeLists.txt", "include/**", "src/**", "bindings/python/**", "python/**", "tools/**", "collections/**", "harness/initial/**", "harness/initial-collection.html", ".gitattributes", "examples/patterns/**", "docs/authoring.md", "docs/default-library.md", "docs/dancefloor.md", "docs/release-demo.md", "cmake/**", "tests/**", "README.md", "AUTHORS.md", "packaging/**", "docs/images/**", "docs/bindings.md", "docs/troubleshooting.md", "examples/bindings/**", "bindings/csharp/**", "docs/csharp.md"]
|
|
33
|
+
sdist.include = ["CMakeLists.txt", "include/**", "src/**", "bindings/python/**", "python/**", "tools/**", "collections/**", "harness/initial/**", "harness/initial-collection.html", ".gitattributes", "examples/patterns/**", "docs/authoring.md", "docs/default-library.md", "docs/dancefloor.md", "docs/release-demo.md", "cmake/**", "tests/**", "README.md", "AUTHORS.md", "packaging/**", "docs/images/**", "docs/branding/**", "docs/bindings.md", "docs/troubleshooting.md", "examples/bindings/**", "bindings/csharp/**", "docs/csharp.md"]
|
|
33
34
|
|
|
34
35
|
# Do not ship hand-off patches, credentials, or local example output in sdists.
|
|
35
36
|
sdist.exclude = ["*.patch", "npm_recovery_codes.txt", "examples/bindings/typescript/dist/**", "bindings/csharp/**/bin/**", "bindings/csharp/**/obj/**", "tests/csharp/**/bin/**", "tests/csharp/**/obj/**", "examples/bindings/csharp/bin/**", "examples/bindings/csharp/obj/**"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Regression checks for delayed NuGet.org indexing."""
|
|
2
|
+
import inspect
|
|
3
|
+
import importlib.util
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import unittest
|
|
6
|
+
|
|
7
|
+
ROOT = Path(__file__).resolve().parents[3]
|
|
8
|
+
spec = importlib.util.spec_from_file_location("csharp_package", ROOT / "tools/csharp_package.py")
|
|
9
|
+
package = importlib.util.module_from_spec(spec)
|
|
10
|
+
spec.loader.exec_module(package)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PublishVerificationTests(unittest.TestCase):
|
|
14
|
+
def test_default_indexing_window_is_about_fifteen_minutes(self):
|
|
15
|
+
signature = inspect.signature(package.verify_published)
|
|
16
|
+
self.assertEqual(signature.parameters["attempts"].default, 60)
|
|
17
|
+
self.assertEqual(signature.parameters["delay_seconds"].default, 15)
|
|
18
|
+
|
|
19
|
+
def test_invalid_retry_configuration_is_rejected_before_package_access(self):
|
|
20
|
+
with self.assertRaises(ValueError):
|
|
21
|
+
package.verify_published(Path("missing.nupkg"), "nuget.org", attempts=0)
|
|
22
|
+
with self.assertRaises(ValueError):
|
|
23
|
+
package.verify_published(Path("missing.nupkg"), "nuget.org", delay_seconds=-1)
|
|
24
|
+
|
|
25
|
+
def test_manual_verification_accepts_an_explicit_release_version(self):
|
|
26
|
+
with self.assertRaises(FileNotFoundError):
|
|
27
|
+
package.verify_published(Path("missing.nupkg"), "nuget.org", "0.2.0", attempts=1, delay_seconds=0)
|
|
28
|
+
with self.assertRaises(ValueError):
|
|
29
|
+
package.verify_published(Path("missing.nupkg"), "nuget.org", "v0.2", attempts=1, delay_seconds=0)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
unittest.main()
|
|
@@ -26,6 +26,7 @@ class PackageDocumentationTests(unittest.TestCase):
|
|
|
26
26
|
'package/docs/bindings.md': link,
|
|
27
27
|
'package/examples/bindings/python/quickstart.py': b'# test example',
|
|
28
28
|
**{'package/docs/images/'+name: b'PNG fixture' for name in check.IMAGES},
|
|
29
|
+
**{'package/docs/branding/'+name: link for name in check.BRANDING},
|
|
29
30
|
'package/package.json': json.dumps({'homepage':check.MUSIC_URL}).encode(),
|
|
30
31
|
}
|
|
31
32
|
|
|
@@ -51,6 +52,14 @@ class PackageDocumentationTests(unittest.TestCase):
|
|
|
51
52
|
files=self.fixture();del files['package/examples/bindings/python/quickstart.py']
|
|
52
53
|
with self.assertRaisesRegex(ValueError,'runnable binding examples'): self.check_zip(files)
|
|
53
54
|
|
|
55
|
+
def test_missing_logo_rejected(self):
|
|
56
|
+
files=self.fixture();del files['package/docs/branding/logo.svg']
|
|
57
|
+
with self.assertRaisesRegex(ValueError,'missing docs/branding/logo.svg'): self.check_zip(files)
|
|
58
|
+
|
|
59
|
+
def test_branding_readme_requires_canonical_author_link(self):
|
|
60
|
+
files=self.fixture();files['package/docs/branding/README.md']=b'https://kieransimkin.co.uk/'
|
|
61
|
+
with self.assertRaisesRegex(ValueError,'missing author music link'): self.check_zip(files)
|
|
62
|
+
|
|
54
63
|
def test_wheel_metadata_required(self):
|
|
55
64
|
with self.assertRaisesRegex(ValueError,'distribution metadata'): self.check_zip(self.fixture(),'.whl')
|
|
56
65
|
|
|
@@ -14,6 +14,7 @@ import zipfile
|
|
|
14
14
|
MUSIC_URL = 'https://kieransimkin.co.uk/my-songs/'
|
|
15
15
|
ROOT = Path(__file__).resolve().parents[1]
|
|
16
16
|
IMAGES = ('visualizer-amen-desktop.png', 'visualizer-midi-score.png', 'visualizer-mobile.png')
|
|
17
|
+
BRANDING = ('logo.svg', 'logo-monochrome.svg', 'logo.png', 'README.md')
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
def require_link(text: str, label: str) -> None:
|
|
@@ -35,6 +36,10 @@ def check_source(root: Path = ROOT) -> None:
|
|
|
35
36
|
for image in IMAGES:
|
|
36
37
|
if not (root / 'docs/images' / image).is_file():
|
|
37
38
|
raise ValueError(f'Missing README screenshot: {image}')
|
|
39
|
+
for filename in BRANDING:
|
|
40
|
+
if not (root / 'docs/branding' / filename).is_file():
|
|
41
|
+
raise ValueError(f'Missing branding file: {filename}')
|
|
42
|
+
require_link((root / 'docs/branding/README.md').read_text(encoding='utf-8'), 'docs/branding/README.md')
|
|
38
43
|
for family in ('atlas', 'continuum', 'club', 'dancefloor'):
|
|
39
44
|
require_link((root / f'tools/build_{family}_collection.py').read_text(encoding='utf-8'), family+' README generator')
|
|
40
45
|
print('Source: author metadata, first-party READMEs and screenshots verified')
|
|
@@ -59,7 +64,8 @@ def check_archive(path: Path) -> None:
|
|
|
59
64
|
raise ValueError(f'Unsupported archive: {path}')
|
|
60
65
|
if not any(n.endswith('/README.md') or n == 'README.md' for n in names):
|
|
61
66
|
raise ValueError(f'{path}: no packaged README')
|
|
62
|
-
for suffix in ('AUTHORS.md', 'docs/bindings.md', *('docs/images/'+n for n in IMAGES)
|
|
67
|
+
for suffix in ('AUTHORS.md', 'docs/bindings.md', *('docs/images/'+n for n in IMAGES),
|
|
68
|
+
*('docs/branding/'+n for n in BRANDING)):
|
|
63
69
|
if not any(n == suffix or n.endswith('/'+suffix) for n in names):
|
|
64
70
|
raise ValueError(f'{path}: missing {suffix}')
|
|
65
71
|
if not any(n.endswith('examples/bindings/python/quickstart.py') for n in names):
|
|
@@ -211,12 +211,17 @@ def pack(folder: Path, output: Path, commit: str) -> None:
|
|
|
211
211
|
(output/'SHA256SUMS-csharp.txt').write_text(''.join(sha256(p.read_bytes()).hexdigest()+' '+p.name+'\n' for p in files),encoding='utf-8')
|
|
212
212
|
|
|
213
213
|
|
|
214
|
-
def verify_published(path: Path, feed: str, attempts: int =
|
|
214
|
+
def verify_published(path: Path, feed: str, published_version: str | None = None, attempts: int = 60, delay_seconds: int = 15) -> None:
|
|
215
215
|
"""NuGet.org adds a repository signature: compare ZIP payloads, not raw ZIP bytes.
|
|
216
216
|
GitHub feed verification uses an isolated dotnet restore in the workflow.
|
|
217
217
|
"""
|
|
218
218
|
if feed!='nuget.org':raise ValueError('Only the public NuGet.org feed is supported here')
|
|
219
|
-
|
|
219
|
+
if attempts < 1 or delay_seconds < 0:
|
|
220
|
+
raise ValueError('Verification attempts must be positive and delay must be non-negative')
|
|
221
|
+
published_version = published_version or version()
|
|
222
|
+
if not re.fullmatch(r'\d+\.\d+\.\d+', published_version):
|
|
223
|
+
raise ValueError('Published version must be MAJOR.MINOR.PATCH')
|
|
224
|
+
url=f'https://api.nuget.org/v3-flatcontainer/dancerudiments/{published_version}/dancerudiments.{published_version}.nupkg'
|
|
220
225
|
with zipfile.ZipFile(path) as local:
|
|
221
226
|
expected={n:sha256(local.read(n)).digest() for n in local.namelist() if n!='.signature.p7s'}
|
|
222
227
|
last=None
|
|
@@ -230,8 +235,9 @@ def verify_published(path: Path, feed: str, attempts: int = 12) -> None:
|
|
|
230
235
|
print('NuGet.org download matches every non-signature package member');return
|
|
231
236
|
except (urllib.error.URLError,zipfile.BadZipFile) as error:
|
|
232
237
|
last=error
|
|
233
|
-
if attempt+1<attempts:time.sleep(
|
|
234
|
-
|
|
238
|
+
if attempt+1<attempts:time.sleep(delay_seconds)
|
|
239
|
+
waited=max(0, attempts-1)*delay_seconds
|
|
240
|
+
raise RuntimeError(f'NuGet.org accepted the upload but indexing did not complete after about {waited} seconds: {last}')
|
|
235
241
|
|
|
236
242
|
|
|
237
243
|
def main() -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/NativeMethods.cs
RENAMED
|
File without changes
|
|
File without changes
|
{dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/PatternDefinition.cs
RENAMED
|
File without changes
|
{dancerudiments-0.2.0 → dancerudiments-0.2.3}/bindings/csharp/DanceRudiments/PatternLibrary.cs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|