From ea06efe70ee83662b7105b889b6b51a575d1a252 Mon Sep 17 00:00:00 2001 From: Nicolas Henin Date: Fri, 7 Jun 2024 10:40:51 +0200 Subject: [PATCH 1/3] bumped marlowe-object to 1.0.0 --- marlowe-client/marlowe-client.cabal | 2 +- marlowe-object/marlowe-object.cabal | 4 ++-- marlowe-runtime-web/marlowe-runtime-web.cabal | 2 +- marlowe-runtime/marlowe-runtime.cabal | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/marlowe-client/marlowe-client.cabal b/marlowe-client/marlowe-client.cabal index 3567c027a8..85d9b6f94f 100644 --- a/marlowe-client/marlowe-client.cabal +++ b/marlowe-client/marlowe-client.cabal @@ -62,7 +62,7 @@ library , exceptions ^>=0.10 , general-allocate ^>=0.2 , marlowe-chain-sync ==1.0.0 - , marlowe-object ==0.2.0.1 + , marlowe-object ==1.0.0 , marlowe-protocols ==0.3.0.0 , marlowe-runtime:{marlowe-runtime, contract-api, proxy-api, sync-api, tx-api} ==1.0.0 , monad-control ^>=1 diff --git a/marlowe-object/marlowe-object.cabal b/marlowe-object/marlowe-object.cabal index ca4ca6804d..344bb74d0d 100644 --- a/marlowe-object/marlowe-object.cabal +++ b/marlowe-object/marlowe-object.cabal @@ -1,6 +1,6 @@ cabal-version: 3.4 name: marlowe-object -version: 0.2.0.1 +version: 1.0.0 synopsis: Object format for Marlowe contracts. bug-reports: https://github.com/input-output-hk/marlowe-marlowe/issues license: Apache-2.0 @@ -91,7 +91,7 @@ library gen , cardano-api-gen ^>=8.1 , hedgehog-quickcheck ^>=0.1 , lens >=5.2 && <6 - , marlowe-object ==0.2.0.1 + , marlowe-object ==1.0.0 , marlowe-test ==0.2.1.0 , QuickCheck >=2.14 && <3 , quickcheck-instances ^>=0.3.29 diff --git a/marlowe-runtime-web/marlowe-runtime-web.cabal b/marlowe-runtime-web/marlowe-runtime-web.cabal index ec74cb0e2c..add498f361 100644 --- a/marlowe-runtime-web/marlowe-runtime-web.cabal +++ b/marlowe-runtime-web/marlowe-runtime-web.cabal @@ -128,7 +128,7 @@ library , marlowe-cardano ==0.2.1.0 , marlowe-chain-sync ==1.0.0 , marlowe-client ==1.0.0 - , marlowe-object ==0.2.0.1 + , marlowe-object ==1.0.0 , marlowe-protocols ==0.3.0.0 , marlowe-runtime:{marlowe-runtime, contract-api, proxy-api, sync-api, tx-api} ==1.0.0 , monad-control ^>=1 diff --git a/marlowe-runtime/marlowe-runtime.cabal b/marlowe-runtime/marlowe-runtime.cabal index c132c3c46a..583c81d7ca 100644 --- a/marlowe-runtime/marlowe-runtime.cabal +++ b/marlowe-runtime/marlowe-runtime.cabal @@ -358,7 +358,7 @@ library contract-api , hs-opentelemetry-api ^>=0.0.3 , marlowe-cardano ==0.2.1.0 , marlowe-chain-sync ==1.0.0 - , marlowe-object ==0.2.0.1 + , marlowe-object ==1.0.0 , marlowe-protocols ==0.3.0.0 , marlowe-runtime ==1.0.0 , plutus-ledger-api ^>=1.21 @@ -400,7 +400,7 @@ library contract , lock-file ^>=0.7 , marlowe-cardano ==0.2.1.0 , marlowe-chain-sync ==1.0.0 - , marlowe-object ==0.2.0.1 + , marlowe-object ==1.0.0 , marlowe-protocols ==0.3.0.0 , marlowe-runtime:{marlowe-runtime, contract-api, sync-api} ==1.0.0 , plutus-ledger-api ^>=1.21 From c4c02c9ef1ecabb42df6de2d3b1c9fc6a533135a Mon Sep 17 00:00:00 2001 From: Nicolas Henin Date: Fri, 7 Jun 2024 10:43:06 +0200 Subject: [PATCH 2/3] bumped marlowe-apps to 1.0.0 --- marlowe-apps/marlowe-apps.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/marlowe-apps/marlowe-apps.cabal b/marlowe-apps/marlowe-apps.cabal index 60a73e3ca1..fd3e7aace5 100644 --- a/marlowe-apps/marlowe-apps.cabal +++ b/marlowe-apps/marlowe-apps.cabal @@ -1,6 +1,6 @@ cabal-version: 3.4 name: marlowe-apps -version: 0.4.0.0 +version: 1.0.0 synopsis: Marlowe Runtimee applications license: Apache-2.0 license-file: LICENSE From 951adbd416cf40cf89940314d5306555bd0b784d Mon Sep 17 00:00:00 2001 From: Nicolas Henin Date: Fri, 7 Jun 2024 11:01:27 +0200 Subject: [PATCH 3/3] nix formatting --- nix/nixos.nix | 246 ++++++++++++++++++++++++++++---------------------- 1 file changed, 137 insertions(+), 109 deletions(-) diff --git a/nix/nixos.nix b/nix/nixos.nix index c62a9aa0ce..ec05e2e245 100644 --- a/nix/nixos.nix +++ b/nix/nixos.nix @@ -1,4 +1,5 @@ -{ self, marlowe-plutus, cardano-node, ... }: { lib, config, pkgs, ... }: let +{ self, marlowe-plutus, cardano-node, ... }: { lib, config, pkgs, ... }: +let inherit (lib) mkOption types mkIf attrNames listToAttrs imap0 foldr attrValues mapAttrs' makeBinPath concatStringsSep optionalAttrs mkForce optionals versionAtLeast; allowedEnvs = [ "preprod" "preview" "mainnet" ]; @@ -34,7 +35,7 @@ cfg = config.marlowe.runtimes; - neededEnvs = attrNames (foldr (x: acc: acc // { ${x.network} = null; }) {} (attrValues cfg)); + neededEnvs = attrNames (foldr (x: acc: acc // { ${x.network} = null; }) { } (attrValues cfg)); mkNode = env: { autoStart = true; @@ -52,7 +53,8 @@ }; }; }; -in { +in +{ options = { marlowe.runtimes = mkOption { type = types.attrsOf (types.submodule runtimeOptions); @@ -68,38 +70,45 @@ in { }; config = mkIf (cfg != { }) { - http-services.proxied-services = listToAttrs (imap0 (idx: name: let runtime = cfg.${name}; in { - name = "marlowe-runtime-${name}-web"; - value = { - inherit (runtime) domain; - systemdConfig = port: { - description = "Marlowe Runtime Web (${name})"; - # allow unlimited restarts - unitConfig.StartLimitIntervalSec = 0; - serviceConfig = { - # Restart on exit, with exponential fallback up to an hour - # runtime-web needs to wait for runtime, which can take arbitrarily - # long to be ready (see comment there). - Restart = "always"; - RestartMaxDelaySec= "1hour"; - RestartSteps = 10; - - ExecSearchPath = makeBinPath [ runtime.flake.packages.${pkgs.system}.marlowe-web-server ]; - DynamicUser = true; - ExecStart = concatStringsSep " " [ - "marlowe-web-server" - "--http-port" (toString port) - "--marlowe-runtime-host" "127.0.0.1" - "--marlowe-runtime-port" (toString (3701 + 3 * idx)) - "--enable-open-api" - "--access-control-allow-origin-all" - ]; + http-services.proxied-services = listToAttrs (imap0 + (idx: name: + let runtime = cfg.${name}; in + { + name = "marlowe-runtime-${name}-web"; + value = { + inherit (runtime) domain; + systemdConfig = port: { + description = "Marlowe Runtime Web (${name})"; + # allow unlimited restarts + unitConfig.StartLimitIntervalSec = 0; + serviceConfig = { + # Restart on exit, with exponential fallback up to an hour + # runtime-web needs to wait for runtime, which can take arbitrarily + # long to be ready (see comment there). + Restart = "always"; + RestartMaxDelaySec = "1hour"; + RestartSteps = 10; + + ExecSearchPath = makeBinPath [ runtime.flake.packages.${pkgs.system}.marlowe-web-server ]; + DynamicUser = true; + ExecStart = concatStringsSep " " [ + "marlowe-web-server" + "--http-port" + (toString port) + "--marlowe-runtime-host" + "127.0.0.1" + "--marlowe-runtime-port" + (toString (3701 + 3 * idx)) + "--enable-open-api" + "--access-control-allow-origin-all" + ]; + }; + requires = [ "marlowe-runtime-${name}.service" ]; + after = [ "marlowe-runtime-${name}.service" ]; + }; }; - requires = [ "marlowe-runtime-${name}.service" ]; - after = [ "marlowe-runtime-${name}.service" ]; - }; - }; - }) (attrNames cfg)); + }) + (attrNames cfg)); services.postgresql = { enable = true; ensureDatabases = map (inst: "runtime-${inst}") (attrNames cfg); @@ -125,80 +134,99 @@ in { }; }; - systemd.services = listToAttrs (imap0 (idx: name: let - inherit (pkgs) writeShellApplication sqitchPg z3 postgresql; - runtimeCfg = cfg.${name}; - env = runtimeCfg.network; - envConfig = config.containers."cardano-node-${env}".config.services.cardano-node.environments.${env}; - db = "postgresql://postgres@/runtime-${name}"; - sqitch-conf = builtins.toFile "sqitch.conf" '' - [user] - name = chainindexer - email = example@example.com - ''; - runSqitch = writeShellApplication { - name = "run-sqitch"; - text = '' - export SQITCH_USER_CONFIG=${sqitch-conf} - export TZ=Etc/UTC - - cd ${runtimeCfg.flake.sqitch-plan-dirs.chain-sync} - sqitch --quiet deploy --target ${db} - - cd ${runtimeCfg.flake.sqitch-plan-dirs.runtime} - sqitch --quiet deploy --target ${db} - ''; - runtimeInputs = [ sqitchPg postgresql ]; - }; - pkg = runtimeCfg.flake.packages.${pkgs.system}.marlowe-runtime; - in { - name = "marlowe-runtime-${name}"; - value = { - description = "Marlowe Runtime (${name})"; - # allow unlimited restarts - unitConfig.StartLimitIntervalSec = 0; - serviceConfig = { - # Restart on exit, with exponential fallback up to an hour - # The runtime needs to wait for postgres and the node to be up (which - # should be relatively quick) /and/ for the node to be in Babbage (which - # can take an arbitrarily long time). - Restart = "always"; - RestartMaxDelaySec= "1hour"; - RestartSteps = 10; - - ExecSearchPath = makeBinPath [ runSqitch pkg ]; - # TODO: Wait for the nodes to be in babbage to start - ExecStartPre = "run-sqitch"; - ExecStart = concatStringsSep " " ([ - "marlowe-runtime" - "--socket-path" "/var/lib/nixos-containers/cardano-node-${env}/var/lib/cardano-node/node.socket" - "--database-uri" db - "--shelley-genesis-config-file" envConfig.networkConfig.ShelleyGenesisFile - "--genesis-config-file" envConfig.networkConfig.ByronGenesisFile - "--genesis-config-file-hash" envConfig.networkConfig.ByronGenesisHash - "--store-dir" "/var/lib/marlowe-runtime-${name}/store" - "--host" "0.0.0.0" - "--port" (toString (3700 + 3 * idx)) - "--port-traced" (toString (3701 + 3 * idx)) - "--http-port" (toString (3702 + 3 * idx)) - "--minting-policy-cmd" "marlowe-minting-validator" - ] ++ optionals (versionAtLeast pkg.version "0.6") [ - "--min-contract-age" "87400s" - "--max-store-size" "8589934592" - ]); - }; - requires = [ "container@cardano-node-${env}.service" "postgresql.service" ]; - after = [ "container@cardano-node-${env}.service" "postgresql.service" ]; - environment = optionalAttrs (envConfig.networkConfig.RequiresNetworkMagic == "RequiresMagic") { - CARDANO_TESTNET_MAGIC = toString (builtins.fromJSON (builtins.readFile envConfig.networkConfig.ShelleyGenesisFile)).networkMagic; - }; - path = [ z3 runtimeCfg.marlowe-plutus-flake.packages.${pkgs.system}.marlowe-minting-validator ]; - }; - }) (attrNames cfg)); - - containers = listToAttrs (map (env: { - name = "cardano-node-${env}"; - value = mkNode env; - }) neededEnvs); + systemd.services = listToAttrs (imap0 + (idx: name: + let + inherit (pkgs) writeShellApplication sqitchPg z3 postgresql; + runtimeCfg = cfg.${name}; + env = runtimeCfg.network; + envConfig = config.containers."cardano-node-${env}".config.services.cardano-node.environments.${env}; + db = "postgresql://postgres@/runtime-${name}"; + sqitch-conf = builtins.toFile "sqitch.conf" '' + [user] + name = chainindexer + email = example@example.com + ''; + runSqitch = writeShellApplication { + name = "run-sqitch"; + text = '' + export SQITCH_USER_CONFIG=${sqitch-conf} + export TZ=Etc/UTC + + cd ${runtimeCfg.flake.sqitch-plan-dirs.chain-sync} + sqitch --quiet deploy --target ${db} + + cd ${runtimeCfg.flake.sqitch-plan-dirs.runtime} + sqitch --quiet deploy --target ${db} + ''; + runtimeInputs = [ sqitchPg postgresql ]; + }; + pkg = runtimeCfg.flake.packages.${pkgs.system}.marlowe-runtime; + in + { + name = "marlowe-runtime-${name}"; + value = { + description = "Marlowe Runtime (${name})"; + # allow unlimited restarts + unitConfig.StartLimitIntervalSec = 0; + serviceConfig = { + # Restart on exit, with exponential fallback up to an hour + # The runtime needs to wait for postgres and the node to be up (which + # should be relatively quick) /and/ for the node to be in Babbage (which + # can take an arbitrarily long time). + Restart = "always"; + RestartMaxDelaySec = "1hour"; + RestartSteps = 10; + + ExecSearchPath = makeBinPath [ runSqitch pkg ]; + # TODO: Wait for the nodes to be in babbage to start + ExecStartPre = "run-sqitch"; + ExecStart = concatStringsSep " " ([ + "marlowe-runtime" + "--socket-path" + "/var/lib/nixos-containers/cardano-node-${env}/var/lib/cardano-node/node.socket" + "--database-uri" + db + "--shelley-genesis-config-file" + envConfig.networkConfig.ShelleyGenesisFile + "--genesis-config-file" + envConfig.networkConfig.ByronGenesisFile + "--genesis-config-file-hash" + envConfig.networkConfig.ByronGenesisHash + "--store-dir" + "/var/lib/marlowe-runtime-${name}/store" + "--host" + "0.0.0.0" + "--port" + (toString (3700 + 3 * idx)) + "--port-traced" + (toString (3701 + 3 * idx)) + "--http-port" + (toString (3702 + 3 * idx)) + "--minting-policy-cmd" + "marlowe-minting-validator" + ] ++ optionals (versionAtLeast pkg.version "0.6") [ + "--min-contract-age" + "87400s" + "--max-store-size" + "8589934592" + ]); + }; + requires = [ "container@cardano-node-${env}.service" "postgresql.service" ]; + after = [ "container@cardano-node-${env}.service" "postgresql.service" ]; + environment = optionalAttrs (envConfig.networkConfig.RequiresNetworkMagic == "RequiresMagic") { + CARDANO_TESTNET_MAGIC = toString (builtins.fromJSON (builtins.readFile envConfig.networkConfig.ShelleyGenesisFile)).networkMagic; + }; + path = [ z3 runtimeCfg.marlowe-plutus-flake.packages.${pkgs.system}.marlowe-minting-validator ]; + }; + }) + (attrNames cfg)); + + containers = listToAttrs (map + (env: { + name = "cardano-node-${env}"; + value = mkNode env; + }) + neededEnvs); }; }