{"id":19146564,"url":"https://github.com/gini/gini-mobile-android","last_synced_at":"2025-05-07T02:04:48.600Z","repository":{"id":38080214,"uuid":"411687516","full_name":"gini/gini-mobile-android","owner":"gini","description":"Monorepo for Gini Android SDKs and Libraries","archived":false,"fork":false,"pushed_at":"2025-05-06T10:31:43.000Z","size":137625,"stargazers_count":1,"open_issues_count":13,"forks_count":1,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-07T02:04:22.297Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-09-29T13:34:31.000Z","updated_at":"2025-05-05T15:32:28.000Z","dependencies_parsed_at":"2022-07-12T10:22:13.657Z","dependency_job_id":"4fda4927-c483-4cd5-9bdc-322b56e04b26","html_url":"https://github.com/gini/gini-mobile-android","commit_stats":null,"previous_names":[],"tags_count":339,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gini","download_url":"https://codeload.github.com/gini/gini-mobile-android/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252798855,"owners_count":21805887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T07:44:53.966Z","updated_at":"2025-05-07T02:04:48.577Z","avatar_url":"https://github.com/gini.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Monorepo for Gini Android SDKs and Libraries\n\nThe monorepo contains a multi-module gradle project. Each SDK and library has a top-level project module containing sub-modules for each of its main components. You can find all used modules in [settings.gradle.kts](settings.gradle.kts).\n\nThe main components include a primary sub-module which contains the main SDK or library code. Other main components are the example apps or separately released extensions (for example the default networking implementation for the Capture SDK).\n\nIn the following we will refer to the top-level project modules simply as projects.\n\n# Dependency Management\n\nDependencies between our SDKs and libraries are set as project dependencies and are thus always resolved locally during development. This allows easy development of cross-cutting features.\n\nExternal dependencies are managed using [gradle's version catalogs](https://docs.gradle.org/current/userguide/platforms.html). Shared versions are declared in [gradle/libs.versions.toml](gradle/libs.versions.toml) and are accessed through generated accessors on the `libs` extension.\n\n# Versioning\n\nEach SDK, library and example app have their own version which is set in their releasable sub-modules' `gradle.properties` file. In case of\napps this also contains the `versionCode`.\n\n# Documentation\n\nWe provide two types of documentation: reference documentation and integration guides.\n\nThe reference documentation is part of the source code (kdoc or javadoc) and is compiled to a static website using [Dokka](https://github.com/Kotlin/dokka) for both java and kotlin source.\n\n## How to build the documentation\n\nThe reference documentation can be built using fastlane with the following command:\n\n```\n$ bundle exec fastlane build_documentation project_id:\u003cproject-id\u003e module_id:\u003cmodule-id\u003e\n```\n\nWhere `\u003cproject-id\u003e` is the name of the project folder (e.g., `capture-sdk` or `bank-api-library`) and `\u003cmodule-id\u003e` is the name of the sub-module in the project folder (e.g., `sdk` or `default-network`).\n\nThe built documentation can be then found under `\u003cproject-id\u003e/\u003cmodule-id\u003e/build/docs`. The `dokka` subfolder contains the static website for the reference documentation and the `html` subfolder contains the static website for the guides.\n\nFor example the following command builds the reference documentation and guides for Capture SDK:\n\n```\n$ bundle exec fastlane build_documentation project_id:capture-sdk module_id:sdk\n```\n\nThe following commands open the reference documentation and the guides in the browser:\n\n```\n$ open capture-sdk/sdk/build/docs/dokka/index.html\n$ open capture-sdk/sdk/build/docs/html/index.html\n```\n\n### Build the reference documentation using Gradle\n\nThe reference documentation can be built using Gradle with the following command:\n\n```\n$ ./gradlew \u003cproject-id\u003e:\u003cmodule-id\u003e:dokkaHtmlSiblingCollector\n```\n\nWhere `\u003cproject-id\u003e` is the name of the project folder (e.g., `capture-sdk` or `bank-api-library`) and `\u003cmodule-id\u003e` is the name of the sub-module in the project folder (e.g., `sdk` or `default-network`).\n\nThe built documentation can be then found under `\u003cproject-id\u003e/\u003cmodule-id\u003e/build/docs/dokka`.\n\nFor example this command builds the reference documentation for the Capture SDK:\n\n```\n$ ./gradlew capture-sdk:sdk:dokkaHtmlSiblingCollector\n```\n\nWith the following command you can open the reference documentation in the browser:\n\n```\n$ open capture-sdk/sdk/build/docs/dokka/index.html\n```\n\n# Example Apps\n\nSome SDKs have accompanying example apps. These can be found as sub-modules under the SDK's module. The example apps serve as a tool for us during development as well as an aid for our clients.\n\n# Publishing\n\nWe are using git tags to mark published versions. These also trigger the release workflows on GitHub.\n\n## SDKs and Libraries\n\nYou can find a step-by-step release guide in [RELEASE.md](RELEASE.md).\n\nSDKs and libraries are released to [Maven Central](https://search.maven.org/search?q=net.gini.android) under the `net.gini.android` group id.\n\nRelease notes need to be published on the repo's [releases page](https://github.com/gini/gini-mobile-android/releases).\n\nEach SDK's and library's Maven POM properties are set in their releasable sub-module's `gradle.properties` file.\n\nThe release tags must adhere to this pattern:\n```\n\u003cproject-name\u003e;\u003cversion\u003e\n```\n\nFor example `bank-sdk;1.0.2` or `health-api-lib;2.0.3`.\n\n## Documentation\n\nDocumentation is implicitly versioned via the associated SDK or library version tag and is automatically released with the SDK or library.\n\nThe reference documentation is published in the `gh-pages` branch in the `\u003cproject-name\u003e/\u003csub-module-name\u003e` sub-folder. For example, the reference documentation for the default networking implementation at http://developer.gini.net/gini-mobile-android/capture-sdk/default-network/dokka/.\n\nWhen only documentation release is necessary, then use a subtag of the last SDK or library version tag following this pattern:\n```\n\u003cproject-name\u003e;\u003clatest-version\u003e;doc-\u003cnumber\u003e\n```\n\nFor example `bank-sdk;2.0.1;doc-1` or `health-api-lib;1.5.4;doc-1` or `health-api-lib;1.5.4;doc-2`.\n\n## Example Apps\n\nNote: automated example app publishing is not working yet ([PIA-1857](https://ginis.atlassian.net/browse/PIA-1857)).\n\n# CI\n\nOur main tool for automation is [fastlane](https://fastlane.tools/). It serves as the main entry point for tasks executed on CI machines. Using fastlane we can isolate complex tasks into lanes which we are able to execute locally as well when necessary.\n\nFor a CI environment we are using [GitHub Actions](https://github.com/features/actions). It is important to use GitHub Actions only to trigger specific workflows and to create the necessary environment for fastlane to run (including of course all Android SDK, java and other dependencies). \n\nAll complex tasks should live in lanes which can be executed locally when necessary and never as GitHub Action steps. Otherwise when there is a GitHub outage we are completely blocked.\n\n## GitHub Actions\n\nEach SDK and library has multiple workflows. These can be found at [.github/workflows/](.github/workflows/).\n\nThe workflow file names must follow this pattern: \n```\n\u003cproject-name\u003e.\u003csubject/action\u003e.\u003coptional additional dot separated subjects/actions\u003e.yml\n```\n\nFor example: `bank-sdk.check.yml` or `bank-sdk.docs.release.yml`.\n\nIt is very important to not include plain-text secrets in the workflow files. Make sure to use [GitHub Secrets](https://github.com/gini/gini-mobile-android/settings/secrets/actions) for accessing confidential data in the workflows.\n\n## Fastlane\n\nWe are using fastlane to automate tasks like releasing to Maven Central, building and releasing the\ndocumentation, or creating release tags.\n\nYou can find fastlane related code in the [fastlane](fastlane/) folder.\n\n# Gradle\n\nWe use the Kotlin DSL for gradle as it is also used by the [gradle project itself](https://github.com/gradle/gradle) and it has many quality-of-life benefits over Groovy.\n\nCustom gradle tasks are organised in custom plugins and can be found in the [buildSrc](buildSrc/) folder.\n\n# Git\n\nWe are using [GitHub flow](https://docs.github.com/en/get-started/quickstart/github-flow) so the rule of thumb is to create a branch from `main` and when ready create a pull request to merge the work into `main`.\n\n## Commit Guidelines\n\nPlease follow the advice from [this article](https://chris.beams.io/posts/git-commit/) to write good commits.\n\n### Format\n\nWe use an own simplified adaptation of the [conventional commits spec](https://www.conventionalcommits.org/en/v1.0.0/) (inspired by the [oh-my-zsh project](https://github.com/ohmyzsh/ohmyzsh/blob/master/CONTRIBUTING.md#commit-guidelines)). This allows us to generate release notes or filter commits by projects.\n\nAll commits must adhere to this format:\n```\n\u003ctype\u003e(\u003cproject\u003e): \u003csubject\u003e\n\n\u003cbody\u003e\n\n\u003cticket-id\u003e\n```\n\nA detailed explanation can be found in the [.git-stuff/commit-msg-template.txt](.git-stuff/commit-msg-template.txt). It also includes instructions on how to use the template with git and Sourcetree.\n\n## Merging\n\nWe are using merge commits and restrict rebasing and squashing to feature branches.\n\n\n# Common issues\n\nAfter cloning if this issue is happening \"java.lang.IllegalAccessError: superclass access check failed\", Please goto Tools -\u003e SDK manager -\u003e Build, Execution, Deployment -\u003e Build Tools -\u003e Gradle, after clicking Gradle and on the right pane change the Gradle JDK to version 17 or lower. Version 17 is preferred.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgini%2Fgini-mobile-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgini%2Fgini-mobile-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgini%2Fgini-mobile-android/lists"}