mirror of
https://github.com/getsolus/packages.git
synced 2025-04-25 20:30:37 +03:00

**Summary** Make use of the new json output from the build page in order to obtain more reliable results. Additionally, get the tag from the package.yml stored in the latest commit instead potentially tagging from any unstaged changes. Lastly, take this opportunity to cleanup the script a little.
127 lines
4.8 KiB
Bash
Executable file
127 lines
4.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Script to determine whether a published tag has completed on the build server and gives you a notification whether it has completed or failed.
|
|
# Additionally, if a package successfully builds it will then check if it gets successfully indexed into the repo.
|
|
|
|
# Check requirements before starting
|
|
REQUIREMENTS="curl unxz notify-send paplay jq"
|
|
for i in $REQUIREMENTS; do
|
|
if ! which $i &> /dev/null; then
|
|
echo "Missing requirement: $i. Install it to continue."
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if [[ ! -z "${DISABLE_BUILD_SUCCESS_NOTIFY}" ]]; then
|
|
# For rebuild-template-script.sh
|
|
echo "Notification and sound ping for build success disabled due to DISABLE_BUILD_SUCCESS_NOTIFY being set."
|
|
fi
|
|
|
|
if [ -f "package.yml" ]; then
|
|
# Read the file from the latest commit in directory. Not from any potential unstaged changes
|
|
SPECFILEREF=$(git show $(git rev-list -1 HEAD .):./package.yml > /tmp/tmp.yml)
|
|
TAG=$($(git rev-parse --show-toplevel)/common/Scripts/gettag.py /tmp/tmp.yml)
|
|
rm /tmp/tmp.yml
|
|
elif [ -f "pspec.xml" ]; then
|
|
# Read the file from the latest commit in directory. Not from any potential unstaged changes
|
|
SPECFILEREF=$(git show $(git rev-list -1 HEAD .):./pspec.xml > /tmp/tmp.xml)
|
|
TAG=$($(git rev-parse --show-toplevel)/common/Scripts/gettag.py /tmp/tmp.xml)
|
|
rm /tmp/tmp.xml
|
|
else
|
|
echo "No valid package.yml or pspec.xml file found"
|
|
exit 1
|
|
fi
|
|
|
|
BUILDSERVER_JSON_URL="https://build.getsol.us/builds.json"
|
|
JSONPAGE="/tmp/builds.json"
|
|
|
|
# Download the page
|
|
curl -sSL $BUILDSERVER_JSON_URL -o $JSONPAGE
|
|
|
|
# Check it's actually been published first.
|
|
if [[ ! $(jq '.[] | select(.tag == $ARGS.positional[0])' "${JSONPAGE}" --args "${TAG}") ]] ; then
|
|
echo "${TAG} not found on build queue, has it been published?"
|
|
exit 1
|
|
fi
|
|
|
|
# Get the latest build-id for the $TAG
|
|
BUILDID=$(jq '.[] | select(.tag == $ARGS.positional[0]) | .id' "${JSONPAGE}" --args "${TAG}" | grep -o '[0-9]*' | sort -nr | head -1)
|
|
echo "Build ID: ${BUILDID} | Tag: ${TAG}"
|
|
|
|
# Look for build-ok from the build id
|
|
while [[ ! $(jq '.[] | select(.tag == $ARGS.positional[0]) | .status' "${JSONPAGE}" --args "${TAG}" | grep "OK") ]]; do
|
|
|
|
# Don't DoS the server
|
|
sleep 20
|
|
|
|
# Download new build page if-modified-since (-z)
|
|
curl -sSL -z $JSONPAGE $BUILDSERVER_JSON_URL -o $JSONPAGE
|
|
|
|
# Check if the build has failed
|
|
if [[ $(jq '.[] | select(.tag == $ARGS.positional[0]) | .status' "${JSONPAGE}" --args "${TAG}" | grep "FAILED") ]] ; then
|
|
echo "Failed on the build server!"
|
|
notify-send -u critical "${TAG} failed on the build server!" -t 0
|
|
paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "Build succeeded on the buildserver! Waiting for it to be indexed..."
|
|
if [ -f "${JSONPAGE}" ]; then rm ${JSONPAGE}; fi
|
|
|
|
### Now that it's built ensure we find it indexed into the repo.
|
|
|
|
# Setup for index check
|
|
INDEX_SHA_URL="https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz.sha1sum"
|
|
INDEX_XZ_URL="https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz"
|
|
INDEX_SHA=$(curl -s $INDEX_SHA_URL)
|
|
INDEX_XML="/tmp/unstable-index.xml"
|
|
curl -s $INDEX_XZ_URL -o ${INDEX_XML}.xz
|
|
unxz ${INDEX_XML}.xz -f
|
|
|
|
# Downloads and extracts the new index if the sha sum has changed.
|
|
update_index_if_changed() {
|
|
NEW_INDEX_SHA=$(curl -s $INDEX_SHA_URL)
|
|
|
|
# New sha, grab the new index
|
|
if [[ $NEW_INDEX_SHA != $INDEX_SHA ]]; then
|
|
INDEX_SHA=$NEW_INDEX_SHA
|
|
echo "index sha: ${INDEX_SHA}"
|
|
rm ${INDEX_XML}
|
|
curl -s $INDEX_XZ_URL -o ${INDEX_XML}.xz
|
|
unxz ${INDEX_XML}.xz -f
|
|
# Same sha, do nothing
|
|
elif [[ $NEW_INDEX_SHA = $INDEX_SHA ]]; then
|
|
echo "index sha: ${INDEX_SHA}"
|
|
else
|
|
echo "Unknown error occured."
|
|
if [ -f "${INDEX_XML}" ]; then rm ${INDEX_XML}; fi
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Look for the tag in the index
|
|
# FIXME: some packages like libreoffice do not output a eopkg file matching the tag
|
|
while [[ $(grep ${TAG} < ${INDEX_XML} | wc -l) -lt 1 ]] ; do
|
|
var=$((var+1))
|
|
# Wait up to 1m:30s (90 / (sleep) 5 = 18) before bailing
|
|
if [[ $var == 18 ]]; then
|
|
echo "Successfully built but hasn't been found in the index yet, please manually check."
|
|
notify-send -u low "${TAG} successfully built but hasen't been found in the index yet, please manually check." -t 0
|
|
paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga
|
|
if [ -f "${INDEX_XML}" ]; then rm ${INDEX_XML}; fi
|
|
exit 1
|
|
fi
|
|
sleep 5
|
|
# Check for new index
|
|
update_index_if_changed
|
|
done
|
|
|
|
# Successfully built and indexed, we're happy bunnies.
|
|
echo "Successfully indexed into the repo!"
|
|
if [[ -z "${DISABLE_BUILD_SUCCESS_NOTIFY}" ]]; then
|
|
notify-send "${TAG} indexed into the repo!" -t 0
|
|
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
|
|
fi
|
|
|
|
if [ -f "${INDEX_XML}" ]; then rm ${INDEX_XML}; fi
|