From 5fc48d57ca130bcfc8ec9fb5db94560f04560280 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 22 Aug 2022 17:38:53 -0700 Subject: [PATCH] rewrite update script from scratch to use curl/jq --- .gitignore | 3 +- default.nix | 8 ++--- sources.json | 2 +- update | 86 +++++++++++++++++++++------------------------------- 4 files changed, 42 insertions(+), 57 deletions(-) diff --git a/.gitignore b/.gitignore index 2943858..9383d16 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -sources.json.bak +sources.old.json +sources.new.json diff --git a/default.nix b/default.nix index 3a75af1..ae59c73 100644 --- a/default.nix +++ b/default.nix @@ -1,7 +1,8 @@ { pkgs ? import {}, system ? builtins.currentSystem }: -let inherit (pkgs) lib; +let + inherit (pkgs) lib; releases = builtins.fromJSON (lib.strings.fileContents ./sources.json); installPhase = '' mkdir -p $out/{doc,bin,lib} @@ -10,8 +11,7 @@ let inherit (pkgs) lib; cp -r lib/* $out/lib cp zig $out/bin/zig ''; - -in lib.attrsets.mapAttrs (k: v: +in lib.attrsets.mapAttrs (k: v: if k == "master" then lib.attrsets.mapAttrs (k: v: (pkgs.stdenv.mkDerivation { @@ -38,4 +38,4 @@ in lib.attrsets.mapAttrs (k: v: dontFixup = true; installPhase = installPhase; }) - releases \ No newline at end of file + releases diff --git a/sources.json b/sources.json index 4599d5c..3e996bb 100644 --- a/sources.json +++ b/sources.json @@ -2502,4 +2502,4 @@ "sha256": "16b0e1defe4c1807f2e128f72863124bffdd906cefb21043c34b673bf85cd57f" } } -} \ No newline at end of file +} diff --git a/update b/update index 832d014..c272bb8 100755 --- a/update +++ b/update @@ -1,57 +1,41 @@ #!/usr/bin/env nix-shell -#! nix-shell -p ruby -i ruby +#! nix-shell -p curl jq -i sh -require 'net/http' -require 'json' -require 'pathname' -require 'fileutils' +# Build our new sources.json +curl -s 'https://ziglang.org/download/index.json' | jq ' +["aarch64-linux", "x86_64-linux", "aarch64-macos", "x86_64-macos"] as $targets | +def todarwin(x): x | gsub("macos"; "darwin"); +def toentry(vsn; x): + [(vsn as $version | + .value | + to_entries[] | + select(.key as $key | any($targets[]; . == $key)) | { + (todarwin(.key)): { + "url": .value.tarball, + "sha256": .value.shasum, + "version": $version, + } + } + )] | add; -ZIG_URI = URI("https://ziglang.org/download/index.json") -DEFAULT_SYSTEMS = ["x86_64-linux", "aarch64-linux", "aarch64-darwin", "x86_64-darwin"] +to_entries[] | { + (.key): ( + if (.key != "master") then + toentry(.key; .value) + else { + "latest": toentry(.value.version; .value), + (.value.date): toentry(.value.version; .value), + } end + ) +} +' > sources.new.json -response = JSON.parse(Net::HTTP.get(ZIG_URI)) -sources = if Pathname.new("sources.json").exist? - JSON.parse(File.read("sources.json")) - else - { "master" => {} } - end +# For debugging +# cat sources.new.json +# exit -# Update versions -response.each do |k, v| - unless k == "master" - sources[k] = DEFAULT_SYSTEMS.to_h do |system| - data = if system == "x86_64-darwin" - response[k]["x86_64-macos"] or {} - elsif system == "aarch64-darwin" - response[k]["aarch64-macos"] or {} - else - response[k][system] or {} - end - [system, { "url" => data["tarball"], - "version" => k, - "sha256" => data["shasum"] }] - end - end -end +# Copy the old file since jq can't modify in-place. This is also a backup. +cp sources.json sources.old.json -# Update master -sources["master"][response["master"]["date"]] = DEFAULT_SYSTEMS.to_h do |system| - data = if system == "x86_64-darwin" - response["master"]["x86_64-macos"] - elsif system == "aarch64-darwin" - response["master"]["aarch64-macos"] - else - response["master"][system] - end - [system, { "url" => data["tarball"], - "version" => response["master"]["version"], - "sha256" => data["shasum"] }] -end -sources["master"]["latest"] = sources["master"][response["master"]["date"]] - -FileUtils.cp "sources.json", "sources.json.bak" -File.write "sources.json", JSON.pretty_generate(sources) - -# Local Variables: -# mode: ruby -# End: +# Recursive merge +jq -s '.[0] * .[1]' sources.old.json sources.new.json > sources.json