record.sh

2.0 KB · raw

1#!/bin/sh2# Records Kepr 2's §22.4 compatibility routes from kepr.uk, GET only, into this folder:3# <slug>.headers (status line plus the headers the contract tests read) and <slug>.body.4# Downloads are recorded without their body (`--max-filesize 1` stops before the file).5# Re-run before cutover (§28) and review the diff.6set -eu7out=$(cd "$(dirname "$0")" && pwd)8tmp=$(mktemp -d)9rec() { # path [nobody]10  slug=$(printf '%s' "$1" | sed 's#^/##; s#/#_#g')11  # A fresh file each time, so a failed request can never leave the previous one's headers behind.12  raw=$(mktemp "$tmp/headers.XXXXXX")13  code=014  if [ "${2:-}" = nobody ]; then15    curl -sS -D "$raw" -o /dev/null --max-filesize 1 "https://kepr.uk$1" || code=$?16    # 63 is curl stopping at --max-filesize, the expected end of a download once its headers are in.17    [ "$code" = 63 ] && code=018  else19    curl -sS -D "$raw" -o "$out/$slug.body" "https://kepr.uk$1" || code=$?20  fi21  if [ "$code" != 0 ] || [ ! -s "$raw" ]; then22    echo "$1: request failed (curl exit $code)" >&223    exit 124  fi25  { head -1 "$raw" | tr -d '\r'; grep -i -E '^(content-type|access-control-allow-origin|location|cache-control|content-disposition):' "$raw" | tr -d '\r' || true; } > "$out/$slug.headers"26  echo "$1 -> $(head -1 "$out/$slug.headers")"27}28for r in haven kepr koh nina peach-android; do29  rec /api/$r/releases/latest30  rec /api/$r/releases/history31  rec /$r/update-info32  rec /$r/meta33  rec /$r/releases/latest34  rec /$r/releases/latest/version.txt35  v=$(cat "$out/${r}_releases_latest_version.txt.body")36  rec /$r/releases/$v/checksums.txt37  p=$(sed 's/.*"platforms":{"\([^"]*\)".*/\1/' "$out/api_${r}_releases_latest.body")38  rec /$r/releases/$v/$p nobody39  rec /$r/releases/$v/$r-$p nobody40done41rec /api/koh/releases/latest42for p in linux-x86_64 macos-aarch64; do rec /api/koh/releases/2.1.0/$p nobody; done43rec /api/koh/releases/2.1.16/linux-x86_6444rec /api/peach-relay/releases/latest45rec /api/peach-relay/releases/history46rec /peach-relay/meta47rec /peach-relay/update-info48rec /api/nowhere/releases/latest