Luke Granger-Brown
57725ef3ec
git-subtree-dir: third_party/nixpkgs git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
46 lines
2.1 KiB
Bash
Executable file
46 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p nix curl jq common-updater-scripts
|
|
|
|
set -eu -o pipefail
|
|
|
|
cd "${0%/*}"/../../../../../
|
|
|
|
|
|
readonly plugin_name="$1"
|
|
readonly api_response="$(curl --silent "https://grafana.com/api/plugins/${plugin_name}")"
|
|
readonly latest_version="$(echo "$api_response" | jq -r .version)"
|
|
|
|
update() {
|
|
local system="${2:+--system=$2}"
|
|
local pkg="$(echo "$api_response" | jq -e .packages.\""$1"\")"
|
|
if echo "$pkg" | jq -er .sha256 > /dev/null; then
|
|
local hash="$(echo "$pkg" | jq -er .sha256)"
|
|
else
|
|
# Some packages only have an md5 hash. Download the file for hash computation.
|
|
local urlPath="$(echo "$pkg" | jq -er .downloadUrl)"
|
|
local hash="$(nix-prefetch-url --type sha256 --name "$plugin_name" "https://grafana.com$urlPath")"
|
|
fi
|
|
hash="$(nix --extra-experimental-features nix-command hash to-sri --type sha256 "$hash")"
|
|
# Set version number to a random number first to force update to happen.
|
|
#
|
|
# `update-source-version` will exit early if it considers the version number to be the same.
|
|
# However we have already downloaded the file and computed the hash, so it makes sense to set
|
|
# the newly computed information unconditionally.
|
|
#
|
|
# As an example of a workflow that was made more complicated than strictly necessary is my own
|
|
# attempts to improve this script where I spent multiple hours investigating why the update
|
|
# script would refuse to update a hash that I intentionally malformed (in hopes to test the
|
|
# operation of this script.)
|
|
update-source-version $system "grafanaPlugins.${plugin_name}" $RANDOM "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
|
|
update-source-version $system "grafanaPlugins.${plugin_name}" "$latest_version" "$hash"
|
|
}
|
|
|
|
if echo "$api_response" | jq -e .packages.any > /dev/null; then
|
|
# the package contains an "any" package, so there should be only one zipHash.
|
|
update "any"
|
|
else
|
|
update "linux-amd64" "x86_64-linux"
|
|
update "linux-arm64" "aarch64-linux"
|
|
update "darwin-amd64" "x86_64-darwin"
|
|
update "darwin-arm64" "aarch64-darwin"
|
|
fi
|