-
-
Notifications
You must be signed in to change notification settings - Fork 15.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #71092 from roberth/arion-init
arion: init at 0.1.0.0
- Loading branch information
Showing
2 changed files
with
85 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
{ pkgs | ||
, lib | ||
, haskellPackages | ||
, haskell | ||
, runCommand | ||
}: | ||
|
||
let | ||
|
||
/* This derivation builds the arion tool. | ||
It is based on the arion-compose Haskell package, but adapted and extended to | ||
- have the correct name | ||
- have a smaller closure size | ||
- have functions to use Arion from inside Nix: arion.eval and arion.build | ||
- make it self-contained by including docker-compose | ||
*/ | ||
arion = | ||
justStaticExecutables ( | ||
overrideCabal | ||
arion-compose | ||
cabalOverrides | ||
); | ||
|
||
inherit (haskell.lib) justStaticExecutables overrideCabal; | ||
|
||
inherit (haskellPackages) arion-compose; | ||
|
||
cabalOverrides = o: { | ||
buildTools = (o.buildTools or []) ++ [pkgs.makeWrapper]; | ||
passthru = (o.passthru or {}) // { | ||
inherit eval build; | ||
}; | ||
# Patch away the arion-compose name. Unlike the Haskell library, the program | ||
# is called arion (arion was already taken on hackage). | ||
pname = "arion"; | ||
src = arion-compose.src; | ||
|
||
# PYTHONPATH | ||
# | ||
# We close off the python module search path! | ||
# | ||
# Accepting directories from the environment into the search path | ||
# tends to break things. Docker Compose does not have a plugin | ||
# system as far as I can tell, so I don't expect this to break a | ||
# feature, but rather to make the program more robustly self- | ||
# contained. | ||
|
||
postInstall = ''${o.postInstall or ""} | ||
mkdir -p $out/libexec | ||
mv $out/bin/arion $out/libexec | ||
makeWrapper $out/libexec/arion $out/bin/arion \ | ||
--unset PYTHONPATH \ | ||
--prefix PATH : ${lib.makeBinPath [ pkgs.docker-compose ]} \ | ||
; | ||
''; | ||
}; | ||
|
||
# Unpacked sources for evaluation by `eval` | ||
srcUnpacked = runCommand "arion-src" {} | ||
"mkdir $out; tar -C $out --strip-components=1 -xf ${arion-compose.src}"; | ||
|
||
/* Function for evaluating a composition | ||
Re-uses this Nixpkgs evaluation instead of `arion-pkgs.nix`. | ||
Returns the module system's `config` and `options` variables. | ||
*/ | ||
eval = args@{...}: | ||
import (srcUnpacked + "/src/nix/eval-composition.nix") | ||
({ inherit pkgs; } // args); | ||
|
||
/* Function to derivation of the docker compose yaml file | ||
NOTE: The output will change: https://github.com/hercules-ci/arion/issues/82 | ||
This function is particularly useful on CI, although the references | ||
to image tarballs may not always be desirable. | ||
*/ | ||
build = args@{...}: | ||
let composition = eval args; | ||
in composition.config.out.dockerComposeYaml; | ||
|
||
in arion |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters