Merge pull request #5622 from offlinehacker/panamax

panamax: new package and service
wip/yesman
Jaka Hudoklin 10 years ago
commit f85abb041a
  1. 3
      nixos/modules/misc/ids.nix
  2. 1
      nixos/modules/module-list.nix
  3. 153
      nixos/modules/services/cluster/panamax.nix
  4. 1
      nixos/release.nix
  5. 18
      nixos/tests/panamax.nix
  6. 23
      pkgs/applications/networking/cluster/panamax/Gemfile-api
  7. 164
      pkgs/applications/networking/cluster/panamax/Gemfile-api.lock
  8. 30
      pkgs/applications/networking/cluster/panamax/Gemfile-ui
  9. 217
      pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock
  10. 75
      pkgs/applications/networking/cluster/panamax/api.nix
  11. 571
      pkgs/applications/networking/cluster/panamax/gemset-api.nix
  12. 760
      pkgs/applications/networking/cluster/panamax/gemset-ui.nix
  13. 71
      pkgs/applications/networking/cluster/panamax/ui.nix
  14. 7
      pkgs/top-level/all-packages.nix

@ -177,6 +177,8 @@
cadvisor = 167;
nylon = 168;
apache-kafka = 169;
panamax = 170;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
nixbld = 30000; # start of range of uids
@ -315,6 +317,7 @@
kubernetes = 162;
gitlab = 165;
nylon = 166;
panamax = 170;
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

@ -104,6 +104,7 @@
./services/backup/tarsnap.nix
./services/cluster/fleet.nix
./services/cluster/kubernetes.nix
./services/cluster/panamax.nix
./services/computing/torque/server.nix
./services/computing/torque/mom.nix
./services/continuous-integration/jenkins/default.nix

@ -0,0 +1,153 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.panamax;
panamax_api = pkgs.panamax_api.override { dataDir = cfg.dataDir + "/api"; };
panamax_ui = pkgs.panamax_ui.override { dataDir = cfg.dataDir + "/ui"; };
in {
##### Interface
options.services.panamax = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable Panamax service.
'';
};
UIPort = mkOption {
type = types.int;
default = 8888;
description = ''
Panamax UI listening port.
'';
};
APIPort = mkOption {
type = types.int;
default = 3000;
description = ''
Panamax UI listening port.
'';
};
dataDir = mkOption {
type = types.str;
default = "/var/lib/panamax";
description = ''
Data dir for Panamax.
'';
};
fleetctlEndpoint = mkOption {
type = types.str;
default = "http://127.0.0.1:4001";
description = ''
Panamax fleetctl endpoint.
'';
};
journalEndpoint = mkOption {
type = types.str;
default = "http://127.0.0.1:19531";
description = ''
Panamax journal endpoint.
'';
};
secretKey = mkOption {
type = types.str;
default = "SomethingVeryLong.";
description = ''
Panamax secret key (do change this).
'';
};
};
##### Implementation
config = mkIf cfg.enable {
systemd.services.panamax-api = {
description = "Panamax API";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" "fleet.service" "etcd.service" "docker.service" ];
path = [ panamax_api ];
environment = {
RAILS_ENV = "production";
JOURNAL_ENDPOINT = cfg.journalEndpoint;
FLEETCTL_ENDPOINT = cfg.fleetctlEndpoint;
PANAMAX_DATABASE_PATH = "${cfg.dataDir}/api/db/mnt/db.sqlite3";
};
preStart = ''
rm -rf ${cfg.dataDir}/state/tmp
mkdir -p ${cfg.dataDir}/api/{db/mnt,state/log,state/tmp}
ln -sf ${panamax_api}/share/panamax-api/_db/{schema.rb,seeds.rb,migrate} ${cfg.dataDir}/api/db/
if [ ! -f ${cfg.dataDir}/.created ]; then
bundle exec rake db:setup
bundle exec rake db:seed
bundle exec rake panamax:templates:load || true
touch ${cfg.dataDir}/.created
else
bundle exec rake db:migrate
fi
'';
serviceConfig = {
ExecStart = "${panamax_api}/bin/bundle exec rails server --binding 127.0.0.1 --port ${toString cfg.APIPort}";
User = "panamax";
Group = "panamax";
};
};
systemd.services.panamax-ui = {
description = "Panamax UI";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" "panamax_api.service" ];
path = [ panamax_ui ];
environment = {
RAILS_ENV = "production";
JOURNAL_ENDPOINT = cfg.journalEndpoint;
PMX_API_PORT_3000_TCP_ADDR = "localhost";
PMX_API_PORT_3000_TCP_PORT = toString cfg.APIPort;
SECRET_KEY_BASE = cfg.secretKey;
};
preStart = ''
rm -rf ${cfg.dataDir}/state/tmp
mkdir -p ${cfg.dataDir}/ui/state/{log,tmp}
'';
serviceConfig = {
ExecStart = "${panamax_ui}/bin/bundle exec rails server --binding 127.0.0.1 --port ${toString cfg.UIPort}";
User = "panamax";
Group = "panamax";
};
};
users.extraUsers.panamax =
{ uid = config.ids.uids.panamax;
description = "Panamax user";
createHome = true;
home = cfg.dataDir;
extraGroups = [ "docker" ];
};
services.journald.enableHttpGateway = mkDefault true;
services.fleet.enable = mkDefault true;
virtualisation.docker.enable = mkDefault true;
environment.systemPackages = [ panamax_api panamax_ui ];
users.extraGroups.panamax.gid = config.ids.gids.panamax;
};
}

