gitlab: fix evaluation
parent
989a894fc8
commit
6eaa419920
|
@ -7,8 +7,10 @@ with lib;
|
|||
let
|
||||
cfg = config.services.gitlab;
|
||||
|
||||
ruby = pkgs.ruby;
|
||||
rubyLibs = pkgs.rubyLibs;
|
||||
ruby = pkgs.gitlab.ruby;
|
||||
bundler = pkgs.bundler;
|
||||
|
||||
gemHome = "${pkgs.gitlab.env}/${ruby.gemPath}"
|
||||
|
||||
databaseYml = ''
|
||||
production:
|
||||
|
@ -38,13 +40,14 @@ let
|
|||
|
||||
gitlab-runner = pkgs.stdenv.mkDerivation rec {
|
||||
name = "gitlab-runner";
|
||||
buildInputs = [ pkgs.gitlab pkgs.rubyLibs.bundler pkgs.makeWrapper ];
|
||||
buildInputs = [ pkgs.gitlab pkgs.bundler pkgs.makeWrapper ];
|
||||
phases = "installPhase fixupPhase";
|
||||
buildPhase = "";
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
makeWrapper ${rubyLibs.bundler}/bin/bundle $out/bin/gitlab-runner\
|
||||
makeWrapper ${bundler}/bin/bundle $out/bin/gitlab-runner\
|
||||
--set RAKEOPT '"-f ${pkgs.gitlab}/share/gitlab/Rakefile"'\
|
||||
--set GEM_HOME '${gemHome}'\
|
||||
--set UNICORN_PATH "${cfg.stateDir}/"\
|
||||
--set GITLAB_PATH "${pkgs.gitlab}/share/gitlab/"\
|
||||
--set GITLAB_APPLICATION_LOG_PATH "${cfg.stateDir}/log/application.log"\
|
||||
|
@ -172,6 +175,7 @@ in {
|
|||
after = [ "network.target" "redis.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment.HOME = "${cfg.stateDir}/home";
|
||||
environment.GEM_HOME = gemHome;
|
||||
environment.UNICORN_PATH = "${cfg.stateDir}/";
|
||||
environment.GITLAB_PATH = "${pkgs.gitlab}/share/gitlab/";
|
||||
environment.GITLAB_APPLICATION_LOG_PATH = "${cfg.stateDir}/log/application.log";
|
||||
|
@ -201,7 +205,7 @@ in {
|
|||
Group = "gitlab";
|
||||
TimeoutSec = "300";
|
||||
WorkingDirectory = "${pkgs.gitlab}/share/gitlab";
|
||||
ExecStart="${rubyLibs.bundler}/bin/bundle exec \"sidekiq -q post_receive -q mailer -q system_hook -q project_web_hook -q gitlab_shell -q common -q default -e production -P ${cfg.stateDir}/tmp/sidekiq.pid\"";
|
||||
ExecStart="${bundler}/bin/bundle exec \"sidekiq -q post_receive -q mailer -q system_hook -q project_web_hook -q gitlab_shell -q common -q default -e production -P ${cfg.stateDir}/tmp/sidekiq.pid\"";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -209,6 +213,7 @@ in {
|
|||
after = [ "network.target" "postgresql.service" "redis.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment.HOME = "${cfg.stateDir}/home";
|
||||
environment.GEM_HOME = gemHome;
|
||||
environment.UNICORN_PATH = "${cfg.stateDir}/";
|
||||
environment.GITLAB_PATH = "${pkgs.gitlab}/share/gitlab/";
|
||||
environment.GITLAB_APPLICATION_LOG_PATH = "${cfg.stateDir}/log/application.log";
|
||||
|
@ -263,7 +268,7 @@ in {
|
|||
|
||||
# force=yes disables the manual-interaction yes/no prompt
|
||||
# which breaks without an stdin.
|
||||
force=yes ${rubyLibs.bundler}/bin/bundle exec rake -f ${pkgs.gitlab}/share/gitlab/Rakefile gitlab:setup RAILS_ENV=production
|
||||
force=yes ${bundler}/bin/bundle exec rake -f ${pkgs.gitlab}/share/gitlab/Rakefile gitlab:setup RAILS_ENV=production
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -285,7 +290,7 @@ in {
|
|||
Group = "gitlab";
|
||||
TimeoutSec = "300";
|
||||
WorkingDirectory = "${pkgs.gitlab}/share/gitlab";
|
||||
ExecStart="${rubyLibs.bundler}/bin/bundle exec \"unicorn -c ${cfg.stateDir}/config/unicorn.rb -E production\"";
|
||||
ExecStart="${bundler}/bin/bundle exec \"unicorn -c ${cfg.stateDir}/config/unicorn.rb -E production\"";
|
||||
};
|
||||
|
||||
};
|
||||
|
|
|
@ -0,0 +1,258 @@
|
|||
source "https://rubygems.org"
|
||||
|
||||
def darwin_only(require_as)
|
||||
RUBY_PLATFORM.include?('darwin') && require_as
|
||||
end
|
||||
|
||||
def linux_only(require_as)
|
||||
RUBY_PLATFORM.include?('linux') && require_as
|
||||
end
|
||||
|
||||
gem "rails", "~> 4.1.0"
|
||||
|
||||
# Make links from text
|
||||
gem 'rails_autolink', '~> 1.1'
|
||||
|
||||
# Default values for AR models
|
||||
gem "default_value_for", "~> 3.0.0"
|
||||
|
||||
# Supported DBs
|
||||
gem "mysql2", group: :mysql
|
||||
gem "pg", group: :postgres
|
||||
|
||||
# Auth
|
||||
gem "devise", '3.2.4'
|
||||
gem "devise-async", '0.9.0'
|
||||
gem 'omniauth', "~> 1.1.3"
|
||||
gem 'omniauth-google-oauth2'
|
||||
gem 'omniauth-twitter'
|
||||
gem 'omniauth-github'
|
||||
gem 'omniauth-shibboleth'
|
||||
|
||||
# Extracting information from a git repository
|
||||
# Provide access to Gitlab::Git library
|
||||
gem "gitlab_git", '7.0.0.rc10'
|
||||
|
||||
# Ruby/Rack Git Smart-HTTP Server Handler
|
||||
gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack'
|
||||
|
||||
# LDAP Auth
|
||||
gem 'gitlab_omniauth-ldap', '1.1.0', require: "omniauth-ldap"
|
||||
|
||||
# Git Wiki
|
||||
gem 'gollum-lib', '~> 3.0.0'
|
||||
|
||||
# Language detection
|
||||
gem "gitlab-linguist", "~> 3.0.0", require: "linguist"
|
||||
|
||||
# API
|
||||
gem "grape", "~> 0.6.1"
|
||||
gem "grape-entity", "~> 0.4.2"
|
||||
gem 'rack-cors', require: 'rack/cors'
|
||||
|
||||
# Format dates and times
|
||||
# based on human-friendly examples
|
||||
gem "stamp"
|
||||
|
||||
# Enumeration fields
|
||||
gem 'enumerize'
|
||||
|
||||
# Pagination
|
||||
gem "kaminari", "~> 0.15.1"
|
||||
|
||||
# HAML
|
||||
gem "haml-rails"
|
||||
|
||||
# Files attachments
|
||||
gem "carrierwave"
|
||||
|
||||
# Drag and Drop UI
|
||||
gem 'dropzonejs-rails'
|
||||
|
||||
# for aws storage
|
||||
gem "fog", "~> 1.14"
|
||||
gem "unf"
|
||||
|
||||
# Authorization
|
||||
gem "six"
|
||||
|
||||
# Seed data
|
||||
gem "seed-fu"
|
||||
|
||||
# Markup pipeline for GitLab
|
||||
gem 'html-pipeline-gitlab', '~> 0.1.0'
|
||||
|
||||
# Markdown to HTML
|
||||
gem "github-markup"
|
||||
|
||||
# Required markup gems by github-markdown
|
||||
gem 'redcarpet', '~> 3.1.2'
|
||||
gem 'RedCloth'
|
||||
gem 'rdoc', '~>3.6'
|
||||
gem 'org-ruby', '= 0.9.9'
|
||||
gem 'creole', '~>0.3.6'
|
||||
gem 'wikicloth', '=0.8.1'
|
||||
gem 'asciidoctor', '= 0.1.4'
|
||||
|
||||
# Diffs
|
||||
gem 'diffy', '~> 3.0.3'
|
||||
|
||||
# Application server
|
||||
group :unicorn do
|
||||
gem "unicorn", '~> 4.6.3'
|
||||
gem 'unicorn-worker-killer'
|
||||
end
|
||||
|
||||
# State machine
|
||||
gem "state_machine"
|
||||
|
||||
# Issue tags
|
||||
gem "acts-as-taggable-on"
|
||||
|
||||
# Background jobs
|
||||
gem 'slim'
|
||||
gem 'sinatra', require: nil
|
||||
gem 'sidekiq', '2.17.0'
|
||||
|
||||
# HTTP requests
|
||||
gem "httparty"
|
||||
|
||||
# Colored output to console
|
||||
gem "colored"
|
||||
|
||||
# GitLab settings
|
||||
gem 'settingslogic'
|
||||
|
||||
# Misc
|
||||
gem "foreman"
|
||||
gem 'version_sorter'
|
||||
|
||||
# Cache
|
||||
gem "redis-rails"
|
||||
|
||||
# Campfire integration
|
||||
gem 'tinder', '~> 1.9.2'
|
||||
|
||||
# HipChat integration
|
||||
gem "hipchat", "~> 0.14.0"
|
||||
|
||||
# Flowdock integration
|
||||
gem "gitlab-flowdock-git-hook", "~> 0.4.2"
|
||||
|
||||
# Gemnasium integration
|
||||
gem "gemnasium-gitlab-service", "~> 0.2"
|
||||
|
||||
# Slack integration
|
||||
gem "slack-notifier", "~> 0.3.2"
|
||||
|
||||
# d3
|
||||
gem "d3_rails", "~> 3.1.4"
|
||||
|
||||
# underscore-rails
|
||||
gem "underscore-rails", "~> 1.4.4"
|
||||
|
||||
# Sanitize user input
|
||||
gem "sanitize", '~> 2.0'
|
||||
|
||||
# Protect against bruteforcing
|
||||
gem "rack-attack"
|
||||
|
||||
# Ace editor
|
||||
gem 'ace-rails-ap'
|
||||
|
||||
# Keyboard shortcuts
|
||||
gem 'mousetrap-rails'
|
||||
|
||||
# Semantic UI Sass for Sidebar
|
||||
gem 'semantic-ui-sass', '~> 0.16.1.0'
|
||||
|
||||
gem "sass-rails", '~> 4.0.2'
|
||||
gem "coffee-rails"
|
||||
gem "uglifier"
|
||||
gem "therubyracer"
|
||||
gem 'turbolinks'
|
||||
gem 'jquery-turbolinks'
|
||||
|
||||
gem 'select2-rails'
|
||||
gem 'jquery-atwho-rails', "~> 0.3.3"
|
||||
gem "jquery-rails"
|
||||
gem "jquery-ui-rails"
|
||||
gem "jquery-scrollto-rails"
|
||||
gem "raphael-rails", "~> 2.1.2"
|
||||
gem 'bootstrap-sass', '~> 3.0'
|
||||
gem "font-awesome-rails", '~> 4.2'
|
||||
gem "gitlab_emoji", "~> 0.0.1.1"
|
||||
gem "gon", '~> 5.0.0'
|
||||
gem 'nprogress-rails'
|
||||
gem 'request_store'
|
||||
gem "virtus"
|
||||
|
||||
group :development do
|
||||
gem "annotate", "~> 2.6.0.beta2"
|
||||
gem "letter_opener"
|
||||
gem 'quiet_assets', '~> 1.0.1'
|
||||
gem 'rack-mini-profiler', require: false
|
||||
|
||||
# Better errors handler
|
||||
gem 'better_errors'
|
||||
gem 'binding_of_caller'
|
||||
|
||||
gem 'rails_best_practices'
|
||||
|
||||
# Docs generator
|
||||
gem "sdoc"
|
||||
|
||||
# thin instead webrick
|
||||
gem 'thin'
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
gem 'coveralls', require: false
|
||||
# gem 'rails-dev-tweaks'
|
||||
gem 'spinach-rails'
|
||||
gem "rspec-rails"
|
||||
gem "capybara", '~> 2.2.1'
|
||||
gem "pry"
|
||||
gem "awesome_print"
|
||||
gem "database_cleaner"
|
||||
gem "launchy"
|
||||
gem 'factory_girl_rails'
|
||||
|
||||
# Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826)
|
||||
gem 'minitest', '~> 5.3.0'
|
||||
|
||||
# Generate Fake data
|
||||
gem "ffaker"
|
||||
|
||||
# Guard
|
||||
gem 'guard-rspec'
|
||||
gem 'guard-spinach'
|
||||
|
||||
# Notification
|
||||
gem 'rb-fsevent', require: darwin_only('rb-fsevent')
|
||||
gem 'growl', require: darwin_only('growl')
|
||||
gem 'rb-inotify', require: linux_only('rb-inotify')
|
||||
|
||||
# PhantomJS driver for Capybara
|
||||
gem 'poltergeist', '~> 1.5.1'
|
||||
|
||||
gem 'jasmine', '2.0.2'
|
||||
|
||||
gem "spring", '1.1.3'
|
||||
gem "spring-commands-rspec", '1.0.1'
|
||||
gem "spring-commands-spinach", '1.0.0'
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem "simplecov", require: false
|
||||
gem "shoulda-matchers", "~> 2.1.0"
|
||||
gem 'email_spec'
|
||||
gem "webmock"
|
||||
gem 'test_after_commit'
|
||||
end
|
||||
|
||||
group :production do
|
||||
gem "gitlab_meta", '7.0'
|
||||
end
|
||||
|
||||
gem "newrelic_rpm"
|
|
@ -281,6 +281,7 @@ GEM
|
|||
addressable (~> 2.3)
|
||||
letter_opener (1.1.2)
|
||||
launchy (~> 2.2)
|
||||
libv8 (3.16.14.3)
|
||||
listen (2.3.1)
|
||||
celluloid (>= 0.15.2)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
|
@ -297,6 +298,7 @@ GEM
|
|||
multi_json (1.10.1)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (1.2.0)
|
||||
mysql2 (0.3.16)
|
||||
net-ldap (0.7.0)
|
||||
net-scp (1.1.2)
|
||||
net-ssh (>= 2.6.5)
|
||||
|
@ -420,6 +422,7 @@ GEM
|
|||
redis-store (~> 1.1.0)
|
||||
redis-store (1.1.4)
|
||||
redis (>= 2.2)
|
||||
ref (1.0.5)
|
||||
request_store (1.0.5)
|
||||
require_all (1.3.2)
|
||||
rest-client (1.6.7)
|
||||
|
@ -518,6 +521,9 @@ GEM
|
|||
term-ansicolor (1.2.2)
|
||||
tins (~> 0.8)
|
||||
test_after_commit (0.2.2)
|
||||
therubyracer (0.12.0)
|
||||
libv8 (~> 3.16.14.0)
|
||||
ref
|
||||
thin (1.6.1)
|
||||
daemons (>= 1.0.9)
|
||||
eventmachine (>= 1.0.0)
|
||||
|
@ -691,6 +697,7 @@ DEPENDENCIES
|
|||
stamp
|
||||
state_machine
|
||||
test_after_commit
|
||||
therubyracer
|
||||
thin
|
||||
tinder (~> 1.9.2)
|
||||
turbolinks
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +0,0 @@
|
|||
to regenerate Gemfile.nix and Gemfile.lock you need to
|
||||
|
||||
% nix-build bootstrap.nix
|
||||
% cp result/Gemfile.nix ./
|
||||
% cp result/Gemfile.lock ./
|
|
@ -1,45 +0,0 @@
|
|||
{ pkgs ? import <nixpkgs> {}
|
||||
}:
|
||||
|
||||
with pkgs;
|
||||
|
||||
let
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
version = "7.4.2";
|
||||
name = "gitlab-${version}";
|
||||
__noChroot = true;
|
||||
src = fetchurl {
|
||||
url = "https://github.com/gitlabhq/gitlabhq/archive/v${version}.zip";
|
||||
sha256 = "01iplkpa4scr0wcap6vjrc960dj15z4ciclaqswj0sz5hrp9glw6";
|
||||
};
|
||||
buildInputs = [
|
||||
ruby rubyLibs.bundler libiconv libxslt libxml2 pkgconfig
|
||||
libffi postgresql which stdenv unzip
|
||||
];
|
||||
installPhase = ''
|
||||
unset http_proxy
|
||||
unset ftp_proxy
|
||||
|
||||
cp -R . $out
|
||||
cp ${./generate_nix_requirements.rb} $out/generate_nix_requirements.rb
|
||||
cd $out
|
||||
|
||||
cat > config/database.yml <<EOF
|
||||
production:
|
||||
adapter: postgresql
|
||||
EOF
|
||||
|
||||
substituteInPlace Gemfile --replace 'gem "therubyracer"' ""
|
||||
|
||||
bundle config --local build.nokogiri --use-system-libraries \
|
||||
--with-iconv-dir=${libiconv} \
|
||||
--with-xslt-dir=${libxslt} \
|
||||
--with-xml2-dir=${libxml2} \
|
||||
--with-pkg-config \
|
||||
--with-pg-config=${postgresql}/bin/pg_config
|
||||
|
||||
HOME="/tmp/gitlab-${version}" ruby generate_nix_requirements.rb
|
||||
rm -R /tmp/gems
|
||||
'';
|
||||
}
|
|
@ -1,41 +1,54 @@
|
|||
{ stdenv, fetchurl, ruby, rubyLibs, libiconv, libxslt, libxml2, pkgconfig, libffi, postgresql, libyaml, ncurses, curl, openssh, redis, zlib, icu, checkinstall, logrotate, docutils, cmake, git, gdbm, readline, unzip, gnumake, which, tzdata, nodejs }:
|
||||
{ stdenv, lib, bundler, fetchgit, bundlerEnv, defaultGemConfig, libiconv, ruby
|
||||
, tzdata, git
|
||||
}:
|
||||
|
||||
let
|
||||
gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile.nix);
|
||||
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
version = "7.4.2";
|
||||
name = "gitlab-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/gitlabhq/gitlabhq/archive/v${version}.zip";
|
||||
sha256 = "01iplkpa4scr0wcap6vjrc960dj15z4ciclaqswj0sz5hrp9glw6";
|
||||
gitlab = fetchgit {
|
||||
url = "https://github.com/gitlabhq/gitlabhq.git";
|
||||
rev = "477743a154e85c411e8a533980abce460b5669fc";
|
||||
fetchSubmodules = false;
|
||||
sha256 = "0jl1w9d46v8hc27h9s380ha07m3fd2zpflj4q9vywwcf570ahj7x";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
ruby rubyLibs.bundler libyaml gdbm readline ncurses curl openssh redis zlib
|
||||
postgresql libxslt libxml2 pkgconfig libffi icu checkinstall logrotate docutils nodejs
|
||||
git unzip gnumake which cmake
|
||||
];
|
||||
env = bundlerEnv {
|
||||
name = "gitlab";
|
||||
inherit ruby;
|
||||
gemfile = ./Gemfile;
|
||||
lockfile = ./Gemfile.lock;
|
||||
gemset = ./gemset.nix;
|
||||
meta = with lib; {
|
||||
homepage = http://www.gitlab.com/;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ ];
|
||||
license = licenses.mit;
|
||||
};
|
||||
};
|
||||
|
||||
# cmake is required by a build depdenceny, not the main binary:
|
||||
dontUseCmakeConfigure = true;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "gitlab-${version}";
|
||||
version = "7.4.2";
|
||||
buildInputs = [ ruby bundler tzdata git ];
|
||||
unpackPhase = ''
|
||||
runHook preUnpack
|
||||
cp -r ${gitlab}/* .
|
||||
chmod -R +w .
|
||||
cp ${./Gemfile} Gemfile
|
||||
cp ${./Gemfile.lock} Gemfile.lock
|
||||
runHook postUnpack
|
||||
'';
|
||||
patches = [
|
||||
./remove-hardcoded-locations.patch
|
||||
];
|
||||
postPatch = ''
|
||||
# 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.:
|
||||
rm lib/tasks/test.rake
|
||||
|
||||
mv config/gitlab.yml.example config/gitlab.yml
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/gitlab
|
||||
cp -R . $out/share/gitlab
|
||||
cd $out/share/gitlab
|
||||
|
||||
export HOME=$(pwd)
|
||||
export GITLAB_EMAIL_FROM="required@to-make-it-work.org"
|
||||
|
||||
# required for some gems:
|
||||
cat > config/database.yml <<EOF
|
||||
|
@ -47,41 +60,17 @@ in stdenv.mkDerivation rec {
|
|||
username: gitlab
|
||||
encoding: utf8
|
||||
EOF
|
||||
|
||||
mkdir -p vendor/cache
|
||||
${stdenv.lib.concatStrings (map (gem: "ln -s ${gem} vendor/cache/${gem.name};") gemspec)}
|
||||
|
||||
cp ${./Gemfile.lock} Gemfile.lock
|
||||
substituteInPlace Gemfile --replace 'gem "therubyracer"' ""
|
||||
|
||||
bundle config build.nokogiri \
|
||||
--use-system-libraries \
|
||||
--with-xslt-dir=${libxslt} \
|
||||
--with-xml2-dir=${libxml2} \
|
||||
--with-pkg-config=${pkgconfig}/bin/pkg-config \
|
||||
--with-pg-config=${postgresql}/bin/pg_config
|
||||
|
||||
# See https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide:
|
||||
bundle install -j4 --verbose --local --deployment --without development test mysql
|
||||
|
||||
# Fix timezone data directory
|
||||
substituteInPlace $out/share/gitlab/vendor/bundle/ruby/*/gems/tzinfo-*/lib/tzinfo/zoneinfo_data_source.rb \
|
||||
--replace "/etc/zoneinfo" "${tzdata}/share/zoneinfo"
|
||||
|
||||
# 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.:
|
||||
rm $out/share/gitlab/lib/tasks/test.rake
|
||||
|
||||
# Assets
|
||||
'';
|
||||
buildPhase = ''
|
||||
export GEM_HOME=${env}/${ruby.gemPath}
|
||||
bundle exec rake assets:precompile RAILS_ENV=production
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = http://www.gitlab.com/;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ ];
|
||||
license = licenses.mit;
|
||||
installPhase = ''
|
||||
mkdir -p $out/share
|
||||
cp -r . $out/share/gitlab
|
||||
'';
|
||||
passthru = {
|
||||
inherit env;
|
||||
inherit ruby;
|
||||
};
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,56 +0,0 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require 'rubygems'
|
||||
require 'bundler'
|
||||
require 'fileutils'
|
||||
require 'net/http'
|
||||
require 'net/https'
|
||||
require 'uri'
|
||||
|
||||
TMP_DIR = "/tmp/gems"
|
||||
|
||||
FileUtils.rm_rf(TMP_DIR) if File.exists?(TMP_DIR)
|
||||
FileUtils.mkdir TMP_DIR
|
||||
|
||||
GEMSERVER = "http://rubygems.org"
|
||||
|
||||
# inspect Gemfile.lock
|
||||
lockfile = Bundler::LockfileParser.new(Bundler.read_file("Gemfile.lock"))
|
||||
|
||||
to_mirror = {}
|
||||
|
||||
uri = URI(GEMSERVER)
|
||||
http = Net::HTTP.new(uri.host, uri.port)
|
||||
http.use_ssl = uri.scheme == 'https'
|
||||
|
||||
requirements = {}
|
||||
|
||||
lockfile.specs.each do |s|
|
||||
possible_gem_name = "#{s.name}-#{s.version.to_s}.gem"
|
||||
|
||||
Dir.chdir TMP_DIR do
|
||||
filename = `gem fetch #{s.name} -v #{s.version.to_s}`.split()[1]
|
||||
hash = `sha256sum #{filename}.gem`
|
||||
url = "#{GEMSERVER}/downloads/#{filename}.gem"
|
||||
puts url
|
||||
requirements[s.name] = { :version => s.version.to_s,
|
||||
:hash => hash.split().first,
|
||||
:url => url,}
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
filename = 'Gemfile.nix'
|
||||
|
||||
File.open(filename, 'w') do |file|
|
||||
file.puts "["
|
||||
requirements.each do |name, info|
|
||||
file.puts "{"
|
||||
file.puts ['name = ', '"', name, '";'].join('')
|
||||
file.puts ['hash = ', '"', info[:hash], '";'].join('')
|
||||
file.puts ['url = ', '"', info[:url], '";'].join('')
|
||||
file.puts ['version = ', '"', info[:version], '";'].join('')
|
||||
file.puts "}"
|
||||
end
|
||||
file.puts "]"
|
||||
end
|
|
@ -18,16 +18,26 @@
|
|||
# (to make gems behave if necessary).
|
||||
|
||||
{ lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which
|
||||
, libiconv, postgresql, v8, v8_3_16_14, clang, sqlite, zlib, imagemagick, pkgconfig
|
||||
, ncurses, xapian, gpgme, utillinux, fetchpatch, tzdata
|
||||
, libiconv, postgresql, v8, v8_3_16_14, clang, sqlite, zlib, imagemagick
|
||||
, pkgconfig , ncurses, xapian, gpgme, utillinux, fetchpatch, tzdata, icu, libffi
|
||||
, cmake, libssh2, openssl, mysql
|
||||
}:
|
||||
|
||||
let
|
||||
v8 = v8_3_16_14;
|
||||
mysql = (import <nixpkgs> {}).mysql;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
charlock_holmes = attrs: {
|
||||
buildInputs = [ which icu ];
|
||||
};
|
||||
|
||||
ffi = attrs: {
|
||||
buildInputs = [ libffi pkgconfig ];
|
||||
};
|
||||
|
||||
gpgme = attrs: {
|
||||
buildInputs = [ gpgme ];
|
||||
};
|
||||
|
@ -46,6 +56,10 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
mysql2 = attrs: {
|
||||
buildInputs = [ mysql zlib openssl ];
|
||||
};
|
||||
|
||||
ncursesw = attrs: {
|
||||
buildInputs = [ ncurses ];
|
||||
buildFlags = [
|
||||
|
@ -77,6 +91,10 @@ in
|
|||
buildInputs = [ imagemagick pkgconfig ];
|
||||
};
|
||||
|
||||
rugged = attrs: {
|
||||
buildInputs = [ cmake pkgconfig openssl libssh2 zlib ];
|
||||
};
|
||||
|
||||
sqlite3 = attrs: {
|
||||
buildFlags = [
|
||||
"--with-sqlite3-include=${sqlite}/include"
|
||||
|
@ -103,10 +121,10 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
tzdata = attrs: {
|
||||
tzinfo = attrs: {
|
||||
postPatch = ''
|
||||
substituteInPlace lib/tzinfo/zoneinfo_data_source.rb \
|
||||
--replace "/etc/zoneinfo" "${tzdata}/share/zoneinfo"
|
||||
--replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, gemConfig ? defaultGemConfig
|
||||
, enableParallelBuilding ? false # TODO: this might not work, given the env-var shinanigans.
|
||||
, postInstall ? null
|
||||
, documentation ? false
|
||||
, meta ? {}
|
||||
}@args:
|
||||
|
@ -108,7 +109,7 @@ let
|
|||
FileUtils.cp(patched_package.spec.file_name, out)
|
||||
''}
|
||||
else
|
||||
cp -r . out
|
||||
cp -r . $out
|
||||
fi
|
||||
|
||||
runHook postInstall
|
||||
|
@ -273,13 +274,13 @@ stdenv.mkDerivation {
|
|||
export NIX_BUNDLER_GEMPATH=${bundler}/${ruby.gemPath}
|
||||
|
||||
export GEM_HOME=$out/${ruby.gemPath}
|
||||
export GEM_PATH=$GEM_HOME
|
||||
export GEM_PATH=$NIX_BUNDLER_GEMPATH:$GEM_HOME
|
||||
mkdir -p $GEM_HOME
|
||||
|
||||
${allBuildFlags}
|
||||
#export
|
||||
|
||||
mkdir gems
|
||||
cp ${bundler}/${bundler.ruby.gemPath}/cache/bundler-*.gem gems
|
||||
${copyGems}
|
||||
|
||||
${lib.optionalString (!documentation) ''
|
||||
|
@ -295,8 +296,13 @@ stdenv.mkDerivation {
|
|||
cp ${./monkey_patches.rb} monkey_patches.rb
|
||||
export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)"
|
||||
bundler install --frozen --binstubs ${lib.optionalString enableParallelBuilding "--jobs $NIX_BUILD_CORES"}
|
||||
RUBYOPT=""
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
inherit postInstall;
|
||||
|
||||
passthru = {
|
||||
inherit ruby;
|
||||
inherit bundler;
|
||||
|
|
|
@ -1316,9 +1316,10 @@ let
|
|||
gifsicle = callPackage ../tools/graphics/gifsicle { };
|
||||
|
||||
# Evaluation broken by recent ruby changes.
|
||||
# gitlab = callPackage ../applications/version-management/gitlab {
|
||||
# libiconv = libiconvOrLibc;
|
||||
# };
|
||||
gitlab = callPackage ../applications/version-management/gitlab {
|
||||
libiconv = libiconvOrLibc;
|
||||
ruby = ruby_2_1_3;
|
||||
};
|
||||
|
||||
# Evaluation broken by recent ruby changes.
|
||||
# gitlab-shell = callPackage ../applications/version-management/gitlab-shell { };
|
||||
|
|
Loading…
Reference in New Issue