mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-21 19:44:09 +00:00

The indentation stripping semantics of strings are fairly bad and have a few gotchas where the resulting string has not the intended indentation. This commit fixes most if not all such instances in Nixpkgs. I tried to strive a balance between keeping the diff small and reformatting/refactoring the code to look better. In general, reformatting should be left to Nixfmt. Note that this causes a lot of rebuilds by design. All changes need to be thoroughly vetted and reviewed for correctness. There is no automatic way to prove correctness. List of files to fix generated by running https://gerrit.lix.systems/c/lix/+/2092 on Nixpkgs and looking at the warnings.
87 lines
2.5 KiB
Nix
87 lines
2.5 KiB
Nix
{ pkgs
|
|
, lib
|
|
, haskellPackages
|
|
, haskell
|
|
, runCommand
|
|
, buildPackages
|
|
}:
|
|
|
|
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
|
|
cabalOverrides
|
|
arion-compose
|
|
)
|
|
).overrideAttrs (o: {
|
|
# Patch away the arion-compose name. Unlike the Haskell library, the program
|
|
# is called arion (arion was already taken on hackage).
|
|
pname = "arion";
|
|
});
|
|
|
|
inherit (haskell.lib.compose) justStaticExecutables overrideCabal;
|
|
|
|
inherit (haskellPackages) arion-compose;
|
|
|
|
cabalOverrides = o: {
|
|
buildTools = (o.buildTools or []) ++ [buildPackages.makeWrapper];
|
|
passthru = (o.passthru or {}) // {
|
|
inherit eval build;
|
|
};
|
|
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
|