Brings the workflows, scripts and fastlane setup up to Agendula's
v1.1.0-beta.1 state:
- beta.yaml: a release/** branch carrying X.Y.Z-beta.N publishes a
Gitea + Codeberg pre-release with the signed APK. Never F-Droid or Play.
- scripts/version_info.sh derives versionCode from versionName for every
workflow and CI step. Clockula has no shipped 1.0.x codes, so it uses one
scheme: X*1000000 + Y*10000 + Z*100 + (beta N, or 99 for stable).
- CI checks the committed versionCode, blocks a beta from reaching main,
enforces the 500-char What's New and validates the store listing.
- Shared publish_gitea_release.sh / publish_codeberg_release.sh /
release_notes.sh replace the inline steps in release.yaml.
- Renovate also runs on every push to main to rebase conflicted PRs.
- jniLibs keepDebugSymbols, which the reproducibility guard now requires.
Fixes a bug present in Agendula too: the Codeberg tag lookups used
/git/refs/tags/{tag}, which matches by prefix, so v1.0.0 would have
"existed" as soon as v1.0.0-beta.1 did. That would have refused every
later beta and skipped the stable release. Both now use /tags/{tag}.
59 lines
2.2 KiB
Bash
Executable File
59 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Ensure the current version's "What's New" exists at
|
|
# fastlane/metadata/android/en-US/changelogs/<code>.txt, which both F-Droid and
|
|
# Google Play publish.
|
|
#
|
|
# A COMMITTED file wins and is never rewritten: it is a hand-written summary
|
|
# under 500 characters (Play's cap), not a copy of the CHANGELOG.md section.
|
|
# Only when the file is missing is it generated from that section, so the
|
|
# self-hosted release pipeline always has something to publish. The other
|
|
# locales' changelogs are written by hand and never touched here.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.." # repo root
|
|
|
|
VERSION=$(bash scripts/version_info.sh version)
|
|
VERSION_CODE=$(bash scripts/version_info.sh version_code)
|
|
|
|
# Betas only ship to Codeberg, whose notes come from CHANGELOG.md. A What's New
|
|
# file for one would sit in the tree F-Droid and Play read, so none is wanted.
|
|
if [ "$(bash scripts/version_info.sh channel)" = beta ]; then
|
|
echo "Beta $VERSION: no store What's New (betas only ship to Codeberg)."
|
|
exit 0
|
|
fi
|
|
|
|
# Play rejects a longer "What's New" and F-Droid truncates it in-client.
|
|
MAX_CHARS=${MAX_CHARS:-500}
|
|
|
|
CL_DIR="fastlane/metadata/android/en-US/changelogs"
|
|
mkdir -p "$CL_DIR"
|
|
OUT="$CL_DIR/${VERSION_CODE}.txt"
|
|
|
|
if [ -s "$OUT" ]; then
|
|
ACTION="Kept"
|
|
else
|
|
ACTION="Generated"
|
|
awk -v ver="$VERSION" '
|
|
$0 ~ "^## \\[" ver "\\]" { flag = 1; next }
|
|
/^## \[/ { flag = 0 }
|
|
flag' CHANGELOG.md > "$OUT"
|
|
# Trim leading blank lines (same as the pipeline did).
|
|
sed -i -e '/./,$!d' "$OUT"
|
|
[ -s "$OUT" ] || echo "See CHANGELOG.md for $VERSION." > "$OUT"
|
|
fi
|
|
|
|
# Counted like check_store_listing.py: surrounding whitespace doesn't count.
|
|
CHARS=$(python3 -c 'import sys; print(len(open(sys.argv[1], encoding="utf-8").read().strip()))' "$OUT")
|
|
echo "$ACTION $OUT (version $VERSION, code $VERSION_CODE, ${CHARS} chars)"
|
|
|
|
# Hard limit, enforced in CI (.forgejo/workflows/ci.yaml) and before a release.
|
|
if [ "$CHARS" -gt "$MAX_CHARS" ]; then
|
|
cat >&2 <<MSG
|
|
ERROR: $OUT is $CHARS characters, over the $MAX_CHARS-character limit.
|
|
|
|
F-Droid truncates the in-client changelog, so this one would be cut off
|
|
mid-sentence and Play would reject the upload. Replace it with a hand-written
|
|
summary under $MAX_CHARS characters and commit it.
|
|
MSG
|
|
exit 1
|
|
fi
|