2024-08-03 21:33:54 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
|
2024-08-03 21:39:00 +01:00
|
|
|
check_dependencies() {
|
|
|
|
local commands=("docker" "sha1sum" "curl" "mktemp" "date" "awk")
|
|
|
|
for cmd in "${commands[@]}"; do
|
|
|
|
if ! command -v "$cmd" &> /dev/null; then
|
|
|
|
echo "Error: $cmd is not available." >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2024-08-03 21:33:54 +01:00
|
|
|
snapshot() {
|
|
|
|
docker run --rm -v /tmp:/tmp git.gmem.ca/arch/servo:latest "$1" -z -y2 -o"$2" --resolution=1920x1080
|
|
|
|
}
|
|
|
|
|
|
|
|
hash() {
|
2024-08-03 21:40:29 +01:00
|
|
|
local checksum=$(md5sum "$1" | awk '{print $1}')
|
2024-08-03 21:33:54 +01:00
|
|
|
echo "$checksum"
|
|
|
|
}
|
|
|
|
|
|
|
|
update_servo_image() {
|
|
|
|
docker pull git.gmem.ca/arch/servo:latest -q > /dev/null
|
|
|
|
}
|
|
|
|
|
|
|
|
post() {
|
|
|
|
curl -X POST -H "Authorization: ${1}" \
|
|
|
|
-F date="$(date -I)" \
|
|
|
|
-F hash="${2}" \
|
|
|
|
-F file="@${3}" \
|
|
|
|
"${4}" -s > /dev/null
|
|
|
|
}
|
|
|
|
|
2024-08-03 21:39:00 +01:00
|
|
|
check_dependencies
|
2024-08-03 21:33:54 +01:00
|
|
|
|
|
|
|
# Default value for dry-run flag
|
|
|
|
DRYRUN='false'
|
|
|
|
|
|
|
|
# Parse command-line options
|
|
|
|
while getopts "d-:" opt; do
|
|
|
|
case $opt in
|
|
|
|
d)
|
|
|
|
DRYRUN='true'
|
|
|
|
;;
|
|
|
|
-)
|
|
|
|
case "${OPTARG}" in
|
|
|
|
dry-run)
|
|
|
|
DRYRUN='true'
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Invalid option --${OPTARG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
\?)
|
|
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
# Shift the parsed options
|
|
|
|
shift $((OPTIND-1))
|
|
|
|
|
|
|
|
# Ensure positional parameters are provided
|
|
|
|
if [ $# -lt 2 ]; then
|
|
|
|
echo "Usage: $0 [--dry-run] <url> <api endpoint>"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
url=$1
|
|
|
|
api=$2
|
|
|
|
|
|
|
|
tmpfile="$(mktemp -u)"
|
|
|
|
echo "Updating local git.gmem.ca/arch/servo:latest"
|
|
|
|
update_servo_image
|
|
|
|
echo "Snapshotting $1"
|
|
|
|
snapshot "$url" "$tmpfile"
|
|
|
|
checksum=$(hash "$tmpfile")
|
|
|
|
|
|
|
|
if [ $DRYRUN = 'false' ]; then
|
|
|
|
echo "Sending ${tmpfile} to API"
|
|
|
|
post "$SERVO_API_TOKEN" "$checksum" "$tmpfile" "$api"
|
|
|
|
else
|
|
|
|
echo "Dry run specified, not sending $tmpfile to API"
|
|
|
|
echo "File hash: $checksum"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Done!"
|