@ -300,6 +300,7 @@ in rec {
tests.nfs3 = callTest tests/nfs.nix { version = 3; };
tests.nsd = callTest tests/nsd.nix {};
tests.openssh = callTest tests/openssh.nix {};
tests.panamax = scrubDrv (import tests/panamax.nix { system = "x86_64-linux"; });
tests.peerflix = callTest tests/peerflix.nix {};
tests.printing = callTest tests/printing.nix {};
tests.proxy = callTest tests/proxy.nix {};

@ -0,0 +1,18 @@
import ./make-test.nix {
name = "panamax";
machine = { config, pkgs, ... }: {
services.panamax.enable = true;
};
testScript =
''
startAll;
$machine->waitForUnit("panamax-api.service");
$machine->waitForUnit("panamax-ui.service");
$machine->waitForOpenPort(3000);
$machine->waitForOpenPort(8888);
$machine->succeed("curl --fail http://localhost:8888/ > /dev/null");
$machine->shutdown;
'';
}

@ -0,0 +1,23 @@
source 'https://rubygems.org'
gem 'rails', '4.1.7'
gem 'puma', '2.8.2'
gem 'sqlite3', '1.3.9'
gem 'faraday_middleware', '0.9.0'
gem 'docker-api', '1.13.0', require: 'docker'
gem 'fleet-api', '0.6.0', require: 'fleet'
gem 'active_model_serializers', '0.9.0'
gem 'octokit', '3.2.0'
gem 'kmts', '2.0.1'
group :test, :development do
gem 'rspec-rails'
gem 'its'
end
group :test do
gem 'coveralls', '0.7.0'
gem 'shoulda-matchers', '2.6.1'
gem 'database_cleaner', '1.3.0'
gem 'webmock', '1.20.0'
end

@ -0,0 +1,164 @@
GEM
remote: https://rubygems.org/
specs:
actionmailer (4.1.7)
actionpack (= 4.1.7)
actionview (= 4.1.7)
mail (~> 2.5, >= 2.5.4)
actionpack (4.1.7)
actionview (= 4.1.7)
activesupport (= 4.1.7)
rack (~> 1.5.2)
rack-test (~> 0.6.2)
actionview (4.1.7)
activesupport (= 4.1.7)
builder (~> 3.1)
erubis (~> 2.7.0)
active_model_serializers (0.9.0)
activemodel (>= 3.2)
activemodel (4.1.7)
activesupport (= 4.1.7)
builder (~> 3.1)
activerecord (4.1.7)
activemodel (= 4.1.7)
activesupport (= 4.1.7)
arel (~> 5.0.0)
activesupport (4.1.7)
i18n (~> 0.6, >= 0.6.9)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.1)
tzinfo (~> 1.1)
addressable (2.3.6)
archive-tar-minitar (0.5.2)
arel (5.0.1.20140414130214)
builder (3.2.2)
coveralls (0.7.0)
multi_json (~> 1.3)
rest-client
simplecov (>= 0.7)
term-ansicolor
thor
crack (0.4.2)
safe_yaml (~> 1.0.0)
database_cleaner (1.3.0)
diff-lcs (1.2.5)
docile (1.1.5)
docker-api (1.13.0)
archive-tar-minitar
excon (>= 0.37.0)
json
erubis (2.7.0)
excon (0.37.0)
faraday (0.8.9)
multipart-post (~> 1.2.0)
faraday_middleware (0.9.0)
faraday (>= 0.7.4, < 0.9)
fleet-api (0.6.0)
faraday (= 0.8.9)
faraday_middleware (= 0.9.0)
hike (1.2.3)
i18n (0.6.11)
its (0.2.0)
rspec-core
json (1.8.1)
kmts (2.0.1)
mail (2.6.3)
mime-types (>= 1.16, < 3)
mime-types (2.4.3)
minitest (5.4.3)
multi_json (1.10.1)
multipart-post (1.2.0)
octokit (3.2.0)
sawyer (~> 0.5.3)
puma (2.8.2)
rack (>= 1.1, < 2.0)
rack (1.5.2)
rack-test (0.6.2)
rack (>= 1.0)
rails (4.1.7)
actionmailer (= 4.1.7)
actionpack (= 4.1.7)
actionview (= 4.1.7)
activemodel (= 4.1.7)
activerecord (= 4.1.7)
activesupport (= 4.1.7)
bundler (>= 1.3.0, < 2.0)
railties (= 4.1.7)
sprockets-rails (~> 2.0)
railties (4.1.7)
actionpack (= 4.1.7)
activesupport (= 4.1.7)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (10.4.0)
rest-client (1.6.7)
mime-types (>= 1.16)
rspec-core (3.1.7)
rspec-support (~> 3.1.0)
rspec-expectations (3.1.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.1.0)
rspec-mocks (3.1.3)
rspec-support (~> 3.1.0)
rspec-rails (3.1.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.1.0)
rspec-expectations (~> 3.1.0)
rspec-mocks (~> 3.1.0)
rspec-support (~> 3.1.0)
rspec-support (3.1.2)
safe_yaml (1.0.4)
sawyer (0.5.4)
addressable (~> 2.3.5)
faraday (~> 0.8, < 0.10)
shoulda-matchers (2.6.1)
activesupport (>= 3.0.0)
simplecov (0.9.1)
docile (~> 1.1.0)
multi_json (~> 1.0)
simplecov-html (~> 0.8.0)
simplecov-html (0.8.0)
sprockets (2.12.3)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.2.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
sqlite3 (1.3.9)
term-ansicolor (1.3.0)
tins (~> 1.0)
thor (0.19.1)
thread_safe (0.3.4)
tilt (1.4.1)
tins (1.3.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
webmock (1.20.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
PLATFORMS
ruby
DEPENDENCIES
active_model_serializers (= 0.9.0)
coveralls (= 0.7.0)
database_cleaner (= 1.3.0)
docker-api (= 1.13.0)
faraday_middleware (= 0.9.0)
fleet-api (= 0.6.0)
its
kmts (= 2.0.1)
octokit (= 3.2.0)
puma (= 2.8.2)
rails (= 4.1.7)
rspec-rails
shoulda-matchers (= 2.6.1)
sqlite3 (= 1.3.9)
webmock (= 1.20.0)

@ -0,0 +1,30 @@
source 'https://rubygems.org'
gem 'rails', '4.1.7'
gem 'puma', '2.8.2'
gem 'sass', '3.3.9'
gem 'therubyracer', '0.12.1', platforms: :ruby
gem 'haml', '4.0.5'
gem 'uglifier', '2.5.1'
gem 'ctl_base_ui'
gem 'activeresource', '4.0.0'
gem 'kramdown', '1.4.0'
gem 'zeroclipboard-rails'
group :test, :development do
gem 'rspec-rails', '2.14.2'
gem 'capybara', '2.3.0'
gem 'teaspoon', '0.8.0'
gem 'phantomjs', '1.9.7.1'
gem 'dotenv-rails', '0.11.1'
gem 'pry'
gem 'pry-byebug'
gem 'pry-stack_explorer'
end
group :test do
gem 'webmock', '1.18.0'
gem 'sinatra', '1.4.5'
gem 'coveralls', '0.7.0'
end

@ -0,0 +1,217 @@
GEM
remote: https://rubygems.org/
specs:
actionmailer (4.1.7)
actionpack (= 4.1.7)
actionview (= 4.1.7)
mail (~> 2.5, >= 2.5.4)
actionpack (4.1.7)
actionview (= 4.1.7)
activesupport (= 4.1.7)
rack (~> 1.5.2)
rack-test (~> 0.6.2)
actionview (4.1.7)
activesupport (= 4.1.7)
builder (~> 3.1)
erubis (~> 2.7.0)
activemodel (4.1.7)
activesupport (= 4.1.7)
builder (~> 3.1)
activerecord (4.1.7)
activemodel (= 4.1.7)
activesupport (= 4.1.7)
arel (~> 5.0.0)
activeresource (4.0.0)
activemodel (~> 4.0)
activesupport (~> 4.0)
rails-observers (~> 0.1.1)
activesupport (4.1.7)
i18n (~> 0.6, >= 0.6.9)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.1)
tzinfo (~> 1.1)
addressable (2.3.6)
arel (5.0.1.20140414130214)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
builder (3.2.2)
byebug (3.5.1)
columnize (~> 0.8)
debugger-linecache (~> 1.2)
slop (~> 3.6)
capybara (2.3.0)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
coderay (1.1.0)
columnize (0.8.9)
coveralls (0.7.0)
multi_json (~> 1.3)
rest-client
simplecov (>= 0.7)
term-ansicolor
thor
crack (0.4.2)
safe_yaml (~> 1.0.0)
ctl_base_ui (0.0.4)
haml (~> 4.0)
jquery-rails (~> 3.1)
jquery-ui-rails (~> 4.2)
rails (~> 4.1)
sass (~> 3.3)
debug_inspector (0.0.2)
debugger-linecache (1.2.0)
diff-lcs (1.2.5)
docile (1.1.5)
dotenv (0.11.1)
dotenv-deployment (~> 0.0.2)
dotenv-deployment (0.0.2)
dotenv-rails (0.11.1)
dotenv (= 0.11.1)
erubis (2.7.0)
execjs (2.2.1)
haml (4.0.5)
tilt
hike (1.2.3)
i18n (0.6.11)
jquery-rails (3.1.2)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (4.2.1)
railties (>= 3.2.16)
json (1.8.1)
kramdown (1.4.0)
libv8 (3.16.14.7)
mail (2.6.3)
mime-types (>= 1.16, < 3)
method_source (0.8.2)
mime-types (2.4.3)
mini_portile (0.6.0)
minitest (5.4.3)
multi_json (1.10.1)
nokogiri (1.6.2.1)
mini_portile (= 0.6.0)
phantomjs (1.9.7.1)
pry (0.10.1)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
pry-byebug (2.0.0)
byebug (~> 3.4)
pry (~> 0.10)
pry-stack_explorer (0.4.9.1)
binding_of_caller (>= 0.7)
pry (>= 0.9.11)
puma (2.8.2)
rack (>= 1.1, < 2.0)
rack (1.5.2)
rack-protection (1.5.3)
rack
rack-test (0.6.2)
rack (>= 1.0)
rails (4.1.7)
actionmailer (= 4.1.7)
actionpack (= 4.1.7)
actionview (= 4.1.7)
activemodel (= 4.1.7)
activerecord (= 4.1.7)
activesupport (= 4.1.7)
bundler (>= 1.3.0, < 2.0)
railties (= 4.1.7)
sprockets-rails (~> 2.0)
rails-observers (0.1.2)
activemodel (~> 4.0)
railties (4.1.7)
actionpack (= 4.1.7)
activesupport (= 4.1.7)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (10.4.1)
ref (1.0.5)
rest-client (1.6.7)
mime-types (>= 1.16)
rspec-core (2.14.8)
rspec-expectations (2.14.5)
diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.14.6)
rspec-rails (2.14.2)
actionpack (>= 3.0)
activemodel (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.14.0)
rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.14.0)
safe_yaml (1.0.3)
sass (3.3.9)
simplecov (0.9.1)
docile (~> 1.1.0)
multi_json (~> 1.0)
simplecov-html (~> 0.8.0)
simplecov-html (0.8.0)
sinatra (1.4.5)
rack (~> 1.4)
rack-protection (~> 1.4)
tilt (~> 1.3, >= 1.3.4)
slop (3.6.0)
sprockets (2.12.3)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.2.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
teaspoon (0.8.0)
railties (>= 3.2.5, < 5)
term-ansicolor (1.3.0)
tins (~> 1.0)
therubyracer (0.12.1)
libv8 (~> 3.16.14.0)
ref
thor (0.19.1)
thread_safe (0.3.4)
tilt (1.4.1)
tins (1.1.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uglifier (2.5.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
webmock (1.18.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
xpath (2.0.0)
nokogiri (~> 1.3)
zeroclipboard-rails (0.1.0)
railties (>= 3.1)
PLATFORMS
ruby
DEPENDENCIES
activeresource (= 4.0.0)
capybara (= 2.3.0)
coveralls (= 0.7.0)
ctl_base_ui
dotenv-rails (= 0.11.1)
haml (= 4.0.5)
kramdown (= 1.4.0)
phantomjs (= 1.9.7.1)
pry
pry-byebug
pry-stack_explorer
puma (= 2.8.2)
rails (= 4.1.7)
rspec-rails (= 2.14.2)
sass (= 3.3.9)
sinatra (= 1.4.5)
teaspoon (= 0.8.0)
therubyracer (= 0.12.1)
uglifier (= 2.5.1)
webmock (= 1.18.0)
zeroclipboard-rails

@ -0,0 +1,75 @@
{ stdenv, buildEnv, fetchgit, fetchurl, makeWrapper, bundlerEnv, bundler_HEAD
, ruby, libxslt, libxml2, sqlite, openssl, cacert, docker
, dataDir ? "/var/lib/panamax-api" }:
with stdenv.lib;
let
database_yml = builtins.toFile "database.yml" ''
production:
adapter: sqlite3
database: <%= ENV["PANAMAX_DATABASE_PATH"] || "${dataDir}/db/mnt/db.sqlite3" %>
timeout: 5000
'';
env = bundlerEnv {
name = "panamax-api-gems";
inherit ruby;
gemset = ./gemset-api.nix;
gemfile = ./Gemfile-api;
lockfile = ./Gemfile-api.lock;
};
bundler = bundler_HEAD.override { inherit ruby; };
in stdenv.mkDerivation rec {
name = "panamax-api-${version}";
version = "0.2.11";
src = fetchgit {
rev = "refs/tags/v${version}";
url = "git://github.com/CenturyLinkLabs/panamax-api";
sha256 = "01sz7jibn1rqfga85pr4p8wk6jfldzfaxj1726vs6znmcwhfkcgj";
};
buildInputs = [ makeWrapper sqlite openssl env.ruby bundler ];
setSourceRoot = ''
mkdir -p $out/share
cp -R panamax-api $out/share/panamax-api
export sourceRoot="$out/share/panamax-api"
'';
postPatch = ''
find . -type f -exec sed -e 's|/usr/bin/docker|${docker}/bin/docker|g' -i "{}" \;
'';
configurePhase = ''
export HOME=$PWD
export GEM_HOME=${env}/${env.ruby.gemPath}
export RAILS_ENV=production
ln -sf ${database_yml} config/database.yml
'';
installPhase = ''
rm -rf log tmp
mv ./db ./_db
ln -sf ${dataDir}/{db,state/log,state/tmp} .
mkdir -p $out/bin
makeWrapper bin/bundle "$out/bin/bundle" \
--run "cd $out/share/panamax-api" \
--prefix "PATH" : "$out/share/panamax-api/bin:${env.ruby}/bin:$PATH" \
--prefix "HOME" : "$out/share/panamax-api" \
--prefix "GEM_HOME" : "${env}/${env.ruby.gemPath}" \
--prefix "OPENSSL_X509_CERT_FILE" : "${cacert}/etc/ca-bundle.crt" \
--prefix "SSL_CERT_FILE" : "${cacert}/etc/ca-bundle.crt" \
--prefix "GEM_PATH" : "$out/share/panamax-api:${bundler}/${env.ruby.gemPath}"
'';
meta = with stdenv.lib; {
homepage = https://github.com/CenturyLinkLabs/panamax-api;
description = "The API behind The Panamax UI";
license = licenses.asl20;
maintainers = with maintainers; [ matejc offline ];
platforms = platforms.linux;
};
}

@ -0,0 +1,571 @@
let
pkgs = import <nixpkgs> { };
in {
"actionmailer" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "0qjv5akjbpgd4cx518k522mssvc3y3nki65hi6fj5nbzi7a6rwq5";
};
dependencies = [
"actionpack"
"actionview"
"mail"
];
};
"actionpack" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "07y1ny00h69xklq260smyl5md052f617gqrzkyw5sxafs5z25zax";
};
dependencies = [
"actionview"
"activesupport"
"rack"
"rack-test"
];
};
"actionview" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "06sp37gfpn2jn7j6vlpp1y6vfi5kig60vyvixrjhyz0g4vgm13ax";
};
dependencies = [
"activesupport"
"builder"
"erubis"
];
};
"active_model_serializers" = {
version = "0.9.0";
source = {
type = "gem";
sha256 = "1ws3gx3wwlm17w7k0agwzmcmww6627lvqaqm828lzm3g1xqilkkl";
};
dependencies = [
"activemodel"
];
};
"activemodel" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "0rlqzz25l7vsphgkilg80kmk20d9h357awi27ax6zzb9klkqh0jr";
};
dependencies = [
"activesupport"
"builder"
];
};
"activerecord" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "0j4r0m32mjbwmz9gs8brln35jzr1cn7h585ggj0w0f1ai4hjsby5";
};
dependencies = [
"activemodel"
"activesupport"
"arel"
];
};
"activesupport" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "13i3mz66d5kp5y39gjwmcfqv0wb6mxm5k1nnz40wvd38dsf7n3bs";
};
dependencies = [
"i18n"
"json"
"minitest"
"thread_safe"
"tzinfo"
];
};
"addressable" = {
version = "2.3.6";
source = {
type = "gem";
sha256 = "137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8";
};
};
"archive-tar-minitar" = {
version = "0.5.2";
source = {
type = "gem";
sha256 = "1j666713r3cc3wb0042x0wcmq2v11vwwy5pcaayy5f0lnd26iqig";
};
};
"arel" = {
version = "5.0.1.20140414130214";
source = {
type = "gem";
sha256 = "0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9";
};
};
"builder" = {
version = "3.2.2";
source = {
type = "gem";
sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
};
};
"coveralls" = {
version = "0.7.0";
source = {
type = "gem";
sha256 = "0sz30d7b83qqsj3i0fr691w05d62wj7x3afh0ryjkqkis3fq94j4";
};
dependencies = [
"multi_json"
"rest-client"
"simplecov"
"term-ansicolor"
"thor"
];
};
"crack" = {
version = "0.4.2";
source = {
type = "gem";
sha256 = "1il94m92sz32nw5i6hdq14f1a2c3s9hza9zn6l95fvqhabq38k7a";
};
dependencies = [
"safe_yaml"
];
};
"database_cleaner" = {
version = "1.3.0";
source = {
type = "gem";
sha256 = "19w25yda684pg29bggq26wy4lpyjvzscwg2hx3hmmmpysiwfnxgn";
};
};
"diff-lcs" = {
version = "1.2.5";
source = {
type = "gem";
sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
};
};
"docile" = {
version = "1.1.5";
source = {
type = "gem";
sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
};
};
"docker-api" = {
version = "1.13.0";
source = {
type = "gem";
sha256 = "1rara27gn7lxaf12dqkx8s1clssg10jndfcy4wz2fv6ms1i1lnp6";
};
dependencies = [
"archive-tar-minitar"
"excon"
"json"
];
};
"erubis" = {
version = "2.7.0";
source = {
type = "gem";
sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
};
};
"excon" = {
version = "0.37.0";
source = {
type = "gem";
sha256 = "05x7asmsq5m419n1lhzk9bic02gwng4cqmrcqsfnd6kmkwm8csv2";
};
};
"faraday" = {
version = "0.8.9";
source = {
type = "gem";
sha256 = "17d79fsgx0xwh0mfxyz5pbr435qlw79phlfvifc546w2axdkp718";
};
dependencies = [
"multipart-post"
];
};
"faraday_middleware" = {
version = "0.9.0";
source = {
type = "gem";
sha256 = "1kwvi2sdxd6j764a7q5iir73dw2v6816zx3l8cgfv0wr2m47icq2";
};
dependencies = [
"faraday"
];
};
"fleet-api" = {
version = "0.6.0";
source = {
type = "gem";
sha256 = "0136mzc0fxp6mzh38n6xbg87cw9g9vq1nrlr3ylazbflvmlxgan6";
};
dependencies = [
"faraday"
"faraday_middleware"
];
};
"hike" = {
version = "1.2.3";
source = {
type = "gem";
sha256 = "0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm";
};
};
"i18n" = {
version = "0.6.11";
source = {
type = "gem";
sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk";
};
};
"its" = {
version = "0.2.0";
source = {
type = "gem";
sha256 = "0rxwds9ipqp48mzqcaxzmfcqhawazg0zlhc1avv3i2cmm3np1z8g";
};
dependencies = [
"rspec-core"
];
};
"json" = {
version = "1.8.1";
source = {
type = "gem";
sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn";
};
};
"kmts" = {
version = "2.0.1";
source = {
type = "gem";
sha256 = "1wk680q443lg35a25am6i8xawf16iqg5xnq1m8xd2gib4dsy1d8v";
};
};
"mail" = {
version = "2.6.3";
source = {
type = "gem";
sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
};
dependencies = [
"mime-types"
];
};
"mime-types" = {
version = "2.4.3";
source = {
type = "gem";
sha256 = "16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq";
};
};
"minitest" = {
version = "5.4.3";
source = {
type = "gem";
sha256 = "1ws2cphg9jh45nrvs43s2ww5r14nb026bwlbwwpi0jz6qsqm86x4";
};
};
"multi_json" = {
version = "1.10.1";
source = {
type = "gem";
sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
};
};
"multipart-post" = {
version = "1.2.0";
source = {
type = "gem";
sha256 = "12p7lnmc52di1r4h73h6xrpppplzyyhani9p7wm8l4kgf1hnmwnc";
};
};
"octokit" = {
version = "3.2.0";
source = {
type = "gem";
sha256 = "07ll3x1hv72zssb4hkdw56xg3xk6x4fch4yf38zljvbh388r11ng";
};
dependencies = [
"sawyer"
];
};
"puma" = {
version = "2.8.2";
source = {
type = "gem";
sha256 = "1l57fmf8vyxfjv7ab5znq0k339cym5ghnm5xxfvd1simjp73db0k";
};
dependencies = [
"rack"
];
buildInputs = [ pkgs.openssl ];
};
"rack" = {
version = "1.5.2";
source = {
type = "gem";
sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6";
};
};
"rack-test" = {
version = "0.6.2";
source = {
type = "gem";
sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
};
dependencies = [
"rack"
];
};
"rails" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "059mpljplmhfz8rr4hk40q67fllcpsy809m4mwwbkm8qwif2z5r0";
};
dependencies = [
"actionmailer"
"actionpack"
"actionview"
"activemodel"
"activerecord"
"activesupport"
"railties"
"sprockets-rails"
];
};
"railties" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "1n08h0rgj0aq5lvslnih6lvqz9wadpz6nnb25i4qhp37fhhyz9yz";
};
dependencies = [
"actionpack"
"activesupport"
"rake"
"thor"
];
};
"rake" = {
version = "10.4.0";
source = {
type = "gem";
sha256 = "0a10xzqc1lh6gjkajkslr0n40wjrniyiyzxkp9m5fc8wf7b74zw8";
};
};
"rest-client" = {
version = "1.6.7";
source = {
type = "gem";
sha256 = "0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853";
};
dependencies = [
"mime-types"
];
};
"rspec-core" = {
version = "3.1.7";
source = {
type = "gem";
sha256 = "01bawvln663gffljwzpq3mrpa061cghjbvfbq15jvhmip3csxqc9";
};
dependencies = [
"rspec-support"
];
};
"rspec-expectations" = {
version = "3.1.2";
source = {
type = "gem";
sha256 = "0m8d36wng1lpbcs54zhg1rxh63rgj345k3p0h0c06lgknz339nzh";
};
dependencies = [
"diff-lcs"
"rspec-support"
];
};
"rspec-mocks" = {
version = "3.1.3";
source = {
type = "gem";
sha256 = "0gxk5w3klia4zsnp0svxck43xxwwfdqvhr3srv6p30f3m5q6rmzr";
};
dependencies = [
"rspec-support"
];
};
"rspec-rails" = {
version = "3.1.0";
source = {
type = "gem";
sha256 = "1b1in3n1dc1bpf9wb3p3b2ynq05iacmr48jxzc73lj4g44ksh3wq";
};
dependencies = [
"actionpack"
"activesupport"
"railties"
"rspec-core"
"rspec-expectations"
"rspec-mocks"
"rspec-support"
];
};
"rspec-support" = {
version = "3.1.2";
source = {
type = "gem";
sha256 = "14y6v9r9lrh91ry9r79h85v0f3y9ja25w42nv5z9n0bipfcwhprb";
};
};
"safe_yaml" = {
version = "1.0.4";
source = {
type = "gem";
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
};
};
"sawyer" = {
version = "0.5.4";
source = {
type = "gem";
sha256 = "01kl4zpf0gaacnkra5nikrzfpwj8f10hsvgyzm7z2s1mz4iipx2v";
};
dependencies = [
"addressable"
"faraday"
];
};
"shoulda-matchers" = {
version = "2.6.1";
source = {
type = "gem";
sha256 = "1p3jhvd4dsj6d7nbmvnqhqhpmb8pnr05pi7jv9ajwqcys8140mc1";
};
dependencies = [
"activesupport"
];
};
"simplecov" = {
version = "0.9.1";
source = {
type = "gem";
sha256 = "06hylxlalaxxldpbaqa54gc52wxdff0fixdvjyzr6i4ygxwzr7yf";
};
dependencies = [
"docile"
"multi_json"
"simplecov-html"
];
};
"simplecov-html" = {
version = "0.8.0";
source = {
type = "gem";
sha256 = "0jhn3jql73x7hsr00wwv984iyrcg0xhf64s90zaqv2f26blkqfb9";
};
};
"sprockets" = {
version = "2.12.3";
source = {
type = "gem";
sha256 = "1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2";
};
dependencies = [
"hike"
"multi_json"
"rack"
"tilt"
];
};
"sprockets-rails" = {
version = "2.2.0";
source = {
type = "gem";
sha256 = "042fxqskvaa0wn9kpy02nv6p7sa355py9pi58zw96l30170sd3hl";
};
dependencies = [
"actionpack"
"activesupport"
"sprockets"
];
};
"sqlite3" = {
version = "1.3.9";
source = {
type = "gem";
sha256 = "07m6a6flmyyi0rkg0j7x1a9861zngwjnximfh95cli2zzd57914r";
};
};
"term-ansicolor" = {
version = "1.3.0";
source = {
type = "gem";
sha256 = "1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b";
};
dependencies = [
"tins"
];
};
"thor" = {
version = "0.19.1";
source = {
type = "gem";
sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
};
};
"thread_safe" = {
version = "0.3.4";
source = {
type = "gem";
sha256 = "1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n";
};
};
"tilt" = {
version = "1.4.1";
source = {
type = "gem";
sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir";
};
};
"tins" = {
version = "1.3.0";
source = {
type = "gem";
sha256 = "1yxa5kyp9mw4w866wlg7c32ingzqxnzh3ir9yf06pwpkmq3mrbdi";
};
};
"tzinfo" = {
version = "1.2.2";
source = {
type = "gem";
sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
};
dependencies = [
"thread_safe"
];
};
"webmock" = {
version = "1.20.0";
source = {
type = "gem";
sha256 = "0bl5v0xzcj24lx7xpsnywv3liqnqb5lfxysmmfb2fgi0n8586i6m";
};
dependencies = [
"addressable"
"crack"
];
};
}

