diff --git a/bench/locli/locli.cabal b/bench/locli/locli.cabal index a974169cdb8..ef85c76f0ad 100644 --- a/bench/locli/locli.cabal +++ b/bench/locli/locli.cabal @@ -126,7 +126,7 @@ library , hashable , optparse-applicative-fork >= 0.18.1 , ouroboros-consensus - , ouroboros-network-api ^>= 0.14 + , ouroboros-network-api ^>= 0.14.2 , sop-core , split , sqlite-easy >= 1.1.0.1 diff --git a/cabal.project b/cabal.project index bc421ffd20b..8f157aa2ad6 100644 --- a/cabal.project +++ b/cabal.project @@ -14,7 +14,7 @@ repository cardano-haskell-packages -- you need to run if you change them index-state: , hackage.haskell.org 2025-06-03T08:07:10Z - , cardano-haskell-packages 2025-06-03T08:30:50Z + , cardano-haskell-packages 2026-01-05T11:07:19Z packages: cardano-node @@ -92,9 +92,7 @@ if impl (ghc >= 9.12) , servant:base , servant-server:base - , cardano-ping:base - , network-mux:base - , ouroboros-network:base - , ouroboros-network-api:base - , ouroboros-network-framework:base , ouroboros-network-protocols:base + +constraints: + hedgehog-extras == 0.7.0.0 diff --git a/cardano-node/cardano-node.cabal b/cardano-node/cardano-node.cabal index 43b1763f08c..1dc80c10f6c 100644 --- a/cardano-node/cardano-node.cabal +++ b/cardano-node/cardano-node.cabal @@ -1,7 +1,7 @@ cabal-version: 3.8 name: cardano-node -version: 10.5.0 +version: 10.5.4 synopsis: The cardano full node description: The cardano full node. category: Cardano, @@ -150,7 +150,7 @@ library , base16-bytestring , bytestring , cardano-api ^>= 10.16 - , cardano-crypto-class + , cardano-crypto-class ^>=2.2.3.2 , cardano-crypto-wrapper , cardano-git-rev ^>=0.2.2 , cardano-ledger-alonzo @@ -197,9 +197,9 @@ library , ouroboros-consensus-cardano ^>= 0.25 , ouroboros-consensus-diffusion ^>= 0.23 , ouroboros-consensus-protocol - , ouroboros-network-api ^>= 0.14 - , ouroboros-network ^>= 0.21.2 - , ouroboros-network-framework ^>= 0.18.0.1 + , ouroboros-network-api ^>= 0.14.2 + , ouroboros-network ^>= 0.21.5 + , ouroboros-network-framework ^>= 0.18 , ouroboros-network-protocols ^>= 0.14 , prettyprinter , prettyprinter-ansi-terminal @@ -244,7 +244,7 @@ executable cardano-node autogen-modules: Paths_cardano_node build-depends: base - , cardano-crypto-class + , cardano-crypto-class ^>=2.2.3.2 , cardano-git-rev , cardano-node , optparse-applicative-fork diff --git a/cardano-node/src/Cardano/Node/Configuration/POM.hs b/cardano-node/src/Cardano/Node/Configuration/POM.hs index 5a5efc00079..e5c29910f0a 100644 --- a/cardano-node/src/Cardano/Node/Configuration/POM.hs +++ b/cardano-node/src/Cardano/Node/Configuration/POM.hs @@ -228,6 +228,7 @@ data PartialNodeConfiguration , pncConfigFile :: !(Last ConfigYamlFilePath) , pncTopologyFile :: !(Last TopologyFile) , pncDatabaseFile :: !(Last NodeDatabasePaths) + -- | pncProtocolFiles can only be supplied with command line arguments. , pncProtocolFiles :: !(Last ProtocolFilepaths) , pncValidateDB :: !(Last Bool) , pncShutdownConfig :: !(Last ShutdownConfig) @@ -314,6 +315,7 @@ instance Semigroup PartialNodeConfiguration where instance FromJSON PartialNodeConfiguration where parseJSON = withObject "PartialNodeConfiguration" $ \v -> do + pncStartAsNonProducingNode <- Last <$> v .:? "StartAsNonProducingNode" -- Node parameters, not protocol-specific pncSocketPath <- Last <$> v .:? "SocketPath" @@ -435,7 +437,7 @@ instance FromJSON PartialNodeConfiguration where , pncProtocolFiles = mempty , pncValidateDB = mempty , pncShutdownConfig = mempty - , pncStartAsNonProducingNode = Last $ Just False + , pncStartAsNonProducingNode , pncMaybeMempoolCapacityOverride , pncLedgerDbConfig , pncProtocolIdleTimeout @@ -653,7 +655,7 @@ defaultPartialNodeConfiguration = , pncDiffusionMode = Last $ Just InitiatorAndResponderDiffusionMode , pncExperimentalProtocolsEnabled = Last $ Just False , pncTopologyFile = Last . Just $ TopologyFile "configuration/cardano/mainnet-topology.json" - , pncProtocolFiles = mempty + , pncProtocolFiles = Last . Just $ ProtocolFilepaths Nothing Nothing Nothing Nothing Nothing Nothing , pncValidateDB = Last $ Just False , pncShutdownConfig = Last . Just $ ShutdownConfig Nothing Nothing , pncStartAsNonProducingNode = Last $ Just False @@ -695,7 +697,8 @@ defaultPartialNodeConfiguration = , pncMinBigLedgerPeersForTrustedState = Last (Just Cardano.defaultNumberOfBigLedgerPeers) , pncConsensusMode = Last (Just Ouroboros.defaultConsensusMode) , pncEnableP2P = Last (Just EnabledP2PMode) - , pncPeerSharing = Last (Just Ouroboros.defaultPeerSharing) + , pncPeerSharing = mempty + -- the default is defined in `makeNodeConfiguration` , pncGenesisConfigFlags = Last (Just defaultGenesisConfigFlags) , pncResponderCoreAffinityPolicy = Last $ Just NoResponderCoreAffinity } @@ -730,6 +733,7 @@ makeNodeConfiguration pnc = do validateDB <- lastToEither "Missing ValidateDB" $ pncValidateDB pnc startAsNonProducingNode <- lastToEither "Missing StartAsNonProducingNode" $ pncStartAsNonProducingNode pnc protocolConfig <- lastToEither "Missing ProtocolConfig" $ pncProtocolConfig pnc + protocolFiles <- lastToEither "Missing ProtocolFiles" $ pncProtocolFiles pnc loggingSwitch <- lastToEither "Missing LoggingSwitch" $ pncLoggingSwitch pnc logMetrics <- lastToEither "Missing LogMetrics" $ pncLogMetrics pnc traceConfig <- first Text.unpack $ partialTraceSelectionToEither $ pncTraceConfig pnc @@ -809,9 +813,13 @@ makeNodeConfiguration pnc = do $ getLast $ pncChainSyncIdleTimeout pnc - ncPeerSharing <- - lastToEither "Missing PeerSharing" - $ pncPeerSharing pnc + let ncPeerSharing = + case pncPeerSharing pnc of + Last Nothing -> + if hasProtocolFile protocolFiles + then PeerSharingDisabled + else PeerSharingEnabled + Last (Just peerSharing) -> peerSharing mGenesisConfigFlags <- case ncConsensusMode of PraosMode -> pure Nothing @@ -856,13 +864,7 @@ makeNodeConfiguration pnc = do { ncConfigFile = configFile , ncTopologyFile = topologyFile , ncDatabaseFile = databaseFile - , ncProtocolFiles = - -- TODO: ncProtocolFiles should be Maybe ProtocolFiles - -- as relay nodes don't need the protocol files because - -- they are not minting blocks. - case getLast $ pncProtocolFiles pnc of - Just pFiles -> pFiles - Nothing -> ProtocolFilepaths Nothing Nothing Nothing Nothing Nothing Nothing + , ncProtocolFiles = protocolFiles , ncValidateDB = validateDB , ncShutdownConfig = shutdownConfig , ncStartAsNonProducingNode = startAsNonProducingNode diff --git a/cardano-node/src/Cardano/Node/Parsers.hs b/cardano-node/src/Cardano/Node/Parsers.hs index e8b2fadac9f..5f9afd83c4c 100644 --- a/cardano-node/src/Cardano/Node/Parsers.hs +++ b/cardano-node/src/Cardano/Node/Parsers.hs @@ -28,7 +28,9 @@ import Data.Maybe (fromMaybe) import Data.Monoid (Last (..)) import Data.Text (Text) import Data.Word (Word32) -import Options.Applicative hiding (str) +import Options.Applicative hiding (str, switch) +-- Don't use switch. It will not allow to set an option in a configuration +-- file. See `parseStartAsNonProducingNode` and `parseValidateDB`. import qualified Options.Applicative as Opt import qualified Options.Applicative.Help as OptI import System.Posix.Types (Fd (..)) @@ -60,7 +62,9 @@ nodeRunParser = do shelleyVRFFile <- optional parseVrfKeyFilePath shelleyCertFile <- optional parseOperationalCertFilePath shelleyBulkCredsFile <- optional parseBulkCredsFilePath - startAsNonProducingNode <- lastOption parseStartAsNonProducingNode + startAsNonProducingNode <- (\depr new -> Last depr <> Last new) + <$> parseStartAsNonProducingNodeDeprecated + <*> parseStartAsNonProducingNode -- Node Address nIPv4Address <- lastOption parseHostIPv4Addr @@ -266,9 +270,13 @@ parseImmutableDbPath = strOption $ ] +-- | This parser will always override configuration option, even if the +-- `--validate-db` is not present. This is fine for `--validate-db` switch, +-- but might not be for something else. See `parseStartAsNonProducingNode` for +-- an alternative solution. parseValidateDB :: Parser Bool parseValidateDB = - switch ( + Opt.switch ( long "validate-db" <> help "Validate all on-disk database files" ) @@ -353,16 +361,31 @@ parseVrfKeyFilePath = <> completer (bashCompleter "file") ) -parseStartAsNonProducingNode :: Parser Bool -parseStartAsNonProducingNode = - switch $ mconcat +parseStartAsNonProducingNodeDeprecated :: Parser (Maybe Bool) +parseStartAsNonProducingNodeDeprecated = + flag Nothing (Just True) $ mconcat [ long "non-producing-node" + , help $ mconcat + [ "DEPRECATED, use --start-as-non-producing-node instead. " + , "This option will be removed in one of the future versions of cardano-node." + ] + , hidden + ] + +-- | A parser which returns `Nothing` or `Just True`; the default value is set +-- in `defaultPartialNodeConfiguration`. This allows to set this option either +-- in the configuration file or as command line flag. +parseStartAsNonProducingNode :: Parser (Maybe Bool) +parseStartAsNonProducingNode = + flag Nothing (Just True) $ mconcat + [ long "start-as-non-producing-node" , help $ mconcat [ "Start the node as a non block producing node even if " , "credentials are specified." ] ] + -- | Produce just the brief help header for a given CLI option parser, -- without the options. parserHelpHeader :: String -> Opt.Parser a -> OptI.Doc diff --git a/cardano-node/src/Cardano/Node/Protocol/Cardano.hs b/cardano-node/src/Cardano/Node/Protocol/Cardano.hs index d720c816d73..f660a6dcca9 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Cardano.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Cardano.hs @@ -171,7 +171,7 @@ mkSomeConsensusProtocolCardano NodeByronProtocolConfiguration { shelleyGenesisHash, shelleyBasedLeaderCredentials = shelleyLeaderCredentials } - , Consensus.cardanoProtocolVersion = ProtVer (natVersion @10) 3 + , Consensus.cardanoProtocolVersion = ProtVer (natVersion @10) 6 -- The remaining arguments specify the parameters needed to transition between two eras , Consensus.cardanoLedgerTransitionConfig = Ledger.mkLatestTransitionConfig diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/ForgingStats.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/ForgingStats.hs index dddea2c4d6d..342da5c3e83 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/ForgingStats.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/ForgingStats.hs @@ -100,13 +100,17 @@ calculateForgingStats stats _context TraceNodeCannotForge {} = pure $ stats { fsNodeCannotForgeNum = fsNodeCannotForgeNum stats + 1 } calculateForgingStats stats _context - TraceNodeIsLeader {} = - pure $ stats { fsNodeIsLeaderNum = fsNodeIsLeaderNum stats + 1 } + (TraceNodeIsLeader (SlotNo slot)) = + pure $ stats { fsNodeIsLeaderNum = fsNodeIsLeaderNum stats + 1 + , fsLastSlot = fromIntegral slot } calculateForgingStats stats _context TraceForgedBlock {} = pure $ stats { fsBlocksForgedNum = fsBlocksForgedNum stats + 1 } calculateForgingStats stats _context (TraceNodeNotLeader (SlotNo slot')) = + -- Node is not a leader again: The number of blocks forged by + -- this node should now be equal to the number of slots when + -- this node was a leader. let slot = fromIntegral slot' in if fsLastSlot stats == 0 || succ (fsLastSlot stats) == slot then pure $ stats { fsLastSlot = slot } diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs index 311e53a6070..a7b65c4d782 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs @@ -313,13 +313,14 @@ instance LogFormatting (TracePeerSelection Cardano.DebugPeerSelectionState PeerT , "targetLocalEstablished" .= tLocalEst , "selectedPeers" .= toJSONList (toList sp) ] - forMachine _dtal (TracePromoteColdFailed tEst aEst p d err) = + forMachine _dtal (TracePromoteColdFailed tEst aEst p d err forgotten) = mconcat [ "kind" .= String "PromoteColdFailed" , "targetEstablished" .= tEst , "actualEstablished" .= aEst , "peer" .= toJSON p , "delay" .= toJSON d , "reason" .= show err + , "forgotten" .= forgotten ] forMachine _dtal (TracePromoteColdDone tEst aEst p) = mconcat [ "kind" .= String "PromoteColdDone" @@ -333,13 +334,14 @@ instance LogFormatting (TracePeerSelection Cardano.DebugPeerSelectionState PeerT , "actualEstablished" .= actualKnown , "selectedPeers" .= toJSONList (toList sp) ] - forMachine _dtal (TracePromoteColdBigLedgerPeerFailed tEst aEst p d err) = + forMachine _dtal (TracePromoteColdBigLedgerPeerFailed tEst aEst p d err forgotten) = mconcat [ "kind" .= String "PromoteColdBigLedgerPeerFailed" , "targetEstablished" .= tEst , "actualEstablished" .= aEst , "peer" .= toJSON p , "delay" .= toJSON d , "reason" .= show err + , "forgotten" .= forgotten ] forMachine _dtal (TracePromoteColdBigLedgerPeerDone tEst aEst p) = mconcat [ "kind" .= String "PromoteColdBigLedgerPeerDone" diff --git a/cardano-node/src/Cardano/Node/Types.hs b/cardano-node/src/Cardano/Node/Types.hs index 1356505f99d..cd2efbffe75 100644 --- a/cardano-node/src/Cardano/Node/Types.hs +++ b/cardano-node/src/Cardano/Node/Types.hs @@ -17,6 +17,7 @@ module Cardano.Node.Types , PeerSnapshotFile (..) , CheckpointsFile(..) , ProtocolFilepaths (..) + , hasProtocolFile , GenesisHash(..) , CheckpointsHash(..) , MaxConcurrencyBulkSync(..) @@ -50,6 +51,7 @@ import Ouroboros.Network.NodeToNode (DiffusionMode (..)) import Control.Exception import Data.Aeson import Data.ByteString (ByteString) +import Data.Maybe (isJust) import Data.Monoid (Last (..)) import Data.String (IsString) import Data.Text (Text) @@ -174,6 +176,25 @@ data ProtocolFilepaths = , shelleyBulkCredsFile :: !(Maybe FilePath) } deriving (Eq, Show) +-- | If any of the 'ProtocolFilepath` is given `PeerSharing` option will be +-- disabled by default. +-- +hasProtocolFile :: ProtocolFilepaths -> Bool +hasProtocolFile ProtocolFilepaths { + byronCertFile, + byronKeyFile, + shelleyKESFile, + shelleyVRFFile, + shelleyCertFile, + shelleyBulkCredsFile + } + = isJust byronCertFile + || isJust byronKeyFile + || isJust shelleyKESFile + || isJust shelleyVRFFile + || isJust shelleyCertFile + || isJust shelleyBulkCredsFile + newtype GenesisHash = GenesisHash (Crypto.Hash Crypto.Blake2b_256 ByteString) deriving newtype (Eq, Show, ToJSON, FromJSON) diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs index 5e3398c9174..97cbc1aeeb5 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs @@ -1913,13 +1913,14 @@ instance ToObject (TracePeerSelection Cardano.DebugPeerSelectionState PeerTrusta , "targetLocalEstablished" .= tLocalEst , "selectedPeers" .= Aeson.toJSONList (toList sp) ] - toObject _verb (TracePromoteColdFailed tEst aEst p d err) = + toObject _verb (TracePromoteColdFailed tEst aEst p d err forgotten) = mconcat [ "kind" .= String "PromoteColdFailed" , "targetEstablished" .= tEst , "actualEstablished" .= aEst , "peer" .= toJSON p , "delay" .= toJSON d , "reason" .= show err + , "forgoeten" .= forgotten ] toObject _verb (TracePromoteColdDone tEst aEst p) = mconcat [ "kind" .= String "PromoteColdDone" @@ -1933,13 +1934,14 @@ instance ToObject (TracePeerSelection Cardano.DebugPeerSelectionState PeerTrusta , "actualEstablished" .= actualKnown , "selectedPeers" .= Aeson.toJSONList (toList sp) ] - toObject _verb (TracePromoteColdBigLedgerPeerFailed tEst aEst p d err) = + toObject _verb (TracePromoteColdBigLedgerPeerFailed tEst aEst p d err forgotten) = mconcat [ "kind" .= String "PromoteColdBigLedgerPeerFailed" , "targetEstablished" .= tEst , "actualEstablished" .= aEst , "peer" .= toJSON p , "delay" .= toJSON d , "reason" .= show err + , "forgotten" .= forgotten ] toObject _verb (TracePromoteColdBigLedgerPeerDone tEst aEst p) = mconcat [ "kind" .= String "PromoteColdBigLedgerPeerDone" diff --git a/cardano-submit-api/cardano-submit-api.cabal b/cardano-submit-api/cardano-submit-api.cabal index b7cd0d1e3ff..cbb7b4aaf8f 100644 --- a/cardano-submit-api/cardano-submit-api.cabal +++ b/cardano-submit-api/cardano-submit-api.cabal @@ -42,14 +42,14 @@ library , cardano-api ^>= 10.16 , cardano-binary , cardano-cli ^>= 10.11 - , cardano-crypto-class ^>= 2.2 + , cardano-crypto-class ^>= 2.2.3.2 , http-media , iohk-monitoring , mtl , network , optparse-applicative-fork , ouroboros-consensus-cardano - , ouroboros-network ^>= 0.21.2 + , ouroboros-network ^>= 0.21.5 , ouroboros-network-protocols , prometheus >= 2.2.4 , servant diff --git a/cardano-testnet/cardano-testnet.cabal b/cardano-testnet/cardano-testnet.cabal index 1433154fb7e..fe271fab03c 100644 --- a/cardano-testnet/cardano-testnet.cabal +++ b/cardano-testnet/cardano-testnet.cabal @@ -72,7 +72,7 @@ library , network , network-mux , optparse-applicative-fork - , ouroboros-network ^>= 0.21 + , ouroboros-network ^>= 0.21.5 , ouroboros-network-api , prettyprinter , process diff --git a/cardano-tracer/cardano-tracer.cabal b/cardano-tracer/cardano-tracer.cabal index 6d60e25e79f..650829580c9 100644 --- a/cardano-tracer/cardano-tracer.cabal +++ b/cardano-tracer/cardano-tracer.cabal @@ -183,8 +183,8 @@ library , mime-mail , network-mux >= 0.8 , optparse-applicative - , ouroboros-network ^>= 0.21.2 - , ouroboros-network-api ^>= 0.14 + , ouroboros-network ^>= 0.21.5 + , ouroboros-network-api ^>= 0.14.2 , ouroboros-network-framework , signal , slugify @@ -250,7 +250,7 @@ library demo-forwarder-lib , generic-data , network-mux , optparse-applicative-fork >= 0.18.1 - , ouroboros-network-api ^>= 0.14 + , ouroboros-network-api ^>= 0.14.2 , ouroboros-network-framework , tasty-quickcheck , time @@ -293,7 +293,7 @@ library demo-acceptor-lib , filepath , generic-data , optparse-applicative-fork >= 0.18.1 - , ouroboros-network-api ^>= 0.14 + , ouroboros-network-api ^>= 0.14.2 , stm <2.5.2 || >=2.5.3 , text , tasty-quickcheck @@ -352,7 +352,7 @@ test-suite cardano-tracer-test , generic-data , network-mux , optparse-applicative-fork >= 0.18.1 - , ouroboros-network-api ^>= 0.14 + , ouroboros-network-api ^>= 0.14.2 , ouroboros-network-framework , stm <2.5.2 || >=2.5.3 , tasty @@ -411,8 +411,8 @@ test-suite cardano-tracer-test-ext , Glob , network-mux , optparse-applicative-fork >= 0.18.1 - , ouroboros-network ^>= 0.21.2 - , ouroboros-network-api ^>= 0.14 + , ouroboros-network ^>= 0.21.5 + , ouroboros-network-api ^>= 0.14.2 , ouroboros-network-framework , process , QuickCheck diff --git a/flake.lock b/flake.lock index 46b46d72f75..893c62a48ef 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "CHaP": { "flake": false, "locked": { - "lastModified": 1748961716, - "narHash": "sha256-t4wX4FOTmylk+mRjpJQllF15ntSXBwyXZfU8qLBIS9s=", + "lastModified": 1767613196, + "narHash": "sha256-+YMGLWk1IKQms4XbwwJUsW+n/LXm74H2MgBeuZSpnD8=", "owner": "intersectmbo", "repo": "cardano-haskell-packages", - "rev": "14dfcdcbc66bbb07e00c048210c4002a4dbbfe90", + "rev": "d78f79845cfcde6497c0afef650a51a1cff01777", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 848cfdda5c0..76722667027 100644 --- a/flake.nix +++ b/flake.nix @@ -76,8 +76,9 @@ utils, ... } @ input: let + inherit (builtins) elem match; inherit (nixpkgs) lib; - inherit (lib) head mapAttrs recursiveUpdate optionalAttrs; + inherit (lib) collect getAttr genAttrs filterAttrs hasPrefix head isDerivation mapAttrs optionalAttrs optionals recursiveUpdate ; inherit (utils.lib) eachSystem flattenTree; inherit (iohkNix.lib) prefixNamesWith; removeRecurse = lib.filterAttrsRecursive (n: _: n != "recurseForDerivations"); @@ -131,22 +132,29 @@ # Add some executables from other relevant packages inherit (bech32.components.exes) bech32; inherit (ouroboros-consensus-cardano.components.exes) db-analyser db-synthesizer db-truncater snapshot-converter; - # Add cardano-node and cardano-cli with their git revision stamp. + # Add cardano-node, cardano-cli and tx-generator with their git revision stamp. # Keep available an alternative without the git revision, like the other # passthru (profiled and asserted in nix/haskell.nix) that # have no git revision but for the same compilation alternative. cardano-node = let node = project.exes.cardano-node; - in lib.recursiveUpdate + in recursiveUpdate (set-git-rev node) {passthru = {noGitRev = node;};} ; cardano-cli = - let cli = cardano-cli.components.exes.cardano-cli; - in lib.recursiveUpdate + let cli = cardano-cli.components.exes.cardano-cli; + in recursiveUpdate (set-git-rev cli) {passthru = {noGitRev = cli;};} ; + } // optionalAttrs (project.exes ? tx-generator) { + tx-generator = + let tx-gen = project.exes.tx-generator; + in recursiveUpdate + (set-git-rev tx-gen) + {passthru = {noGitRev = tx-gen;};} + ; }); mkCardanoNodePackages = project: @@ -272,7 +280,7 @@ // (prefixNamesWith "checks/" checks); apps = - lib.mapAttrs (n: p: { + mapAttrs (n: p: { type = "app"; program = p.exePath @@ -285,12 +293,27 @@ exes; ciJobs = let + releaseBins = [ + "bech32" + "cardano-cli" + "cardano-node" + "cardano-submit-api" + "cardano-testnet" + "cardano-tracer" + "db-analyser" + "db-synthesizer" + "db-truncater" + "snapshot-converter" + "tx-generator" + ]; + ciJobsVariants = mapAttrs ( _: p: (mkFlakeAttrs (pkgs.extend (prev: final: {cardanoNodeProject = p;}))).ciJobs ) project.projectVariants; + ciJobs = { cardano-deployment = pkgs.cardanoLib.mkConfigHtml {inherit (pkgs.cardanoLib.environments) mainnet preview preprod;}; @@ -304,11 +327,11 @@ roots.project = project.roots; plan-nix.project = project.plan-nix; }; - profiled = lib.genAttrs ["cardano-node" "tx-generator" "locli"] ( + profiled = genAttrs ["cardano-node" "tx-generator" "locli"] ( n: packages.${n}.passthru.profiled ); - asserted = lib.genAttrs ["cardano-node"] ( + asserted = genAttrs ["cardano-node"] ( n: packages.${n}.passthru.asserted ); @@ -324,15 +347,8 @@ inherit pkgs; inherit (exes.cardano-node.identifier) version; platform = "linux"; - exes = lib.collect lib.isDerivation ( - # FIXME: restore tx-generator and gen-plutus once - # plutus-scripts-bench is fixed for musl - # - # It stands to question though, whether or not we want those to be - # in the cardano-node-linux as executables anyway? - # - # Also explicitly excluded from musl in nix/haskell.nix. - removeAttrs projectExes ["tx-generator" "gen-plutus"] + exes = collect isDerivation ( + filterAttrs (n: _: elem n releaseBins) projectExes ); }; internal.roots.project = muslProject.roots; @@ -349,9 +365,8 @@ inherit pkgs; inherit (exes.cardano-node.identifier) version; platform = "win64"; - exes = lib.collect lib.isDerivation ( - # FIXME: restore tx-generator once plutus-scripts-bench is fixed for windows: - removeAttrs projectExes ["tx-generator"] + exes = collect isDerivation ( + filterAttrs (n: _: elem n releaseBins) projectExes ); }; internal.roots.project = windowsProject.roots; @@ -360,17 +375,19 @@ } // optionalAttrs (system == "x86_64-darwin") { native = - lib.filterAttrs + filterAttrs (n: _: # Only build docker images once on linux: - !(lib.hasPrefix "dockerImage" n)) + !(hasPrefix "dockerImage" n)) packages // { cardano-node-macos = import ./nix/binary-release.nix { inherit pkgs; inherit (exes.cardano-node.identifier) version; platform = "macos"; - exes = lib.collect lib.isDerivation (collectExes project); + exes = collect isDerivation ( + filterAttrs (n: _: elem n releaseBins) (collectExes project) + ); }; shells = removeAttrs devShells ["profiled"]; internal = { @@ -380,21 +397,17 @@ variants = mapAttrs (_: v: removeAttrs v.native ["variants"]) ciJobsVariants; }; }; + nonRequiredPaths = [ # FIXME: cardano-tracer-test for windows should probably be disabled in haskell.nix config: "windows\\.(.*\\.)?checks\\.cardano-tracer\\.cardano-tracer-test" - # FIXME: plutus-scripts-bench (dep of tx-generator) does not compile for windows: - "windows\\.(.*\\.)?tx-generator.*" - # FIXME: plutus-scripts-bench's gen-plutus does not compile for musl - "musl\\.(.*\\.)?tx-generator.*" - "musl\\.(.*\\.)?gen-plutus.*" # hlint required status is controlled via the github action: "native\\.(.*\\.)?checks/hlint" # system-tests are build and run separately: "native\\.(.*\\.)?system-tests" ] - ++ lib.optionals (system == "x86_64-darwin") [ + ++ optionals (system == "x86_64-darwin") [ # FIXME: make variants nonrequired for macos until CI has more capacity for macos builds "native\\.variants\\..*" "native\\.checks/cardano-testnet/cardano-testnet-test" @@ -403,7 +416,7 @@ pkgs.callPackages iohkNix.utils.ciJobsAggregates { inherit ciJobs; - nonRequiredPaths = map (r: p: builtins.match r p != null) nonRequiredPaths; + nonRequiredPaths = map (r: p: match r p != null) nonRequiredPaths; } // ciJobs; }; @@ -451,7 +464,7 @@ inherit (pkgs.callPackages iohkNix.utils.ciJobsAggregates { ciJobs = - lib.mapAttrs (_: lib.getAttr "required") flake.ciJobs + mapAttrs (_: getAttr "required") flake.ciJobs // { # Ensure hydra notify: gitrev = pkgs.writeText "gitrev" pkgs.gitrev; @@ -475,7 +488,7 @@ customConfig.haskellNix ]; cardanoNodePackages = mkCardanoNodePackages final.cardanoNodeProject; - inherit (final.cardanoNodePackages) cardano-node cardano-cli cardano-submit-api cardano-tracer bech32 locli db-analyser; + inherit (final.cardanoNodePackages) cardano-node cardano-cli cardano-submit-api cardano-tracer bech32 locli db-analyser tx-generator; }; nixosModules = { cardano-node = { diff --git a/nix/haskell.nix b/nix/haskell.nix index cd58b3485cb..05abb35b59f 100644 --- a/nix/haskell.nix +++ b/nix/haskell.nix @@ -114,10 +114,8 @@ let modules = [ ({ lib, pkgs, ... }: { - packages.cardano-tracer.package.buildable = with pkgs.stdenv.hostPlatform; lib.mkForce (!isMusl); packages.cardano-node-chairman.components.tests.chairman-tests.buildable = lib.mkForce pkgs.stdenv.hostPlatform.isUnix; packages.plutus-tx-plugin.components.library.platforms = with lib.platforms; [ linux darwin ]; - packages.tx-generator.package.buildable = with pkgs.stdenv.hostPlatform; !isMusl; packages.fs-api.components.library.doHaddock = false; packages.cardano-ledger-allegra.components.library.doHaddock = false; diff --git a/nix/nixos/tx-generator-service.nix b/nix/nixos/tx-generator-service.nix index cb1151a2569..e276e43a7b4 100644 --- a/nix/nixos/tx-generator-service.nix +++ b/nix/nixos/tx-generator-service.nix @@ -57,7 +57,8 @@ in pkgs.commonLib.defServiceModule svcPackageSelector = pkgs: ## Local: - pkgs.cardanoNodePackages.tx-generator + ## Avoid rebuilding on every commit because of `set-git-rev`. + pkgs.cardanoNodePackages.tx-generator.passthru.noGitRev ## Imported by another repo, that adds an overlay: or pkgs.tx-generator; ## TODO: that's actually a bit ugly and could be improved. diff --git a/nix/workbench/backend/nomad.nix b/nix/workbench/backend/nomad.nix index e323e526bd3..b562dc7e115 100644 --- a/nix/workbench/backend/nomad.nix +++ b/nix/workbench/backend/nomad.nix @@ -166,9 +166,9 @@ let }; tx-generator = rec { # Local reference only used if not "cloud". - nix-store-path = pkgs.cardanoNodePackages.tx-generator; + nix-store-path = pkgs.cardanoNodePackages.tx-generator.passthru.noGitRev; flake-reference = "github:intersectmbo/cardano-node"; - flake-output = "cardanoNodePackages.tx-generator"; + flake-output = "cardanoNodePackages.tx-generator.passthru.noGitRev"; }; } ; diff --git a/nix/workbench/shell.nix b/nix/workbench/shell.nix index cecf8381bc2..c0b3e7de24f 100644 --- a/nix/workbench/shell.nix +++ b/nix/workbench/shell.nix @@ -144,7 +144,7 @@ project.shellFor { cardano-topology cardano-tracer locli - tx-generator + tx-generator.passthru.noGitRev ] # Include the workbench as a derivation or use the sources directly ? ++ lib.optionals (!workbenchDevMode) [ workbench.workbench ] diff --git a/trace-dispatcher/trace-dispatcher.cabal b/trace-dispatcher/trace-dispatcher.cabal index 2c0745eac26..4ffb9228f34 100644 --- a/trace-dispatcher/trace-dispatcher.cabal +++ b/trace-dispatcher/trace-dispatcher.cabal @@ -73,7 +73,7 @@ library , network , network-mux , optparse-applicative-fork - , ouroboros-network ^>= 0.21.2 + , ouroboros-network ^>= 0.21.5 , ouroboros-network-api , ouroboros-network-framework , serialise diff --git a/trace-forward/trace-forward.cabal b/trace-forward/trace-forward.cabal index c4ee968b643..07ea61dfad2 100644 --- a/trace-forward/trace-forward.cabal +++ b/trace-forward/trace-forward.cabal @@ -67,7 +67,7 @@ library , network-mux , ouroboros-network-api , singletons ^>= 3.0 - , ouroboros-network-framework ^>= 0.18.0.1 + , ouroboros-network-framework ^>= 0.18.0.2 , serialise , stm , text