makiolaj 881f6b1286 ci(release): port Agendula's 1.1.0 release pipeline, with betas
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}.
2026-10-06 19:14:11 +02:00

Clockula

A modern Material 3 Expressive clock app for Android.
Alarms, timers, stopwatch and world clock. Open standards, no account required.

CI Android 10+ Kotlin + Compose Material 3 Expressive MIT License

Clockula is the clock sibling to Calendula (calendar) and Agendula (tasks). The name follows theirs: clock, given Calendula's -ula ending. A Calendula flower head is botanically a cluster of many small florets, so the three apps are florets of one bloom — and they share one, floret-kit.

🚧 Early development. The spec is locked; the app is being built. See docs/ROADMAP.md for where it actually is.

The honest difference from its siblings

Calendula is a pure front-end over Android's CalendarContract. Agendula speaks the dmfs TaskContract. Both put a good interface on a standard someone else already maintains.

There is no open provider behind a clock. Alarms, timers and laps are Clockula's own data, so Clockula is the first app in the family to own its storage — by design, not as a fallback. What that commitment is replaced with is the first section of docs/PLAN.md, and it comes down to three things:

  • Clockula speaks Android's standard alarm contract. It implements android.provider.AlarmClock in full, so your assistant and your automation apps can set alarms and timers in it exactly as they would in any stock clock, and the system status bar and lock screen show its next alarm.
  • World clocks are IANA time zones, not a bespoke city list that goes stale.
  • Your data exports to a documented, versioned JSON file whenever you want it, because data you can't take with you isn't really yours.

Alarms that actually ring

An alarm app is only worth having if you can trust it, so Clockula treats that as the feature rather than the plumbing. Alarms are scheduled as real alarm clocks — doze-exempt, visible to the system — and re-resolved against your current time zone whenever anything moves underneath them, so DST and travel don't silently shift them.

When something on your device would stop an alarm ringing, Clockula tells you which setting it is and takes you there, instead of failing quietly at 7am.

Documentation

Start with docs/: PLAN.md is the spec and the reasoning, ROADMAP.md is the status, ARCHITECTURE.md is how the code is put together, and RELEASING.md is the release runbook.

Building

git clone --recurse-submodules https://codeberg.org/jlmakiola/clockula.git
cd clockula
./gradlew assembleDebug

floret-kit is a submodule built from source as a Gradle composite build, so --recurse-submodules is not optional. The included build needs to find the Android SDK on its own: either export ANDROID_HOME, or drop a sdk.dir=… line in a (gitignored) floret-kit/local.properties.

Licence

MIT — see LICENSE.

S
Description
A modern Material 3 Expressive clock app for Android — sibling to Calendula and Agendula. Alarms, timers, stopwatch, world clock.
Readme MIT
2.9 MiB
0 Stars 1 Watchers 0 Forks
Languages
Kotlin 99.1%
Shell 0.5%
Ruby 0.2%
Python 0.2%