nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1#!/usr/bin/env nix-shell
2#!nix-shell -i bash -p nix coreutils curl jq nix-prefetch-git prefetch-npm-deps
3
4set -euo pipefail
5
6OWNER=prometheus
7REPO=prometheus
8
9# Current version.
10LATEST_NIXPKGS_VERSION=$(nix eval --raw .#prometheus.version 2>/dev/null)
11UPDATE_NIX_OLD_VERSION=${UPDATE_NIX_OLD_VERSION:-$LATEST_NIXPKGS_VERSION}
12
13TARGET_TAG="$(curl -L -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} "https://api.github.com/repos/$OWNER/$REPO/releases/latest" | jq -r '.tag_name')"
14TARGET_VERSION="$(echo "$TARGET_TAG" | sed -e 's/^v//')"
15
16if [[ "$UPDATE_NIX_OLD_VERSION" == "$TARGET_VERSION" ]]; then
17 # prometheus is up-to-date
18 if [[ -n "$UPDATE_NIX_ATTR_PATH" ]]; then
19 echo "[{}]";
20 fi
21
22 exit 0
23fi
24
25extractVendorHash() {
26 original="${1?original hash missing}"
27 result="$(nix-build -A prometheus.goModules 2>&1 | tail -n3 | grep 'got:' | cut -d: -f2- | xargs echo || true)"
28 [ -z "$result" ] && { echo "$original"; } || { echo "$result"; }
29}
30
31TMP=$(mktemp -d)
32trap 'rm -rf "$TMP"' EXIT
33
34NIXPKGS_PROMETHEUS_PATH=$(cd $(dirname ${BASH_SOURCE[0]}); pwd -P)/
35SOURCE_NIX="$NIXPKGS_PROMETHEUS_PATH/source.nix"
36
37PREFETCH_JSON=$TMP/prefetch.json
38nix-prefetch-git --rev "$TARGET_TAG" --url "https://github.com/$OWNER/$REPO" > "$PREFETCH_JSON"
39PREFETCH_HASH="$(jq '.hash' -r < "$PREFETCH_JSON")"
40PREFETCH_PATH="$(jq '.path' -r < "$PREFETCH_JSON")"
41NPM_DEPS_HASH="$(prefetch-npm-deps "$PREFETCH_PATH/web/ui/package-lock.json")"
42
43FAKE_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
44
45cat > "$SOURCE_NIX" <<-EOF
46{
47 version = "$TARGET_VERSION";
48 hash = "$PREFETCH_HASH";
49 npmDepsHash = "$NPM_DEPS_HASH";
50 vendorHash = "$FAKE_HASH";
51}
52EOF
53
54GO_HASH="$(nix-instantiate --eval -A prometheus.vendorHash | tr -d '"')"
55VENDOR_HASH=$(extractVendorHash "$GO_HASH")
56
57cat > "$SOURCE_NIX" <<-EOF
58{
59 version = "$TARGET_VERSION";
60 hash = "$PREFETCH_HASH";
61 npmDepsHash = "$NPM_DEPS_HASH";
62 vendorHash = "$VENDOR_HASH";
63}
64EOF
65
66if [[ -z "$UPDATE_NIX_ATTR_PATH" ]]; then
67 exit 0
68fi
69
70cat <<-EOF
71[{
72 "attrPath": "$UPDATE_NIX_ATTR_PATH",
73 "oldVersion": "$UPDATE_NIX_OLD_VERSION",
74 "newVersion": "$TARGET_VERSION",
75 "files": ["$SOURCE_NIX"]
76}]
77EOF