parent
61626d70e5
commit
b8514a1727
@ -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 |
@ -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 ]; |
||||
}; |
||||
} |
@ -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 ]; |
||||
}; |
||||
} |
@ -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"; |
||||
}; |
||||
} |
Loading…
Reference in new issue