diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/version-management/gitlab/default.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/version-management/gitlab/default.nix | 116 |
1 files changed, 78 insertions, 38 deletions
diff --git a/nixpkgs/pkgs/applications/version-management/gitlab/default.nix b/nixpkgs/pkgs/applications/version-management/gitlab/default.nix index fb18fb7941e..99b408bcef3 100644 --- a/nixpkgs/pkgs/applications/version-management/gitlab/default.nix +++ b/nixpkgs/pkgs/applications/version-management/gitlab/default.nix @@ -1,13 +1,24 @@ { stdenv, lib, fetchurl, fetchFromGitLab, bundlerEnv -, ruby, tzdata, git, nettools, nixosTests -, gitlabEnterprise ? false +, ruby, tzdata, git, nettools, nixosTests, nodejs +, gitlabEnterprise ? false, callPackage, yarn +, yarn2nix-moretea }: let + data = (builtins.fromJSON (builtins.readFile ./data.json)); + + version = data.version; + src = fetchFromGitLab { + owner = data.owner; + repo = data.repo; + rev = data.rev; + sha256 = data.repo_hash; + }; + rubyEnv = bundlerEnv rec { name = "gitlab-env-${version}"; inherit ruby; - gemdir = ./rubyEnv- + (if gitlabEnterprise then "ee" else "ce"); + gemdir = ./rubyEnv; gemset = let x = import (gemdir + "/gemset.nix"); in x // { @@ -19,35 +30,71 @@ let }; }; groups = [ - "default" "unicorn" "ed25519" "metrics" "development" "puma" "test" + "default" "unicorn" "ed25519" "metrics" "development" "puma" "test" "kerberos" ]; # N.B. omniauth_oauth2_generic and apollo_upload_server both provide a # `console` executable. ignoreCollisions = true; }; - flavour = if gitlabEnterprise then "ee" else "ce"; - data = (builtins.fromJSON (builtins.readFile ./data.json)).${flavour}; + yarnOfflineCache = (callPackage ./yarnPkgs.nix {}).offline_cache; - version = data.version; - sources = { - gitlab = fetchFromGitLab { - owner = data.owner; - repo = data.repo; - rev = data.rev; - sha256 = data.repo_hash; - }; - gitlabDeb = fetchurl { - url = data.deb_url; - sha256 = data.deb_hash; - }; + assets = stdenv.mkDerivation { + pname = "gitlab-assets"; + inherit version src; + + nativeBuildInputs = [ rubyEnv.wrappedRuby rubyEnv.bundler nodejs yarn ]; + + configurePhase = '' + runHook preConfigure + + # Some rake tasks try to run yarn automatically, which won't work + rm lib/tasks/yarn.rake + + # The rake tasks won't run without a basic configuration in place + mv config/database.yml.env config/database.yml + mv config/gitlab.yml.example config/gitlab.yml + + # Yarn and bundler wants a real home directory to write cache, config, etc to + export HOME=$NIX_BUILD_TOP/fake_home + + # Make yarn install packages from our offline cache, not the registry + yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} + + # Fixup "resolved"-entries in yarn.lock to match our offline cache + ${yarn2nix-moretea.fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock + + yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive + + patchShebangs node_modules/ + + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + + bundle exec rake gettext:po_to_json RAILS_ENV=production NODE_ENV=production + bundle exec rake rake:assets:precompile RAILS_ENV=production NODE_ENV=production + bundle exec rake webpack:compile RAILS_ENV=production NODE_ENV=production NODE_OPTIONS="--max_old_space_size=4096" + bundle exec rake gitlab:assets:fix_urls RAILS_ENV=production NODE_ENV=production + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mv public/assets $out + + runHook postInstall + ''; }; in - stdenv.mkDerivation { - name = "gitlab${if gitlabEnterprise then "-ee" else ""}-${version}"; + name = "gitlab${lib.optionalString gitlabEnterprise "-ee"}-${version}"; - src = sources.gitlab; + inherit src; buildInputs = [ rubyEnv rubyEnv.wrappedRuby rubyEnv.bundler tzdata git nettools @@ -56,10 +103,15 @@ stdenv.mkDerivation { patches = [ ./remove-hardcoded-locations.patch ]; postPatch = '' + ${lib.optionalString (!gitlabEnterprise) '' + # Remove all proprietary components + rm -rf ee + ''} + # For reasons I don't understand "bundle exec" ignores the # RAILS_ENV causing tests to be executed that fail because we're # not installing development and test gems above. Deleting the - # tests works though.: + # tests works though. rm lib/tasks/test.rake rm config/initializers/gitlab_shell_secret_token.rb @@ -69,27 +121,15 @@ stdenv.mkDerivation { ''; buildPhase = '' - mv config/gitlab.yml.example config/gitlab.yml - - # Building this requires yarn, node &c, so we just get it from the deb - ar p ${sources.gitlabDeb} data.tar.gz | gunzip > gitlab-deb-data.tar - # Work around unpacking deb containing binary with suid bit - tar -f gitlab-deb-data.tar --delete ./opt/gitlab/embedded/bin/ksu - tar -xf gitlab-deb-data.tar - rm gitlab-deb-data.tar - - mv -v opt/gitlab/embedded/service/gitlab-rails/public/assets public - rm -rf opt # only directory in data.tar.gz - - mv config/gitlab.yml config/gitlab.yml.example rm -f config/secrets.yml mv config config.dist + rm -r tmp ''; installPhase = '' - rm -r tmp mkdir -p $out/share cp -r . $out/share/gitlab + ln -sf ${assets} $out/share/gitlab/public/assets rm -rf $out/share/gitlab/log ln -sf /run/gitlab/log $out/share/gitlab/log ln -sf /run/gitlab/uploads $out/share/gitlab/public/uploads @@ -102,7 +142,7 @@ stdenv.mkDerivation { ''; passthru = { - inherit rubyEnv; + inherit rubyEnv assets; ruby = rubyEnv.wrappedRuby; GITALY_SERVER_VERSION = data.passthru.GITALY_SERVER_VERSION; GITLAB_PAGES_VERSION = data.passthru.GITLAB_PAGES_VERSION; @@ -116,7 +156,7 @@ stdenv.mkDerivation { meta = with lib; { homepage = http://www.gitlab.com/; platforms = platforms.linux; - maintainers = with maintainers; [ fpletz globin krav ]; + maintainers = with maintainers; [ fpletz globin krav talyz ]; } // (if gitlabEnterprise then { license = licenses.unfreeRedistributable; # https://gitlab.com/gitlab-org/gitlab-ee/raw/master/LICENSE |