Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(KFLUXBUGS-1278): make iib errors available to users #175

Merged
merged 1 commit into from
Sep 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
apiVersion: tekton.dev/v1beta1
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: t-add-fbc-fragment-to-index-image
labels:
app.kubernetes.io/version: "0.2.0"
app.kubernetes.io/version: "0.2.1"
annotations:
tekton.dev/pipelines.minVersion: "0.12.1"
tekton.dev/tags: release
Expand Down Expand Up @@ -62,6 +62,10 @@ spec:
description: Set the genericResult if FBC Fragment is Opt-In and should be published
- name: indexImageDigests
description: The digests for each arch for the manifest list of the index image
- name: iibLog
description: The link to the log from the IIB request
- name: exitCode
description: The exit code from the task
steps:
- name: s-add-fbc-fragment-to-index-image
image: >-
Expand Down Expand Up @@ -210,42 +214,45 @@ spec:
key: url
script: |
#!/usr/bin/env bash
TASKRUN="/tmp/$$.sh"
# shellcheck disable=SC2317 # shellcheck calls all the commands in the function unreachable
mmalina marked this conversation as resolved.
Show resolved Hide resolved
# because it is called via `timeout`
set -x

cat > ${TASKRUN} <<SH
#!/usr/bin/env bash
#
build_id=`jq -r ".id" $(results.jsonBuildInfo.path)`
state=""
while true; do
#
# fetching build information.
build_info=\$(/usr/bin/curl -s "\${IIB_SERVICE_URL}/builds/\${build_id}")
# get state from the build information.
state=\$(jq -r ".state" <<< \${build_info})
# remove the history as it breaks the results build up
jq -r 'del(.state_history)' <<< \${build_info} | jq -c . > $(results.jsonBuildInfo.path)
case \${state} in
"complete") break ;;
"failed") break ;;
*) echo -en "."; sleep 30; continue ;;
esac
done
echo
jq -cr '{ "state": .state, "state_reason": .state_reason }' $(results.jsonBuildInfo.path) | jq -Rc \
| tee $(results.buildState.path)
test \${state} = "complete" && exit 0 || exit 1
SH
watch_build_state() {
johnbieren marked this conversation as resolved.
Show resolved Hide resolved
build_id="$(jq -r ".id" "$(results.jsonBuildInfo.path)")"
state=""
while true; do
#
# fetching build information.
build_info=$(curl -s "${IIB_SERVICE_URL}/builds/${build_id}")
# get state from the build information.
state="$(jq -r ".state" <<< "${build_info}")"
# remove the history as it breaks the results build up
jq -r 'del(.state_history)' <<< "${build_info}" | jq -c . > "$(results.jsonBuildInfo.path)"
url="$(jq -r ".logs.url" <<< "${build_info}")"
echo IIB log url is: "${url}" > "$(results.iibLog.path)"
case ${state} in
"complete") break ;;
"failed") break ;;
*) echo -en "."; sleep 30; continue ;;
esac
done
echo
jq -cr '{ "state": .state, "state_reason": .state_reason }' "$(results.jsonBuildInfo.path)" | jq -Rc \
| tee "$(results.buildState.path)"
test "${state}" = "complete" && exit 0 || exit 1
}

chmod +x ${TASKRUN}
echo -en "waiting for build state to exit..."
# adding timeout here due to the Task timeout not accepting $(params.buildTimeoutSeconds)
# as parameter.
timeout $(params.buildTimeoutSeconds) ${TASKRUN}
export -f watch_build_state
timeout "$(params.buildTimeoutSeconds)" bash -c watch_build_state
BUILDEXIT=$?

# it should continue only if the IIB build status is complete
if [ ${BUILDEXIT} -eq 0 ]; then
echo -n 0 > "$(results.exitCode.path)"

# get the manifest digests
indexImageCopy=`cat $(results.jsonBuildInfo.path) | jq -cr .internal_index_image_copy`
Expand All @@ -260,17 +267,21 @@ spec:
echo -n $indexImageDigests > $(results.indexImageDigests.path)
if [ -z "${indexImageDigests}" ] ; then
echo "Index image produced is not multi-arch with a manifest list"
exit 1
echo -n 1 > "$(results.exitCode.path)"
fi
else
if [ ${BUILDEXIT} -eq 124 ]; then
echo "Timeout while waiting for the build to finish"
echo "Build timeout" < $(results.buildState.path)
exit $BUILDEXIT
else
exit $BUILDEXIT
fi
echo -n "" > "$(results.indexImageDigests.path)"
echo -n "$BUILDEXIT" > "$(results.exitCode.path)"
fi
# We don't put the log in a result because tekton results are too limited for what we can put
# to be useful, but still print it for debugging
curl -s "$(awk '{print $NF}' < "$(results.iibLog.path)")"

exit 0
volumes:
- name: service-account-secret
secret:
Expand Down
8 changes: 6 additions & 2 deletions internal-services/catalog/iib-pipeline.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
apiVersion: tekton.dev/v1beta1
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: iib
labels:
app.kubernetes.io/version: "0.2"
app.kubernetes.io/version: "0.3"
annotations:
tekton.dev/pipelines.minVersion: "0.12.1"
tekton.dev/tags: fbc
Expand Down Expand Up @@ -92,3 +92,7 @@ spec:
value: $(tasks.t-add-fbc-fragment-to-index-image.results.genericResult)
- name: indexImageDigests
value: $(tasks.t-add-fbc-fragment-to-index-image.results.indexImageDigests)
- name: iibLog
value: $(tasks.t-add-fbc-fragment-to-index-image.results.iibLog)
- name: exitCode
value: $(tasks.t-add-fbc-fragment-to-index-image.results.exitCode)