Merge pull request #4409 from iElectric/redmine
Add Redmine package and NixOS Service
This commit is contained in:
commit
1992bd1331
|
@ -154,6 +154,7 @@
|
|||
collectd = 144;
|
||||
consul = 145;
|
||||
mailpile = 146;
|
||||
redmine = 147;
|
||||
|
||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||
|
||||
|
@ -275,6 +276,7 @@
|
|||
riemanndash = 138;
|
||||
uhub = 142;
|
||||
mailpile = 146;
|
||||
redmine = 147;
|
||||
|
||||
# When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!
|
||||
|
||||
|
|
|
@ -174,6 +174,7 @@
|
|||
./services/misc/nixos-manual.nix
|
||||
./services/misc/nix-ssh-serve.nix
|
||||
./services/misc/phd.nix
|
||||
./services/misc/redmine.nix
|
||||
./services/misc/rippled.nix
|
||||
./services/misc/rogue.nix
|
||||
./services/misc/siproxd.nix
|
||||
|
|
222
nixos/modules/services/misc/redmine.nix
Normal file
222
nixos/modules/services/misc/redmine.nix
Normal file
|
@ -0,0 +1,222 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
# TODO: support non-postgresql
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.redmine;
|
||||
|
||||
ruby = pkgs.ruby;
|
||||
rubyLibs = pkgs.rubyLibs;
|
||||
|
||||
databaseYml = ''
|
||||
production:
|
||||
adapter: postgresql
|
||||
database: ${cfg.databaseName}
|
||||
host: ${cfg.databaseHost}
|
||||
password: ${cfg.databasePassword}
|
||||
username: ${cfg.databaseUsername}
|
||||
encoding: utf8
|
||||
'';
|
||||
|
||||
configurationYml = ''
|
||||
default:
|
||||
# Absolute path to the directory where attachments are stored.
|
||||
# The default is the 'files' directory in your Redmine instance.
|
||||
# Your Redmine instance needs to have write permission on this
|
||||
# directory.
|
||||
# Examples:
|
||||
# attachments_storage_path: /var/redmine/files
|
||||
# attachments_storage_path: D:/redmine/files
|
||||
attachments_storage_path: ${cfg.stateDir}/files
|
||||
|
||||
# Absolute path to the SCM commands errors (stderr) log file.
|
||||
# The default is to log in the 'log' directory of your Redmine instance.
|
||||
# Example:
|
||||
# scm_stderr_log_file: /var/log/redmine_scm_stderr.log
|
||||
scm_stderr_log_file: ${cfg.stateDir}/redmine_scm_stderr.log
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
unpackTheme = unpack "theme";
|
||||
unpackPlugin = unpack "plugin";
|
||||
unpack = id: (name: source:
|
||||
pkgs.stdenv.mkDerivation {
|
||||
name = "redmine-${id}-${name}";
|
||||
buildInputs = [ pkgs.unzip ];
|
||||
buildCommand = ''
|
||||
mkdir -p $out
|
||||
cd $out
|
||||
unpackFile ${source}
|
||||
'';
|
||||
});
|
||||
|
||||
in {
|
||||
|
||||
options = {
|
||||
services.redmine = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable the redmine service.
|
||||
'';
|
||||
};
|
||||
|
||||
stateDir = mkOption {
|
||||
type = types.str;
|
||||
default = "/var/redmine";
|
||||
description = "The state directory, logs and plugins are stored here";
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
description = "Extra configuration in configuration.yml";
|
||||
};
|
||||
|
||||
themes = mkOption {
|
||||
type = types.attrsOf types.path;
|
||||
default = {};
|
||||
description = "Set of themes";
|
||||
};
|
||||
|
||||
plugins = mkOption {
|
||||
type = types.attrsOf types.path;
|
||||
default = {};
|
||||
description = "Set of plugins";
|
||||
};
|
||||
|
||||
#databaseType = mkOption {
|
||||
# type = types.str;
|
||||
# default = "postgresql";
|
||||
# description = "Type of database";
|
||||
#};
|
||||
|
||||
databaseHost = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
description = "Database hostname";
|
||||
};
|
||||
|
||||
databasePassword = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
description = "Database user password";
|
||||
};
|
||||
|
||||
databaseName = mkOption {
|
||||
type = types.str;
|
||||
default = "redmine";
|
||||
description = "Database name";
|
||||
};
|
||||
|
||||
databaseUsername = mkOption {
|
||||
type = types.str;
|
||||
default = "redmine";
|
||||
description = "Database user";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.databasePassword != "";
|
||||
message = "databasePassword must be set";
|
||||
}
|
||||
];
|
||||
|
||||
users.extraUsers = [
|
||||
{ name = "redmine";
|
||||
group = "redmine";
|
||||
uid = config.ids.uids.redmine;
|
||||
} ];
|
||||
|
||||
users.extraGroups = [
|
||||
{ name = "redmine";
|
||||
gid = config.ids.gids.redmine;
|
||||
} ];
|
||||
|
||||
systemd.services.redmine = {
|
||||
after = [ "network.target" "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment.RAILS_ENV = "production";
|
||||
environment.RAILS_ETC = "${cfg.stateDir}/config";
|
||||
environment.RAILS_LOG = "${cfg.stateDir}/log";
|
||||
environment.RAILS_VAR = "${cfg.stateDir}/var";
|
||||
environment.RAILS_CACHE = "${cfg.stateDir}/cache";
|
||||
environment.RAILS_PLUGINS = "${cfg.stateDir}/plugins";
|
||||
environment.RAILS_PUBLIC = "${cfg.stateDir}/public";
|
||||
environment.RAILS_TMP = "${cfg.stateDir}/tmp";
|
||||
environment.SCHEMA = "${cfg.stateDir}/cache/schema.db";
|
||||
environment.HOME = "${pkgs.redmine}/share/redmine";
|
||||
environment.REDMINE_LANG = "en";
|
||||
environment.GEM_HOME = "${pkgs.redmine}/share/redmine/vendor/bundle/ruby/1.9.1";
|
||||
environment.GEM_PATH = "${rubyLibs.bundler}/lib/ruby/gems/1.9";
|
||||
path = with pkgs; [
|
||||
imagemagickBig
|
||||
subversion
|
||||
mercurial
|
||||
cvs
|
||||
config.services.postgresql.package
|
||||
bazaar
|
||||
gitAndTools.git
|
||||
# once we build binaries for darc enable it
|
||||
#darcs
|
||||
];
|
||||
preStart = ''
|
||||
# TODO: use env vars
|
||||
for i in plugins public/plugin_assets db files log config cache var/files tmp; do
|
||||
mkdir -p ${cfg.stateDir}/$i
|
||||
done
|
||||
|
||||
chown -R redmine:redmine ${cfg.stateDir}
|
||||
chmod -R 755 ${cfg.stateDir}
|
||||
|
||||
rm -rf ${cfg.stateDir}/public/*
|
||||
cp -R ${pkgs.redmine}/share/redmine/public/* ${cfg.stateDir}/public/
|
||||
for theme in ${concatStringsSep " " (mapAttrsToList unpackTheme cfg.themes)}; do
|
||||
ln -fs $theme/* ${cfg.stateDir}/public/themes/
|
||||
done
|
||||
|
||||
rm -rf ${cfg.stateDir}/plugins/*
|
||||
for plugin in ${concatStringsSep " " (mapAttrsToList unpackPlugin cfg.plugins)}; do
|
||||
ln -fs $plugin/* ${cfg.stateDir}/plugins/''${plugin##*-redmine-plugin-}
|
||||
done
|
||||
|
||||
ln -fs ${pkgs.writeText "database.yml" databaseYml} ${cfg.stateDir}/config/database.yml
|
||||
ln -fs ${pkgs.writeText "configuration.yml" configurationYml} ${cfg.stateDir}/config/configuration.yml
|
||||
|
||||
if [ "${cfg.databaseHost}" = "127.0.0.1" ]; then
|
||||
if ! test -e "${cfg.stateDir}/db-created"; then
|
||||
psql postgres -c "CREATE ROLE redmine WITH LOGIN NOCREATEDB NOCREATEROLE NOCREATEUSER ENCRYPTED PASSWORD '${cfg.databasePassword}'"
|
||||
${config.services.postgresql.package}/bin/createdb --owner redmine redmine || true
|
||||
touch "${cfg.stateDir}/db-created"
|
||||
fi
|
||||
fi
|
||||
|
||||
cd ${pkgs.redmine}/share/redmine/
|
||||
${ruby}/bin/rake db:migrate
|
||||
${ruby}/bin/rake redmine:plugins:migrate
|
||||
${ruby}/bin/rake redmine:load_default_data
|
||||
${ruby}/bin/rake generate_secret_token
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
PermissionsStartOnly = true; # preStart must be run as root
|
||||
Type = "simple";
|
||||
User = "redmine";
|
||||
Group = "redmine";
|
||||
TimeoutSec = "300";
|
||||
WorkingDirectory = "${pkgs.redmine}/share/redmine";
|
||||
ExecStart="${ruby}/bin/ruby ${pkgs.redmine}/share/redmine/script/rails server webrick -e production -P ${cfg.stateDir}/redmine.pid";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
Description: FHS through env vars
|
||||
Forwarded: not-needed
|
||||
Author: Jérémy Lal <kapouer@melix.org>
|
||||
Last-Update: 2013-09-28
|
||||
--- redmine.orig/app/models/attachment.rb
|
||||
+++ redmine/app/models/attachment.rb
|
||||
@@ -46,10 +46,10 @@ class Attachment < ActiveRecord::Base
|
||||
"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
|
||||
|
||||
cattr_accessor :storage_path
|
||||
- @@storage_path = Redmine::Configuration['attachments_storage_path'] || File.join(Rails.root, "files")
|
||||
+ @@storage_path = Redmine::Configuration['attachments_storage_path'] || ENV['RAILS_VAR'] ? File.join(ENV['RAILS_VAR'], "files") : File.join(Rails.root, "files")
|
||||
|
||||
cattr_accessor :thumbnails_storage_path
|
||||
- @@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails")
|
||||
+ @@thumbnails_storage_path = ENV['RAILS_TMP'] ? File.join(ENV['RAILS_TMP'], "thumbnails") : File.join(Rails.root, "tmp", "thumbnails")
|
||||
|
||||
before_save :files_to_final_location
|
||||
after_destroy :delete_from_disk
|
||||
--- redmine.orig/lib/redmine/configuration.rb
|
||||
+++ redmine/lib/redmine/configuration.rb
|
||||
@@ -32,7 +32,7 @@ module Redmine
|
||||
# * <tt>:file</tt>: the configuration file to load (default: config/configuration.yml)
|
||||
# * <tt>:env</tt>: the environment to load the configuration for (default: Rails.env)
|
||||
def load(options={})
|
||||
- filename = options[:file] || File.join(Rails.root, 'config', 'configuration.yml')
|
||||
+ filename = options[:file] || ENV['RAILS_ETC'] ? File.join(ENV['RAILS_ETC'], 'configuration.yml') : File.join(Rails.root, 'config', 'configuration.yml')
|
||||
env = options[:env] || Rails.env
|
||||
|
||||
@config = @defaults.dup
|
||||
@@ -103,7 +103,7 @@ module Redmine
|
||||
end
|
||||
|
||||
def load_deprecated_email_configuration(env)
|
||||
- deprecated_email_conf = File.join(Rails.root, 'config', 'email.yml')
|
||||
+ deprecated_email_conf = ENV['RAILS_ETC'] ? File.join(ENV['RAILS_ETC'], 'email.yml') : File.join(Rails.root, 'config', 'email.yml')
|
||||
if File.file?(deprecated_email_conf)
|
||||
warn "Storing outgoing emails configuration in config/email.yml is deprecated. You should now store it in config/configuration.yml using the email_delivery setting."
|
||||
@config.merge!({'email_delivery' => load_from_yaml(deprecated_email_conf, env)})
|
||||
--- redmine.orig/lib/redmine/export/pdf.rb
|
||||
+++ redmine/lib/redmine/export/pdf.rb
|
||||
@@ -38,7 +38,7 @@ module Redmine
|
||||
attr_accessor :footer_date
|
||||
|
||||
def initialize(lang, orientation='P')
|
||||
- @@k_path_cache = Rails.root.join('tmp', 'pdf')
|
||||
+ @@k_path_cache = ENV['RAILS_TMP'] ? File.join(ENV['RAILS_TMP'], 'pdf') : Rails.root.join('tmp', 'pdf')
|
||||
FileUtils.mkdir_p @@k_path_cache unless File::exist?(@@k_path_cache)
|
||||
set_language_if_valid lang
|
||||
pdf_encoding = l(:general_pdf_encoding).upcase
|
||||
--- redmine.orig/config/application.rb
|
||||
+++ redmine/config/application.rb
|
||||
@@ -52,8 +63,21 @@ module RedmineApp
|
||||
# Do not include all helpers
|
||||
config.action_controller.include_all_helpers = false
|
||||
|
||||
+ # move tmp directory to RAILS_TMP
|
||||
+ config.paths['tmp'] = ENV['RAILS_TMP']
|
||||
+
|
||||
config.session_store :cookie_store, :key => '_redmine_session'
|
||||
|
||||
+ # log path
|
||||
+ config.paths['log'] = File.join(ENV['RAILS_LOG'], "#{Rails.env}.log") unless !ENV['RAILS_LOG']
|
||||
+
|
||||
+ config.paths['public'] = ENV['RAILS_PUBLIC'] unless !ENV['RAILS_PUBLIC']
|
||||
+
|
||||
+ config.cache_store = :file_store, File.join(ENV['RAILS_TMP'], "cache")
|
||||
+
|
||||
+ # Set Active Record's database.yml path
|
||||
+ config.paths['config/database'] = File.join(ENV['RAILS_ETC'], 'database.yml') unless !ENV['RAILS_ETC']
|
||||
+
|
||||
if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
|
||||
instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
|
||||
end
|
||||
--- redmine.orig/lib/plugins/rfpdf/lib/tcpdf.rb
|
||||
+++ redmine/lib/plugins/rfpdf/lib/tcpdf.rb
|
||||
@@ -89,10 +89,10 @@ class TCPDF
|
||||
@@k_small_ratio = 2/3.0
|
||||
|
||||
cattr_accessor :k_path_cache
|
||||
- @@k_path_cache = Rails.root.join('tmp')
|
||||
+ @@k_path_cache = ENV['RAILS_TMP'] ? ENV['RAILS_TMP'] : Rails.root.join('tmp')
|
||||
|
||||
cattr_accessor :k_path_url_cache
|
||||
- @@k_path_url_cache = Rails.root.join('tmp')
|
||||
+ @@k_path_url_cache = ENV['RAILS_TMP'] ? ENV['RAILS_TMP'] : Rails.root.join('tmp')
|
||||
|
||||
attr_accessor :barcode
|
||||
|
||||
--- redmine.orig/lib/redmine/scm/adapters/abstract_adapter.rb
|
||||
+++ redmine/lib/redmine/scm/adapters/abstract_adapter.rb
|
||||
@@ -222,7 +222,7 @@ module Redmine
|
||||
if @stderr_log_file.nil?
|
||||
writable = false
|
||||
path = Redmine::Configuration['scm_stderr_log_file'].presence
|
||||
- path ||= Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
|
||||
+ path ||= ENV['RAILS_LOG'] ? File.join(ENV['RAILS_LOG'], "#{Rails.env}.scm.stderr.log").to_s : Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
|
||||
if File.exists?(path)
|
||||
if File.file?(path) && File.writable?(path)
|
||||
writable = true
|
|
@ -0,0 +1,72 @@
|
|||
Description: Externalize session config to yml in /etc
|
||||
Forwarded: not-needed
|
||||
Author: Jérémy Lal <kapouer@melix.org>
|
||||
Last-Update: 2010-01-10
|
||||
--- redmine.orig/lib/tasks/initializers.rake
|
||||
+++ redmine/lib/tasks/initializers.rake
|
||||
@@ -1,11 +1,12 @@
|
||||
desc 'Generates a secret token for the application.'
|
||||
+task :generate_secret_token do
|
||||
|
||||
-file 'config/initializers/secret_token.rb' do
|
||||
- path = File.join(Rails.root, 'config', 'initializers', 'secret_token.rb')
|
||||
- secret = SecureRandom.hex(40)
|
||||
- File.open(path, 'w') do |f|
|
||||
- f.write <<"EOF"
|
||||
-# This file was generated by 'rake generate_secret_token', and should
|
||||
+filename = ENV['YML_SESSION_FILENAME'] ? ENV['YML_SESSION_FILENAME'] : 'session.yml'
|
||||
+path = File.join(ENV['RAILS_ETC'] ? ENV['RAILS_ETC'] : File.join(Rails.root, 'config'), filename)
|
||||
+secret = SecureRandom.hex(40)
|
||||
+File.open(path, 'w') do |f|
|
||||
+ f.write <<"EOF"
|
||||
+# This file was generated by 'rake generate_session_store',
|
||||
# not be made visible to public.
|
||||
# If you have a load-balancing Redmine cluster, you will need to use the
|
||||
# same version of this file on each machine. And be sure to restart your
|
||||
@@ -15,10 +18,18 @@ file 'config/initializers/secret_token.r
|
||||
# change this key, all old sessions will become invalid! Make sure the
|
||||
# secret is at least 30 characters and all random, no regular words or
|
||||
# you'll be exposed to dictionary attacks.
|
||||
-RedmineApp::Application.config.secret_token = '#{secret}'
|
||||
+
|
||||
+production:
|
||||
+ key: _redmine_
|
||||
+ secret: #{secret}
|
||||
+
|
||||
+development:
|
||||
+ key: _redmine_
|
||||
+ secret: #{secret}
|
||||
+
|
||||
+test:
|
||||
+ key: _redmine_
|
||||
+ secret: #{secret}
|
||||
EOF
|
||||
end
|
||||
end
|
||||
-
|
||||
-desc 'Generates a secret token for the application.'
|
||||
-task :generate_secret_token => ['config/initializers/secret_token.rb']
|
||||
--- redmine.orig/config/application.rb
|
||||
+++ redmine/config/application.rb
|
||||
@@ -66,7 +66,20 @@ module RedmineApp
|
||||
# move tmp directory to RAILS_TMP
|
||||
config.paths['tmp'] = ENV['RAILS_TMP']
|
||||
|
||||
- config.session_store :cookie_store, :key => '_redmine_session'
|
||||
+ # loads cookie based session session and secret keys
|
||||
+ # this is needed here because initializers are loaded after plugins,
|
||||
+ # and some plugins initialize ActionController which requires a secret to be set.
|
||||
+ # crash if file not found
|
||||
+ relativeUrlRoot = ENV['RAILS_RELATIVE_URL_ROOT']
|
||||
+ filename = ENV['RAILS_ETC'] ? File.join(ENV['RAILS_ETC'], 'session.yml') : File.join(File.dirname(__FILE__), '..', 'session.yml')
|
||||
+ if File.exists?(filename)
|
||||
+ sessionconfig = YAML::load_file(filename)
|
||||
+ config.session_store :cookie_store, :key => sessionconfig[Rails.env]['key'], :path => (relativeUrlRoot.blank?) ? '/' : relativeUrlRoot
|
||||
+ config.secret_token = sessionconfig[Rails.env]['secret']
|
||||
+ else
|
||||
+ # temporary settings before session.yml is created
|
||||
+ config.session_store :cookie_store, :key => '_redmine_session', :path => (relativeUrlRoot.blank?) ? '/' : relativeUrlRoot
|
||||
+ end
|
||||
|
||||
# log path
|
||||
config.paths['log'] = File.join(ENV['RAILS_LOG'], "#{Rails.env}.log") unless !ENV['RAILS_LOG']
|
|
@ -0,0 +1,11 @@
|
|||
--- redmine.orig/lib/redmine/plugin.rb
|
||||
+++ redmine/lib/redmine/plugin.rb
|
||||
@@ -47,7 +47,7 @@ module Redmine #:nodoc:
|
||||
self.directory = File.join(Rails.root, 'plugins')
|
||||
|
||||
cattr_accessor :public_directory
|
||||
- self.public_directory = File.join(Rails.root, 'public', 'plugin_assets')
|
||||
+ self.public_directory = ENV['RAILS_TMP'] ? File.join(ENV['RAILS_TMP'], 'plugin_assets') : File.join(Rails.root, 'public', 'plugin_assets')
|
||||
|
||||
@registered_plugins = {}
|
||||
class << self
|
152
pkgs/applications/version-management/redmine/Gemfile.lock
Normal file
152
pkgs/applications/version-management/redmine/Gemfile.lock
Normal file
|
@ -0,0 +1,152 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actionmailer (3.2.19)
|
||||
actionpack (= 3.2.19)
|
||||
mail (~> 2.5.4)
|
||||
actionpack (3.2.19)
|
||||
activemodel (= 3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
builder (~> 3.0.0)
|
||||
erubis (~> 2.7.0)
|
||||
journey (~> 1.0.4)
|
||||
rack (~> 1.4.5)
|
||||
rack-cache (~> 1.2)
|
||||
rack-test (~> 0.6.1)
|
||||
sprockets (~> 2.2.1)
|
||||
activemodel (3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
builder (~> 3.0.0)
|
||||
activerecord (3.2.19)
|
||||
activemodel (= 3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
arel (~> 3.0.2)
|
||||
tzinfo (~> 0.3.29)
|
||||
activeresource (3.2.19)
|
||||
activemodel (= 3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
activesupport (3.2.19)
|
||||
i18n (~> 0.6, >= 0.6.4)
|
||||
multi_json (~> 1.0)
|
||||
arel (3.0.3)
|
||||
awesome_nested_set (2.1.6)
|
||||
activerecord (>= 3.0.0)
|
||||
builder (3.0.0)
|
||||
capybara (2.1.0)
|
||||
mime-types (>= 1.16)
|
||||
nokogiri (>= 1.3.3)
|
||||
rack (>= 1.0.0)
|
||||
rack-test (>= 0.5.4)
|
||||
xpath (~> 2.0)
|
||||
childprocess (0.5.5)
|
||||
ffi (~> 1.0, >= 1.0.11)
|
||||
coderay (1.1.0)
|
||||
erubis (2.7.0)
|
||||
fastercsv (1.5.5)
|
||||
ffi (1.9.5)
|
||||
hike (1.2.3)
|
||||
i18n (0.6.11)
|
||||
journey (1.0.4)
|
||||
jquery-rails (2.0.3)
|
||||
railties (>= 3.1.0, < 5.0)
|
||||
thor (~> 0.14)
|
||||
json (1.8.1)
|
||||
mail (2.5.4)
|
||||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
metaclass (0.0.4)
|
||||
mime-types (1.25.1)
|
||||
mini_portile (0.6.0)
|
||||
mocha (1.0.0)
|
||||
metaclass (~> 0.0.1)
|
||||
multi_json (1.10.1)
|
||||
net-ldap (0.3.1)
|
||||
nokogiri (1.6.3.1)
|
||||
mini_portile (= 0.6.0)
|
||||
pg (0.17.1)
|
||||
polyglot (0.3.5)
|
||||
rack (1.4.5)
|
||||
rack-cache (1.2)
|
||||
rack (>= 0.4)
|
||||
rack-openid (1.4.2)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-ssl (1.3.4)
|
||||
rack
|
||||
rack-test (0.6.2)
|
||||
rack (>= 1.0)
|
||||
rails (3.2.19)
|
||||
actionmailer (= 3.2.19)
|
||||
actionpack (= 3.2.19)
|
||||
activerecord (= 3.2.19)
|
||||
activeresource (= 3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
bundler (~> 1.0)
|
||||
railties (= 3.2.19)
|
||||
railties (3.2.19)
|
||||
actionpack (= 3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
rack-ssl (~> 1.3.2)
|
||||
rake (>= 0.8.7)
|
||||
rdoc (~> 3.4)
|
||||
thor (>= 0.14.6, < 2.0)
|
||||
rake (10.1.1)
|
||||
rdoc (3.12.2)
|
||||
json (~> 1.4)
|
||||
redcarpet (2.3.0)
|
||||
rmagick (2.13.3)
|
||||
ruby-openid (2.3.0)
|
||||
rubyzip (1.1.6)
|
||||
selenium-webdriver (2.43.0)
|
||||
childprocess (~> 0.5)
|
||||
multi_json (~> 1.0)
|
||||
rubyzip (~> 1.0)
|
||||
websocket (~> 1.0)
|
||||
shoulda (3.3.2)
|
||||
shoulda-context (~> 1.0.1)
|
||||
shoulda-matchers (~> 1.4.1)
|
||||
shoulda-context (1.0.2)
|
||||
shoulda-matchers (1.4.1)
|
||||
activesupport (>= 3.0.0)
|
||||
sprockets (2.2.2)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
thor (0.19.1)
|
||||
tilt (1.4.1)
|
||||
treetop (1.4.15)
|
||||
polyglot
|
||||
polyglot (>= 0.3.1)
|
||||
tzinfo (0.3.41)
|
||||
websocket (1.2.1)
|
||||
xpath (2.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
yard (0.8.7.4)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activerecord-jdbc-adapter (~> 1.3.2)
|
||||
activerecord-jdbcpostgresql-adapter
|
||||
awesome_nested_set (= 2.1.6)
|
||||
builder (= 3.0.0)
|
||||
capybara (~> 2.1.0)
|
||||
coderay (~> 1.1.0)
|
||||
fastercsv (~> 1.5.0)
|
||||
jquery-rails (~> 2.0.2)
|
||||
mime-types
|
||||
mocha (~> 1.0.0)
|
||||
net-ldap (~> 0.3.1)
|
||||
pg (>= 0.11.0)
|
||||
rack-openid
|
||||
rails (= 3.2.19)
|
||||
rake (~> 10.1.1)
|
||||
rdoc (>= 2.4.2)
|
||||
redcarpet (~> 2.3.0)
|
||||
rmagick (>= 2.0.0)
|
||||
ruby-openid (~> 2.3.0)
|
||||
selenium-webdriver
|
||||
shoulda (~> 3.3.2)
|
||||
yard
|
332
pkgs/applications/version-management/redmine/Gemfile.nix
Normal file
332
pkgs/applications/version-management/redmine/Gemfile.nix
Normal file
|
@ -0,0 +1,332 @@
|
|||
[
|
||||
{
|
||||
name = "actionmailer";
|
||||
hash = "cd9f0b22f755b0adeae13cf949adaf63fa1c068c72d0a100572c6a11aecd3ba7";
|
||||
url = "http://rubygems.org/downloads/actionmailer-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "actionpack";
|
||||
hash = "c58ca2342aff2062f4f478551ce46d81918ac93200bc62d099764d2cd7499fcd";
|
||||
url = "http://rubygems.org/downloads/actionpack-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "activemodel";
|
||||
hash = "4ea3abf790eca9ee8228e9e2a465350e258294270a639b63f0e1dfad236fe70e";
|
||||
url = "http://rubygems.org/downloads/activemodel-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "activerecord";
|
||||
hash = "052945ad510744aaa3e35a817a6f515a2316e7dd96df6460f75b36067bb60372";
|
||||
url = "http://rubygems.org/downloads/activerecord-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "activeresource";
|
||||
hash = "8617d24537ca937cc67aac46aaa29782510d66136605426d0a23a3585a839daf";
|
||||
url = "http://rubygems.org/downloads/activeresource-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "activesupport";
|
||||
hash = "2c837a59250da14b12a6b0cfb6774f0afae90aa749fd96ad4347344d8417ad3d";
|
||||
url = "http://rubygems.org/downloads/activesupport-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "arel";
|
||||
hash = "c0006e2169deee3b8cc2d258296388822eeb2db59832450b9b7316e1387d0da4";
|
||||
url = "http://rubygems.org/downloads/arel-3.0.3.gem";
|
||||
version = "3.0.3";
|
||||
}
|
||||
{
|
||||
name = "awesome_nested_set";
|
||||
hash = "0dcd801aea5048f5ab907b62b4174b6763b191eaa4e1e11bb83f996f01349af8";
|
||||
url = "http://rubygems.org/downloads/awesome_nested_set-2.1.6.gem";
|
||||
version = "2.1.6";
|
||||
}
|
||||
{
|
||||
name = "builder";
|
||||
hash = "fbd3e15e5de02245f7d649b3415b2c2875cdc9a14dccde89aa30fc14a314618e";
|
||||
url = "http://rubygems.org/downloads/builder-3.0.0.gem";
|
||||
version = "3.0.0";
|
||||
}
|
||||
{
|
||||
name = "capybara";
|
||||
hash = "a9a19f8d6bb2dfcb1f05ea3e1727cb556d1cba0d234d1712b481e8d4f7bbb91e";
|
||||
url = "http://rubygems.org/downloads/capybara-2.1.0.gem";
|
||||
version = "2.1.0";
|
||||
}
|
||||
{
|
||||
name = "childprocess";
|
||||
hash = "9b583295a11932d2eeffa1e8f5b8fb2fb0064a2f0111ad98c3b752b94f80bf33";
|
||||
url = "http://rubygems.org/downloads/childprocess-0.5.5.gem";
|
||||
version = "0.5.5";
|
||||
}
|
||||
{
|
||||
name = "coderay";
|
||||
hash = "5a943c59e36f7ef9dd2677855735656413af02e3f302431e9c548aabe89f3c15";
|
||||
url = "http://rubygems.org/downloads/coderay-1.1.0.gem";
|
||||
version = "1.1.0";
|
||||
}
|
||||
{
|
||||
name = "erubis";
|
||||
hash = "63653f5174a7997f6f1d6f465fbe1494dcc4bdab1fb8e635f6216989fb1148ba";
|
||||
url = "http://rubygems.org/downloads/erubis-2.7.0.gem";
|
||||
version = "2.7.0";
|
||||
}
|
||||
{
|
||||
name = "fastercsv";
|
||||
hash = "d098199e62e4e10eec436a9ea9b8c189dacd5c06f2825f00d1e0f1c29fdbc3b5";
|
||||
url = "http://rubygems.org/downloads/fastercsv-1.5.5.gem";
|
||||
version = "1.5.5";
|
||||
}
|
||||
{
|
||||
name = "ffi";
|
||||
hash = "0d2ef90163eef8545689e8dfc27fb1245a2d82e3500d587de1e38290629e662f";
|
||||
url = "http://rubygems.org/downloads/ffi-1.9.5.gem";
|
||||
version = "1.9.5";
|
||||
}
|
||||
{
|
||||
name = "hike";
|
||||
hash = "154e2f2593845e5bcd8ed2ba3092600c55c6ad8c630722857de3fdaf334ccc44";
|
||||
url = "http://rubygems.org/downloads/hike-1.2.3.gem";
|
||||
version = "1.2.3";
|
||||
}
|
||||
{
|
||||
name = "i18n";
|
||||
hash = "b37dda25b30484f2674a851e24ae098a38564a61c976fa91a34bf8fceaa3923b";
|
||||
url = "http://rubygems.org/downloads/i18n-0.6.11.gem";
|
||||
version = "0.6.11";
|
||||
}
|
||||
{
|
||||
name = "journey";
|
||||
hash = "7454b8612530784000fbb17ea2df749a71b70702a0ac8ebef4a1e7f05aecc10f";
|
||||
url = "http://rubygems.org/downloads/journey-1.0.4.gem";
|
||||
version = "1.0.4";
|
||||
}
|
||||
{
|
||||
name = "jquery-rails";
|
||||
hash = "cc4eab342fb3b1fcbb2fc1c9a61b09ecd86d795b1f74d607994b0bc6fd5ef444";
|
||||
url = "http://rubygems.org/downloads/jquery-rails-2.0.3.gem";
|
||||
version = "2.0.3";
|
||||
}
|
||||
{
|
||||
name = "json";
|
||||
hash = "961bfbbfa9fda1e857e9c791e964e6664e0d43bf687b19669dfbc7cdbc5e0200";
|
||||
url = "http://rubygems.org/downloads/json-1.8.1.gem";
|
||||
version = "1.8.1";
|
||||
}
|
||||
{
|
||||
name = "mail";
|
||||
hash = "446585c38b062121252688dcc9cc70af1f470822e30db021bb97d185969e257c";
|
||||
url = "http://rubygems.org/downloads/mail-2.5.4.gem";
|
||||
version = "2.5.4";
|
||||
}
|
||||
{
|
||||
name = "metaclass";
|
||||
hash = "8569685c902108b1845be4e5794d646f2a8adcb0280d7651b600dab0844fe942";
|
||||
url = "http://rubygems.org/downloads/metaclass-0.0.4.gem";
|
||||
version = "0.0.4";
|
||||
}
|
||||
{
|
||||
name = "mime-types";
|
||||
hash = "88ef3c596481678710ffd4018fa40f1999b02d97babea39682ba7d5badd21f56";
|
||||
url = "http://rubygems.org/downloads/mime-types-1.25.1.gem";
|
||||
version = "1.25.1";
|
||||
}
|
||||
{
|
||||
name = "mini_portile";
|
||||
hash = "762b3e241362de24b2eb2bb1b98638399b931e9e51bece5f8e2df7611eb16c26";
|
||||
url = "http://rubygems.org/downloads/mini_portile-0.6.0.gem";
|
||||
version = "0.6.0";
|
||||
}
|
||||
{
|
||||
name = "mocha";
|
||||
hash = "788fd93c8009a7e0eebd155509953e5987f4681902aad666a294283baa09899a";
|
||||
url = "http://rubygems.org/downloads/mocha-1.0.0.gem";
|
||||
version = "1.0.0";
|
||||
}
|
||||
{
|
||||
name = "multi_json";
|
||||
hash = "2c98979877e87df0b338ebf5c86091b390f53d62c11a8232bd51ca007e0b82d2";
|
||||
url = "http://rubygems.org/downloads/multi_json-1.10.1.gem";
|
||||
version = "1.10.1";
|
||||
}
|
||||
{
|
||||
name = "net-ldap";
|
||||
hash = "953551665fb0d398740a72a26314c6d34bd70fa35419c96dc58351f17d9a5081";
|
||||
url = "http://rubygems.org/downloads/net-ldap-0.3.1.gem";
|
||||
version = "0.3.1";
|
||||
}
|
||||
{
|
||||
name = "nokogiri";
|
||||
hash = "91761a654439406b5bed71adf6092d49829e26332b4c0e7c8a23a2e628442585";
|
||||
url = "http://rubygems.org/downloads/nokogiri-1.6.3.1.gem";
|
||||
version = "1.6.3.1";
|
||||
}
|
||||
{
|
||||
name = "pg";
|
||||
hash = "e7933e8f7f184c28e820ed85ddfb3ad8a13933b2b2ab8656aa8f81cb0aa610a6";
|
||||
url = "http://rubygems.org/downloads/pg-0.17.1.gem";
|
||||
version = "0.17.1";
|
||||
}
|
||||
{
|
||||
name = "polyglot";
|
||||
hash = "59d66ef5e3c166431c39cb8b7c1d02af419051352f27912f6a43981b3def16af";
|
||||
url = "http://rubygems.org/downloads/polyglot-0.3.5.gem";
|
||||
version = "0.3.5";
|
||||
}
|
||||
{
|
||||
name = "rack";
|
||||
hash = "f7bf3faa8e09a2ff26475372de36a724e7470d6bdc33d189a0ec34b49605f308";
|
||||
url = "http://rubygems.org/downloads/rack-1.4.5.gem";
|
||||
version = "1.4.5";
|
||||
}
|
||||
{
|
||||
name = "rack-cache";
|
||||
hash = "02bfed05f8b3266db804f2fa445801636ca2c6d211a3137ec796f88af5756e1c";
|
||||
url = "http://rubygems.org/downloads/rack-cache-1.2.gem";
|
||||
version = "1.2";
|
||||
}
|
||||
{
|
||||
name = "rack-openid";
|
||||
hash = "8cd2305e738463a7da98791f9ac4df4cf3f6ed27908d982350430694ac2fe869";
|
||||
url = "http://rubygems.org/downloads/rack-openid-1.4.2.gem";
|
||||
version = "1.4.2";
|
||||
}
|
||||
{
|
||||
name = "rack-ssl";
|
||||
hash = "d703764fa2a0d44a2163d6add65be89f5dba4477d1959b90d3727682a9c37dcf";
|
||||
url = "http://rubygems.org/downloads/rack-ssl-1.3.4.gem";
|
||||
version = "1.3.4";
|
||||
}
|
||||
{
|
||||
name = "rack-test";
|
||||
hash = "7e920b6aac888e4a3846e5997fb1cbf456bdb5846322b58dc31697a54a38b306";
|
||||
url = "http://rubygems.org/downloads/rack-test-0.6.2.gem";
|
||||
version = "0.6.2";
|
||||
}
|
||||
{
|
||||
name = "rails";
|
||||
hash = "33b64cf78dfcf3206d961ce03e8fe6d260081da696e60da39d0b2a4a160fe22b";
|
||||
url = "http://rubygems.org/downloads/rails-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "railties";
|
||||
hash = "c569009ee5c005190d208ac228087fdc094b10c6f0cf209f1d12c552b447cc10";
|
||||
url = "http://rubygems.org/downloads/railties-3.2.19.gem";
|
||||
version = "3.2.19";
|
||||
}
|
||||
{
|
||||
name = "rake";
|
||||
hash = "85e446590871dd3469c80dfe70a0296c20b76a9006af6b728c1f47d0b460412d";
|
||||
url = "http://rubygems.org/downloads/rake-10.1.1.gem";
|
||||
version = "10.1.1";
|
||||
}
|
||||
{
|
||||
name = "rdoc";
|
||||
hash = "a8e2b78f7e5ec4cc4716cd863975645f2f2377dc6db267a15e427e5fae2633ed";
|
||||
url = "http://rubygems.org/downloads/rdoc-3.12.2.gem";
|
||||
version = "3.12.2";
|
||||
}
|
||||
{
|
||||
name = "redcarpet";
|
||||
hash = "5c9bcc307fba97ff5a25eec74f08365c17e929d2a5c707db32d6fc99ec81f0b9";
|
||||
url = "http://rubygems.org/downloads/redcarpet-2.3.0.gem";
|
||||
version = "2.3.0";
|
||||
}
|
||||
{
|
||||
name = "rmagick";
|
||||
hash = "109f3b8be90afdea9abbdd2a79a955cd808b5cad65d937ed12676da22870d3b4";
|
||||
url = "http://rubygems.org/downloads/rmagick-2.13.3.gem";
|
||||
version = "2.13.3";
|
||||
}
|
||||
{
|
||||
name = "ruby-openid";
|
||||
hash = "f69ed004e95f7094e23bfd8bc9ebfb1dc88a7b46637252ca2907a1189870ea7b";
|
||||
url = "http://rubygems.org/downloads/ruby-openid-2.3.0.gem";
|
||||
version = "2.3.0";
|
||||
}
|
||||
{
|
||||
name = "rubyzip";
|
||||
hash = "a996435ee9698be6a09d3748f4d23ee15aaf45cbfef1749def165af6ea3c0a9e";
|
||||
url = "http://rubygems.org/downloads/rubyzip-1.1.6.gem";
|
||||
version = "1.1.6";
|
||||
}
|
||||
{
|
||||
name = "selenium-webdriver";
|
||||
hash = "09fe4374d1541cb45403ad1238c2d88129f3afb985218635af087a06c99a521a";
|
||||
url = "http://rubygems.org/downloads/selenium-webdriver-2.43.0.gem";
|
||||
version = "2.43.0";
|
||||
}
|
||||
{
|
||||
name = "shoulda";
|
||||
hash = "52e70b71cbfb7c01dace14e268a62d86c21ddd1e5ec0116c8b1e632d8e04e412";
|
||||
url = "http://rubygems.org/downloads/shoulda-3.3.2.gem";
|
||||
version = "3.3.2";
|
||||
}
|
||||
{
|
||||
name = "shoulda-context";
|
||||
hash = "ee5559aa13248c70fdec6868a3c144adf7438c904c59d1a76b04a002e5151de5";
|
||||
url = "http://rubygems.org/downloads/shoulda-context-1.0.2.gem";
|
||||
version = "1.0.2";
|
||||
}
|
||||
{
|
||||
name = "shoulda-matchers";
|
||||
hash = "c35693cbfa84213212dffbc2c87487427ef364927340151329a842f0a06086b9";
|
||||
url = "http://rubygems.org/downloads/shoulda-matchers-1.4.1.gem";
|
||||
version = "1.4.1";
|
||||
}
|
||||
{
|
||||
name = "sprockets";
|
||||
hash = "fae893b7e86e83c1936f6f2a64db3550510f86eabdd5fa9f0f23fb25d7e0cf96";
|
||||
url = "http://rubygems.org/downloads/sprockets-2.2.2.gem";
|
||||
version = "2.2.2";
|
||||
}
|
||||
{
|
||||
name = "thor";
|
||||
hash = "9ff834f031b5550c743bb8a3139317fefdae9cdebd02d60de376658f427fe522";
|
||||
url = "http://rubygems.org/downloads/thor-0.19.1.gem";
|
||||
version = "0.19.1";
|
||||
}
|
||||
{
|
||||
name = "tilt";
|
||||
hash = "39820562c4f5db45fe18de87ccc30a0e77a998bf5334b1d8c10a2f7dbc1f5903";
|
||||
url = "http://rubygems.org/downloads/tilt-1.4.1.gem";
|
||||
version = "1.4.1";
|
||||
}
|
||||
{
|
||||
name = "treetop";
|
||||
hash = "ffa68f201c0f62c26b0a1d13233d73194400596964696843f87ebb5d812f12ff";
|
||||
url = "http://rubygems.org/downloads/treetop-1.4.15.gem";
|
||||
version = "1.4.15";
|
||||
}
|
||||
{
|
||||
name = "tzinfo";
|
||||
hash = "381b22fd1744a35d0a0239f563f505773681e626e6d900063b14cb9b1b68e98c";
|
||||
url = "http://rubygems.org/downloads/tzinfo-0.3.41.gem";
|
||||
version = "0.3.41";
|
||||
}
|
||||
{
|
||||
name = "websocket";
|
||||
hash = "e626c8c3e8593735d900265fb1fc3439fd06b394069860177d8f40733b12ae9e";
|
||||
url = "http://rubygems.org/downloads/websocket-1.2.1.gem";
|
||||
version = "1.2.1";
|
||||
}
|
||||
{
|
||||
name = "xpath";
|
||||
hash = "9ca4a1cc88d9ab16c591468cce7b5d00ee06a8a76b841f8438970c7a44c86c12";
|
||||
url = "http://rubygems.org/downloads/xpath-2.0.0.gem";
|
||||
version = "2.0.0";
|
||||
}
|
||||
{
|
||||
name = "yard";
|
||||
hash = "e65a26f9b9dc6e2aa9b1d1d2e1a45bee3edf540a6a7e6c30fa6aa1df7f7a29b4";
|
||||
url = "http://rubygems.org/downloads/yard-0.8.7.4.gem";
|
||||
version = "0.8.7.4";
|
||||
}
|
||||
]
|
6
pkgs/applications/version-management/redmine/README
Normal file
6
pkgs/applications/version-management/redmine/README
Normal file
|
@ -0,0 +1,6 @@
|
|||
to regenerate Gemfile.nix and Gemfile.lock you need to
|
||||
|
||||
% nix-build bootstrap.nix
|
||||
% cp result/Gemfile.nix ./
|
||||
% cp result/Gemfile.lock ./
|
||||
|
45
pkgs/applications/version-management/redmine/bootstrap.nix
Normal file
45
pkgs/applications/version-management/redmine/bootstrap.nix
Normal file
|
@ -0,0 +1,45 @@
|
|||
{ pkgs ? import <nixpkgs> {}
|
||||
}:
|
||||
|
||||
with pkgs;
|
||||
|
||||
let
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
version = "2.5.2";
|
||||
name = "redmine-${version}";
|
||||
__noChroot = true;
|
||||
src = fetchurl {
|
||||
url = "http://www.redmine.org/releases/${name}.tar.gz";
|
||||
sha256 = "0x0zwxyj4dwbk7l64s3lgny10mjf0ba8jwrbafsm4d72sncmacv0";
|
||||
};
|
||||
buildInputs = [
|
||||
ruby rubyLibs.bundler libiconv libxslt libxml2 pkgconfig
|
||||
libffi imagemagickBig postgresql which stdenv
|
||||
];
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
bundle install --verbose --without development test rmagick --path /tmp/redmine-${version}
|
||||
|
||||
HOME="/tmp/redmine-${version}" ruby generate_nix_requirements.rb
|
||||
rm -R /tmp/gems
|
||||
'';
|
||||
}
|
73
pkgs/applications/version-management/redmine/default.nix
Normal file
73
pkgs/applications/version-management/redmine/default.nix
Normal file
|
@ -0,0 +1,73 @@
|
|||
{ stdenv, fetchurl, ruby, rubyLibs, libiconv, libxslt, libxml2, pkgconfig, libffi, imagemagickBig, postgresql }:
|
||||
|
||||
let
|
||||
gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile.nix);
|
||||
in stdenv.mkDerivation rec {
|
||||
version = "2.5.2";
|
||||
name = "redmine-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.redmine.org/releases/${name}.tar.gz";
|
||||
sha256 = "0x0zwxyj4dwbk7l64s3lgny10mjf0ba8jwrbafsm4d72sncmacv0";
|
||||
};
|
||||
|
||||
# taken from redmine (2.5.1-2~bpo70+3) in debian wheezy-backports
|
||||
# needed to separate run-time and build-time directories
|
||||
patches = [
|
||||
./2002_FHS_through_env_vars.patch
|
||||
./2004_FHS_plugins_assets.patch
|
||||
./2003_externalize_session_config.patch
|
||||
];
|
||||
postPatch = ''
|
||||
substituteInPlace lib/redmine/plugin.rb --replace "File.join(Rails.root, 'plugins')" "ENV['RAILS_PLUGINS']"
|
||||
substituteInPlace lib/redmine/plugin.rb --replace "File.join(Rails.root, 'plugins', id.to_s, 'db', 'migrate')" "File.join(ENV['RAILS_PLUGINS'], id.to_s, 'db', 'migrate')"
|
||||
substituteInPlace config/routes.rb --replace '"plugins/*", Rails.root' 'ENV["RAILS_PLUGINS"] + "/*"'
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
ruby rubyLibs.bundler libiconv libxslt libxml2 pkgconfig libffi
|
||||
imagemagickBig postgresql
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/redmine/
|
||||
cp -R . $out/share/redmine/
|
||||
cd $out/share/redmine
|
||||
ln -s ${./Gemfile.lock} Gemfile.lock
|
||||
export HOME=$(pwd)
|
||||
|
||||
cat > config/database.yml <<EOF
|
||||
production:
|
||||
adapter: postgresql
|
||||
EOF
|
||||
|
||||
mkdir -p vendor/cache
|
||||
${stdenv.lib.concatStrings (map (gem: "ln -s ${gem} vendor/cache/${gem.name};") gemspec)}
|
||||
|
||||
bundle config 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
|
||||
|
||||
bundle install --verbose --local --deployment
|
||||
|
||||
# make sure we always load pg package
|
||||
echo "gem \"pg\"" >> Gemfile
|
||||
|
||||
# make rails server happy
|
||||
mkdir -p tmp/pids
|
||||
|
||||
# cleanup
|
||||
rm config/database.yml
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = http://www.redmine.org/;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.garbas ];
|
||||
license = licenses.gpl2;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
#!/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
|
|
@ -2083,6 +2083,8 @@ let
|
|||
|
||||
privateer = callPackage ../games/privateer { };
|
||||
|
||||
redmine = callPackage ../applications/version-management/redmine { };
|
||||
|
||||
rtmpdump = callPackage ../tools/video/rtmpdump { };
|
||||
|
||||
reaverwps = callPackage ../tools/networking/reaver-wps {};
|
||||
|
|
Loading…
Reference in a new issue