Skip to content

try updating version in pyproject.toml - #473

Merged
Ryan-Millard merged 12 commits into
Ryan-Millard:devfrom
Krasner:dev/py_release
Jun 29, 2026
Merged

try updating version in pyproject.toml#473
Ryan-Millard merged 12 commits into
Ryan-Millard:devfrom
Krasner:dev/py_release

Conversation

@Krasner

@Krasner Krasner commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Changes & Reason

Changes

Reason

Related Issues

Fixes: #

Testing & Verification

Additional Resources

@Krasner
Krasner requested a review from Ryan-Millard as a code owner June 28, 2026 18:26
@github-actions github-actions Bot added the js/ts label Jun 28, 2026
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@Ryan-Millard, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 28 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: e57cc18c-c047-4d3d-b8ae-ed9e1ab0347a

📥 Commits

Reviewing files that changed from the base of the PR and between e6d4c85 and 4afbfdd.

📒 Files selected for processing (1)
  • pyproject.toml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
✨ Simplify code
  • Create PR with simplified code

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the ci label Jun 28, 2026
@coderabbitai coderabbitai Bot added github_actions Pull requests that update GitHub Actions code python changes to python bindings or python code labels Jun 28, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/release.yml:
- Around line 6-9: The new pull_request trigger on release.yml is using
github.ref_name, which resolves to the PR merge ref instead of the target
branch, so the release path is always skipped or treated as dry-run. Update the
workflow conditionals around the release-please logic (the checks in the main
job steps that currently branch on github.ref_name) to use the PR base branch
context instead, such as github.base_ref or an equivalent target-branch check,
so the dev PR trigger can actually reach the real release flow.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f5588e7a-0e81-4938-ab8e-7cf239c5353e

📥 Commits

Reviewing files that changed from the base of the PR and between 671f385 and e6d4c85.

📒 Files selected for processing (1)
  • .github/workflows/release.yml
📜 Review details
⏰ Context from checks skipped due to timeout. (16)
  • GitHub Check: Build Documentation Site / Build Docusaurus Site
  • GitHub Check: Build C/C++ / Build Python
  • GitHub Check: Build C/C++ / Build C & C++
  • GitHub Check: Build C/C++ / Build WASM (bindings/js)
  • GitHub Check: Lint & Validate Code
  • GitHub Check: build-c-cpp-native (ubuntu-latest, c)
  • GitHub Check: build-c-cpp-native (macos-latest, cpp)
  • GitHub Check: build-c-cpp-native (windows-latest, c)
  • GitHub Check: build-c-cpp-native (macos-latest, c)
  • GitHub Check: build-c-cpp-native (windows-latest, cpp)
  • GitHub Check: build-c-cpp-native (ubuntu-latest, cpp)
  • GitHub Check: build-py (ubuntu-latest)
  • GitHub Check: build-py (macos-latest)
  • GitHub Check: build-py (windows-latest)
  • GitHub Check: build-js
  • GitHub Check: build-py-sdist
