Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1#!/usr/bin/env nix-shell 2#!nix-shell -I nixpkgs=./. -i bash -p curl jq gawk libossp_uuid libuuid libxml2 nix 3# shellcheck shell=bash 4 5set -euo pipefail 6 7DEFAULT_NIX="$(realpath "./pkgs/by-name/go/google-chrome/package.nix")" 8 9get_version_info() { 10 local platform="$1" 11 local start_pattern="$2" 12 local end_pattern="$3" 13 14 local url="https://versionhistory.googleapis.com/v1/chrome/platforms/${platform}/channels/stable/versions/all/releases?filter=endtime=none,fraction%3E=0.5&order_by=version%20desc" 15 local response 16 local version 17 local current_version 18 19 response="$(curl --silent --fail "$url")" 20 version="$(jq ".releases[0].version" --raw-output <<< "$response")" 21 current_version="$(awk "/${start_pattern}/,/${end_pattern}/ { if (\$0 ~ /version = \"/) { match(\$0, /version = \"([^\"]+)\"/, arr); print arr[1]; exit } }" "$DEFAULT_NIX")" 22 23 echo "$version" "$current_version" 24} 25 26update_linux() { 27 local version_info 28 local version 29 local current_version 30 local new_hash 31 local new_sri_hash 32 33 read -ra version_info <<< "$(get_version_info "linux" "linux = stdenvNoCC.mkDerivation" "});")" 34 version="${version_info[0]}" 35 current_version="${version_info[1]}" 36 37 if [[ "$current_version" = "$version" ]]; then 38 echo "[Nix] Linux google chrome: same version" 39 return 0 40 fi 41 42 local download_url="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${version}-1_amd64.deb" 43 new_hash="$(nix-prefetch-url "$download_url" 2>/dev/null)" 44 new_sri_hash="$(nix --extra-experimental-features nix-command hash to-sri --type sha256 "$new_hash")" 45 46 sed -i "/^ linux = stdenvNoCC.mkDerivation/,/^ });/s/version = \".*\"/version = \"$version\"/" "$DEFAULT_NIX" 47 sed -i "/^ linux = stdenvNoCC.mkDerivation/,/^ });/s|hash = \".*\"|hash = \"$new_sri_hash\"|" "$DEFAULT_NIX" 48 49 echo "[Nix] Linux google-chrome: $current_version -> $version with hash $new_hash" 50} 51 52update_darwin() { 53 local version_info 54 local version 55 local current_version 56 local uuid 57 local url 58 local pkg 59 local manifest_version 60 local new_hash 61 local new_sri_hash 62 63 read -ra version_info <<< "$(get_version_info "mac" "darwin = stdenvNoCC.mkDerivation" "});")" 64 version="${version_info[0]}" 65 current_version="${version_info[1]}" 66 uuid="$(uuidgen)" 67 68 if [[ "$current_version" = "$version" ]]; then 69 echo "[Nix] Darwin google chrome: same version" 70 exit 0 71 fi 72 73 local post_data="<?xml version='1.0' encoding='UTF-8'?> 74 <request protocol='3.0' version='1.3.23.9' shell_version='1.3.21.103' ismachine='1' 75 sessionid='$uuid' installsource='ondemandcheckforupdate' 76 requestid='$uuid' dedup='cr'> 77 <hw sse='1' sse2='1' sse3='1' ssse3='1' sse41='1' sse42='1' avx='1' physmemory='12582912' /> 78 <os platform='mac' version='$version' arch='arm64'/> 79 <app appid='com.google.Chrome' ap=' ' version=' ' nextversion=' ' lang=' ' brand='GGLS' client=' '> 80 <updatecheck/> 81 </app> 82 </request>" 83 84 response="$(curl -s -X POST -H "Content-Type: text/xml" --data "$post_data" "https://tools.google.com/service/update2")" 85 url="$(echo "$response" | xmllint --xpath "string(//url[contains(@codebase, 'http://dl.google.com/release2')]/@codebase)" -)" 86 pkg="$(echo "$response" | xmllint --xpath "string(//package/@name)" -)" 87 manifest_version="$(echo "$response" | xmllint --xpath "string(//manifest/@version)" -)" 88 89 local download_url="$url$pkg" 90 new_hash="$(nix --extra-experimental-features nix-command hash to-sri --type sha256 "$(nix-prefetch-url "$download_url" 2>/dev/null)")" 91 new_sri_hash="$(nix --extra-experimental-features nix-command hash to-sri --type sha256 "$new_hash")" 92 93 sed -i "/^ darwin = stdenvNoCC.mkDerivation/,/^ });/s/version = \".*\"/version = \"$manifest_version\"/" "$DEFAULT_NIX" 94 sed -i "/^ darwin = stdenvNoCC.mkDerivation/,/^ });/s|hash = \".*\"|hash = \"$new_sri_hash\"|" "$DEFAULT_NIX" 95 sed -i "/^ darwin = stdenvNoCC.mkDerivation/,/^ });/s|url = \".*\"|url = \"$download_url\"|" "$DEFAULT_NIX" 96 97 echo "[Nix] Darwin google-chrome: $current_version -> $manifest_version with hash $new_hash" 98} 99 100update_linux 101update_darwin