Nix build harness

This commit is contained in:
Gregor Kleen 2017-10-02 20:17:33 +02:00
parent 3554348dca
commit 7998bacc15
8 changed files with 93 additions and 1 deletions

3
.gitignore vendored
View File

@ -19,3 +19,6 @@ cabal.sandbox.config
*~
\#*
uniworx.cabal
uniworx.nix
.gup/
.dbsettings.yml

6
default.nix Normal file
View File

@ -0,0 +1,6 @@
argumentPackages@{ ... }:
let
defaultPackages = (import <nixpkgs> {}).haskellPackages;
haskellPackages = defaultPackages // argumentPackages;
in import ./uniworx.nix { inherit (haskellPackages) callPackage; }

4
gup/Gupfile Normal file
View File

@ -0,0 +1,4 @@
cabal2nix.gup:
*.nix
hpack.gup:
*.cabal

8
gup/cabal2nix.gup Executable file
View File

@ -0,0 +1,8 @@
#! /usr/bin/env nix-shell
#! nix-shell -i zsh -p zsh haskellPackages.cabal2nix
gup -u ${2:r}.cabal
cd ${2:h}
cabal2nix . > $1

6
gup/hpack.gup Executable file
View File

@ -0,0 +1,6 @@
#! /usr/bin/env nix-shell
#! nix-shell -i sh -p haskellPackages.hpack
gup -u package.yaml
hpack - >$1

50
shell.nix Normal file
View File

@ -0,0 +1,50 @@
{ nixpkgs ? import <nixpkgs> {}, compiler ? null }:
let
inherit (nixpkgs) pkgs;
haskellPackages = if isNull compiler
then pkgs.haskellPackages
else pkgs.haskell.packages.${compiler};
drv = haskellPackages.callPackage ./uniworx.nix {};
postgresSchema = pkgs.writeText "schema.sql" ''
CREATE USER uniworx;
CREATE DATABASE uniworx_test;
GRANT ALL ON DATABASE uniworx_test TO uniworx;
'';
postgresHba = pkgs.writeText "hba_file" ''
local all all trust
'';
override = oldAttrs: {
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ (with pkgs; [ postgresql ]) ++ (with haskellPackages; [ stack stack-run yesod-bin ]);
shellHook = ''
${oldAttrs.shellHook}
export PROMPT_INFO="${oldAttrs.name}"
pgDir=$(mktemp -d)
pgSockDir=$(mktemp -d)
pgLogFile=$(mktemp)
pg_ctl init -D ''${pgDir}
pg_ctl start -D ''${pgDir} -l ''${pgLogFile} -w -o "-k ''${pgSockDir} -c listen_addresses=''' -c hba_file='${postgresHba}' -c unix_socket_permissions=0700"
export PGHOST=''${pgSockDir} PGLOG=''${pgLogFile}
psql -f ${postgresSchema} postgres
printf "Postgres logfile is %s\nPostgres socket directory is %s\n" ''${pgLogFile} ''${pgSockDir}
cat > .dbsettings.yml <<EOF
database:
host: ''${pgSockDir}
EOF
zsh
ret=$?
pg_ctl stop -D ''${pgDir}
rm -rvf .dbsettings.yml ''${pgDir} ''${pgSockDir} ''${pgLogFile}
exit ''${ret}
'';
};
in
pkgs.stdenv.lib.overrideDerivation drv.env override

11
stack.nix Normal file
View File

@ -0,0 +1,11 @@
{ ghc, nixpkgs ? (import <nixpkgs> {}) }:
let
inherit (nixpkgs) haskell pkgs;
in haskell.lib.buildStackProject {
inherit ghc;
name = "stackenv";
buildInputs = with pkgs;
[ postgresql zlib
];
}

View File

@ -63,4 +63,8 @@ extra-package-dbs: []
# extra-lib-dirs: [/path/to/dir]
#
# Allow a newer minor version of GHC than the snapshot specifies
# compiler-check: newer-minor
# compiler-check: newer-minor
nix:
packages: []
shell-file: ./stack.nix