Skip to content

Pin bindings CI to the maintained lockfile#1748

Merged
benalleng merged 1 commit into
payjoin:masterfrom
chavic:chavic/bindings-ci-lockfiles
Jul 17, 2026
Merged

Pin bindings CI to the maintained lockfile#1748
benalleng merged 1 commit into
payjoin:masterfrom
chavic:chavic/bindings-ci-lockfiles

Conversation

@chavic

@chavic chavic commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

The bindings workflows (csharp, dart, python, javascript) never use the repository's lockfile mechanism, so every CI run resolves the full dependency graph fresh, and today that broke every PR's Windows csharp job: tokio 1.53.0 resolves as 1.85-compatible but uses Once::wait (stabilized in 1.86) in its Windows-only signal code. This wires the same contrib/lockfile.sh + Cargo-recent.lock mechanism the Rust jobs already use into the four bindings test entry points, with a PowerShell mirror for the Windows csharp entry, restoring the previous lockfile state on exit. The detached payjoin-ffi/dart/native wrapper workspace still resolves fresh and is left for a separate change.

Disclosure: co-authored by Claude Code.

The bindings test scripts ran bare cargo with no lockfile, so every CI
run resolved the whole dependency graph to the latest crates. tokio
1.53.0 made the cost concrete: it resolves as 1.85-compatible but uses
Once::wait, stabilized in 1.86, in its Windows-only signal code, which
broke the Windows csharp job on every pull request.

Source contrib/lockfile.sh and build against Cargo-recent.lock in the
four bindings test entry points, the same mechanism the Rust jobs use
and the lock-maintenance workflow keeps updated. The Windows csharp
entry point mirrors it in PowerShell since lockfile.sh is bash.

lockfile.sh now records absolute paths: its EXIT trap restored the
lockfile relative to the current directory, which silently no-ops for
callers that change directory after use_lockfile, as these scripts do.

The detached payjoin-ffi/dart/native wrapper workspace still resolves
fresh and is left for a separate change.
@chavic

chavic commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator Author

Note for sequencing: #1707 touches generate_bindings.ps1 too, so whichever lands second needs a trivial rebase.

@coveralls

Copy link
Copy Markdown
Collaborator

Coverage Report for CI Build 29582554365

Coverage remained the same at 86.187%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 15963
Covered Lines: 13758
Line Coverage: 86.19%
Coverage Strength: 345.57 hits per line

💛 - Coveralls

@chavic
chavic requested a review from benalleng July 17, 2026 13:39

@benalleng benalleng left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

ACK f2001bf I don't think the dart native bindings wrapper needs this at the moment since we don't have any tests or build scripts that touch that at the moment and is only really used for manual publishing

@benalleng
benalleng merged commit 647957a into payjoin:master Jul 17, 2026
29 of 30 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.

3 participants