mirror of
https://github.com/containers/podman.git
synced 2025-05-20 00:27:03 +08:00

A conditional in `version-check` bypasses the test for PRs. However, it appears it was intended to execute during the daily cirrus-cron runs. However, the cron-job it references (`nightly`) doesn't exist. This is causing the test to run for every merge into `main`, and never run for `main` branch cirrus-cron job. Fix the name so the test **ONLY** runs for the `main` branch cron-job. Also, since the test is currently failing, update the docs as per the output instructions. Signed-off-by: Chris Evich <cevich@redhat.com>
118 lines
3.0 KiB
Bash
Executable File
118 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
|
|
}
|
|
|
|
if [[ -n "$CIRRUS_CI" ]]; then
|
|
|
|
# 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 [[ "$CIRRUS_CRON" != "main" ]]; then
|
|
warn "Only meaningful in CI when CIRRUS_CRON=main (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
|