53 lines
1.7 KiB
Nix
53 lines
1.7 KiB
Nix
|
# Helper script to run a CRFO approval using depot-interventions.
|
||
|
#
|
||
|
# Use as 'crfo-approve $CL_ID $PATCHSET $REAL_USER $ON_BEHALF_OF'.
|
||
|
#
|
||
|
# Set credential in GERRIT_TOKEN envvar.
|
||
|
{ pkgs, ... }:
|
||
|
|
||
|
pkgs.writeShellScriptBin "crfo-approve" ''
|
||
|
set -ueo pipefail
|
||
|
|
||
|
if (($# != 4)) || [[ -z ''${GERRIT_TOKEN-} ]]; then
|
||
|
cat >&2 <<'EOF'
|
||
|
crfo-approve - Helper script to CRFO approve a TVL CL
|
||
|
|
||
|
Requires membership in depot-interventions to work.
|
||
|
|
||
|
Gerrit HTTP credential must be set in GERRIT_TOKEN envvar.
|
||
|
|
||
|
Usage:
|
||
|
crfo-approve $CL_ID $PATCHSET $REAL_USER $ON_BEHALF_OF
|
||
|
EOF
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
export PATH="${pkgs.lib.makeBinPath [ pkgs.httpie pkgs.jq ]}:''${PATH}"
|
||
|
|
||
|
readonly CL_ID="''${1}"
|
||
|
readonly PATCHSET="''${2}"
|
||
|
readonly REAL_USER="''${3}"
|
||
|
readonly TOKEN="''${GERRIT_TOKEN}"
|
||
|
readonly ON_BEHALF_OF="''${4}"
|
||
|
readonly URL="https://cl.tvl.fyi/a/changes/''${CL_ID}/revisions/''${PATCHSET}/review"
|
||
|
|
||
|
# First we need to find the account ID for the user
|
||
|
ACC_RESPONSE=$(http --check-status 'https://cl.tvl.fyi/accounts/' "q==name:''${ON_BEHALF_OF}" | tail -n +2)
|
||
|
ACC_LENGTH=$(echo "''${ACC_RESPONSE}" | jq 'length')
|
||
|
|
||
|
if [[ ''${ACC_LENGTH} -ne 1 ]]; then
|
||
|
echo "Did not find a unique account ID for ''${ON_BEHALF_OF}"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
ACC_ID=$(jq -n --argjson response "''${ACC_RESPONSE}" '$response[0]._account_id')
|
||
|
echo "using account ID ''${ACC_ID} for ''${ON_BEHALF_OF}"
|
||
|
|
||
|
http --check-status -a "''${REAL_USER}:''${TOKEN}" POST "''${URL}" \
|
||
|
message="CRFO on behalf of ''${ON_BEHALF_OF}" \
|
||
|
'labels[Code-Review]=+2' \
|
||
|
on_behalf_of="''${ACC_ID}" \
|
||
|
"add_to_attention_set[0][user]=''${ACC_ID}" \
|
||
|
"add_to_attention_set[0][reason]=CRFO approval through depot-interventions"
|
||
|
''
|