Skip to content

Instantly share code, notes, and snippets.

@mawillcockson
Created March 19, 2021 23:44
Show Gist options
  • Select an option

  • Save mawillcockson/29f238f8a1832102cae89c5c704ba785 to your computer and use it in GitHub Desktop.

Select an option

Save mawillcockson/29f238f8a1832102cae89c5c704ba785 to your computer and use it in GitHub Desktop.
An attempt at timing the difference checksumming makes when downloading hugo
#!/bin/sh
set -eu
setup() {
GITHUB_WORKSPACE="$(mktemp -d)"
DOWNLOADS="$(mktemp -d)"
export GITHUB_WORKSPACE
export DOWNLOADS
eval "$(curl -fsSL 'https://api.github.com/repos/gohugoio/hugo/releases/latest' \
| jq --compact-output --raw-output '.assets |
(
map(select(.name | test("^hugo_extended_\\d+\\.\\d+\\.\\d+_Linux-64bit.tar.gz$")))[0]
| ["HUGO_FILENAME='"'"'" + .name + "'"'"'", "HUGO_URL='"'"'" + .browser_download_url + "'"'"'"]
)
+
(
map(select(.name | test("^hugo_\\d+\\.\\d+\\.\\d+_checksums.txt$")))[0]
| ["CHECKSUM_FILENAME='"'"'" + .name + "'"'"'", "CHECKSUM_URL='"'"'" + .browser_download_url + "'"'"'"]
)
| .[]')"
curl -fsSL "${CHECKSUM_URL}" --output "${DOWNLOADS}/${CHECKSUM_FILENAME}"
curl -fsSL "${HUGO_URL}" --output "${DOWNLOADS}/${HUGO_FILENAME}"
jq -n "
[
{
draft: false,
prerelease: false,
assets: [
{
name: \"${CHECKSUM_FILENAME}\",
browser_download_url: \"http://localhost:8080/${CHECKSUM_FILENAME}\"
},
{
name: \"${HUGO_FILENAME}\",
browser_download_url: \"http://localhost:8080/${HUGO_FILENAME}\"
}
]
}
]" > "${DOWNLOADS}/latest_release.json"
PYTHON_PID="$(python -m http.server -d "${DOWNLOADS}" 8080 > /dev/null 2>&1 & echo $!)"
export PYTHON_PID
START="$(date +%s)"
while ! curl -fsSL 'http://localhost:8080/latest_release.json' > /dev/null 2>&1 ; do
if [ "$(date +%s)" -gt "$((START + 3))" ]; then
echo "python didn't start"
exit 1
fi
done
}
cleanup() {
set +ex
kill -1 "${PYTHON_PID}"
rm -r "${GITHUB_WORKSPACE}" "${DOWNLOADS}"
}
trap cleanup EXIT HUP INT QUIT KILL
old() {
RELEASE_BINARY_URL="$(curl --fail \
--silent \
--show-error \
--location \
'http://localhost:8080/latest_release.json' \
| jq -r 'map(select(.draft == false and .prerelease == false))[0]["assets"] | map(select(.name | test("^hugo_extended_\\d+\\.\\d+\\.\\d+_Linux-64bit.tar.gz$"))) | .[0].browser_download_url')"
mkdir -p "${GITHUB_WORKSPACE}/hugo/"
curl --fail \
--silent \
--show-error \
--location \
"${RELEASE_BINARY_URL}" \
| tar -xzf - -C "${GITHUB_WORKSPACE}/hugo/"
}
new() {
HUGO_DIR="${GITHUB_WORKSPACE:-"$(pwd)"}/hugo"
mkdir -p "${HUGO_DIR}"
eval "$(curl --fail \
--silent \
--show-error \
--location \
--url 'http://localhost:8080/latest_release.json' \
| jq --compact-output --raw-output 'map(select(.draft == false and .prerelease == false))[0]["assets"] |
(
map(select(.name | test("^hugo_extended_\\d+\\.\\d+\\.\\d+_Linux-64bit.tar.gz$")))[0]
| ["HUGO_FILENAME='"'"'" + .name + "'"'"'", "HUGO_URL='"'"'" + .browser_download_url + "'"'"'"]
)
+
(
map(select(.name | test("^hugo_\\d+\\.\\d+\\.\\d+_checksums.txt$")))[0]
| ["CHECKSUM_FILENAME='"'"'" + .name + "'"'"'", "CHECKSUM_URL='"'"'" + .browser_download_url + "'"'"'"]
)
| .[]')"
curl --fail \
--silent \
--show-error \
--location \
--url "${CHECKSUM_URL}" \
--output "${HUGO_DIR}/${CHECKSUM_FILENAME}" &
CHECKSUM_PID=$!
curl --fail \
--silent \
--show-error \
--location \
--url "${HUGO_URL}" \
--output "${HUGO_DIR}/${HUGO_FILENAME}" &
HUGO_PID=$!
wait "${CHECKSUM_PID}" "${HUGO_PID}"
(cd "${HUGO_DIR}" && sha256sum --check --ignore-missing --status "${CHECKSUM_FILENAME}")
tar -xzf "${HUGO_DIR}/${HUGO_FILENAME}" --overwrite -C "${HUGO_DIR}"
rm "${HUGO_DIR}/LICENSE" "${HUGO_DIR}/README.md" "${HUGO_DIR}/${HUGO_FILENAME}" "${HUGO_DIR}/${CHECKSUM_FILENAME}"
}
setup
for i in $(seq 10); do
times
old
times
"${GITHUB_WORKSPACE}/hugo/hugo" version 2>&1 >/dev/null
rm -r "${GITHUB_WORKSPACE}/hugo/"
times
new
times
"${GITHUB_WORKSPACE}/hugo/hugo" version 2>&1 >/dev/null
rm -r "${GITHUB_WORKSPACE}/hugo/"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment