mirror of
https://github.com/containers/podman.git
synced 2025-05-19 08:07:10 +08:00

Intended to be run from nightly Cirrus cron job. 1) Queries github for highest-sorting (not necessarily "latest") tag 2) Checks that the Windows MSI exists, fails if not 3) Cross-checks markdown files to ensure they have up-to-date links When run interactively, it will auto-update the .md files to show and link to the latest version. This makes it easy for anyone to then submit an update PR. And, it turns out that MSI is obsolete, the new thing is EXE. Update the tutorials to reflect that. Signed-off-by: Ed Santiago <santiago@redhat.com>
116 lines
3.0 KiB
Bash
Executable File
116 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# docs/version-check - cross-check that doc pages link to latest version
|
|
#
|
|
# As of 2022-11-10 this is only useful for Windows, but I think it'd be
|
|
# nice to be able to auto-update more pages with up-to-date links. If
|
|
# we do that, there are some exe assumptions that need to be cleaned up.
|
|
#
|
|
ME=$(basename $0)
|
|
|
|
URLBASE="https://github.com/containers/podman"
|
|
|
|
docfiles=(
|
|
docs/tutorials/mac_win_client.md
|
|
docs/tutorials/podman-for-windows.md
|
|
)
|
|
|
|
set -eo pipefail
|
|
|
|
function warn() {
|
|
echo "$ME: $*" >&2
|
|
}
|
|
|
|
# Setup check: exit gracefully unless we're in the desired environment
|
|
if [[ -n "$CIRRUS_PR" ]]; then
|
|
warn "we don't run on PRs"
|
|
exit 0
|
|
fi
|
|
|
|
if [[ -n "$CIRRUS_CRON" ]]; then
|
|
if [[ "$CIRRUS_CRON" != "nightly" ]]; then
|
|
warn "Only meaningful when CIRRUS_CRON=nightly (it is '$CIRRUS_CRON')"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# No sense running on release branches
|
|
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
|
if [[ "$current_branch" != "main" ]]; then
|
|
warn "only meaningful on 'main' (current branch is '$current_branch')"
|
|
if [[ ! -t 0 ]]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Okay. Fetch the highest-sorting tag. THIS MAY NOT BE THE SAME AS THE NEWEST!
|
|
LATEST=$(git ls-remote --tags --refs --sort="v:refname" "${URLBASE}.git" \
|
|
| sed 's/.*\///' \
|
|
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
|
|
| tail -n1)
|
|
|
|
echo LATEST=$LATEST
|
|
|
|
# The "#v" thing strips leading "v", because filename is numbers only
|
|
exe="${URLBASE}/releases/download/${LATEST}/podman-${LATEST#v}-setup.exe"
|
|
|
|
# EXE must exist. The convoluted {}||: is to handle errors gracefully
|
|
rc=
|
|
{
|
|
found=$(curl --head --silent -o /dev/null --write-out '%{http_code}' $exe)
|
|
rc=$?
|
|
} || :
|
|
|
|
if [[ $rc -ne 0 ]]; then
|
|
warn "FATAL: curl failed, rc=$rc, on $exe"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $found = 404 ]]; then
|
|
warn "FATAL: Windows EXE missing: $exe"
|
|
exit 1
|
|
fi
|
|
|
|
# Expect 200 or 3xx; anything else is an error
|
|
if [[ ! $found =~ ^[23] ]]; then
|
|
warn "FATAL: Windows EXE: HTTP code $found on $exe"
|
|
exit 1
|
|
fi
|
|
|
|
# Cross-check all doc files for an up-to-date "latest version is" line.
|
|
fail=0
|
|
as_of='^As of .* the latest version is'
|
|
for md in ${docfiles[*]}; do
|
|
as_of_match=$(grep -E "$as_of" $md)
|
|
if [[ -z "$as_of_match" ]]; then
|
|
warn "$md does not have an 'As of ... the latest version is' line"
|
|
fail=1
|
|
continue
|
|
fi
|
|
|
|
md_latest=$(sed -ne 's;^.* version is \[\(.*\)\](.*;\1;' <<<"$as_of_match")
|
|
if [[ -n "$md_latest" ]]; then
|
|
warn "$md: No version found in '$as_of_match'"
|
|
fail=1
|
|
continue
|
|
fi
|
|
|
|
if [[ "$md_latest" != "$LATEST" ]]; then
|
|
warn "$md: needs updating."
|
|
# Running interactively? Do it.
|
|
if [[ -t 0 ]]; then
|
|
today=$(date --iso-8601=date)
|
|
sed -i "s;$as_of.*\$;As of $today the latest version is \[$LATEST\]\($exe\).;" $md
|
|
else
|
|
warn "Please run this script in an interactive shell, and I'll fix it."
|
|
fail=1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [[ $fail -ne 0 ]] && [[ -t 0 ]]; then
|
|
git status --untracked=no
|
|
fi
|
|
|
|
exit $fail
|