Skip to content

cardano-testnet: Add --nodes flag for per-node binary configuration#6559

Open
palas wants to merge 9 commits intomasterfrom
testnet-specify-node-bin-per-node
Open

cardano-testnet: Add --nodes flag for per-node binary configuration#6559
palas wants to merge 9 commits intomasterfrom
testnet-specify-node-bin-per-node

Conversation

@palas
Copy link
Copy Markdown
Contributor

@palas palas commented May 6, 2026

Description

Adds a --nodes CLI flag to cardano-testnet that allows specifying the role (SPO or relay) and optionally a custom cardano-node binary for each node in the testnet. This enables running testnets with mixed node versions, which is needed for testing compatibility across node releases.

The new flag coexists with the existing --num-pool-nodes via <|> in the parser, so either can be used:

--nodes spo,spo:node-bin=/path/to/custom-node,relay,relay
--num-pool-nodes 3   # unchanged, still works

At creation time, custom binaries are validated by running --version and the result is recorded in a YAML env file (node-data/nodeN/env). At runtime, the env file is read to resolve the binary, falling back to the default resolution when no env file exists.

Base PR: #6563 (enforces SPOs come first and splits node list into SPO and relay)

Checklist

  • Commit sequence broadly makes sense and commits have useful messages
  • New tests are added if needed and existing tests are updated. These may include:
    • golden tests
    • property tests
    • roundtrip tests
    • integration tests
      See Running tests for more details
  • Any changes are noted in the CHANGELOG.md for affected package
  • The version bounds in .cabal files are updated
  • CI passes. See note on CI. The following CI checks are required:
    • Code is linted with hlint. See .github/workflows/check-hlint.yml to get the hlint version
    • Code is formatted with stylish-haskell. See .github/workflows/stylish-haskell.yml to get the stylish-haskell version
    • Code builds on Linux, MacOS and Windows for ghc-9.6 and ghc-9.12
  • Self-reviewed the diff

@palas palas requested a review from a team as a code owner May 6, 2026 01:59
@palas palas self-assigned this May 6, 2026
@palas palas force-pushed the testnet-specify-node-bin-per-node branch 2 times, most recently from f0bcf8d to 88a49cf Compare May 6, 2026 23:54
@palas palas changed the base branch from master to split-nodes-list-into-spo-and-relay May 6, 2026 23:56
@palas palas changed the title cardano-testnet: Add --nodes flag for per-node binary configuration cardano-testnet: Add --nodes flag for per-node binary configuration May 6, 2026
@palas palas force-pushed the split-nodes-list-into-spo-and-relay branch from 9ca8af4 to 77fa7d8 Compare May 7, 2026 00:06
@palas palas force-pushed the testnet-specify-node-bin-per-node branch from 88a49cf to 450f24b Compare May 7, 2026 00:06
Comment thread cardano-testnet/src/Testnet/Start/Cardano.hs Outdated
Comment thread cardano-testnet/src/Testnet/Runtime.hs Outdated
Comment thread cardano-testnet/src/Testnet/Start/Cardano.hs Outdated
Comment thread cardano-testnet/src/Testnet/Start/Cardano.hs Outdated
Comment thread cardano-testnet/src/Testnet/Start/Cardano.hs Outdated
Comment thread cardano-testnet/src/Testnet/Start/Cardano.hs Outdated
Comment thread cardano-testnet/src/Parsers/Cardano.hs Outdated
Comment thread cardano-testnet/src/Testnet/Start/Types.hs Outdated
Comment thread cardano-testnet/src/Testnet/Start/Cardano.hs
Comment thread cardano-testnet/src/Testnet/Start/Types.hs Outdated
Comment thread cardano-testnet/src/Parsers/Cardano.hs Outdated
Copy link
Copy Markdown
Contributor

@carbolymer carbolymer left a comment

Choose a reason for hiding this comment

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

Exception handling is most important here

@palas palas force-pushed the split-nodes-list-into-spo-and-relay branch from def6fd7 to 393ad15 Compare May 7, 2026 16:19
@palas palas force-pushed the testnet-specify-node-bin-per-node branch from 450f24b to 6530ec1 Compare May 7, 2026 16:19
@palas palas force-pushed the split-nodes-list-into-spo-and-relay branch from 393ad15 to eb5f40e Compare May 7, 2026 16:25
@palas palas force-pushed the testnet-specify-node-bin-per-node branch from 6530ec1 to 8bb24b5 Compare May 7, 2026 16:25
Base automatically changed from split-nodes-list-into-spo-and-relay to master May 7, 2026 17:59
@palas palas force-pushed the testnet-specify-node-bin-per-node branch 2 times, most recently from 744a4ed to 68aa58b Compare May 7, 2026 19:27
Create a sandbox for Cardano testnet

Available options:
--nodes SPEC[,SPEC...] Comma-separated node specifications. SPO nodes must
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.

My question would be is do we expect more options to be specified beyond what is added today? If so then we may be better off specifying a file.

Copy link
Copy Markdown
Contributor Author

@palas palas May 8, 2026

Choose a reason for hiding this comment

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

It is hard to tell, I imagine there must be things you could potentially want to specify per node, but then there is also the possibility of creating the env and modifying before executing. The functionality that I was thinking about that seems would be convenient would be to have multipliers, like 3x:spo,4x:relay:node-bin=<...>.

@palas palas requested review from Jimbo4350 and carbolymer May 8, 2026 20:06
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