default.nix
158 lines
| 4.7 KiB
| text/x-nix
|
NixLexer
r0 | # Nix environment for the community edition | |||
# | ||||
# This shall be as lean as possible, just producing the rhodecode-vcsserver | ||||
# derivation. For advanced tweaks to pimp up the development environment we use | ||||
# "shell.nix" so that it does not have to clutter this file. | ||||
{ pkgs ? (import <nixpkgs> {}) | ||||
, pythonPackages ? "python27Packages" | ||||
, pythonExternalOverrides ? self: super: {} | ||||
, doCheck ? true | ||||
}: | ||||
let pkgs_ = pkgs; in | ||||
let | ||||
pkgs = pkgs_.overridePackages (self: super: { | ||||
r116 | # bump GIT version | |||
git = pkgs.lib.overrideDerivation pkgs_.git (oldAttrs: { | ||||
r255 | name = "git-2.9.5"; | |||
r116 | src = pkgs.fetchurl { | |||
r255 | url = "https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz"; | |||
sha256 = "00ir7qmgfszwrhxjzxwixk7wp35gxvvw467gr30bagwsrdza7gm4"; | ||||
r116 | }; | |||
}); | ||||
r0 | # Override subversion derivation to | |||
# - activate python bindings | ||||
r74 | subversion = let | |||
subversionWithPython = super.subversion.override { | ||||
httpSupport = true; | ||||
pythonBindings = true; | ||||
python = self.python27Packages.python; | ||||
}; | ||||
r116 | ||||
in | ||||
pkgs.lib.overrideDerivation subversionWithPython (oldAttrs: { | ||||
r257 | name = "subversion-1.9.7"; | |||
src = pkgs.fetchurl { | ||||
url = "https://www.apache.org/dist/subversion/subversion-1.9.7.tar.gz"; | ||||
sha256 = "0g3cs2h008z8ymgkhbk54jp87bjh7y049rn42igj881yi2f20an7"; | ||||
}; | ||||
r74 | }); | |||
r116 | ||||
r0 | }); | |||
inherit (pkgs.lib) fix extends; | ||||
basePythonPackages = with builtins; if isAttrs pythonPackages | ||||
then pythonPackages | ||||
else getAttr pythonPackages pkgs; | ||||
elem = builtins.elem; | ||||
basename = path: with pkgs.lib; last (splitString "/" path); | ||||
startsWith = prefix: full: let | ||||
actualPrefix = builtins.substring 0 (builtins.stringLength prefix) full; | ||||
in actualPrefix == prefix; | ||||
src-filter = path: type: with pkgs.lib; | ||||
let | ||||
ext = last (splitString "." path); | ||||
in | ||||
r135 | !elem (basename path) [".hg" ".git" "__pycache__" ".eggs" | |||
"node_modules" "build" "data" "tmp"] && | ||||
r0 | !elem ext ["egg-info" "pyc"] && | |||
!startsWith "result" path; | ||||
rhodecode-vcsserver-src = builtins.filterSource src-filter ./.; | ||||
pythonGeneratedPackages = self: basePythonPackages.override (a: { | ||||
inherit self; | ||||
r135 | }) // (scopedImport { | |||
r0 | self = self; | |||
super = basePythonPackages; | ||||
inherit pkgs; | ||||
inherit (pkgs) fetchurl fetchgit; | ||||
} ./pkgs/python-packages.nix); | ||||
pythonOverrides = import ./pkgs/python-packages-overrides.nix { | ||||
r135 | inherit basePythonPackages pkgs; | |||
r0 | }; | |||
r18 | version = builtins.readFile ./vcsserver/VERSION; | |||
r0 | pythonLocalOverrides = self: super: { | |||
rhodecode-vcsserver = super.rhodecode-vcsserver.override (attrs: { | ||||
r135 | inherit doCheck version; | |||
r18 | name = "rhodecode-vcsserver-${version}"; | |||
r33 | releaseName = "RhodeCodeVCSServer-${version}"; | |||
r0 | src = rhodecode-vcsserver-src; | |||
r174 | dontStrip = true; # prevent strip, we don't need it. | |||
r0 | ||||
propagatedBuildInputs = attrs.propagatedBuildInputs ++ ([ | ||||
pkgs.git | ||||
pkgs.subversion | ||||
]); | ||||
# TODO: johbo: Make a nicer way to expose the parts. Maybe | ||||
# pkgs/default.nix? | ||||
passthru = { | ||||
pythonPackages = self; | ||||
}; | ||||
# Add VCSServer bin directory to path so that tests can find 'vcsserver'. | ||||
preCheck = '' | ||||
export PATH="$out/bin:$PATH" | ||||
''; | ||||
r135 | # put custom attrs here | |||
checkPhase = '' | ||||
runHook preCheck | ||||
PYTHONHASHSEED=random py.test -p no:sugar -vv --cov-config=.coveragerc --cov=vcsserver --cov-report=term-missing vcsserver | ||||
runHook postCheck | ||||
''; | ||||
r0 | postInstall = '' | |||
echo "Writing meta information for rccontrol to nix-support/rccontrol" | ||||
mkdir -p $out/nix-support/rccontrol | ||||
cp -v vcsserver/VERSION $out/nix-support/rccontrol/version | ||||
echo "DONE: Meta information for rccontrol written" | ||||
r226 | # python based programs need to be wrapped | |||
Martin Bornhold
|
r89 | ln -s ${self.pyramid}/bin/* $out/bin/ | ||
r0 | ln -s ${self.gunicorn}/bin/gunicorn $out/bin/ | |||
# Symlink version control utilities | ||||
# | ||||
# We ensure that always the correct version is available as a symlink. | ||||
# So that users calling them via the profile path will always use the | ||||
# correct version. | ||||
ln -s ${pkgs.git}/bin/git $out/bin | ||||
ln -s ${self.mercurial}/bin/hg $out/bin | ||||
ln -s ${pkgs.subversion}/bin/svn* $out/bin | ||||
r226 | for file in $out/bin/*; | |||
do | ||||
r0 | wrapProgram $file \ | |||
Martin Bornhold
|
r89 | --set PATH $PATH \ | ||
--set PYTHONPATH $PYTHONPATH \ | ||||
r0 | --set PYTHONHASHSEED random | |||
done | ||||
r226 | ||||
r0 | ''; | |||
}); | ||||
}; | ||||
# Apply all overrides and fix the final package set | ||||
myPythonPackages = | ||||
(fix | ||||
(extends pythonExternalOverrides | ||||
(extends pythonLocalOverrides | ||||
(extends pythonOverrides | ||||
pythonGeneratedPackages)))); | ||||
in myPythonPackages.rhodecode-vcsserver | ||||