Skip to content

Commit d282a21

Browse files
committed
Introduces bundlers attribute to use with nix bundle to output non-nix exes
1 parent bcc6c89 commit d282a21

File tree

2 files changed

+36
-34
lines changed

2 files changed

+36
-34
lines changed

coop-extras/coop-env/build.nix

+2-11
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,8 @@
22
, cardanoCli
33
, cardanoNode
44
, chainIndex
5-
, coopPabCli
6-
, coopPlutusCli
7-
, coopPublisherCli
8-
, jsFsStoreCli
9-
, plutusJsonCli
105
, plutipLocalCluster
6+
, coopClis
117
}:
128
pkgs.mkShell {
139
packages = with pkgs; [
@@ -23,13 +19,8 @@ pkgs.mkShell {
2319
chainIndex
2420
cardanoCli
2521
cardanoNode
26-
coopPabCli
27-
coopPlutusCli
28-
coopPublisherCli
29-
jsFsStoreCli
30-
plutusJsonCli
3122
plutipLocalCluster
32-
];
23+
] ++ builtins.attrValues coopClis;
3324
shellHook = ''
3425
echo "Making proto and resources symlinks"
3526
rm -f coop-proto

flake.nix

+34-23
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,7 @@
166166
compiler-nix-name = "ghc8107";
167167
};
168168
coopPabFlake = coopPabProj.flake { };
169-
170-
coopPabCli = pkgs.stdenv.mkDerivation {
171-
name = "coop-pab-cli";
172-
nativeBuildInputs = [ pkgs.makeWrapper ];
173-
phases = [ "installPhase" ];
174-
installPhase = ''
175-
mkdir -p $out/bin
176-
cp ${coopPabProj.getComponent "coop-pab:exe:coop-pab-cli"}/bin/coop-pab-cli $out/bin/coop-pab-cli
177-
chmod +x $out/bin/coop-pab-cli
178-
wrapProgram $out/bin/coop-pab-cli --prefix PATH ":" ${coopPlutusCli}/bin/coop-plutus-cli
179-
'';
180-
};
169+
coopPabCli = coopPabFlake.packages."coop-pab:exe:coop-pab-cli";
181170

182171
# Extras
183172
plutusJson = import ./coop-extras/plutus-json/build.nix {
@@ -211,30 +200,49 @@
211200
};
212201
cardanoProtoExtrasFlake = cardanoProtoExtras.flake { };
213202

203+
coopClis = indexBy (drv: drv.exeName) [
204+
coopPabCli
205+
coopPlutusCli
206+
coopPublisherCli
207+
jsFsStoreCli
208+
plutusJsonCli
209+
];
210+
214211
coopEnvShell = import ./coop-extras/coop-env/build.nix {
215212
inherit pkgs;
216-
plutipLocalCluster = plutip.packages.${system}."plutip:exe:local-cluster";
217-
inherit coopPabCli coopPlutusCli jsFsStoreCli coopPublisherCli plutusJsonCli;
213+
inherit coopClis;
218214
cardanoNode = coopPabProj.hsPkgs.cardano-node.components.exes.cardano-node;
219215
cardanoCli = coopPabProj.hsPkgs.cardano-cli.components.exes.cardano-cli;
220216
chainIndex = coopPabProj.hsPkgs.plutus-chain-index.components.exes.plutus-chain-index;
217+
plutipLocalCluster = plutip.packages.${system}."plutip:exe:local-cluster";
221218
};
222219

220+
# Various helper functions
223221
renameAttrs = rnFn: pkgs.lib.attrsets.mapAttrs' (n: value: { name = rnFn n; inherit value; });
222+
indexBy = keyFn: builtins.foldl' (indexed: x: indexed // { "${keyFn x}" = x; }) { };
223+
fixNames = builtins.mapAttrs
224+
(_: drv:
225+
builtins.mapAttrs
226+
(name: value:
227+
if name == "name"
228+
then "${drv.exeName}-${drv.version}"
229+
else value
230+
)
231+
drv
232+
);
224233
in
225234
rec {
226235
# Useful for nix repl
227-
inherit pkgs pkgsWithOverlay pkgsForPlutarch plutusJsonCli;
236+
inherit pkgs pkgsWithOverlay pkgsForPlutarch;
228237

229238
# Standard flake attributes
230-
packages = coopPlutusFlake.packages // coopPublisherFlake.packages // coopPabFlake.packages // coopHsTypesFlake.packages // plutusJsonFlake.packages // {
231-
"coop-plutus-cli" = coopPlutusCli;
232-
"coop-pab-cli" = coopPabCli;
233-
"coop-publisher-cli" = coopPublisherCli;
234-
"js-fs-store-cli" = jsFsStoreCli;
235-
"plutus-json-cli" = plutusJsonCli;
236-
"default" = coopPabCli;
237-
};
239+
packages = coopPlutusFlake.packages
240+
// coopPublisherFlake.packages
241+
// coopPabFlake.packages
242+
// coopHsTypesFlake.packages
243+
// plutusJsonFlake.packages
244+
// coopClis
245+
// { "default" = coopPabCli; };
238246

239247
devShells = rec {
240248
dev-proto = coopProtoDevShell;
@@ -262,6 +270,9 @@
262270
cardanoProtoExtrasFlake.checks
263271
) //
264272
{ inherit pre-commit-check; } // devShells // packages;
273+
274+
# FIXME(bladyjoker): Bundlers don't work without `fixNames` because they rely on `builtins.parseDrvName` on `name` rather than `exeName` attribute.
275+
bundlers = fixNames coopClis;
265276
})
266277
// {
267278
# Instruction for the Hercules CI to build on x86_64-linux only, to avoid errors about systems without agents.

0 commit comments

Comments
 (0)