Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
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 = with pkgs; [ 9 ruby_2_7 10 ]; 11 12 gemTests = 13 (lib.mapAttrs 14 (name: gem: [ name ]) 15 pkgs.ruby.gems) // 16 (import ./require_exceptions.nix); 17 18 testWrapper = ruby: 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 = ruby: 35 lib.mapAttrs (name: gem: 36 let 37 test = 38 if builtins.isList gemTests.${name} 39 then pkgs.writeText "${name}.rb" '' 40 puts "${name} GEM_HOME: #{ENV['GEM_HOME']}" 41 ${lib.concatStringsSep "\n" (map (n: "require '${n}'") gemTests.${name})} 42 '' 43 else pkgs.writeText "${name}.rb" gemTests.${name}; 44 45 deps = ruby.withPackages (g: [ g.${name} ]); 46 in stdenv.mkDerivation { 47 name = "test-gem-${ruby.name}-${name}"; 48 buildInputs = [ deps ]; 49 buildCommand = '' 50 INLINEDIR=$PWD ruby ${test} 51 touch $out 52 ''; 53 } 54 ) ruby.gems; 55in 56 stdenv.mkDerivation { 57 name = "test-all-ruby-gems"; 58 buildInputs = builtins.foldl' (sum: ruby: sum ++ [ (testWrapper ruby) ] ++ ( builtins.attrValues (tests ruby) )) [] rubyVersions; 59 buildCommand = '' 60 touch $out 61 ''; 62 }