81 lines
2.7 KiB
Markdown
81 lines
2.7 KiB
Markdown
# Building from source
|
|
|
|
Calendula builds with the standard Android Gradle toolchain — no extra setup
|
|
beyond the SDK, a JDK, and the submodule.
|
|
|
|
## Clone
|
|
|
|
```bash
|
|
git clone --recurse-submodules https://codeberg.org/jlmakiola/calendula.git
|
|
```
|
|
|
|
Calendula depends on **[floret-kit](https://codeberg.org/jlmakiola/floret-kit)**,
|
|
the shared Material 3 Expressive kit, as a git submodule wired in as a Gradle
|
|
composite build (`includeBuild("floret-kit")` in `settings.gradle.kts`) — it is
|
|
compiled from source, not resolved from a repository. A clone without the
|
|
submodule fails to configure. For an existing clone:
|
|
|
|
```bash
|
|
git submodule update --init --recursive
|
|
```
|
|
|
|
## Requirements
|
|
|
|
- **JDK 17** — not newer; the Android Gradle Plugin requires exactly 17. If your
|
|
default JDK differs, set `JAVA_HOME` explicitly.
|
|
- **Android SDK** — platform **37** (`compileSdk`) and **build-tools 36.0.0**.
|
|
`minSdk` is 29, `targetSdk` 36.
|
|
|
|
The SDK is located via `ANDROID_HOME` (or `ANDROID_SDK_ROOT`), or via a
|
|
gitignored `local.properties` with `sdk.dir`. If you use `local.properties`, note
|
|
that the composite build needs **its own** copy at `floret-kit/local.properties`;
|
|
setting `ANDROID_HOME` covers both builds at once and is the simpler route.
|
|
|
|
The Gradle wrapper is checked in, so you don't need a system Gradle.
|
|
|
|
## Common tasks
|
|
|
|
```bash
|
|
./gradlew assembleDebug # debug APK → app/build/outputs/apk/debug/
|
|
./gradlew test # JVM unit tests (JUnit 5 + Truth + Turbine)
|
|
./gradlew lint # Android lint
|
|
```
|
|
|
|
A single test class, or a pattern:
|
|
|
|
```bash
|
|
./gradlew testDebugUnitTest --tests "de.jeanlucmakiola.calendula.domain.SimpleRecurrenceTest"
|
|
./gradlew testDebugUnitTest --tests "*SimpleRecurrence*"
|
|
```
|
|
|
|
Translation-key invariants (stale and orphaned keys are fatal; missing ones are
|
|
not) are checked outside Gradle:
|
|
|
|
```bash
|
|
python3 scripts/check_translations.py
|
|
```
|
|
|
|
## What CI runs
|
|
|
|
`.forgejo/workflows/ci.yaml` reports a single `CI` check per pull request on
|
|
Codeberg: the reproducible-release guard, then `lintDebug`,
|
|
`testDebugUnitTest`, `assembleDebug` and a Trivy filesystem scan. Pull requests
|
|
that touch only docs, F-Droid metadata or the licence skip the Android build and
|
|
still report green.
|
|
|
|
## Release builds
|
|
|
|
Release signing and the publishing pipeline are documented separately in
|
|
[RELEASING.md](RELEASING.md). To smoke-test a release candidate locally, the
|
|
`releaseTest` build type is an R8-shrunk twin of `release`, debug-signed with its
|
|
own `applicationId` suffix so it installs alongside the real app:
|
|
|
|
```bash
|
|
scripts/verify-release.sh
|
|
```
|
|
|
|
## Contributing
|
|
|
|
See [`../CONTRIBUTING.md`](../CONTRIBUTING.md) for the issue-first workflow,
|
|
which branch to target, and the architectural rules a change is reviewed against.
|