diff --git a/pkgs/development/compilers/crystal/crystal2nix.cr b/pkgs/development/compilers/crystal/crystal2nix.cr deleted file mode 100644 index 0610de5cfa4d..000000000000 --- a/pkgs/development/compilers/crystal/crystal2nix.cr +++ /dev/null @@ -1,42 +0,0 @@ -require "yaml" -require "json" - -class PrefetchJSON - JSON.mapping(sha256: String) -end - -class ShardLock - YAML.mapping( - version: Float32, - shards: Hash(String, Hash(String, String)) - ) -end - -File.open "shards.nix", "w+" do |file| - file.puts %({) - yaml = ShardLock.from_yaml(File.read("shard.lock")) - yaml.shards.each do |key, value| - owner, repo = value["github"].split("/") - url = "https://github.com/#{value["github"]}" - rev = if value["version"]? - "v#{value["version"]}" - else - value["commit"] - end - - sha256 = "" - args = ["--url", url, "--rev", rev] - Process.run("@nixPrefetchGit@", args: args) do |x| - x.error.each_line { |e| puts e } - sha256 = PrefetchJSON.from_json(x.output).sha256 - end - - file.puts %( #{key} = {) - file.puts %( owner = "#{owner}";) - file.puts %( repo = "#{repo}";) - file.puts %( rev = "#{rev}";) - file.puts %( sha256 = "#{sha256}";) - file.puts %( };) - end - file.puts %(}) -end diff --git a/pkgs/development/compilers/crystal/crystal2nix.nix b/pkgs/development/compilers/crystal/crystal2nix.nix deleted file mode 100644 index 5fc40cd23741..000000000000 --- a/pkgs/development/compilers/crystal/crystal2nix.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ lib, crystal, nix-prefetch-git }: - -crystal.buildCrystalPackage { - pname = "crystal2nix"; - version = "unstable-2018-07-31"; - - nixPrefetchGit = "${lib.getBin nix-prefetch-git}/bin/nix-prefetch-git"; - unpackPhase = "substituteAll ${./crystal2nix.cr} crystal2nix.cr"; - - format = "crystal"; - - crystalBinaries.crystal2nix.src = "crystal2nix.cr"; - - # it will blow up without a shard.yml file - doInstallCheck = false; - - meta = with lib; { - description = "Utility to convert Crystal's shard.lock files to a Nix file"; - license = licenses.mit; - maintainers = with maintainers; [ manveru ]; - }; -} diff --git a/pkgs/development/compilers/crystal2nix/default.nix b/pkgs/development/compilers/crystal2nix/default.nix new file mode 100644 index 000000000000..25cbbd4d01aa --- /dev/null +++ b/pkgs/development/compilers/crystal2nix/default.nix @@ -0,0 +1,36 @@ +{ lib, fetchFromGitHub, fetchgit, crystal, makeWrapper, nix-prefetch-git }: + +crystal.buildCrystalPackage rec { + pname = "crystal2nix"; + version = "0.1.0"; + + src = fetchFromGitHub { + owner = "peterhoeg"; + repo = "crystal2nix"; + rev = "v${version}"; + sha256 = "sha256-K1ElG8VC/D0axmSRaufH3cE50xNQisAmFucDkV+5O0s="; + }; + + format = "shards"; + + shardsFile = ./shards.nix; + + nativeBuildInputs = [ makeWrapper ]; + + postInstall = '' + wrapProgram $out/bin/crystal2nix \ + --prefix PATH : ${lib.makeBinPath [ nix-prefetch-git ]} + ''; + + # temporarily off. We need the checks to execute the wrapped binary + doCheck = false; + + # it requires an internet connection when run + doInstallCheck = false; + + meta = with lib; { + description = "Utility to convert Crystal's shard.lock files to a Nix file"; + license = licenses.mit; + maintainers = with maintainers; [ manveru peterhoeg ]; + }; +} diff --git a/pkgs/development/compilers/crystal2nix/shards.nix b/pkgs/development/compilers/crystal2nix/shards.nix new file mode 100644 index 000000000000..abfc0f93072d --- /dev/null +++ b/pkgs/development/compilers/crystal2nix/shards.nix @@ -0,0 +1,14 @@ +{ + json_mapping = { + owner = "crystal-lang"; + repo = "json_mapping.cr"; + rev = "v0.1.0"; + sha256 = "1qq5vs2085x7cwmp96rrjns0yz9kiz1lycxynfbz5psxll6b8p55"; + }; + yaml_mapping = { + owner = "crystal-lang"; + repo = "yaml_mapping.cr"; + rev = "v0.1.0"; + sha256 = "02spz1521g59ar6rp0znnr01di766kknbjxjnygs39yn0cmpzqc1"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7030f3a71794..b183ed808f06 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9051,8 +9051,9 @@ in crystal_0_33 crystal_0_34 crystal_0_35 - crystal - crystal2nix; + crystal; + + crystal2nix = callPackage ../development/compilers/crystal2nix { }; icr = callPackage ../development/tools/icr { };