Merge branch 'ship/release-notes-gate' into 'main'
An APK no longer ships without a word about what changed in it See merge request paulhitt/flamenet-messenger-android!70
This commit was merged in pull request #97.
This commit is contained in:
@@ -26,6 +26,71 @@ code="$(sed -n "s/.*versionCode='\([0-9]*\)'.*/\1/p" <<<"$badging" | head -1)"
|
||||
name="$(sed -n "s/.*versionName='\([^']*\)'.*/\1/p" <<<"$badging" | head -1)"
|
||||
[ -n "$code" ] && [ -n "$name" ] || { echo "could not read version from $apk" >&2; exit 1; }
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 🔴 **A build does not ship without its release notes.**
|
||||
#
|
||||
# The gate lives here, on the manifest, because the manifest is the step that
|
||||
# cannot be skipped — it is what the in-app updater reads, so an APK published
|
||||
# without it offers nobody an update. A reminder in a checklist would be
|
||||
# skipped on exactly the busy evening the notes matter most.
|
||||
#
|
||||
# ⚠️ It matches on `versionName` read out of the APK above, never on a number
|
||||
# typed here, for the same reason the manifest does: the two cannot disagree.
|
||||
#
|
||||
# The changelog lives in the relay repository because that is what serves the
|
||||
# page, and the check lives THERE too — see Scripts/covers-android.py. Parsing
|
||||
# the JSON here would leave a second copy of the schema to drift.
|
||||
if [ "${FN_SKIP_RELEASE_NOTES:-}" = "1" ]; then
|
||||
# Loud, and on stderr: a skipped gate that printed nothing would be a gate
|
||||
# nobody remembered turning off.
|
||||
echo "⚠️ FN_SKIP_RELEASE_NOTES=1 — writing a manifest for $name with no" >&2
|
||||
echo " release notes. Nothing on /releases will mention this build." >&2
|
||||
else
|
||||
relay_dir="${FN_RELAY_DIR:-$(cd "$(dirname "$0")/../.." && pwd)/flamenet-relay}"
|
||||
checker="$relay_dir/Scripts/covers-android.py"
|
||||
if [ ! -f "$checker" ]; then
|
||||
cat >&2 <<MSG
|
||||
No release-notes checker at:
|
||||
$checker
|
||||
|
||||
That file lives in the flamenet-relay repository, which serves the /releases
|
||||
page. Point FN_RELAY_DIR at your checkout of it, or set
|
||||
FN_SKIP_RELEASE_NOTES=1 to publish $name with no notes.
|
||||
MSG
|
||||
exit 1
|
||||
fi
|
||||
if ! python3 "$checker" "$name"; then
|
||||
cat >&2 <<MSG
|
||||
|
||||
Nothing on the /releases page mentions Android $name, so this build would ship
|
||||
without a word to anyone about what changed in it.
|
||||
|
||||
Add a release to:
|
||||
$relay_dir/Resources/releases.json
|
||||
|
||||
The newest release goes FIRST in the list, and it looks like this — write the
|
||||
notes for somebody holding a phone, and put anything only an operator cares
|
||||
about in "selfHosting" at the end:
|
||||
|
||||
{
|
||||
"date": "$(date +%Y-%m-%d)",
|
||||
"platforms": [{ "name": "android", "version": "$name" }],
|
||||
"headline": "One sentence, or leave it out.",
|
||||
"changes": [
|
||||
{ "kind": "fixed", "text": "What a person will notice, in their words." }
|
||||
]
|
||||
}
|
||||
|
||||
"kind" is "new", "changed" or "fixed". Add an { "name": "ios", "version": … }
|
||||
or { "name": "relay" } entry alongside it when the same release touched those
|
||||
too — one release, every platform it landed on.
|
||||
|
||||
Then deploy the relay so the page and the APK go out together.
|
||||
MSG
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
sha="$(shasum -a 256 "$apk" | cut -d' ' -f1)"
|
||||
|
||||
# ⚠️ No `url` field, deliberately. The client builds the download URL from the
|
||||
|
||||
Reference in New Issue
Block a user