🧰 Additional context used
📓 Path-based instructions (1)
.github/workflows/**

⚙️ CodeRabbit configuration file

.github/workflows/**: GitHub Actions workflows. Review for:

  • SHA-pinned action versions for third-party actions (security best practice).
  • Secrets accessed only via ${{ secrets.* }} — never hardcoded.
  • Least-privilege permissions on each job/workflow.
  • Correct job dependency ordering (needs:) and if/condition logic.

Files:

  • .github/workflows/release.yml
🧠 Learnings (2)
📚 Learning: 2026-05-01T22:50:11.527Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 339
File: release-please-config.json:18-47
Timestamp: 2026-05-01T22:50:11.527Z
Learning: In this repo, release-please-action v4 preserves '/' verbatim in slash-containing path-based package keys when emitting GitHub Actions output names (e.g., `bindings/c--release_created`). When referencing these step outputs in `job.outputs` (and other expressions), use bracket notation with the exact output name: `${{ steps.release.outputs['bindings/c--release_created'] }}` rather than dot notation. If needed, map the complex step output to a clean job-level output alias so downstream jobs can use dot notation via that alias.

Applied to files:

  • .github/workflows/release.yml
📚 Learning: 2026-05-19T17:30:09.565Z
Learnt from: Ryan-Millard
Repo: Ryan-Millard/Img2Num PR: 375
File: .github/workflows/cmake-build.yml:86-88
Timestamp: 2026-05-19T17:30:09.565Z
Learning: In Ryan-Millard/Img2Num CI/workflow YAMLs, any `uv sync` command used for the Python package build must include `--no-build-isolation` (do not remove it). If you need deterministic dependency installs for CI, you may add `--frozen` alongside it (e.g., `uv sync --frozen --no-build-isolation`), and it should not conflict with the repo’s build setup.

Applied to files:

  • .github/workflows/release.yml

Comment thread .github/workflows/release.yml Outdated
@Krasner

Krasner commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator Author

@Ryan-Millard this is probably a suboptimal solution but all it does it physically update the version section in pyproject.toml

Successfully built img2num-0.2.0.tar.gz

@Krasner

Krasner commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator Author

whl has the correct version too:

No audit required for this wheel, as it is not abi3
    + mkdir -p /output
    + mv /tmp/cibuildwheel/repaired_wheel/img2num-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl /output
✓ cp310-manylinux_x86_64 finished in 11 minutes

@Ryan-Millard

Copy link
Copy Markdown
Owner

Hi @Krasner. After doing some research on it, I found that the solution is to dynamically derive the version in pyproject.toml from the one in packages/py.

See this conversation and look at option A of the second-last message. The conflict is caused by us building the project from the root (which has 0.0.0 as the version).

Evidence that it builds properly with those changes

root@e780943624da:/usr/src/app# uv pip install scikit-build-core pybind11 "numpy>=2.0" build
python -m build --wheel --no-isolation --outdir /tmp/test-wheel .
Resolved 7 packages in 947ms
Prepared 3 packages in 388ms
Installed 3 packages in 12ms
 + build==1.5.0
 + pybind11==3.0.4
 + pyproject-hooks==1.2.0
* Getting build dependencies for wheel...
* Building wheel...
*** scikit-build-core 0.12.2 using CMake 3.31.6 (wheel)
*** Configuring CMake...
loading initial cache file /tmp/tmpd1hsxzrz/build/CMakeInit.txt
-- The CXX compiler identification is GNU 14.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++-14 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- ===============================================================
-- IMG2NUM_DEBUG_CACHE_VARIABLES_DUMP Output:
-- ===============================================================
-- [User-Defined] IMG2NUM_BUILD_C=ON
-- [User-Defined] IMG2NUM_BUILD_EXAMPLES=OFF
-- [User-Defined] IMG2NUM_BUILD_PYTHON=ON
-- [User-Defined] IMG2NUM_DEBUG_CACHE_VARIABLES_DUMP=ON
-- [Auto] Img2NumRootManager_BINARY_DIR=/tmp/tmpd1hsxzrz/build
-- [Auto] Img2NumRootManager_IS_TOP_LEVEL=ON
-- [Auto] Img2NumRootManager_SOURCE_DIR=/usr/src/app
-- CMAKE_ADDR2LINE=/usr/bin/addr2line
-- CMAKE_AR=/usr/bin/ar
-- CMAKE_BUILD_TYPE=Release
-- CMAKE_COMMAND=/usr/bin/cmake
-- CMAKE_CPACK_COMMAND=/usr/bin/cpack
-- CMAKE_CTEST_COMMAND=/usr/bin/ctest
-- CMAKE_CXX_COMPILER=/usr/bin/g++-14
-- CMAKE_CXX_COMPILER_AR=/usr/bin/gcc-ar-14
-- CMAKE_CXX_COMPILER_RANLIB=/usr/bin/gcc-ranlib-14
-- CMAKE_CXX_FLAGS=
-- CMAKE_CXX_FLAGS_DEBUG=-g
-- CMAKE_CXX_FLAGS_MINSIZEREL=-Os -DNDEBUG
-- CMAKE_CXX_FLAGS_RELEASE=-O3 -DNDEBUG
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO=-O2 -g -DNDEBUG
-- CMAKE_DLLTOOL=CMAKE_DLLTOOL-NOTFOUND
-- CMAKE_EXECUTABLE_FORMAT=ELF
-- CMAKE_EXE_LINKER_FLAGS=
-- CMAKE_EXE_LINKER_FLAGS_DEBUG=
-- CMAKE_EXE_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_EXE_LINKER_FLAGS_RELEASE=
-- CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_EXPORT_BUILD_DATABASE=
-- CMAKE_EXPORT_COMPILE_COMMANDS=
-- CMAKE_EXTRA_GENERATOR=
-- CMAKE_FIND_PACKAGE_REDIRECTS_DIR=/tmp/tmpd1hsxzrz/build/CMakeFiles/pkgRedirects
-- CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH
-- CMAKE_GENERATOR=Ninja
-- CMAKE_GENERATOR_INSTANCE=
-- CMAKE_GENERATOR_PLATFORM=
-- CMAKE_GENERATOR_TOOLSET=
-- CMAKE_HOME_DIRECTORY=/usr/src/app
-- CMAKE_INSTALL_PREFIX=/tmp/tmpd1hsxzrz/wheel/platlib
-- CMAKE_INSTALL_SO_NO_EXE=1
-- CMAKE_LINKER=/usr/bin/ld
-- CMAKE_MAKE_PROGRAM=/usr/bin/ninja
-- CMAKE_MODULE_LINKER_FLAGS=
-- CMAKE_MODULE_LINKER_FLAGS_DEBUG=
-- CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_MODULE_LINKER_FLAGS_RELEASE=
-- CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_NM=/usr/bin/nm
-- CMAKE_OBJCOPY=/usr/bin/objcopy
-- CMAKE_OBJDUMP=/usr/bin/objdump
-- CMAKE_PLATFORM_INFO_INITIALIZED=1
-- CMAKE_PREFIX_PATH=/usr/src/app/.venv/lib/python3.13/site-packages
-- CMAKE_PROJECT_DESCRIPTION=
-- CMAKE_PROJECT_HOMEPAGE_URL=
-- CMAKE_PROJECT_NAME=Img2NumRootManager
-- CMAKE_RANLIB=/usr/bin/ranlib
-- CMAKE_READELF=/usr/bin/readelf
-- CMAKE_ROOT=/usr/share/cmake-3.31
-- CMAKE_SHARED_LINKER_FLAGS=
-- CMAKE_SHARED_LINKER_FLAGS_DEBUG=
-- CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_SHARED_LINKER_FLAGS_RELEASE=
-- CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_SKIP_INSTALL_RPATH=NO
-- CMAKE_SKIP_RPATH=NO
-- CMAKE_STATIC_LINKER_FLAGS=
-- CMAKE_STATIC_LINKER_FLAGS_DEBUG=
-- CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_STATIC_LINKER_FLAGS_RELEASE=
-- CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_STRIP=/usr/bin/strip
-- CMAKE_TAPI=CMAKE_TAPI-NOTFOUND
-- CMAKE_UNAME=/usr/bin/uname
-- CMAKE_VERBOSE_MAKEFILE=FALSE
-- PYTHON_EXECUTABLE=/usr/src/app/.venv/bin/python
-- PYTHON_INCLUDE_DIR=/usr/include/python3.13
-- PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.13.so
-- Python3_EXECUTABLE=/usr/src/app/.venv/bin/python
-- Python3_FIND_REGISTRY=NEVER
-- Python3_INCLUDE_DIR=/usr/include/python3.13
-- Python3_NumPy_INCLUDE_DIR=/usr/src/app/.venv/lib/python3.13/site-packages/numpy/_core/include
-- Python3_ROOT_DIR=/usr
-- Python_EXECUTABLE=/usr/src/app/.venv/bin/python
-- Python_FIND_REGISTRY=NEVER
-- Python_INCLUDE_DIR=/usr/include/python3.13
-- Python_NumPy_INCLUDE_DIR=/usr/src/app/.venv/lib/python3.13/site-packages/numpy/_core/include
-- Python_ROOT_DIR=/usr
-- SKBUILD=2
-- SKBUILD_CORE_VERSION=0.12.2
-- SKBUILD_DATA_DIR=/tmp/tmpd1hsxzrz/wheel/data
-- SKBUILD_HEADERS_DIR=/tmp/tmpd1hsxzrz/wheel/headers
-- SKBUILD_METADATA_DIR=/tmp/tmpd1hsxzrz/wheel/metadata
-- SKBUILD_NULL_DIR=/tmp/tmpd1hsxzrz/wheel/null
-- SKBUILD_PLATLIB_DIR=/tmp/tmpd1hsxzrz/wheel/platlib
-- SKBUILD_PROJECT_NAME=img2num
-- SKBUILD_PROJECT_VERSION=0.2.0
-- SKBUILD_PROJECT_VERSION_FULL=0.2.0
-- SKBUILD_SABI_COMPONENT=
-- SKBUILD_SABI_VERSION=
-- SKBUILD_SCRIPTS_DIR=/tmp/tmpd1hsxzrz/wheel/scripts
-- SKBUILD_SOABI=cpython-313-x86_64-linux-gnu
-- SKBUILD_STATE=wheel
-- _CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED=TRUE
-- _CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED=TRUE
-- ===============================================================


-- /tmp/tmpd1hsxzrz/build
-- Found Python3: /usr/src/app/.venv/bin/python (found version "3.13.5") found components: Interpreter
Found system Dawn
-- Core library configured with /usr/src/app/core/src/img2num/Error.cpp;/usr/src/app/core/src/internal/SavitskyGolay.cpp;/usr/src/app/core/src/internal/bezier.cpp;/usr/src/app/core/src/internal/bilateral_filter.cpp;/usr/src/app/core/src/internal/bilateral_filter_gpu.cpp;/usr/src/app/core/src/internal/contours.cpp;/usr/src/app/core/src/internal/douglas_peucker.cpp;/usr/src/app/core/src/internal/fft_iterative.cpp;/usr/src/app/core/src/internal/graph.cpp;/usr/src/app/core/src/internal/image_to_svg.cpp;/usr/src/app/core/src/internal/image_utils.cpp;/usr/src/app/core/src/internal/kmeans.cpp;/usr/src/app/core/src/internal/kmeans_gpu.cpp;/usr/src/app/core/src/internal/labels_to_svg.cpp;/usr/src/app/core/src/internal/node.cpp;/usr/src/app/core/src/internal/shared_contours.cpp
-- Found Python3: /usr/src/app/.venv/bin/python (found version "3.13.5") found components: Interpreter Development.Module NumPy
-- Performing Test HAS_FLTO_AUTO
-- Performing Test HAS_FLTO_AUTO - Success
-- Found pybind11: /usr/src/app/.venv/lib/python3.13/site-packages/pybind11/include (found version "3.0.4")
-- Configuring done (0.9s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/tmpd1hsxzrz/build
*** Building project with Ninja...
[0/2] Re-checking globbed directories...
[1/21] cd /tmp/tmpd1hsxzrz/build/core && /usr/src/app/.venv/bin/python /usr/src/app/core/tools/embed_shaders.py /usr/src/app/core/src/internal/resources /tmp/tmpd1hsxzrz/build/embedded_shaders.h
Writing to /tmp/tmpd1hsxzrz/build/embedded_shaders.h
[20/21] Linking CXX shared module bindings/py/_img2num.cpython-313-x86_64-linux-gnu.so
*** Installing project into wheel...
-- Install configuration: "Release"
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/lib/cmake/Img2Num/Img2NumConfig.cmake
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/lib/cmake/Img2Num/Img2NumConfigVersion.cmake
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/lib/libImg2Num.a
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/lib/cmake/Img2Num/Img2NumTargets.cmake
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/lib/cmake/Img2Num/Img2NumTargets-release.cmake
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/include/img2num
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/include/img2num/img2num.h
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/include/img2num/internal
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/include/img2num/img2num
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/include/img2num/img2num/Error.h
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/img2num
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/img2num/api.py
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/img2num/__init__.py
-- Installing: /tmp/tmpd1hsxzrz/wheel/platlib/img2num/_img2num.cpython-313-x86_64-linux-gnu.so
*** Making wheel...
*** Created img2num-0.2.0-cp313-cp313-linux_x86_64.whl
Successfully built img2num-0.2.0-cp313-cp313-linux_x86_64.whl

Changes made

root@e780943624da:/usr/src/app# cat pyproject.toml
[project]
name = "img2num"
# see tool.scikit-build
dynamic = ["version"]
description = "A fast and accurate raster image to SVG conversion library"
requires-python = ">=3.10"
license = { text = "MIT" }
readme = "README.md"
authors = [{ name = "Ryan Millard" }]
dependencies = [
  "numpy>=1.23.5"
]
classifiers = [
  "Intended Audience :: Developers",
  "License :: OSI Approved :: MIT License",
  "Programming Language :: Python :: 3",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
  "Topic :: Multimedia :: Graphics :: Graphics Conversion",
  "Topic :: Scientific/Engineering :: Image Processing"
]

[project.urls]
Homepage      = "https://ryan-millard.github.io/Img2Num/info/docs/"
Repository    = "https://github.com/Ryan-Millard/Img2Num"
Documentation = "https://ryan-millard.github.io/Img2Num/info/docs/"
Changelog     = "https://github.com/Ryan-Millard/Img2Num/blob/main/CHANGELOG.md"
"Bug Tracker" = "https://github.com/Ryan-Millard/Img2Num/issues"

[build-system]
requires = [
  "scikit-build-core>=0.10",
  "pybind11>=2.10",
  "numpy>=2.0"
]
build-backend = "scikit_build_core.build"

[tool.scikit-build]
cmake.source-dir = "."
cmake.build-type = "Release"
cmake.args = [
  "-DIMG2NUM_BUILD_PYTHON=ON",
  "-DIMG2NUM_BUILD_EXAMPLES=OFF",
]
# Handle the version by using packages/py/pyproject.toml version
metadata.version.provider = "scikit_build_core.metadata.regex"
metadata.version.input = "packages/py/pyproject.toml"
metadata.version.regex = '^version = "(?P<value>[^"]+)"'

wheel.packages = ["img2num"]

sdist.include = [
  "CMakeLists.txt",
  "core/**",
  "bindings/py/**",
  "packages/py/**",
  "third_party/**"
]

[tool.uv]
package = true

[tool.uv.workspace]
members = [
  # All example apps with "-py" suffix
  "example-apps/*-py"
]

[tool.ruff]
target-version = "py310"
line-length = 88
exclude = ["third_party/", "docs/", ".venv/"]

[tool.ruff.lint]
select = [
  "E",   # pycodestyle errors
  "W",   # pycodestyle warnings
  "F",   # pyflakes
  "B",   # flake8-bugbear (mutable defaults, bare excepts, etc.)
  "UP",  # pyupgrade — modernise syntax
  "SIM", # flake8-simplify
]
# ruff obeys .gitignore by default
ignore = []

[tool.ruff.lint.per-file-ignores]
"**/__init__.py" = ["F401"] # Allow re-exports in __init__.py

