Build & Release Automation
Relevant source files
The following files were used as context for generating this wiki page:
Introduction
The FlowBell project utilizes a structured automation pipeline to manage the lifecycle of the Android application. This system encompasses automated versioning, changelog generation, and build processes to ensure consistent delivery of the notification bridge service. The automation strategy relies on GitHub Actions for continuous integration and the "release-please" utility for managing semantic versioning and release notes.
The primary goal of this automation is to remove manual intervention from the release process, ensuring that every change in the main branch is properly documented and tagged. This setup allows the project to maintain a detailed history of features, fixes, and improvements while providing ready-to-use artifacts for users.
Sources: README.md:275-280, CHANGELOG.md:1-5
Release Orchestration
FlowBell employs release-please to automate the creation of GitHub Releases and the maintenance of the project's versioning. This tool monitors the main branch for specific commit patterns to choreograph Pull Requests that bump versions and compile changelogs.
Release-Please Configuration
The configuration defines how the automation interacts with project files. It is set to a "simple" release type and specifically targets the Android build.gradle file to synchronize the versionName with the automated release version.
{
"packages": {
".": {
"release-type": "simple",
"changelog-path": "CHANGELOG.md",
"extra-files": [
{
"type": "regex",
"path": "app/build.gradle",
"pattern": "versionName = \"[^\"]+\"",
"replacement": "versionName = \"${version}\""
}
]
}
}
}
Sources: release-please-config.json:1-15, README.md:277-278
Automation Flow
The following diagram illustrates the automated release process triggered by merging code into the main branch.
The system ensures that a clean release APK is built and attached to the GitHub Release page whenever a new release is published.
Sources: README.md:275-280
Build Environment & Tools
The build system is built on Gradle (Kotlin DSL and Groovy) and targets the Android platform with specific environment requirements.
Core Build Requirements
| Component | Requirement |
|---|---|
| JDK | Version 21 (jvmTarget = "21") |
| Android SDK | Platform 35 |
| Build Tools | 35.0.0 |
| Gradle Wrapper | Distribution ~200 MB |
| Platform | Android 8.0 (API 26) to 15 (API 35) |
| Sources: AGENTS.md:12-16, README.md:162-167 |
Gradle Tasks
Standard tasks are used for building and verifying the application state.
| Task | Command | Description |
|---|---|---|
| Debug Build | ./gradlew assembleDebug | Generates a debug APK |
| Release Build | ./gradlew assembleRelease | Generates a release APK (Requires keystore) |
| Lint | ./gradlew lintDebug | Runs static analysis (known to have pre-existing errors) |
| Unit Tests | ./gradlew testDebugUnitTest | Executes tests (currently no source directories) |
| Sources: AGENTS.md:21-27, AGENTS.md:33-35 |
Versioning & Dependency Management
The project adheres to Semantic Versioning and manages dependencies via a Version Catalog (libs.versions.toml).
Version History Example
Changes are documented in CHANGELOG.md following the "Keep a Changelog" format. Recent versions include:
- 0.1.3: Debug module additions and UI framework adjustments.
- 0.1.2: Database schema migrations (9→10) and notification filter persistence.
- 0.1.1: Per-app filter management and documentation updates.
- 0.1.0: Initial release with full feature set.
Sources: CHANGELOG.md:7-60
Dependency Catalog Structure
The project uses gradle/libs.versions.toml to centralize library versions, facilitating automated dependency updates via ./gradlew dependencyUpdates.
| Library Group | Key Versions |
|---|---|
| Kotlin | 2.1.0 |
| Android Gradle Plugin | 8.8.0 |
| Compose BOM | 2024.12.01 |
| Room | 2.6.1 |
| Koin | 3.5.6 |
| Sources: gradle/libs.versions.toml:2-20, AGENTS.md:28 |
Conclusion
FlowBell's build and release automation creates a robust pipeline that bridges development and production. By integrating GitHub Actions with release-please and a centralized dependency catalog, the project ensures that Android releases are predictable, documented, and technically consistent across the development lifecycle.
Sources: README.md:275-280, AGENTS.md:31-35