CI/CD & Release Pipeline
Relevant source files
The following files were used as context for generating this wiki page:
The Ownkey Keyboard project utilizes a structured CI/CD and release pipeline primarily driven by GitHub Actions and automated scripts. The pipeline ensures that both the Android phone application and the Wear OS companion IME are consistently built, versioned, and prepared for distribution. This system automates the transition from code contribution to deployable artifacts while maintaining traceability through explicit versioning and SHA identifiers.
Sources: README.md:104-118, AGENTS.md:27-31
Build System Architecture
The project is built using Gradle, with version management centralized in a Version Catalog (libs.versions.toml). This allows for consistent dependency management across the app, wear, and lib modules.
Component Matrix
The pipeline handles three primary internal modules:
- app: The main Android IME and settings application.
- wear: The Wear OS companion IME.
- lib: Shared libraries containing Android, Compose, Kotlin, native, and Snygg UI/theme logic.
Sources: AGENTS.md:27-31, gradle/libs.versions.toml:1-55
Build Commands
Developers can locally replicate the pipeline's debug build process using standard Gradle wrappers.
# Build the main phone application debug APK
./gradlew :app:assembleDebug
# Full clean and build (recommended for manual builds)
./gradlew clean && ./gradlew assembleDebug
Sources: README.md:94-98, CONTRIBUTING.md:78-84
Release Pipeline Logic
The release pipeline, managed via the "Ownkey Android CI" GitHub Actions workflow, generates both testing (APK) and production (AAB) artifacts.
Artifact Generation Flow
The following diagram illustrates the automated flow when a release build is triggered:
The pipeline automatically generates versioned filenames including the tag (e.g., v0.6.0-alpha02) and the Git commit SHA for traceability.
Sources: README.md:104-118
Release Artifact Naming Convention
| Artifact Type | Component | Format Example |
|---|---|---|
| Debug APK | Phone | ownkey-phone-debug-v0.6.0-alpha02-<sha>.apk |
| Debug APK | Wear OS | ownkey-wear-debug-v0.6.0-alpha02-<sha>.apk |
| Release AAB | Phone | ownkey-phone-release-v0.6.0-alpha02-<sha>.aab |
| Release AAB | Wear OS | ownkey-wear-release-v0.6.0-alpha02-<sha>.aab |
Sources: README.md:111-118
Metadata & Distribution Management
The project uses automated scripts and the Fastlane directory structure to manage Play Store metadata and internal documentation updates.
README Automation
A specialized script, update-readme.sh, is used to automatically generate and inject "Obtainium" download links into the README.md based on JSON configuration tracks.
# internal logic for README updates
for file in "$OBTAINIUM_DIR"/*.json; do
track_name=$(basename "$file" .json)
# Generates URI-encoded redirect links for Obtainium
obtainium_links+="[obtainium_$track_name]: https://apps.obtainium.imranr.dev/..."
done
Sources: fastlane/update-readme.sh:10-20
App Metadata
Metadata for Android distribution is maintained in the fastlane/metadata/android/ directory, ensuring that store descriptions and change logs are synchronized with the automated release process.
Sources: AGENTS.md:30
CI Validation & Agent Workflows
The project incorporates the "Delano" runtime to manage project contracts and validation steps during the CI process.
Validation Sequence
Before closing a contribution or finalizing a build, the following sequence is expected to ensure project integrity:
The install-delano.sh script facilitates the setup of this validation environment by pulling specific adapter paths and common scripts into the local repository.
Sources: AGENTS.md:11-14, install-delano.sh:130-155
Conclusion
The Ownkey Keyboard CI/CD pipeline is designed for high traceability and cross-device support. By automating the creation of versioned APKs and AABs for both Phone and Wear OS modules, the project maintains a reliable delivery path for both testers and production users. The integration of Obtainium link generation and localized metadata management through Fastlane completes the pipeline from build to distribution.
Sources: README.md:104-118, AGENTS.md:27-31