96 lines
2.9 KiB
Bash
Executable File
96 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
|
|
|
|
set -e
|
|
set -o pipefail
|
|
|
|
usage() {
|
|
cat << EOF
|
|
Downloads CI packaging artifacts and optionally uploads them to a release.
|
|
|
|
Usage: $0 --commit COMMIT --upload
|
|
|
|
This script downloads Cirrus CI packaging artifacts for the given COMMIT from
|
|
all completed tasks and stores them in a temporary directory. The packaging
|
|
artifacts will be renamed to include te name of the job which produced them.
|
|
The output directory will be reported.
|
|
|
|
With '--upload' artifacts are uploaded to the release page and we expect a valid
|
|
Github token with 'repo' scope passed on stdin. In this case COMMIT should
|
|
refer to a tag for which a release already exists.
|
|
EOF
|
|
}
|
|
|
|
if [ "$#" == 0 ]; then
|
|
usage;
|
|
exit 1
|
|
fi
|
|
|
|
while true; do
|
|
case "$1" in
|
|
--commit) COMMIT="$2"; shift; shift;;
|
|
--upload) UPLOAD=1; shift;;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
REPO=zeek/spicy
|
|
COMMIT=${COMMIT?Expected commit passed with '--commit COMMIT'}
|
|
|
|
while read -t 0 -r GITHUB_TOKEN; do
|
|
break
|
|
done < /dev/stdin
|
|
|
|
OUTPUT_DIR=binary_artifacts
|
|
mkdir ${OUTPUT_DIR} && cd "${OUTPUT_DIR}"
|
|
|
|
echo "Storing artifacts in ${OUTPUT_DIR}"
|
|
|
|
mkdir packages
|
|
curl -sSL https://api.github.com/repos/"${REPO}"/commits/"${COMMIT}"/check-runs'?per_page=100' \
|
|
| jq -r '.check_runs[] | select(.app.name=="Cirrus CI") | select(.name | test("^(docker|macos|freebsd)")) | select(.conclusion=="success") | ["https://api.cirrus-ci.com/v1/artifact/task/" + .external_id + "/packages.zip", .name] | @tsv' \
|
|
| while IFS=$'\t' read -r URI NAME; do
|
|
echo "Fetching artifacts for CI job ${NAME}"
|
|
curl -sSL "$URI" -o packages.zip
|
|
unzip packages.zip 1> /dev/null
|
|
|
|
# Testing with `-e` only works if there is a single glob match. We know
|
|
# this is the case here.
|
|
# shellcheck disable=SC2144
|
|
if [ -e build/spicy*.tar.gz ]; then
|
|
mv build/spicy*.tar.gz "packages/spicy_${NAME}.tar.gz"
|
|
elif [ -e spicy*.deb ]; then
|
|
mv spicy*.deb "packages/spicy_${NAME}.deb"
|
|
elif [ -e spicy*.rpm ]; then
|
|
mv spicy*.rpm "packages/spicy_${NAME}.rpm"
|
|
fi
|
|
|
|
rm -rf build spicy* packages.zip
|
|
done
|
|
|
|
mv packages/* .
|
|
rmdir packages
|
|
|
|
if [ -n "${UPLOAD}" ]; then
|
|
if [[ "${COMMIT}" != v* ]]; then
|
|
echo "Skipping upload since ${COMMIT} does not look like a release tag"
|
|
exit 1
|
|
fi
|
|
|
|
UPLOAD_URL=$(curl -sSL https://api.github.com/repos/"${REPO}"/releases | jq -r '.[] | select(.tag_name=="'"${COMMIT}"'") | .upload_url')
|
|
|
|
if [[ -z "${UPLOAD_URL}" ]]; then
|
|
echo "Not updating release artifacts since release ${COMMIT} does not exist"
|
|
exit 0
|
|
fi
|
|
|
|
for ARTIFACT in *.tar.gz; do
|
|
curl -sSL \
|
|
-X POST --data-binary @./"${ARTIFACT}" \
|
|
--header "Content-Type: application/octet-stream" \
|
|
--header "Authorization:token ${GITHUB_TOKEN}" \
|
|
"${UPLOAD_URL}?name=${ARTIFACT}"
|
|
done
|
|
fi
|