summary refs log tree commit diff
path: root/pkgs/development/compilers/crystal
diff options
context:
space:
mode:
authorSilvan Mosberger <infinisil@icloud.com>2019-08-26 18:23:55 +0200
committerSilvan Mosberger <infinisil@icloud.com>2019-08-26 18:23:55 +0200
commit1ffdf01777360f548cc7c10ef5b168cbe78fd183 (patch)
treebe0d58c6630a28db146c139c72d6f1b82ee14851 /pkgs/development/compilers/crystal
parenta3aec20f266c57d989524f02b1243b4ad24020a2 (diff)
downloadnixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.tar
nixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.tar.gz
nixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.tar.bz2
nixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.tar.lz
nixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.tar.xz
nixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.tar.zst
nixpkgs-1ffdf01777360f548cc7c10ef5b168cbe78fd183.zip
crystal2nix: Put it into pkgs
Diffstat (limited to 'pkgs/development/compilers/crystal')
-rw-r--r--pkgs/development/compilers/crystal/crystal2nix.cr42
-rw-r--r--pkgs/development/compilers/crystal/crystal2nix.nix16
-rw-r--r--pkgs/development/compilers/crystal/default.nix2
3 files changed, 60 insertions, 0 deletions
diff --git a/pkgs/development/compilers/crystal/crystal2nix.cr b/pkgs/development/compilers/crystal/crystal2nix.cr
new file mode 100644
index 00000000000..0610de5cfa4
--- /dev/null
+++ b/pkgs/development/compilers/crystal/crystal2nix.cr
@@ -0,0 +1,42 @@
+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
new file mode 100644
index 00000000000..ac69b9b3d96
--- /dev/null
+++ b/pkgs/development/compilers/crystal/crystal2nix.nix
@@ -0,0 +1,16 @@
+{ 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";
+
+  crystalBinaries.crystal2nix.src = "crystal2nix.cr";
+
+  meta = with lib; {
+    description = "Utility to convert Crystal's shard.lock files to a Nix file";
+    license = licenses.mit;
+    maintainers = [ maintainers.manveru ];
+  };
+}
diff --git a/pkgs/development/compilers/crystal/default.nix b/pkgs/development/compilers/crystal/default.nix
index 0cb0a3733ed..c7a74880e44 100644
--- a/pkgs/development/compilers/crystal/default.nix
+++ b/pkgs/development/compilers/crystal/default.nix
@@ -212,4 +212,6 @@ in rec {
   };
 
   crystal = crystal_0_30;
+
+  crystal2nix = callPackage ./crystal2nix.nix {};
 }