summary refs log tree commit diff
path: root/pkgs/applications/version-management/gitlab/default.nix
diff options
context:
space:
mode:
authorroblabla <robinlambertz+dev@gmail.com>2017-07-05 23:53:31 +0200
committerroblabla <robinlambertz+dev@gmail.com>2017-07-06 13:29:49 +0200
commit0c7c421baa25782a658581fb609240a91400523d (patch)
treed1c936ca10fc7c1aaea466430931ba7d49421305 /pkgs/applications/version-management/gitlab/default.nix
parent8dee8d5f5c04b4b9fe39d1e6cdffcd0c881bf0fc (diff)
downloadnixlib-0c7c421baa25782a658581fb609240a91400523d.tar
nixlib-0c7c421baa25782a658581fb609240a91400523d.tar.gz
nixlib-0c7c421baa25782a658581fb609240a91400523d.tar.bz2
nixlib-0c7c421baa25782a658581fb609240a91400523d.tar.lz
nixlib-0c7c421baa25782a658581fb609240a91400523d.tar.xz
nixlib-0c7c421baa25782a658581fb609240a91400523d.tar.zst
nixlib-0c7c421baa25782a658581fb609240a91400523d.zip
gitlab: 8.17.6 -> 9.3.4
Diffstat (limited to 'pkgs/applications/version-management/gitlab/default.nix')
-rw-r--r--pkgs/applications/version-management/gitlab/default.nix86
1 files changed, 78 insertions, 8 deletions
diff --git a/pkgs/applications/version-management/gitlab/default.nix b/pkgs/applications/version-management/gitlab/default.nix
index 9929c94198d9..0266c04aab50 100644
--- a/pkgs/applications/version-management/gitlab/default.nix
+++ b/pkgs/applications/version-management/gitlab/default.nix
@@ -1,12 +1,73 @@
-{ stdenv, lib, bundler, fetchurl, fetchFromGitHub, bundlerEnv, libiconv, ruby
-, tzdata, git, nodejs, procps, dpkg
+{ pkgs, stdenv, lib, bundler, fetchurl, fetchFromGitHub, bundlerEnv, libiconv
+, ruby, tzdata, git, nodejs, procps, dpkg, yarn
 }:
 
 /* When updating the Gemfile add `gem "activerecord-nulldb-adapter"`
    to allow building the assets without a database */
 
 let
-  env = bundlerEnv {
+  # Taken from yarn2nix
+  buildYarnPackageDeps = {
+    name,
+    packageJson,
+    yarnLock,
+    yarnNix,
+    pkgConfig ? {},
+    yarnFlags ? []
+  }:
+    let
+      offlineCache = (pkgs.callPackage yarnNix {}).offline_cache;
+      extraBuildInputs = (lib.flatten (builtins.map (key:
+        pkgConfig.${key} . buildInputs or []
+      ) (builtins.attrNames pkgConfig)));
+      postInstall = (builtins.map (key:
+        if (pkgConfig.${key} ? postInstall) then
+          ''
+            for f in $(find -L -path '*/node_modules/${key}' -type d); do
+              (cd "$f" && (${pkgConfig.${key}.postInstall}))
+            done
+          ''
+        else
+          ""
+      ) (builtins.attrNames pkgConfig));
+    in
+    stdenv.mkDerivation {
+      name = "${name}-modules";
+
+      phases = ["buildPhase"];
+      buildInputs = [ yarn nodejs ] ++ extraBuildInputs;
+
+      buildPhase = ''
+        # Yarn writes cache directories etc to $HOME.
+        export HOME=`pwd`/yarn_home
+        cp ${packageJson} ./package.json
+        cp ${yarnLock} ./yarn.lock
+        chmod +w ./yarn.lock
+        yarn config --offline set yarn-offline-mirror ${offlineCache}
+        # Do not look up in the registry, but in the offline cache.
+        # TODO: Ask upstream to fix this mess.
+        sed -i -E 's|^(\s*resolved\s*")https?://.*/|\1|' yarn.lock
+        yarn install ${lib.escapeShellArgs yarnFlags}
+        ${lib.concatStringsSep "\n" postInstall}
+        mkdir $out
+        mv node_modules $out/
+        patchShebangs $out
+      '';
+    };
+  node-env = buildYarnPackageDeps {
+    name = "gitlab";
+    packageJson = ./package.json;
+    yarnLock = ./yarn.lock;
+    yarnNix = ./yarn.nix;
+    yarnFlags = [
+      "--offline"
+      "--frozen-lockfile"
+      "--ignore-engines"
+      "--ignore-scripts"
+    ];
+    # pkgConfig might need to come from node-packages ?
+  };
+  ruby-env = bundlerEnv {
     name = "gitlab";
     inherit ruby;
     gemdir = ./.;
@@ -18,7 +79,7 @@ let
     };
   };
 
-  version = "8.17.6";
+  version = "9.3.4";
 
   gitlabDeb = fetchurl {
     url = "https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/jessie/gitlab-ce_${version}-ce.0_amd64.deb/download";
@@ -31,14 +92,14 @@ stdenv.mkDerivation rec {
   name = "gitlab-${version}";
 
   buildInputs = [
-    env ruby bundler tzdata git nodejs procps dpkg
+    ruby-env ruby bundler tzdata git nodejs procps dpkg yarn
   ];
 
   src = fetchFromGitHub {
     owner = "gitlabhq";
     repo = "gitlabhq";
     rev = "v${version}";
-    sha256 = "1yyyn2j0a457q2xbcxz6b33r23myr8kxbm9whj2dwrrbp4p273hr";
+    sha256 = "18mx0pfny26s0vv92w1lmmikhfn966bd6s2zzcdmsd1j3cxxdwbg";
   };
 
   patches = [
@@ -79,7 +140,16 @@ stdenv.mkDerivation rec {
 
     export GITLAB_DATABASE_ADAPTER=nulldb
     export SKIP_STORAGE_VALIDATION=true
-    rake assets:precompile RAILS_ENV=production
+    # ;_;
+    #yarn install --production --pure-lockfile
+    mkdir -p node_modules/
+    ln -s ${node-env}/node_modules/* node_modules/
+    ln -s ${node-env}/node_modules/.bin node_modules/
+
+    rake rake:assets:precompile RAILS_ENV=production NODE_ENV=production
+    rake webpack:compile RAILS_ENV=production NODE_ENV=production
+    rake gitlab:assets:fix_urls RAILS_ENV=production NODE_ENV=production
+    rake gettext:compile RAILS_ENV=production
 
     mv config/gitlab.yml config/gitlab.yml.example
     rm config/secrets.yml
@@ -98,7 +168,7 @@ stdenv.mkDerivation rec {
   '';
 
   passthru = {
-    inherit env;
+    inherit ruby-env;
     inherit ruby;
   };
 }