From be7e7b086da4dea9c48250ccaca94f7cac936107 Mon Sep 17 00:00:00 2001 From: Alexander Tomokhov Date: Tue, 12 Dec 2023 12:04:21 +0400 Subject: [PATCH] nixos-rebuild related API queries --- flake.nix | 5 ++++ nixos-rebuild.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100755 nixos-rebuild.sh diff --git a/flake.nix b/flake.nix index 368c272..f03c5c2 100644 --- a/flake.nix +++ b/flake.nix @@ -60,6 +60,11 @@ script = ./enable-service.sh; env-vars = [ ]; } + { + name = "nixos-rebuild"; + script = ./nixos-rebuild.sh; + env-vars = [ ]; + } ]); }; } diff --git a/nixos-rebuild.sh b/nixos-rebuild.sh new file mode 100755 index 0000000..7c6be09 --- /dev/null +++ b/nixos-rebuild.sh @@ -0,0 +1,66 @@ +#! /usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail +shopt -s inherit_errexit + +: "${DOMAIN:?specify domain name}" +readonly REBUILD_OP="${1:?nixos-rebuild related API operation not given error, e.g. Rebuild, Rollback, Upgrade}" +readonly AUTH_HEADER="Authorization: Bearer ${API_TOKEN:?not set error}" +QUERY=$(cat << EOF +mutation RebuildSwitch { + __typename + system { + runSystem${REBUILD_OP} { + code + success + } + } +} +EOF +) + +# shellcheck disable=SC2086,SC2116 +REQUEST=$(cat << EOF +{ + "query": "$(echo $QUERY)", + "variables": null +} +EOF +) +readonly REQUEST + +EXPECTED_RESPONSE=$(cat << EOF +{ + "data": { + "__typename": "Mutation", + "system": { + "runSystemRebuild": { + "code": 200, + "success": true + } + } + } +} +EOF +) + +received_response="$(curl --show-error -s "https://api.$DOMAIN/graphql" \ +--compressed \ +-H 'Content-Type: application/json' \ +--data-raw "$REQUEST" -k -H "$AUTH_HEADER")" + +sorted_response="$(jq --sort-keys <<<"$received_response")" \ +|| { echo "error"; echo "$received_response"; echo -e "QUERY:\n$QUERY"; exit 1; } + +jq <<<"$sorted_response" + +if diff -w -u --color <(printf "%s\n" "$EXPECTED_RESPONSE") <(printf "%s\n" "$sorted_response") 2>/dev/null +then + echo -e "\e[1;32mOK" +else + echo -e "\e[1;31mFAIL: response does not match!" + jd -color <(printf "%s\n" "$EXPECTED_RESPONSE") <(printf "%s" "$sorted_response") + exit 1 +fi