34 lines
781 B
Ruby
Executable file
34 lines
781 B
Ruby
Executable file
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require 'json'
|
|
require 'net/http'
|
|
require 'shellwords'
|
|
|
|
def get_channel_url(channel)
|
|
uri = URI("https://channels.nixos.org/#{channel}")
|
|
res = Net::HTTP.get_response(uri)
|
|
raise 'Not a redirect' unless res.is_a?(Net::HTTPRedirection)
|
|
res['location']
|
|
end
|
|
|
|
def fetch_tarball(url)
|
|
hash = `nix-prefetch-url --unpack #{Shellwords.escape(url)}`
|
|
raise 'Prefetch failed' unless $?.success?
|
|
hash.chomp
|
|
end
|
|
|
|
def generate_pin(channel)
|
|
channel_url = get_channel_url(channel)
|
|
nixexprs = "#{channel_url}/nixexprs.tar.xz"
|
|
hash = fetch_tarball(nixexprs)
|
|
{ url: nixexprs, sha256: hash }
|
|
end
|
|
|
|
def main
|
|
channel = ENV.fetch('CHANNEL', 'nixpkgs-unstable')
|
|
pin = generate_pin(channel)
|
|
puts JSON.pretty_generate(pin)
|
|
end
|
|
|
|
main
|