diff --git a/nixbld-configuration.nix b/nixbld-etc-nixos/configuration.nix similarity index 94% rename from nixbld-configuration.nix rename to nixbld-etc-nixos/configuration.nix index bd834c5..f636216 100644 --- a/nixbld-configuration.nix +++ b/nixbld-etc-nixos/configuration.nix @@ -125,14 +125,7 @@ ACTION=="add", SUBSYSTEM=="tty", \ services.hydra = { enable = true; - package = pkgs.hydra.overrideAttrs (oldAttrs: { - src = pkgs.fetchFromGitHub { - owner = "m-labs"; - repo = "hydra"; - rev = "6d511f43da4317f8f44ed75accf369bd3da95890"; - sha256 = "0yysj9sinki05r3kri4krdn6p8js5cngjmd7gf2ckc4rhibyicwx"; - }; - }); + package = pkgs.callPackage ./hydra.nix {}; hydraURL = "https://nixbld.m-labs.hk"; notificationSender = "hydra@m-labs.hk"; minimumDiskFree = 2; # in GB diff --git a/nixbld-etc-nixos/hydra.nix b/nixbld-etc-nixos/hydra.nix new file mode 100644 index 0000000..fbab53b --- /dev/null +++ b/nixbld-etc-nixos/hydra.nix @@ -0,0 +1,155 @@ +{ stdenv, nix, perlPackages, buildEnv, releaseTools, fetchFromGitHub +, makeWrapper, autoconf, automake, libtool, unzip, pkgconfig, sqlite, libpqxx +, gitAndTools, mercurial, darcs, subversion, bazaar, openssl, bzip2, libxslt +, guile, perl, postgresql, nukeReferences, git, boehmgc, nlohmann_json +, docbook_xsl, openssh, gnused, coreutils, findutils, gzip, lzma, gnutar +, rpm, dpkg, cdrkit, pixz, lib, fetchpatch, boost, autoreconfHook +}: + +with stdenv; + +if lib.versions.major nix.version == "1" + then throw "This Hydra version doesn't support Nix 1.x" +else + +let + isGreaterNix20 = with lib.versions; + let + inherit (nix) version; + inherit (lib) toInt; + in major version == "2" && toInt (minor version) >= 1 || toInt (major version) > 2; + + perlDeps = buildEnv { + name = "hydra-perl-deps"; + paths = with perlPackages; + [ ModulePluggable + CatalystActionREST + CatalystAuthenticationStoreDBIxClass + CatalystDevel + CatalystDispatchTypeRegex + CatalystPluginAccessLog + CatalystPluginAuthorizationRoles + CatalystPluginCaptcha + CatalystPluginSessionStateCookie + CatalystPluginSessionStoreFastMmap + CatalystPluginStackTrace + CatalystRuntime + CatalystTraitForRequestProxyBase + CatalystViewDownload + CatalystViewJSON + CatalystViewTT + CatalystXScriptServerStarman + CatalystXRoleApplicator + CryptRandPasswd + DBDPg + DBDSQLite + DataDump + DateTime + DigestSHA1 + EmailMIME + EmailSender + FileSlurp + IOCompress + IPCRun + JSON + JSONAny + JSONXS + LWP + LWPProtocolHttps + NetAmazonS3 + NetStatsd + PadWalker + Readonly + SQLSplitStatement + SetScalar + Starman + SysHostnameLong + TextDiff + TextTable + XMLSimple + nix + nix.perl-bindings + git + boehmgc + ]; + }; +in releaseTools.nixBuild rec { + name = "hydra-${version}"; + version = "2019-02-01-mlabs"; + + inherit stdenv; + + src = fetchFromGitHub { + owner = "NixOS"; + repo = "hydra"; + rev = "152f82f348522039936abf3d18a412c9106814a8"; + sha256 = "1nngsznnzw9y6ir2ygys43wki1ypxj584k51773v65zi6lzz9qlq"; + }; + + buildInputs = + [ makeWrapper autoconf automake libtool unzip nukeReferences sqlite libpqxx + gitAndTools.topGit mercurial darcs subversion bazaar openssl bzip2 libxslt + guile # optional, for Guile + Guix support + perlDeps perl nix + postgresql # for running the tests + nlohmann_json + ] ++ lib.optionals isGreaterNix20 [ boost ]; + + hydraPath = lib.makeBinPath ( + [ sqlite subversion openssh nix coreutils findutils pixz + gzip bzip2 lzma gnutar unzip git gitAndTools.topGit mercurial darcs gnused bazaar + ] ++ lib.optionals stdenv.isLinux [ rpm dpkg cdrkit ] ); + + nativeBuildInputs = [ autoreconfHook pkgconfig ]; + + # adds a patch which ensures compatibility with the API of Nix 2.0. + # it has been reverted in https://github.com/NixOS/hydra/commit/162d671c48a418bd10a8a171ca36787ef3695a44, + # for Nix 2.1/unstable compatibility. Reapplying helps if Nix 2.0 is used to keep the build functional. + patches = lib.optionals (!isGreaterNix20) [ + (fetchpatch { + url = "https://github.com/NixOS/hydra/commit/08de434bdd0b0a22abc2081be6064a6c846d3920.patch"; + sha256 = "0kz77njp5ynn9l81g3q8zrryvnsr06nk3iw0a60187wxqzf5fmf8"; + }) + ]; + + configureFlags = [ "--with-docbook-xsl=${docbook_xsl}/xml/xsl/docbook" ]; + + NIX_CFLAGS_COMPILE = [ "-pthread" ]; + + shellHook = '' + PATH=$(pwd)/src/script:$(pwd)/src/hydra-eval-jobs:$(pwd)/src/hydra-queue-runner:$(pwd)/src/hydra-evaluator:$PATH + PERL5LIB=$(pwd)/src/lib:$PERL5LIB; + ''; + + enableParallelBuilding = true; + + preCheck = '' + patchShebangs . + export LOGNAME=''${LOGNAME:-foo} + ''; + + postInstall = '' + mkdir -p $out/nix-support + for i in $out/bin/*; do + read -n 4 chars < $i + if [[ $chars =~ ELF ]]; then continue; fi + wrapProgram $i \ + --prefix PERL5LIB ':' $out/libexec/hydra/lib:$PERL5LIB \ + --prefix PATH ':' $out/bin:$hydraPath \ + --set HYDRA_RELEASE ${version} \ + --set HYDRA_HOME $out/libexec/hydra \ + --set NIX_RELEASE ${nix.name or "unknown"} + done + ''; # */ + + dontStrip = true; + + passthru.perlDeps = perlDeps; + + meta = with stdenv.lib; { + description = "Nix-based continuous build system"; + license = licenses.gpl3; + platforms = platforms.linux; + maintainers = with maintainers; [ ma27 ]; + }; +}