Skip to content

Fix build for python 3.14 - #494

Merged
clemens-fricke merged 9 commits into
mainfrom
fix-build
Jun 25, 2026
Merged

Fix build for python 3.14#494
clemens-fricke merged 9 commits into
mainfrom
fix-build

Conversation

@clemens-fricke

@clemens-fricke clemens-fricke commented Jun 24, 2026

Copy link
Copy Markdown
Member

Overview

Fixed building for Python 3.14. Only 3.14t will not be released due to issues in the test pipeline.

Addressed issues

  • Build issues for Python 3.14
  • Rename (hopefully) all relevant references of tataratat to isosuite

Checklists

  • Set target branch to develop
  • Documentations are up-to-date.

Summary by CodeRabbit

  • Chores
    • Updated release and build automation to run on pushes to both main and fix-build, consolidating wheel creation into a single multi-platform build matrix and improving artifact handling/retention.
    • Tightened package publishing so it only uploads from the main branch.
  • Documentation
    • Updated the Sphinx documentation GitHub link to the new repository.
  • Chores
    • Updated .gitignore to ignore the examples/not_upload/ directory.

@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@clemens-fricke, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 54 minutes and 26 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

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 credits.

🚦 How do rate 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 see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 584dddb3-93bf-43ce-9c6d-6cb887e6d500

📥 Commits

Reviewing files that changed from the base of the PR and between ab5c79c and 356f7d8.

📒 Files selected for processing (1)
  • .github/workflows/main.yml

Walkthrough

The workflow now triggers on fix-build, consolidates wheel builds into a matrix job with updated action versions and artifact settings, updates sdist and PyPI publish steps, and adds a Linux CIBW_SKIP rule. .gitignore and the Sphinx GitHub link are also updated.

Changes

CI Workflow Updates and Housekeeping

Layer / File(s) Summary
Trigger and wheel build matrix
.github/workflows/main.yml
Expands on.push.branches to include fix-build and replaces the wheel jobs with a matrix-driven build_wheels job that updates checkout, cibuildwheel, artifact upload, environment fields, artifact naming, retention, and the Linux CIBW_SKIP rule.
Sdist build and PyPI publish
.github/workflows/main.yml
Updates build_sdist to use actions/checkout@v7 and actions/upload-artifact@v7 with 7-day retention, and updates upload_pypi to download artifacts with v7 and publish only from refs/heads/main.
Ignore entry and docs link
.gitignore, docs/source/conf.py
Adds examples/not_upload/ to .gitignore and changes the GitHub icon link URL in Sphinx config to isosuite/splinepy.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐇 Hop, hop—new triggers gleam,
Wheels and sdist in a tidy stream.
Main only ships the PyPI light,
GitHub links now point just right.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: fixing Python 3.14 build support.
Description check ✅ Passed The description includes Overview, Addressed issues, and Checklists; only the Showcase and some checklist items are missing.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-build

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/main.yml (1)

127-141: 🔒 Security & Privacy | 🟠 Major

Gate upload_pypi at the job level. Move github.ref == 'refs/heads/main' from the publish step to the upload_pypi job so non-main runs never get id-token: write.

🤖 Prompt for 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.

