HabitRPG / habitica-android

Native Android app for Habitica
GNU General Public License v3.0
1.47k stars 521 forks source link

[Suggestion] Update project Gradle setup (move to version catalogs, add shared build-logic) #2075

Open jsoberg opened 5 months ago

jsoberg commented 5 months ago

Hey all! I have a few improvement suggestions that I wouldn't mind opening some PRs for surrounding the Gradle build logic setup for the project:

  1. Move to using version catalogs (Gradle docs and Android docs) for dependencies. This provides a central file for defining dependencies/versions, making them accessible in a type-safe manner (through libs.X).

  2. Create a new module for storing shared build logic (example). I noticed some duplicate code in build files (one example being adding build config fields in wearOS and Habitica) which would be a good first step into moving to a shared function that any build script in the project could use. In the future, this could be used to create convention plugins and other shared build logic/setup between modules as desired.

Let me know if you think these additions would be worthwhile for the project and I'll start working on PRs for them.

phillipthelen commented 2 months ago

Hello @jsoberg,

Sorry for the late response. This would be great if you are still interested in working on this! We already have a shared module, but from what I understand your proposal for 2 would be something different from that and just regarding code sharing for the build scripts, right?

jsoberg commented 1 month ago

Hey @phillipthelen! That's right, the shared build-logic module would just be to share build configurations between modules (e.g. multiple modules setup Android similarly, and this could be a plugin in that build-logic). Version catalogs are just moving external dependencies to a central location (gradle/libs.versions.toml) that can be accessed in a typesafe/IDE-friendly way - ensures you're using similar versions in each module, and makes it easier to track updates