@ -0,0 +1,760 @@
let
pkgs = import <nixpkgs> { };
in {
"actionmailer" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "0qjv5akjbpgd4cx518k522mssvc3y3nki65hi6fj5nbzi7a6rwq5";
};
dependencies = [
"actionpack"
"actionview"
"mail"
];
};
"actionpack" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "07y1ny00h69xklq260smyl5md052f617gqrzkyw5sxafs5z25zax";
};
dependencies = [
"actionview"
"activesupport"
"rack"
"rack-test"
];
};
"actionview" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "06sp37gfpn2jn7j6vlpp1y6vfi5kig60vyvixrjhyz0g4vgm13ax";
};
dependencies = [
"activesupport"
"builder"
"erubis"
];
};
"activemodel" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "0rlqzz25l7vsphgkilg80kmk20d9h357awi27ax6zzb9klkqh0jr";
};
dependencies = [
"activesupport"
"builder"
];
};
"activerecord" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "0j4r0m32mjbwmz9gs8brln35jzr1cn7h585ggj0w0f1ai4hjsby5";
};
dependencies = [
"activemodel"
"activesupport"
"arel"
];
};
"activeresource" = {
version = "4.0.0";
source = {
type = "gem";
sha256 = "0fc5igjijyjzsl9q5kybkdzhc92zv8wsv0ifb0y90i632jx6d4jq";
};
dependencies = [
"activemodel"
"activesupport"
"rails-observers"
];
};
"activesupport" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "13i3mz66d5kp5y39gjwmcfqv0wb6mxm5k1nnz40wvd38dsf7n3bs";
};
dependencies = [
"i18n"
"json"
"minitest"
"thread_safe"
"tzinfo"
];
};
"addressable" = {
version = "2.3.6";
source = {
type = "gem";
sha256 = "137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8";
};
};
"arel" = {
version = "5.0.1.20140414130214";
source = {
type = "gem";
sha256 = "0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9";
};
};
"binding_of_caller" = {
version = "0.7.2";
source = {
type = "gem";
sha256 = "15jg6dkaq2nzcd602d7ppqbdxw3aji961942w93crs6qw4n6h9yk";
};
dependencies = [
"debug_inspector"
];
};
"builder" = {
version = "3.2.2";
source = {
type = "gem";
sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
};
};
"byebug" = {
version = "3.5.1";
source = {
type = "gem";
sha256 = "0ldc2r0b316rrn2fgdgiznskj9gb0q9n60243laq7nqw9na8wdan";
};
dependencies = [
"columnize"
"debugger-linecache"
"slop"
];
};
"capybara" = {
version = "2.3.0";
source = {
type = "gem";
sha256 = "12x24zsn3y7sigmz45ijd9bkq7l14r2a00ay6k9mdgrbncbr3ins";
};
dependencies = [
"mime-types"
"nokogiri"
"rack"
"rack-test"
"xpath"
];
};
"coderay" = {
version = "1.1.0";
source = {
type = "gem";
sha256 = "059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s";
};
};
"columnize" = {
version = "0.8.9";
source = {
type = "gem";
sha256 = "1f3azq8pvdaaclljanwhab78hdw40k908ma2cwk59qzj4hvf7mip";
};
};
"coveralls" = {
version = "0.7.0";
source = {
type = "gem";
sha256 = "0sz30d7b83qqsj3i0fr691w05d62wj7x3afh0ryjkqkis3fq94j4";
};
dependencies = [
"multi_json"
"rest-client"
"simplecov"
"term-ansicolor"
"thor"
];
};
"crack" = {
version = "0.4.2";
source = {
type = "gem";
sha256 = "1il94m92sz32nw5i6hdq14f1a2c3s9hza9zn6l95fvqhabq38k7a";
};
dependencies = [
"safe_yaml"
];
};
"ctl_base_ui" = {
version = "0.0.4";
source = {
type = "gem";
sha256 = "0h0dbl0mf6cql7yp10jywv22rn0iy2188phdxvr2ladwwn2vxf5d";
};
dependencies = [
"haml"
"jquery-rails"
"jquery-ui-rails"
"rails"
"sass"
];
};
"debug_inspector" = {
version = "0.0.2";
source = {
type = "gem";
sha256 = "109761g00dbrw5q0dfnbqg8blfm699z4jj70l4zrgf9mzn7ii50m";
};
};
"debugger-linecache" = {
version = "1.2.0";
source = {
type = "gem";
sha256 = "0iwyx190fd5vfwj1gzr8pg3m374kqqix4g4fc4qw29sp54d3fpdz";
};
};
"diff-lcs" = {
version = "1.2.5";
source = {
type = "gem";
sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
};
};
"docile" = {
version = "1.1.5";
source = {
type = "gem";
sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
};
};
"dotenv" = {
version = "0.11.1";
source = {
type = "gem";
sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m";
};
dependencies = [
"dotenv-deployment"
];
};
"dotenv-deployment" = {
version = "0.0.2";
source = {
type = "gem";
sha256 = "1ad66jq9a09qq1js8wsyil97018s7y6x0vzji0dy34gh65sbjz8c";
};
};
"dotenv-rails" = {
version = "0.11.1";
source = {
type = "gem";
sha256 = "0r6hif0i1lipbi7mkxx7wa5clsn65n6wyd9jry262cx396lsfrqy";
};
dependencies = [
"dotenv"
];
};
"erubis" = {
version = "2.7.0";
source = {
type = "gem";
sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
};
};
"execjs" = {
version = "2.2.1";
source = {
type = "gem";
sha256 = "1s41g9qwq0h4452q4gp934lnkzfkxh4wrg8fd4bcynba86bf3j8b";
};
};
"haml" = {
version = "4.0.5";
source = {
type = "gem";
sha256 = "1xmzb0k5q271090crzmv7dbw8ss4289bzxklrc0fhw6pw3kcvc85";
};
dependencies = [
"tilt"
];
};
"hike" = {
version = "1.2.3";
source = {
type = "gem";
sha256 = "0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm";
};
};
"i18n" = {
version = "0.6.11";
source = {
type = "gem";
sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk";
};
};
"jquery-rails" = {
version = "3.1.2";
source = {
type = "gem";
sha256 = "0h5a565i3l2mbd221m6mz9d1nr53pz19i9qxv08qr1dv0yx2pr3y";
};
dependencies = [
"railties"
"thor"
];
};
"jquery-ui-rails" = {
version = "4.2.1";
source = {
type = "gem";
sha256 = "1garrnqwh35acj2pp4sp6fpm2g881h23y644lzbic2qmcrq9wd2v";
};
dependencies = [
"railties"
];
};
"json" = {
version = "1.8.1";
source = {
type = "gem";
sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn";
};
};
"kramdown" = {
version = "1.4.0";
source = {
type = "gem";
sha256 = "001vy0ymiwbvkdbb9wpqmswv6imliv7xim00gq6rlk0chnbiaq80";
};
};
"libv8" = {
version = "3.16.14.7";
source = {
type = "gem";
sha256 = "0dv5q5n5nf6b8h3fybwmsr3vkj70w4g1jpf6661j3hsv9vp0g4qq";
};
};
"mail" = {
version = "2.6.3";
source = {
type = "gem";
sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
};
dependencies = [
"mime-types"
];
};
"method_source" = {
version = "0.8.2";
source = {
type = "gem";
sha256 = "1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2";
};
};
"mime-types" = {
version = "2.4.3";
source = {
type = "gem";
sha256 = "16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq";
};
};
"mini_portile" = {
version = "0.6.0";
source = {
type = "gem";
sha256 = "09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn";
};
};
"minitest" = {
version = "5.4.3";
source = {
type = "gem";
sha256 = "1ws2cphg9jh45nrvs43s2ww5r14nb026bwlbwwpi0jz6qsqm86x4";
};
};
"multi_json" = {
version = "1.10.1";
source = {
type = "gem";
sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
};
};
"nokogiri" = {
version = "1.6.2.1";
source = {
type = "gem";
sha256 = "0dj8ajm9hlfpa71qz1xn5prqy5qdi32ll74qh8ssjwknp1a35cnz";
};
dependencies = [
"mini_portile"
];
};
"phantomjs" = {
version = "1.9.7.1";
source = {
type = "gem";
sha256 = "14as0yzwbzvshbp1f8igjxcdxc5vbjgh0jhdvy393il084inlrl7";
};
};
"pry" = {
version = "0.10.1";
source = {
type = "gem";
sha256 = "1j0r5fm0wvdwzbh6d6apnp7c0n150hpm9zxpm5xvcgfqr36jaj8z";
};
dependencies = [
"coderay"
"method_source"
"slop"
];
};
"pry-byebug" = {
version = "2.0.0";
source = {
type = "gem";
sha256 = "17b6720ci9345wkzj369ydyj6hdlg2krd26zivpd4dvaijszzgzq";
};
dependencies = [
"byebug"
"pry"
];
};
"pry-stack_explorer" = {
version = "0.4.9.1";
source = {
type = "gem";
sha256 = "1828jqcfdr9nk86n15ky199vf33cfz51wkpv6kx230g0dsh9r85z";
};
dependencies = [
"binding_of_caller"
"pry"
];
};
"puma" = {
version = "2.8.2";
source = {
type = "gem";
sha256 = "1l57fmf8vyxfjv7ab5znq0k339cym5ghnm5xxfvd1simjp73db0k";
};
dependencies = [
"rack"
];
buildInputs = [ pkgs.openssl ];
};
"rack" = {
version = "1.5.2";
source = {
type = "gem";
sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6";
};
};
"rack-protection" = {
version = "1.5.3";
source = {
type = "gem";
sha256 = "0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r";
};
dependencies = [
"rack"
];
};
"rack-test" = {
version = "0.6.2";
source = {
type = "gem";
sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
};
dependencies = [
"rack"
];
};
"rails" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "059mpljplmhfz8rr4hk40q67fllcpsy809m4mwwbkm8qwif2z5r0";
};
dependencies = [
"actionmailer"
"actionpack"
"actionview"
"activemodel"
"activerecord"
"activesupport"
"railties"
"sprockets-rails"
];
};
"rails-observers" = {
version = "0.1.2";
source = {
type = "gem";
sha256 = "1lsw19jzmvipvrfy2z04hi7r29dvkfc43h43vs67x6lsj9rxwwcy";
};
dependencies = [
"activemodel"
];
};
"railties" = {
version = "4.1.7";
source = {
type = "gem";
sha256 = "1n08h0rgj0aq5lvslnih6lvqz9wadpz6nnb25i4qhp37fhhyz9yz";
};
dependencies = [
"actionpack"
"activesupport"
"rake"
"thor"
];
};
"rake" = {
version = "10.4.1";
source = {
type = "gem";
sha256 = "1446zzdpwpvwkd0zk19b2smmmvdiarh4b26cdbcw4fy5p67wxkw2";
};
};
"ref" = {
version = "1.0.5";
source = {
type = "gem";
sha256 = "19qgpsfszwc2sfh6wixgky5agn831qq8ap854i1jqqhy1zsci3la";
};
};
"rest-client" = {
version = "1.6.7";
source = {
type = "gem";
sha256 = "0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853";
};
dependencies = [
"mime-types"
];
};
"rspec-core" = {
version = "2.14.8";
source = {
type = "gem";
sha256 = "0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc";
};
};
"rspec-expectations" = {
version = "2.14.5";
source = {
type = "gem";
sha256 = "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9";
};
dependencies = [
"diff-lcs"
];
};
"rspec-mocks" = {
version = "2.14.6";
source = {
type = "gem";
sha256 = "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30";
};
};
"rspec-rails" = {
version = "2.14.2";
source = {
type = "gem";
sha256 = "1j9nbha6p12kwy9c5g3lw541xg20yzk95lzgmsq7kvngiqz88p57";
};
dependencies = [
"actionpack"
"activemodel"
"activesupport"
"railties"
"rspec-core"
"rspec-expectations"
"rspec-mocks"
];
};
"safe_yaml" = {
version = "1.0.3";
source = {
type = "gem";
sha256 = "063bykyk40s3rhy1dxfbvl69s179n1iny418z4wqjbvhrmjn18wl";
};
};
"sass" = {
version = "3.3.9";
source = {
type = "gem";
sha256 = "0k19vj73283i907z4wfkc9qdska2b19z7ps6lcr5s4qzwis1zkmz";
};
};
"simplecov" = {
version = "0.9.1";
source = {
type = "gem";
sha256 = "06hylxlalaxxldpbaqa54gc52wxdff0fixdvjyzr6i4ygxwzr7yf";
};
dependencies = [
"docile"
"multi_json"
"simplecov-html"
];
};
"simplecov-html" = {
version = "0.8.0";
source = {
type = "gem";
sha256 = "0jhn3jql73x7hsr00wwv984iyrcg0xhf64s90zaqv2f26blkqfb9";
};
};
"sinatra" = {
version = "1.4.5";
source = {
type = "gem";
sha256 = "0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s";
};
dependencies = [
"rack"
"rack-protection"
"tilt"
];
};
"slop" = {
version = "3.6.0";
source = {
type = "gem";
sha256 = "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n";
};
};
"sprockets" = {
version = "2.12.3";
source = {
type = "gem";
sha256 = "1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2";
};
dependencies = [
"hike"
"multi_json"
"rack"
"tilt"
];
};
"sprockets-rails" = {
version = "2.2.2";
source = {
type = "gem";
sha256 = "192d4vfl1gjz6phli6sqk98364x6v4jkpl5imajvimsinvgyv81b";
};
dependencies = [
"actionpack"
"activesupport"
"sprockets"
];
};
"teaspoon" = {
version = "0.8.0";
source = {
type = "gem";
sha256 = "1j3brbm9cv5km9d9wzb6q2b3cvc6m254z48h7h77z1w6c5wr0p3z";
};
dependencies = [
"railties"
];
};
"term-ansicolor" = {
version = "1.3.0";
source = {
type = "gem";
sha256 = "1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b";
};
dependencies = [
"tins"
];
};
"therubyracer" = {
version = "0.12.1";
source = {
type = "gem";
sha256 = "106fqimqyaalh7p6czbl5m2j69z8gv7cm10mjb8bbb2p2vlmqmi6";
};
dependencies = [
"libv8"
"ref"
];
};
"thor" = {
version = "0.19.1";
source = {
type = "gem";
sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
};
};
"thread_safe" = {
version = "0.3.4";
source = {
type = "gem";
sha256 = "1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n";
};
};
"tilt" = {
version = "1.4.1";
source = {
type = "gem";
sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir";
};
};
"tins" = {
version = "1.1.0";
source = {
type = "gem";
sha256 = "0jddc40lw8lzn421p6pjvvs7b37qyd8jgsl5nrq16rc46wgx2r2r";
};
};
"tzinfo" = {
version = "1.2.2";
source = {
type = "gem";
sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
};
dependencies = [
"thread_safe"
];
};
"uglifier" = {
version = "2.5.1";
source = {
type = "gem";
sha256 = "1vihq309mzv9a2i0s8v4imrn1g2kj8z0vr88q3i5b657c4kxzfp0";
};
dependencies = [
"execjs"
"json"
];
};
"webmock" = {
version = "1.18.0";
source = {
type = "gem";
sha256 = "1r21a4x7dljb3cqxp7w7mdq5a1xvw9kn6m3gldsldsfza5b4hq03";
};
dependencies = [
"addressable"
"crack"
];
};
"xpath" = {
version = "2.0.0";
source = {
type = "gem";
sha256 = "04kcr127l34p7221z13blyl0dvh0bmxwx326j72idayri36a394w";
};
dependencies = [
"nokogiri"
];
};
"zeroclipboard-rails" = {
version = "0.1.0";
source = {
type = "gem";
sha256 = "00ixal0a0mxaqsyzp06c6zz4qdwqydy1qv4n7hbyqfhbmsdalcfc";
};
dependencies = [
"railties"
];
};
}