[project.optional-dependencies]
dev = [
  "ruff>=0.4.0",
]

[tool.cibuildwheel]
build-verbosity = 1
root@e780943624da:/usr/src/app# git diff
diff --git a/pyproject.toml b/pyproject.toml
index f4ff60ff..96182223 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,7 @@
 [project]
 name = "img2num"
-version = "0.0.0"  # x-release-please-version
+# see tool.scikit-build
+dynamic = ["version"]
 description = "A fast and accurate raster image to SVG conversion library"
 requires-python = ">=3.10"
 license = { text = "MIT" }
@@ -42,6 +43,10 @@ cmake.args = [
   "-DIMG2NUM_BUILD_PYTHON=ON",
   "-DIMG2NUM_BUILD_EXAMPLES=OFF",
 ]
+# Handle the version by using packages/py/pyproject.toml version
+metadata.version.provider = "scikit_build_core.metadata.regex"
+metadata.version.input = "packages/py/pyproject.toml"
+metadata.version.regex = '^version = "(?P<value>[^"]+)"'

 wheel.packages = ["img2num"]

Verification by reverting the changes I made

Revert the changes

root@e780943624da:/usr/src/app# git restore .
root@e780943624da:/usr/src/app# git diff

Rebuild

root@e780943624da:/usr/src/app# uv pip install scikit-build-core pybind11 "numpy>=2.0" build
python -m build --wheel --no-isolation --outdir /tmp/test-wheel .
Audited 4 packages in 1ms
* Getting build dependencies for wheel...
* Building wheel...
*** scikit-build-core 0.12.2 using CMake 3.31.6 (wheel)
*** Configuring CMake...
loading initial cache file /tmp/tmpjlmbwedu/build/CMakeInit.txt
-- The CXX compiler identification is GNU 14.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++-14 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- ===============================================================
-- IMG2NUM_DEBUG_CACHE_VARIABLES_DUMP Output:
-- ===============================================================
-- [User-Defined] IMG2NUM_BUILD_C=ON
-- [User-Defined] IMG2NUM_BUILD_EXAMPLES=OFF
-- [User-Defined] IMG2NUM_BUILD_PYTHON=ON
-- [User-Defined] IMG2NUM_DEBUG_CACHE_VARIABLES_DUMP=ON
-- [Auto] Img2NumRootManager_BINARY_DIR=/tmp/tmpjlmbwedu/build
-- [Auto] Img2NumRootManager_IS_TOP_LEVEL=ON
-- [Auto] Img2NumRootManager_SOURCE_DIR=/usr/src/app
-- CMAKE_ADDR2LINE=/usr/bin/addr2line
-- CMAKE_AR=/usr/bin/ar
-- CMAKE_BUILD_TYPE=Release
-- CMAKE_COMMAND=/usr/bin/cmake
-- CMAKE_CPACK_COMMAND=/usr/bin/cpack
-- CMAKE_CTEST_COMMAND=/usr/bin/ctest
-- CMAKE_CXX_COMPILER=/usr/bin/g++-14
-- CMAKE_CXX_COMPILER_AR=/usr/bin/gcc-ar-14
-- CMAKE_CXX_COMPILER_RANLIB=/usr/bin/gcc-ranlib-14
-- CMAKE_CXX_FLAGS=
-- CMAKE_CXX_FLAGS_DEBUG=-g
-- CMAKE_CXX_FLAGS_MINSIZEREL=-Os -DNDEBUG
-- CMAKE_CXX_FLAGS_RELEASE=-O3 -DNDEBUG
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO=-O2 -g -DNDEBUG
-- CMAKE_DLLTOOL=CMAKE_DLLTOOL-NOTFOUND
-- CMAKE_EXECUTABLE_FORMAT=ELF
-- CMAKE_EXE_LINKER_FLAGS=
-- CMAKE_EXE_LINKER_FLAGS_DEBUG=
-- CMAKE_EXE_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_EXE_LINKER_FLAGS_RELEASE=
-- CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_EXPORT_BUILD_DATABASE=
-- CMAKE_EXPORT_COMPILE_COMMANDS=
-- CMAKE_EXTRA_GENERATOR=
-- CMAKE_FIND_PACKAGE_REDIRECTS_DIR=/tmp/tmpjlmbwedu/build/CMakeFiles/pkgRedirects
-- CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH
-- CMAKE_GENERATOR=Ninja
-- CMAKE_GENERATOR_INSTANCE=
-- CMAKE_GENERATOR_PLATFORM=
-- CMAKE_GENERATOR_TOOLSET=
-- CMAKE_HOME_DIRECTORY=/usr/src/app
-- CMAKE_INSTALL_PREFIX=/tmp/tmpjlmbwedu/wheel/platlib
-- CMAKE_INSTALL_SO_NO_EXE=1
-- CMAKE_LINKER=/usr/bin/ld
-- CMAKE_MAKE_PROGRAM=/usr/bin/ninja
-- CMAKE_MODULE_LINKER_FLAGS=
-- CMAKE_MODULE_LINKER_FLAGS_DEBUG=
-- CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_MODULE_LINKER_FLAGS_RELEASE=
-- CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_NM=/usr/bin/nm
-- CMAKE_OBJCOPY=/usr/bin/objcopy
-- CMAKE_OBJDUMP=/usr/bin/objdump
-- CMAKE_PLATFORM_INFO_INITIALIZED=1
-- CMAKE_PREFIX_PATH=/usr/src/app/.venv/lib/python3.13/site-packages
-- CMAKE_PROJECT_DESCRIPTION=
-- CMAKE_PROJECT_HOMEPAGE_URL=
-- CMAKE_PROJECT_NAME=Img2NumRootManager
-- CMAKE_RANLIB=/usr/bin/ranlib
-- CMAKE_READELF=/usr/bin/readelf
-- CMAKE_ROOT=/usr/share/cmake-3.31
-- CMAKE_SHARED_LINKER_FLAGS=
-- CMAKE_SHARED_LINKER_FLAGS_DEBUG=
-- CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_SHARED_LINKER_FLAGS_RELEASE=
-- CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_SKIP_INSTALL_RPATH=NO
-- CMAKE_SKIP_RPATH=NO
-- CMAKE_STATIC_LINKER_FLAGS=
-- CMAKE_STATIC_LINKER_FLAGS_DEBUG=
-- CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL=
-- CMAKE_STATIC_LINKER_FLAGS_RELEASE=
-- CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO=
-- CMAKE_STRIP=/usr/bin/strip
-- CMAKE_TAPI=CMAKE_TAPI-NOTFOUND
-- CMAKE_UNAME=/usr/bin/uname
-- CMAKE_VERBOSE_MAKEFILE=FALSE
-- PYTHON_EXECUTABLE=/usr/src/app/.venv/bin/python
-- PYTHON_INCLUDE_DIR=/usr/include/python3.13
-- PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.13.so
-- Python3_EXECUTABLE=/usr/src/app/.venv/bin/python
-- Python3_FIND_REGISTRY=NEVER
-- Python3_INCLUDE_DIR=/usr/include/python3.13
-- Python3_NumPy_INCLUDE_DIR=/usr/src/app/.venv/lib/python3.13/site-packages/numpy/_core/include
-- Python3_ROOT_DIR=/usr
-- Python_EXECUTABLE=/usr/src/app/.venv/bin/python
-- Python_FIND_REGISTRY=NEVER
-- Python_INCLUDE_DIR=/usr/include/python3.13
-- Python_NumPy_INCLUDE_DIR=/usr/src/app/.venv/lib/python3.13/site-packages/numpy/_core/include
-- Python_ROOT_DIR=/usr
-- SKBUILD=2
-- SKBUILD_CORE_VERSION=0.12.2
-- SKBUILD_DATA_DIR=/tmp/tmpjlmbwedu/wheel/data
-- SKBUILD_HEADERS_DIR=/tmp/tmpjlmbwedu/wheel/headers
-- SKBUILD_METADATA_DIR=/tmp/tmpjlmbwedu/wheel/metadata
-- SKBUILD_NULL_DIR=/tmp/tmpjlmbwedu/wheel/null
-- SKBUILD_PLATLIB_DIR=/tmp/tmpjlmbwedu/wheel/platlib
-- SKBUILD_PROJECT_NAME=img2num
-- SKBUILD_PROJECT_VERSION=0.0.0
-- SKBUILD_PROJECT_VERSION_FULL=0.0.0
-- SKBUILD_SABI_COMPONENT=
-- SKBUILD_SABI_VERSION=
-- SKBUILD_SCRIPTS_DIR=/tmp/tmpjlmbwedu/wheel/scripts
-- SKBUILD_SOABI=cpython-313-x86_64-linux-gnu
-- SKBUILD_STATE=wheel
-- _CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED=TRUE
-- _CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED=TRUE
-- ===============================================================


