Something went wrong. Try again.
Infrastructure-as-code for running lance.blue
Something went wrong. Try again.
Shell
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137#!/usr/bin/env bash# Checks the parts of scripts/lib/post.sh that are awkward to get right and# expensive to get wrong: which commits a pair of release ids means, and how a# changelog that does not fit in a post is broken into a thread. Run it by# hand; it touches nothing outside a temporary directory and talks to no PDS.## bash scripts/lib/post.test.shset -euo pipefail
source "$(dirname "$0")/post.sh"
failures=0check() { local what="$1" want="$2" got="$3" if [ "$want" = "$got" ]; then echo "ok - $what" else echo "FAIL - $what" echo " want: $(printf '%q' "$want")" echo " got: $(printf '%q' "$got")" failures=$((failures + 1)) fi}
# A commit id is the last dash-separated field of a release id, whatever the# build put in front of it.check "plain release id" "a7b1f59e8e3b" "$(release_commit main-a7b1f59e8e3b)"check "arena's longer id" "b812ae202e32" \ "$(release_commit mm0.51.0-sur26.4.7-main-b812ae202e32)"check "not a commit" "1" "$(release_commit v1.2.3 >/dev/null || echo 1)"check "too short" "1" "$(release_commit main-abc >/dev/null || echo 1)"
check "api is headquarters" "headquarters" "$(repo_for api)"check "an unknown key has no repo" "1" "$(repo_for proxy >/dev/null || echo 1)"
# A fixture repository, so the changelog is read the way a real one is.work="$(mktemp -d)"trap 'rm -rf "$work"' EXITgit init -q "$work/headquarters"git -C "$work/headquarters" config user.email test@example.invalidgit -C "$work/headquarters" config user.name testfor subject in "feat(hangar): one" "feat(camo): two" "fix(camo): three"; do git -C "$work/headquarters" commit -q --allow-empty -m "$subject"doneshas=()while IFS= read -r sha; do shas+=("$sha"); done < <( git -C "$work/headquarters" log --reverse --format=%h)
changes="$(printf 'site\tmain-%s\tmain-%s\n' \ "$(git -C "$work/headquarters" rev-parse --short=12 "${shas[0]}")" \ "$(git -C "$work/headquarters" rev-parse --short=12 "${shas[2]}")")"
log="$(build_changelog "$work" "$changes")"check "the header counts the range" "site: 2 commits in headquarters" \ "$(printf '%s\n' "$log" | head -1)"check "newest commit first" "${shas[2]} fix(camo): three" \ "$(printf '%s\n' "$log" | sed -n 2p)"
# api and site move together on one headquarters build, and that is one range# under both names rather than the same commits twice.both="$(printf 'api\tmain-%s\tmain-%s\nsite\tmain-%s\tmain-%s\n' \ "$(git -C "$work/headquarters" rev-parse --short=12 "${shas[0]}")" \ "$(git -C "$work/headquarters" rev-parse --short=12 "${shas[2]}")" \ "$(git -C "$work/headquarters" rev-parse --short=12 "${shas[0]}")" \ "$(git -C "$work/headquarters" rev-parse --short=12 "${shas[2]}")")"check "one range under both names" "api, site: 2 commits in headquarters" \ "$(build_changelog "$work" "$both" | head -1)"
check "a missing checkout is not fatal" "" \ "$(build_changelog "$work/nowhere" "$changes")"
# A short deploy is one post and no thread.build_post "site: main-aaaaaaaaaaaa -> main-bbbbbbbbbbbb" "$log" ""check "the changelog rides in the first post" "1" \ "$(printf '%s' "$ROOT_TEXT" | grep -c 'fix(camo): three')"check "and there is no thread" "0" "${#CHUNKS[@]}"
# One repo alone can exceed a post, which is what the thread is for.long="$( echo "site: 40 commits in headquarters" for i in $(seq 1 40); do echo "abc123$i feat(hangar): a subject long enough to be realistic $i" done)"build_post "site: main-aaaaaaaaaaaa -> main-bbbbbbbbbbbb" "$long" ""check "the first post holds the summary alone" "Deployed lance.blue
site: main-aaaaaaaaaaaa -> main-bbbbbbbbbbbb" "$ROOT_TEXT"[ "${#CHUNKS[@]}" -gt 1 ] && echo "ok - the changelog became a thread of ${#CHUNKS[@]}" || { echo "FAIL - no thread"; failures=$((failures + 1)); }
for i in "${!CHUNKS[@]}"; do fits "${CHUNKS[$i]}" || { echo "FAIL - post $i is over the limit"; failures=$((failures + 1)); }doneecho "ok - every post fits"
check "the thread says what it is reading" "site: 40 commits in headquarters" \ "$(printf '%s\n' "${CHUNKS[0]}" | head -1)"check "and says so again after the break" "site (cont.)" \ "$(printf '%s\n' "${CHUNKS[1]}" | head -1)"check "no commit is split across posts" "40" \ "$(printf '%s\n' "${CHUNKS[@]}" | grep -c '^abc123')"
# A runaway range is summarised rather than posted.huge="$( echo "site: 900 commits in headquarters" for i in $(seq 1 900); do echo "abc123$i feat(hangar): a subject long enough to be realistic $i" done)"build_post "site: main-aaaaaaaaaaaa -> main-bbbbbbbbbbbb" "$huge" ""check "a thread is capped" "$POST_MAX" "${#CHUNKS[@]}"check "and says what it left out" "1" \ "$(printf '%s\n' "${CHUNKS[-1]}" | grep -c '^\.\.\. and .* more posts')"
# The og: tags the site actually serves, entity and all.page='<meta property="og:title" content="lance.blue"><meta property="og:description" content="Salvage & scrap">'check "a tag is read" "lance.blue" "$(og_meta "$page" og:title)"check "entities are decoded" "Salvage & scrap" "$(og_meta "$page" og:description)"check "a missing tag is empty" "" "$(og_meta "$page" og:image)"
check "the stamp is a query" "https://lance.blue/?d=20260824" \ "$(stamped_link https://lance.blue/ 20260824)"check "and joins an existing one" "https://lance.blue/?x=1&d=20260824" \ "$(stamped_link 'https://lance.blue/?x=1' 20260824)"
echoif [ "$failures" -eq 0 ]; then echo "all good"else echo "$failures failed" exit 1fi