about summary refs log tree commit diff
path: root/pkgs/development/compilers/crystal/crystal2nix.cr
blob: 0610de5cfa4d765ddbc6f299d70bf472cb56e3d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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