In @.github/workflows/main.yml around lines 127 - 141, The upload_pypi workflow
job is only gated at the publish step, which still grants id-token: write to
non-main runs. Move the github.ref == 'refs/heads/main' condition from the
Publish wheels to PyPI step to the upload_pypi job itself so the entire job is
skipped off main; update the upload_pypi job definition in main.yml and keep the
existing actions/download-artifact and pypa/gh-action-pypi-publish steps
unchanged otherwise.
🤖 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/main.yml:
- Around line 66-68: The checkout step in the build jobs leaves GitHub
credentials available to later steps because actions/checkout persists them by
default. Update each affected checkout invocation in the workflow to explicitly
set persist-credentials to false alongside the existing submodules setting, so
the job can still fetch sources without keeping the token around. Use the
checkout step entries in main.yml as the targets for this change.
- Line 5: Add workflow-level concurrency to the main workflow so only the latest
run per ref proceeds and older runs are canceled before artifact publishing.
Update the workflow configuration near the top of the file (around the branches
trigger) by introducing a per-ref concurrency group with cancellation for
superseded runs, so stale builds cannot publish wheels ahead of newer runs.
- Line 20: The workflow still uses mutable GitHub Actions refs, so update the
job in main.yml to pin every action to an immutable commit SHA instead of
version tags or branches. Replace the uses entries for actions/checkout,
actions/upload-artifact, actions/download-artifact, pypa/cibuildwheel, and
pypa/gh-action-pypi-publish with their corresponding commit SHAs so the workflow
is fully pinned.

---

Outside diff comments:
In @.github/workflows/main.yml:
- Around line 127-141: The upload_pypi workflow job is only gated at the publish
step, which still grants id-token: write to non-main runs. Move the github.ref
== 'refs/heads/main' condition from the Publish wheels to PyPI step to the
upload_pypi job itself so the entire job is skipped off main; update the
upload_pypi job definition in main.yml and keep the existing
actions/download-artifact and pypa/gh-action-pypi-publish steps unchanged
otherwise.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 32dade91-1b2f-424f-af53-d0308f45ee88

📥 Commits

Reviewing files that changed from the base of the PR and between a53291e and b0d725f.

📒 Files selected for processing (3)
  • .github/workflows/main.yml
  • .gitignore
  • docs/source/conf.py

on:
push:
branches: ["main"]
branches: ["main", "fix-build"]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n -C2 '^concurrency:|cancel-in-progress' .github/workflows/main.yml

Repository: isosuite/splinepy

Length of output: 155


Add workflow concurrency before publishing artifacts.

Line 5 allows multiple push builds to run at once; with skip-existing, an older main run can publish stale wheels before a newer run finishes. Add per-ref concurrency and cancel superseded runs.

Proposed fix
 on:
   push:
     branches: ["main", "fix-build"]
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
branches: ["main", "fix-build"]
branches: ["main", "fix-build"]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 3-5: insufficient job-level concurrency limits (concurrency-limits): workflow is missing concurrency setting

(concurrency-limits)

🤖 Prompt for 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.

In @.github/workflows/main.yml at line 5, Add workflow-level concurrency to the
main workflow so only the latest run per ref proceeds and older runs are
canceled before artifact publishing. Update the workflow configuration near the
top of the file (around the branches trigger) by introducing a per-ref
concurrency group with cancellation for superseded runs, so stale builds cannot
publish wheels ahead of newer runs.

Source: Linters/SAST tools

Comment thread .github/workflows/main.yml Outdated
submodules: recursive
- name: build wheels
uses: pypa/cibuildwheel@v2.23.2
uses: pypa/cibuildwheel@v4.1.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

for spec in \
  "https://github.com/actions/checkout.git refs/tags/v7" \
  "https://github.com/actions/upload-artifact.git refs/tags/v7" \
  "https://github.com/actions/download-artifact.git refs/tags/v7" \
  "https://github.com/pypa/cibuildwheel.git refs/tags/v4.1.0" \
  "https://github.com/pypa/gh-action-pypi-publish.git refs/heads/release/v1"
do
  set -- $spec
  git ls-remote "$1" "$2"
done

Repository: isosuite/splinepy

Length of output: 438


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=".github/workflows/main.yml"
wc -l "$file"
sed -n '1,170p' "$file" | cat -n

Repository: isosuite/splinepy

Length of output: 4828


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=".github/workflows/main.yml"
wc -l "$file"
sed -n '1,170p' "$file" | cat -n

Repository: isosuite/splinepy

Length of output: 4828


