First stable release. Merging this bumps versionName to 1.0.0 and triggers the release pipeline (F-Droid, Codeberg, Play). **App** - CalDAV sync built in, with Agendula's own task store; OpenTasks / tasks.org stay available and can be copied over in Settings → Storage - repeating tasks, several reminders per task, lists managed in the app, iCalendar import/export, widget and Quick Settings tile - a list can be kept out of the smart lists (#18) and gets its own notification channel (#17) - duplicate a task with its subtasks (#16) - HTML descriptions shown as plain text (#15) - relative day words in reminder notifications (#14) - asks for exact-alarm access instead of claiming USE_EXACT_ALARM, and re-arms reminders when that access changes **Release plumbing** - floret-kit bumped to v0.4.0; the old pin was never pushed, so a clean clone couldn't check out the submodule. 0.4.0 drops CrashConfig.issueTitle (crash issues are always filed in English) - prebuilt .so files ship unstripped, so the build no longer depends on whether an NDK is installed; now checked by check_reproducible_release.sh - official F-Droid recipe in docs/fdroid-official/, to submit to fdroiddata once v1.0.0 is tagged - Google Play: fastlane uploads the AAB and every locale's What's New after the F-Droid release; a separate listing lane pushes text and graphics from the fastlane tree, which CI now checks against Play's limits - store listing: title "Agendula: Tasks" in every locale, icon, feature graphic, screenshots and 1.0.0 changelogs in en-US, en-GB, de-DE and pt-BR crash_report_issue_title is now unused but stays until Weblate removes the translated copies. Closes #14, closes #15, closes #16, closes #17, closes #18 Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de> Reviewed-on: https://codeberg.org/jlmakiola/agendula/pulls/20
55 lines
2.1 KiB
Bash
Executable File
55 lines
2.1 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=$(grep -oP 'versionName\s*=\s*"\K[^"]+' app/build.gradle.kts)
|
|
[ -n "$VERSION" ] || { echo "No versionName in app/build.gradle.kts" >&2; exit 1; }
|
|
MAJOR=${VERSION%%.*}; rest=${VERSION#*.}; MINOR=${rest%%.*}; PATCH=${rest##*.}
|
|
MAJOR=${MAJOR:-0}; MINOR=${MINOR:-0}; PATCH=${PATCH:-0}
|
|
VERSION_CODE=$(( MAJOR * 10000 + MINOR * 100 + PATCH ))
|
|
|
|
# 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
|