aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/applications/version-management/gitlab/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/version-management/gitlab/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/version-management/gitlab/default.nix116
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