-- /tmp/tmpjlmbwedu/build
-- Found Python3: /usr/src/app/.venv/bin/python (found version "3.13.5") found components: Interpreter
Found system Dawn
-- Core library configured with /usr/src/app/core/src/img2num/Error.cpp;/usr/src/app/core/src/internal/SavitskyGolay.cpp;/usr/src/app/core/src/internal/bezier.cpp;/usr/src/app/core/src/internal/bilateral_filter.cpp;/usr/src/app/core/src/internal/bilateral_filter_gpu.cpp;/usr/src/app/core/src/internal/contours.cpp;/usr/src/app/core/src/internal/douglas_peucker.cpp;/usr/src/app/core/src/internal/fft_iterative.cpp;/usr/src/app/core/src/internal/graph.cpp;/usr/src/app/core/src/internal/image_to_svg.cpp;/usr/src/app/core/src/internal/image_utils.cpp;/usr/src/app/core/src/internal/kmeans.cpp;/usr/src/app/core/src/internal/kmeans_gpu.cpp;/usr/src/app/core/src/internal/labels_to_svg.cpp;/usr/src/app/core/src/internal/node.cpp;/usr/src/app/core/src/internal/shared_contours.cpp
-- Found Python3: /usr/src/app/.venv/bin/python (found version "3.13.5") found components: Interpreter Development.Module NumPy
-- Performing Test HAS_FLTO_AUTO
-- Performing Test HAS_FLTO_AUTO - Success
-- Found pybind11: /usr/src/app/.venv/lib/python3.13/site-packages/pybind11/include (found version "3.0.4")
-- Configuring done (0.7s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/tmpjlmbwedu/build
*** Building project with Ninja...
[0/2] Re-checking globbed directories...
[1/21] cd /tmp/tmpjlmbwedu/build/core && /usr/src/app/.venv/bin/python /usr/src/app/core/tools/embed_shaders.py /usr/src/app/core/src/internal/resources /tmp/tmpjlmbwedu/build/embedded_shaders.h
Writing to /tmp/tmpjlmbwedu/build/embedded_shaders.h
[20/21] Linking CXX shared module bindings/py/_img2num.cpython-313-x86_64-linux-gnu.so
*** Installing project into wheel...
-- Install configuration: "Release"
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/lib/cmake/Img2Num/Img2NumConfig.cmake
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/lib/cmake/Img2Num/Img2NumConfigVersion.cmake
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/lib/libImg2Num.a
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/lib/cmake/Img2Num/Img2NumTargets.cmake
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/lib/cmake/Img2Num/Img2NumTargets-release.cmake
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/include/img2num
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/include/img2num/img2num.h
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/include/img2num/internal
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/include/img2num/img2num
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/include/img2num/img2num/Error.h
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/img2num
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/img2num/api.py
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/img2num/__init__.py
-- Installing: /tmp/tmpjlmbwedu/wheel/platlib/img2num/_img2num.cpython-313-x86_64-linux-gnu.so
*** Making wheel...
*** Created img2num-0.0.0-cp313-cp313-linux_x86_64.whl
Successfully built img2num-0.0.0-cp313-cp313-linux_x86_64.whl
root@e780943624da:/usr/src/app#

I'll push this update now.

- Previously, the publish step in our workflows caused version mismatches
  (see [v0.0.0 on PyPI](https://pypi.org/project/img2num/0.0.0/#files) and
  [v0.2.0 on GitHub](https://github.com/Ryan-Millard/Img2Num/releases/tag/packages-py-v0.2.0)).
  This was caused by release-please only bumping the version definition in
  `packages/py/pyproject.toml` and not in root `pyproject.toml`; when releasing, the root
  version definition was used, caused misaligned versioning.

- Fixed by dynamically deriving the Python version in the root-level `pyproject.toml` from
  the version definition in `packages/py/pyproject.toml`, which is versioned by release-please.
@Krasner

Krasner commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator Author

I'll push this update now.

Sounds good to me. This is a much cleaner solution

@coderabbitai coderabbitai Bot added build-system and removed github_actions Pull requests that update GitHub Actions code labels Jun 29, 2026
@Ryan-Millard

Copy link
Copy Markdown
Owner

@Ryan-Millard

Copy link
Copy Markdown
Owner

We want to pay attention to this test workflow:

https://github.com/Ryan-Millard/Img2Num/actions/runs/28387177495/job/84104736185?pr=473

Forget that. I made a mistake with the comparison.😂😂 Bash is a strange language.

This is the new run:
https://github.com/Ryan-Millard/Img2Num/actions/runs/28387423848/job/84105598692?pr=473

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 29, 2026
@Ryan-Millard

Copy link
Copy Markdown
Owner

@Krasner I don't think I need to push a fix for it. You can see that the versions are the same in the workflow run (even though it fails).

The problem is the way I wrote the workflow, not the versions. We'll delete the workflow in any case, so we don't need to fix it.

@Krasner

Krasner commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator Author

@Krasner I don't think I need to push a fix for it. You can see that the versions are the same in the workflow run (even though it fails).

The problem is the way I wrote the workflow, not the versions. We'll delete the workflow in any case, so we don't need to fix it.

Yeah, the solution works. I think you can push it after removing the test workflow (and updating release.yml to remove the on pull_request)

@Ryan-Millard
Ryan-Millard merged commit 0c81844 into Ryan-Millard:dev Jun 29, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build-system ci js/ts python changes to python bindings or python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants