This file provides context for AI coding agents (Claude Code, GitHub Copilot, Cursor, etc.) working in this repository.
- Product family: Mobile (Android)
- Primary language(s): Kotlin
- Build system: Gradle
- Test framework: JUnit (Android Unit Tests, Instrumented Tests)
- CI system: GitHub Actions
owncloudApp/- Main Android application moduleowncloudDomain/- Domain layer (business logic, use cases)owncloudData/- Data layer (repositories, data sources)owncloudComLibrary/- Common library moduleowncloudTestUtil/- Test utilitiesbuild.gradle- Root Gradle build filegradle/- Gradle wrapperconfig/- Build configurationfastlane/- Fastlane deployment configurationdoc/- Developer documentationSETUP.md- Development environment setupCONTRIBUTING.md- Contribution guidelinesCHANGELOG.md- Release history
- Branching: master
- Commit messages: DCO sign-off required (
git commit -s) - Code style: Detekt (Kotlin linter), EditorConfig
- PR process: Open a PR against master. All CI checks must pass.
# Build
./gradlew assembleDebug
# Test (unit)
./gradlew testDebugUnitTest
# Test (instrumented)
./gradlew connectedDebugAndroidTest
# Lint
./gradlew detekt- All code contributions must be compatible with the GPL-2.0 license
- Do not introduce new copyleft-licensed dependencies (GPL, AGPL, LGPL, MPL) without explicit discussion in an issue first. This is especially important for repos migrating to Apache 2.0.
- Do not introduce new dependencies without discussion in an issue first
- Minimum SDK version is 24 (Android 7.0), target SDK is 35
- The app uses a clean architecture pattern with domain/data/presentation layers
- Only use actions owned by
owncloud, created by GitHub (actions/*), verified on the GitHub Marketplace, or verified by the ownCloud Maintainers. - Pin all actions to their full commit SHA (not tags):
uses: actions/checkout@<SHA> # vX.Y.Z - Never introduce actions from unverified third parties.
- Dependabot is configured for automated dependency updates.
- Review and merge Dependabot PRs as part of regular maintenance.
- Do not introduce new dependencies without discussion in an issue first.
- Rebase policy: Always rebase; never create merge commits. Use
git pull --rebaseandgit rebasebefore pushing. - Signed commits: All commits must be PGP/GPG signed (
git commit -S -s). - DCO sign-off: Every commit needs a
Signed-off-byline (git commit -s). - Conventional Commits & Squash Merge: Use the Conventional Commits format where the repository enforces it. Many repos use squash merge, where the PR title becomes the commit message on the default branch — apply Conventional Commits format to PR titles as well. A reusable GitHub Actions workflow enforces this.
- Match existing code style
- Do not refactor unrelated code in the same PR
- Write tests for new functionality
- Keep PRs focused and atomic
- Follow the existing multi-module architecture (app/domain/data separation)
- Use Kotlin idioms consistent with the existing codebase