From fe7e0a294bdf3895bde52a7a07f54d05310ac03f Mon Sep 17 00:00:00 2001
From: Kai Lueke <kailuke@microsoft.com>
Date: Tue, 16 Apr 2024 23:08:36 +0900
Subject: [PATCH] upload_package: Improve error handling

The get_package_id function was called with "if" which disabled set -e
and thus continued after resty returned an error. The resty function
itself doesn't want to be called with set -e and thus we have to wrap
the get_package_id call to use set -e while we can explictly react on
resty errors which disables set -e. So one time we should not use
"if"/"||" and one time we should. While at it, remove the tempfile
creation which resulted in many entries that weren't cleaned up and
which were confusing because resty also creates some and one doesn't
know which is which when debugging.
---
 upload_package | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/upload_package b/upload_package
index 4a05789..9c89285 100755
--- a/upload_package
+++ b/upload_package
@@ -32,16 +32,17 @@ COREOS_APP_ID="e96281a6-d1af-4bde-9a0a-97b76e56dc57"
 	-H "Accept: application/json" -H "Content-Type: application/json"
 
 function get_package_id() {
-	local tmpfile="$(mktemp)"
+	local output
 	local package_id
+	local r
 
-	GET /apps/"${COREOS_APP_ID}"/packages >& ${tmpfile}
-	if jq -e 'has("packages")' ${tmpfile} > /dev/null; then
-		package_id=$(cat ${tmpfile} | jq '.packages' | jq '.[] | select(.version=="'${VERSION}'" and .arch=='${ARCH_ID}').id')
+	# Use || here to disable "set -e" as resty does not like it
+	GET /apps/"${COREOS_APP_ID}"/packages >&1 || return "$?"
+	if jq -e 'has("packages")' <(echo "${output}") > /dev/null; then
+		package_id=$(echo "${output}" | jq '.packages' | jq '.[] | select(.version=="'${VERSION}'" and .arch=='${ARCH_ID}').id')
 	else
-		package_id=$(cat ${tmpfile} | jq '.[] | select(.version=="'${VERSION}'" and .arch=='${ARCH_ID}').id')
+		package_id=$(echo "${output}" | jq '.[] | select(.version=="'${VERSION}'" and .arch=='${ARCH_ID}').id')
 	fi
-	rm -f ${tmpfile}
 
 	echo ${package_id}
 }
@@ -88,7 +89,14 @@ else
   exit 1
 fi
 
-if ! PACKAGE_ID=$(get_package_id); then
+set +e
+PACKAGE_ID=$(
+set -e
+get_package_id
+)
+r="$?"
+set -e
+if ! [ "$r" -eq 0 ]; then
 	echo "Failed to get metadata from Nebraska."
 	echo "Please make sure that you have configured a valid GITHUB_TOKEN."
 	exit 1
@@ -106,6 +114,7 @@ for EXTRA_FILE in "${EXTRA_FILES[@]}"; do
 done
 EMBED_EXTRA_JOINED=$(IFS=, ; echo "${EMBED_EXTRA[*]}")
 if [ -z "${PACKAGE_ID}" ]; then
+    # Using 'if POST' here disables set -e as resty expects
     if ! PACKAGE_JSON=$(POST /apps/"${COREOS_APP_ID}"/packages " \
         {
             \"application_id\": \"${COREOS_APP_ID}\",