Pin GitHub Actions to immutable SHAs. actions/checkout@v4, actions/upload-artifact@v7, actions/download-artifact@v7, pypa/cibuildwheel@v4.1.0, and pypa/gh-action-pypi-publish@release/v1 are still mutable refs; replace them with commit SHAs to satisfy the pinning policy.

🧰 Tools
🪛 zizmor (1.26.1)

[error] 20-20: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for 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.

In @.github/workflows/main.yml at line 20, The workflow still uses mutable
GitHub Actions refs, so update the job in main.yml to pin every action to an
immutable commit SHA instead of version tags or branches. Replace the uses
entries for actions/checkout, actions/upload-artifact,
actions/download-artifact, pypa/cibuildwheel, and pypa/gh-action-pypi-publish
with their corresponding commit SHAs so the workflow is fully pinned.

Source: Linters/SAST tools

Comment on lines +66 to 68
- uses: actions/checkout@v7
with:
submodules: recursive

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Do not persist checkout credentials in build jobs.

These jobs do not push back to GitHub, so the checkout token should not remain available to later build steps. actions/checkout persists credentials by default and supports persist-credentials: false. (github.com)

Proposed fix
     - uses: actions/checkout@v7
       with:
         submodules: recursive
+        persist-credentials: false

Also applies to: 92-94, 113-115

🧰 Tools
🪛 zizmor (1.26.1)

[warning] 66-68: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 66-66: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for 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.

In @.github/workflows/main.yml around lines 66 - 68, The checkout step in the
build jobs leaves GitHub credentials available to later steps because
actions/checkout persists them by default. Update each affected checkout
invocation in the workflow to explicitly set persist-credentials to false
alongside the existing submodules setting, so the job can still fetch sources
without keeping the token around. Use the checkout step entries in main.yml as
the targets for this change.

Source: Linters/SAST tools

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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/main.yml:
- Around line 8-9: The build artifact jobs are relying on default GitHub token
scopes instead of explicit least-privilege permissions. Update the workflow job
definitions for build_wheels and build_sdist to set only the permissions they
need, using the job names and the existing artifact build steps to locate them,
so the token scope is pinned rather than inherited from repository defaults.
- Line 46: The CIBW_BUILD environment assignment is using matrix.build directly
even though it resolves to an array, so the workflow needs to export a string
instead. Update the workflow job in main.yml to convert or join the matrix.build
values before assigning them to CIBW_BUILD, using the matrix.build reference in
the build step environment block.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9f073cf6-649b-4371-a5c0-f14e9f894409

📥 Commits

Reviewing files that changed from the base of the PR and between b0d725f and ab5c79c.

📒 Files selected for processing (1)
  • .github/workflows/main.yml

Comment on lines +8 to 9
build_wheels:
strategy:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Set explicit least-privilege token permissions for artifact build jobs.

build_wheels and build_sdist currently rely on repository defaults. Pin job permissions explicitly to avoid accidental broad scopes.

Proposed fix
   build_wheels:
+    permissions:
+      contents: read
     strategy:
       fail-fast: false
@@
   build_sdist:
+    permissions:
+      contents: read
     runs-on: ubuntu-latest

Also applies to: 58-60

🧰 Tools
🪛 zizmor (1.26.1)

[warning] 8-56: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block

(excessive-permissions)


[info] 8-8: workflow or action definition without a name (anonymous-definition): this job

(anonymous-definition)

🤖 Prompt for 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.

In @.github/workflows/main.yml around lines 8 - 9, The build artifact jobs are
relying on default GitHub token scopes instead of explicit least-privilege
permissions. Update the workflow job definitions for build_wheels and
build_sdist to set only the permissions they need, using the job names and the
existing artifact build steps to locate them, so the token scope is pinned
rather than inherited from repository defaults.

Source: Linters/SAST tools

Comment thread .github/workflows/main.yml Outdated
@clemens-fricke
clemens-fricke merged commit 995f630 into main Jun 25, 2026
33 checks passed
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