Release v2.11.0.1#1
Merged
Merged
Conversation
072ee2a to
8c7c3e2
Compare
Jimbo4350
added a commit
that referenced
this pull request
May 28, 2026
After the warp-bracket fix, failures #1/#2/CardanoSolutions#4 still reproduce with a different shape: stage N+1's kupo logs ConfigurationMaxConcurrency and then stalls before ConfigurationCardanoNode. That maps to the call between newDBPool returning and newProducer being called — i.e. inside withDatabaseExclusiveWriter / withLongLivedConnection. Most likely stage N+1's withConnection' is blocking on a SQLite file lock that stage N's RW connection hasn't released yet. Add [db-trace] OPENING / OPENED / BODYEND / CLOSED stderr lines so we can confirm whether stage N's close actually runs before stage N+1's open, and measure the inter-stage gap. Same shape as the existing [port-trace] diagnostic on the warp side. Diagnostic only; no semantic change to the bracket itself.
21a72d0 to
ce4dd0f
Compare
ce4dd0f to
5420327
Compare
5420327 to
24880a7
Compare
There was a problem hiding this comment.
Pull request overview
Releases v2.11.0.1 with cardano-node 11.0.1 / Conway ledger API migration, a new flake-parts/haskell.nix build (including a static musl variant), Hydra job aggregates, a CI workflow that drives integration tests against a real preprod node, and a release-upload workflow. Also fixes pooled-HTTP and warp socket-ownership issues that affected test reliability.
Changes:
- Ledger migration: switch to
Ledger.Tx Ledger.TopTx era,NativeScript/Conway*purposes,PlutusV4,hashSize,txSeqBlockBodyL,Cardano.Network.NodeToClient, and add a stubBlockDijkstracase. - New Nix/Hydra infra (
flake.nix,flake/lib.nix,perSystem/*,.envrc) plus updatedcabal.project/package.yaml/kupo.cabalfor the new index-state and sub-libraries. - New
continuous-integration.yamlandrelease-upload.yamlworkflows (replacingbuild.yaml); test fixes for HTTP connection pooling and warp socket ownership; README documentation for development and remote flake builds.
Reviewed changes
Copilot reviewed 27 out of 29 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| test/Test/KupoSpec.hs | Disable idle HTTP connection pool to avoid stale-socket reuse between stages. |
| test/Test/Kupo/AppSpec.hs | Same idle-pool fix for the QuickCheck state-machine manager. |
| src/Kupo/Prelude.hs | Rename sizeHash → hashSize for cardano-crypto bump. |
| src/Kupo/Data/Hydra.hs | Switch decoder to Conway era types (ConwayPlutusPurpose, fromConwayData/Script). |
| src/Kupo/Data/Cardano/Transaction.hs | Re-parameterize transactions with Ledger.TopTx and use txIdTx. |
| src/Kupo/Data/Cardano/Script.hs | Rename TimelockScript → NativeScript, add PlutusV4 tag, update mkBinaryPlutusScript. |
| src/Kupo/Data/Cardano/Point.hs | Add OVERLAPPING to disambiguate from ouroboros-network's ToJSON Point instance. |
| src/Kupo/Data/Cardano/Metadata.hs | Use Ledger.upgradeTxAuxData chain instead of translateAlonzoTxAuxData. |
| src/Kupo/Data/Cardano.hs | Use txSeqBlockBodyL lens; add unsupported BlockDijkstra case. |
| src/Kupo/Control/MonadOuroboros.hs | Move NodeToClient import to Cardano.Network; add dijkstra codec config; new mux tracers. |
| src/Kupo/App/Http.hs | Own the listening socket via bracket to release the port deterministically on cancel. |
| README.md | New Development/Build sections covering Nix, direnv, and remote flake refs. |
| perSystem/project.nix | haskell.nix cabalProject' with CHaP input, sha256map, musl support, and test fixtures. |
| perSystem/packages.nix | Expose kupo, kupo-lib, kupo-tests, and checks.kupo-unit. |
| perSystem/musl.nix | Expose kupo-musl cross-build. |
| perSystem/hydraJobs.nix | Aggregate required/nonrequired jobs and a gitrev derivation. |
| perSystem/devShells.nix | Default devShell with cabal/ghcid/HLS and submodule re-sync hook. |
| package.yaml / kupo.cabal | Set version 2.11.0.1, swap to ouroboros-* sub-libs and cardano-diffusion. |
| flake/lib.nix | recursiveImports helper for per-system module aggregation. |
| flake.nix | flake-parts entry point with haskell.nix overlays and self.submodules = true. |
| flake.lock | Pin all new flake inputs. |
| cabal.project | Bump index-state and constraints for cardano-node 11.0.1 ecosystem. |
| .gitmodules | Switch submodule URLs to https. |
| .gitignore | Ignore /.direnv. |
| .github/workflows/release-upload.yaml | New workflow: poll Hydra cache for kupo-musl, tar it, draft GitHub release. |
| .github/workflows/continuous-integration.yaml | New workflow: build kupo-tests via Hydra cache, run against a preprod cardano-node restored from S3. |
| .github/workflows/build.yaml | Removed in favor of the new Nix-based workflows. |
| .envrc | direnv bootstrap: init submodules before use flake. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Open the listening socket ourselves (with SO_REUSEADDR) and close it in a bracket around Warp.runSettingsSocket rather than letting Warp.runSettings manage it. The close then runs on every exit path, including async cancel, so the port is freed before the next e2e stage rebinds it; fixes intermittent EADDRINUSE when kupo is restarted on the same port.
Set managerIdleConnectionCount = 0 so each request opens a fresh connection. The e2e tests restart kupo on the same port between stages, and reusing a connection pooled from the previous instance caused intermittent failures.
…anager Same fix as the e2e manager (managerIdleConnectionCount = 0) so the state-machine suite never reuses a connection pooled from a prior kupo instance on the same port.
24880a7 to
2a8d635
Compare
Also drop the redundant /checkpoints golden test: its shape assertions are already covered, more strictly, by the OpenAPI Point schema validated in the session test (additionalProperties: false, required slot_no/header_hash).
- Script: add PlutusV4 to scriptToJson, scriptToBytes and scriptFromBytes so the new Ledger.Language constructor is handled and the on-disk script tag encode/decode round-trip stays symmetric (-Wincomplete-patterns). - Prelude: sizeHash -> hashSize (sizeHash deprecated in cardano-crypto-class). - Metadata: drop redundant qualified Cardano.Ledger.Alonzo.TxAuxData import (-Wunused-imports).
Match getAddrInfo's result with `addr :| _` to select its NonEmpty instance, making the head pattern total rather than the partial `addr : _`. getAddrInfo never returns an empty list (it throws on resolution failure), so this is a type-level guarantee, not a behaviour change. Addresses the review note on openListeningSocket.
2a8d635 to
c90a188
Compare
Jimbo4350
approved these changes
May 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Releases
v2.11.0.1with cardano-node11.0.1compatibility and protocol version 11 van Rossemintegration, plus Nix/Hydra build infrastructure.
What's in here
including dependency bumps and cabal source-repository-package updates.
kupo(dynamic)and
kupo-musl(fully static) packages, pluskupo-tests, a devShell, andHydra aggregates.
(downloading test binary from Hydra cache, restoring node DB from S3),
plus a release-upload workflow for static musl binaries.
managers; assert /checkpoints encoding; own warp's listening socket via
bracket.
make shell), direnv setup, and flake-ref examples for external builders.Compatibility
Build
See the updated README.md for more information.