@ -0,0 +1,71 @@
{ stdenv, fetchgit, fetchurl, makeWrapper, bundlerEnv, bundler_HEAD
, ruby, rubygemsFun, openssl, sqlite, dataDir ? "/var/lib/panamax-ui"}:
with stdenv.lib;
let
env = bundlerEnv {
name = "panamax-api-gems";
inherit ruby;
gemset = ./gemset-ui.nix;
gemfile = ./Gemfile-ui;
lockfile = ./Gemfile-ui.lock;
};
bundler = bundler_HEAD.override { inherit ruby; };
in
stdenv.mkDerivation rec {
name = "panamax-ui-${version}";
version = "0.2.11";
src = fetchgit {
rev = "refs/tags/v${version}";
url = "git://github.com/CenturyLinkLabs/panamax-ui";
sha256 = "17j5ac8fzp377bzg7f239jdcc9j0c63bkx0ill5nl10i3h05z7jh";
};
buildInputs = [ makeWrapper env.ruby openssl sqlite bundler ];
setSourceRoot = ''
mkdir -p $out/share
cp -R panamax-ui $out/share/panamax-ui
export sourceRoot="$out/share/panamax-ui"
'';
postPatch = ''
find . -type f -iname "*.haml" -exec sed -e 's|CoreOS Journal|NixOS Journal|g' -i "{}" \;
find . -type f -iname "*.haml" -exec sed -e 's|CoreOS Local|NixOS Local|g' -i "{}" \;
find . -type f -iname "*.haml" -exec sed -e 's|CoreOS Host|NixOS Host|g' -i "{}" \;
sed -e 's|CoreOS Local|NixOS Local|g' -i "spec/features/manage_application_spec.rb"
'';
configurePhase = ''
export HOME=$PWD
export GEM_HOME=${env}/${env.ruby.gemPath}
'';
buildPhase = ''
rm -f ./bin/*
bundle exec rake rails:update:bin
'';
installPhase = ''
rm -rf log tmp db
ln -sf ${dataDir}/{db,state/log,state/tmp} .
mkdir -p $out/bin
makeWrapper bin/bundle "$out/bin/bundle" \
--run "cd $out/share/panamax-ui" \
--prefix "PATH" : "$out/share/panamax-ui/bin:${env.ruby}/bin:$PATH" \
--prefix "HOME" : "$out/share/panamax-ui" \
--prefix "GEM_HOME" : "${env}/${env.ruby.gemPath}" \
--prefix "GEM_PATH" : "$out/share/panamax-ui:${bundler}/${env.ruby.gemPath}"
'';
meta = with stdenv.lib; {
homepage = https://github.com/CenturyLinkLabs/panamax-ui;
description = "The Web GUI for Panamax";
license = licenses.asl20;
maintainers = with maintainers; [ matejc offline ];
platforms = platforms.linux;
};
}

@ -10789,6 +10789,13 @@ let
namecoin = callPackage ../applications/misc/namecoin { };
namecoinqt = callPackage ../applications/misc/namecoin/qt.nix { };
panamax_api = callPackage ../applications/networking/cluster/panamax/api.nix {
ruby = ruby_2_1;
};
panamax_ui = callPackage ../applications/networking/cluster/panamax/ui.nix {
ruby = ruby_2_1;
};
pcmanfm = callPackage ../applications/misc/pcmanfm { };
shotcut = callPackage ../applications/video/shotcut { mlt = mlt-qt5; };

Loading…
Cancel
Save