nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1# a generic test suite for all gems for all ruby versions.
2# use via nix-build.
3let
4 pkgs = import ../../../.. { };
5 lib = pkgs.lib;
6 stdenv = pkgs.stdenv;
7
8 rubyVersions = [
9 # TODO FIXME: All versions listed here were dropped from Nixpkgs.
10 # Add current versions here or remove this file if it’s no longer
11 # being used.
12 ];
13
14 gemTests = (lib.mapAttrs (name: gem: [ name ]) pkgs.ruby.gems) // (import ./require_exceptions.nix);
15
16 testWrapper =
17 ruby:
18 stdenv.mkDerivation {
19 name = "test-wrappedRuby-${ruby.name}";
20 buildInputs = [ ((ruby.withPackages (ps: [ ])).wrappedRuby) ];
21 buildCommand = ''
22 cat <<'EOF' > test-ruby
23 #!/usr/bin/env ruby
24 puts RUBY_VERSION
25 EOF
26
27 chmod +x test-ruby
28 patchShebangs test-ruby
29 [[ $(./test-ruby) = $(${ruby}/bin/ruby test-ruby) ]]
30 touch $out
31 '';
32 };
33
34 tests =
35 ruby:
36 lib.mapAttrs (
37 name: gem:
38 let
39 test =
40 if builtins.isList gemTests.${name} then
41 pkgs.writeText "${name}.rb" ''
42 puts "${name} GEM_HOME: #{ENV['GEM_HOME']}"
43 ${lib.concatStringsSep "\n" (map (n: "require '${n}'") gemTests.${name})}
44 ''
45 else
46 pkgs.writeText "${name}.rb" gemTests.${name};
47
48 deps = ruby.withPackages (g: [ g.${name} ]);
49 in
50 stdenv.mkDerivation {
51 name = "test-gem-${ruby.name}-${name}";
52 buildInputs = [ deps ];
53 buildCommand = ''
54 INLINEDIR=$PWD ruby ${test}
55 touch $out
56 '';
57 }
58 ) ruby.gems;
59in
60stdenv.mkDerivation {
61 name = "test-all-ruby-gems";
62 buildInputs = builtins.foldl' (
63 sum: ruby: sum ++ [ (testWrapper ruby) ] ++ (builtins.attrValues (tests ruby))
64 ) [ ] rubyVersions;
65 buildCommand = ''
66 touch $out
67 '';
68}