summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/servers/monitoring/grafana/default.nix11
-rwxr-xr-xpkgs/servers/monitoring/grafana/update.sh39
2 files changed, 46 insertions, 4 deletions
diff --git a/pkgs/servers/monitoring/grafana/default.nix b/pkgs/servers/monitoring/grafana/default.nix
index c541c74d5be..22b886b2d24 100644
--- a/pkgs/servers/monitoring/grafana/default.nix
+++ b/pkgs/servers/monitoring/grafana/default.nix
@@ -2,7 +2,7 @@
 
 buildGoModule rec {
   pname = "grafana";
-  version = "8.4.5";
+  version = "8.4.6";
 
   excludedPackages = [ "alert_webhook_listener" "clean-swagger" "release_publisher" "slow_proxy" "slow_proxy_mac" "macaron" ];
 
@@ -10,12 +10,12 @@ buildGoModule rec {
     rev = "v${version}";
     owner = "grafana";
     repo = "grafana";
-    sha256 = "sha256-CdGg979c7XD5V3jZbVeHUGylAarGc+cR+bFi5FngKtU=";
+    sha256 = "sha256-BXAvsHP6bDMrSk5jMCJmvrS1w/d+Mmym+OMCqO2YozY=";
   };
 
   srcStatic = fetchurl {
     url = "https://dl.grafana.com/oss/release/grafana-${version}.linux-amd64.tar.gz";
-    sha256 = "sha256-PjDTEmzjDmT1WQGqF3GwojJ6mG2whBoPK0KWfXI8AB4=";
+    sha256 = "1af0277kb2msjqjv2kxajpxia4q4y2bslf009fx13h2c0grv8j7f";
   };
 
   vendorSha256 = "sha256-iOJEy7dCZGRTaOuL/09wcMlNDHjRi9SIr9bialdcKi4=";
@@ -66,7 +66,10 @@ buildGoModule rec {
     cp ./conf/defaults.ini $out/share/grafana/conf/
   '';
 
-  passthru.tests = { inherit (nixosTests) grafana; };
+  passthru = {
+    tests = { inherit (nixosTests) grafana; };
+    updateScript = ./update.sh;
+  };
 
   meta = with lib; {
     description = "Gorgeous metric viz, dashboards & editors for Graphite, InfluxDB & OpenTSDB";
diff --git a/pkgs/servers/monitoring/grafana/update.sh b/pkgs/servers/monitoring/grafana/update.sh
new file mode 100755
index 00000000000..8fce8433388
--- /dev/null
+++ b/pkgs/servers/monitoring/grafana/update.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts jq nix nix-prefetch-scripts moreutils
+
+set -euxo pipefail
+
+FILE="$(nix-instantiate --eval -E 'with import ./. {}; (builtins.unsafeGetAttrPos "version" grafana).file' | tr -d '"')"
+replaceHash() {
+  old="${1?old hash missing}"
+  new="${2?new hash missing}"
+  awk -v OLD="$old" -v NEW="$new" '{
+    if (i=index($0, OLD)) {
+      $0 = substr($0, 1, i-1) NEW substr($0, i+length(OLD));
+    }
+    print $0;
+  }' "$FILE" | sponge "$FILE"
+}
+extractVendorHash() {
+  original="${1?original hash missing}"
+  result="$(nix-build -A grafana.go-modules 2>&1 | tail -n3 | grep 'got:' | cut -d: -f2- | xargs echo || true)"
+  [ -z "$result" ] && { echo "$original"; } || { echo "$result"; }
+}
+
+oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion grafana" | tr -d '"')"
+latest="$(curl https://api.github.com/repos/grafana/grafana/releases/latest | jq '.tag_name' -r | tr -d 'v')"
+
+targetVersion="${1:-$latest}"
+if [ ! "${oldVersion}" = "${targetVersion}" ]; then
+  update-source-version grafana "${targetVersion#v}"
+  oldStaticHash="$(nix-instantiate --eval -A grafana.srcStatic.outputHash | tr -d '"')"
+  newStaticHash="$(nix-prefetch-url "https://dl.grafana.com/oss/release/grafana-${targetVersion#v}.linux-amd64.tar.gz")"
+  replaceHash "$oldStaticHash" "$newStaticHash"
+  goHash="$(nix-instantiate --eval -A grafana.vendorSha256 | tr -d '"')"
+  emptyHash="$(nix-instantiate --eval -A lib.fakeSha256 | tr -d '"')"
+  replaceHash "$goHash" "$emptyHash"
+  replaceHash "$emptyHash" "$(extractVendorHash "$goHash")"
+  nix-build -A grafana
+else
+  echo "grafana is already up-to-date"
+fi