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
 |