|
12 | 12 | in flake-utils.lib.eachSystem supportedSystems (system: let |
13 | 13 | overlays = [ haskellNix.overlay ]; |
14 | 14 |
|
15 | | - #*************************************************************************************** |
16 | | - # Docker image |
17 | | - |
18 | 15 | pkgs = import nixpkgs { inherit system overlays; inherit (haskellNix) config; }; |
19 | | - pkgsLinux = pkgs // { system = "x86_64-linux"; }; |
20 | | - |
21 | | - imgAttributes = { |
22 | | - name = "plutus-certification"; |
23 | | - tag = "8"; |
24 | | - }; |
25 | | - nixConfig = '' |
26 | | - trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= |
27 | | - substituters = https://hydra.iohk.io https://cache.nixos.org/ https://cache.iog.io |
28 | | - build-users-group = nixbld |
29 | | - sandbox = false |
30 | | - experimental-features = nix-command flakes |
31 | | - allow-import-from-derivation = true |
32 | | - filter-syscalls = false |
33 | | - ''; |
34 | | - entryPoint = |
35 | | - let addParameter = paramName: varName: '' |
36 | | - if [ -n "${"$"}${varName}" ]; then |
37 | | - args="$args --${paramName} ${"$"}${varName}" |
38 | | - fi |
39 | | - ''; |
40 | | - in (pkgs.writeShellScript "entryPoint" '' |
41 | | - set -eEo pipefail |
42 | | - args="--local " |
43 | | - ${addParameter "wallet-id" "WALLET_ID"} \ |
44 | | - ${addParameter "wallet-address" "WALLET_ADDRESS"} \ |
45 | | - ${addParameter "wallet-passphrase" "WALLET_PASSPHRASE"} |
46 | | - ${addParameter "wallet-url" "WALLET_URL"} |
47 | | - ${addParameter "wallet-certification-price" "WALLET_CERTIFICATION_PRICE"} |
48 | | - ${addParameter "gh-access-token" "GH_ACCESS_TOKEN"} |
49 | | - ${addParameter "signature-timeout" "SIGNATURE_TIMEOUT"} |
50 | | - ${addParameter "use-whitelist" "USE_WHITELIST"} |
51 | | - ${addParameter "unsafe-plain-address-auth" "UNSAFE_PLAIN_ADDRESS_AUTH"} |
52 | | - ${addParameter "port" "PORT"} |
53 | | - if [ -n "$JWT_SECRET" ]; |
54 | | - then |
55 | | - args="$args --jwt-secret $JWT_SECRET" |
56 | | - ${addParameter "jwt-expiration-seconds" "JWT_EXPIRATION"} |
57 | | - else |
58 | | - args="$args --unsafe-plain-address-auth" |
59 | | - fi |
60 | | -
|
61 | | - # create a temporary directory for executing flakes |
62 | | - mkdir -p /tmp |
63 | | -
|
64 | | - # copy the certificate bundle to the right place |
65 | | - mkdir -p /etc/ssl/certs |
66 | | - script="cp ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt" |
67 | | - |
68 | | - #TODO: change this --unsafe-bypass-subscription-validation |
69 | | - args="$args --unsafe-bypass-subscription-validation" |
70 | | -
|
71 | | - echo $script >&2 |
72 | | - eval "$script" |
73 | | -
|
74 | | - script="${flake.packages."plutus-certification:exe:plutus-certification"}/bin/plutus-certification $args" |
75 | | - echo $script >&2 |
76 | | - eval "$script" |
77 | | - '').outPath; |
78 | | - |
79 | | - nixImage = pkgs.dockerTools.pullImage { |
80 | | - imageName = "nixos/nix"; |
81 | | - imageDigest = "sha256:31b808456afccc2a419507ea112e152cf27e9bd2527517b0b6ca8639cc423501"; |
82 | | - sha256 = "0bbw3r0civlcm3inj23fq8f25aw63rnaay09qjbrvfjd7pcfbyqn"; |
83 | | - finalImageName = "nixos/nix"; |
84 | | - finalImageTag = "2.15.0"; |
85 | | - }; |
86 | | - genFlake = flake.packages."dapps-certification-helpers:exe:generate-flake"; |
87 | | - buildFlake = flake.packages."dapps-certification-helpers:exe:build-flake"; |
88 | | - |
89 | | - image = pkgs.dockerTools.buildImage (imgAttributes // { |
90 | | - fromImage = nixImage; |
91 | | - diskSize = 5120; |
92 | | - #contents = [ pkgs.hello ]; |
93 | | - copyToRoot = pkgs.buildEnv { |
94 | | - name = "image-root"; |
95 | | - paths = [ pkgs.curl pkgs.zsh pkgs.coreutils pkgs.nmon pkgs.cacert genFlake buildFlake ]; |
96 | | - pathsToLink = [ "/bin" ]; |
97 | | - }; |
98 | | - runAsRoot = '' |
99 | | - rm -rf /etc/nix/nix.conf |
100 | | - echo "${nixConfig}" > /etc/nix/nix.conf |
101 | | - ''; |
102 | | - |
103 | | - config = { |
104 | | - Cmd = ["${entryPoint}"]; |
105 | | - User = "root"; |
106 | | - }; |
107 | | - }); |
108 | 16 |
|
109 | 17 | materializedPath = ./. + "/nix/materialized/${system}"; |
110 | 18 |
|
|
121 | 29 | }; |
122 | 30 |
|
123 | 31 | flake = project.flake {}; |
124 | | - loadDockerImage = { |
125 | | - type= "app"; |
126 | | - program = (pkgs.writeShellScript "loadDockerImage" '' |
127 | | - set -eEuo pipefail |
128 | | - echo "Loading docker image ${image}" >&2 |
129 | | - ${pkgs.docker}/bin/docker load -i ${image} |
130 | | - '').outPath; |
131 | | - }; |
132 | | - runDockerImage = |
133 | | - let addEnvVar = varName: '' |
134 | | - if [ -n "${"$"}${varName}" ]; then |
135 | | - docker_args="$docker_args -e ${varName}=${"$"}${varName}" |
136 | | - fi |
137 | | - ''; |
138 | | - in { |
139 | | - type = "app"; |
140 | | - program = (pkgs.writeShellScript "runDockerImage" '' |
141 | | - set -eEo pipefail |
142 | | - export PATH="${pkgs.lib.makeBinPath [ pkgs.docker pkgs.coreutils]}" |
143 | | - echo "Executing ${loadDockerImage.program}..." >&2 |
144 | | - ${loadDockerImage.program} |
145 | | - docker_args="-t --platform linux/amd64 --name ${imgAttributes.name}" |
146 | 32 |
|
147 | | - ${addEnvVar "WALLET_ID"} |
148 | | - ${addEnvVar "WALLET_ADDRESS"} |
149 | | - ${addEnvVar "WALLET_PASSPHRASE"} |
150 | | - ${addEnvVar "JWT_SECRET"} |
151 | | - ${addEnvVar "WALLET_URL"} |
152 | | - ${addEnvVar "WALLET_CERTIFICATION_PRICE"} |
153 | | - ${addEnvVar "GH_ACCESS_TOKEN"} |
154 | | - ${addEnvVar "JWT_EXPIRATION"} |
155 | | - ${addEnvVar "SIGNATURE_TIMEOUT"} |
156 | | - ${addEnvVar "USE_WHITELIST"} |
157 | | - ${addEnvVar "UNSAFE_PLAIN_ADDRESS_AUTH"} |
158 | | - ${addEnvVar "PORT"} |
| 33 | + dockerApps = import ./docker-files/docker.nix { pkgs = pkgs; flake = flake; }; |
159 | 34 |
|
160 | | - if [[ -z "$PORT" ]]; then |
161 | | - export PORT=9671 |
162 | | - fi |
163 | | - docker_args="$docker_args -p $PORT:$PORT" |
164 | | - |
165 | | - script="docker run --rm $docker_args ${imgAttributes.name}:${imgAttributes.tag}" |
166 | | - echo $script >&2 |
167 | | - eval "$script" |
168 | | - '').outPath; |
169 | | - }; |
170 | | - pushDockerImage = { |
171 | | - type = "app"; |
172 | | - #usage: nix run .\#apps.x86_64-linux.pushDockerImage -- <docker registry> |
173 | | - #E.g. nix run .\#apps.x86_64-linux.pushDockerImage -- ghcr.io/demoiog |
174 | | - program = (pkgs.writeShellScript "pushDockerImage" '' |
175 | | - set -eEuo pipefail |
176 | | - export PATH="${pkgs.lib.makeBinPath [ pkgs.docker pkgs.coreutils]}" |
177 | | - ${loadDockerImage.program} |
178 | | - echo "Pushing docker image ${image}" >&2 |
179 | | - imageName="${imgAttributes.name}:${imgAttributes.tag}" |
180 | | -
|
181 | | - script="docker image tag $imageName $1/$imageName" |
182 | | - echo $script >&2 |
183 | | - eval "$script" |
184 | | -
|
185 | | - script="docker push $1/$imageName" |
186 | | - echo $script >&2 |
187 | | - eval "$script" |
188 | | -
|
189 | | - '').outPath; |
190 | | - }; |
191 | 35 | in flake // { |
192 | 36 | packages = flake.packages // { |
193 | 37 | inherit (project.plan-nix.passthru) generateMaterialized; |
194 | | - inherit image; |
195 | 38 | }; |
196 | 39 | defaultPackage = flake.packages."plutus-certification:exe:plutus-certification"; |
197 | | - apps = flake.apps // { |
198 | | - inherit loadDockerImage; |
199 | | - inherit runDockerImage; |
200 | | - inherit pushDockerImage; |
| 40 | + apps = flake.apps // dockerApps // { |
201 | 41 | updateAllMaterialized = { |
202 | 42 | type = "app"; |
203 | 43 | program = (pkgs.writeShellScript "updateAllMaterialized" '' |
|
0 commit comments