Skip to content

Kt-Kraft/build-logic

Repository files navigation

Build Logic for Kotlin Multiplatform

LICENSE GitHub Stars All Contributors

Simplify your Kotlin Multiplatform project configurations with reusable build logic setups. Ideal for multi-module projects, this setup reduces boilerplate, standardizes configurations, supports commitlint, and streamlines publishing with Gradle.



🚀 Overview

This repository offers a centralized setup for Koltin Multiplatform build configurations, including the following conventions:

  • Standardized Build Configurations: Predefined configurations for Kotlin Multiplatform App and Library.
  • Conventional Commit Linting: Integrated support for enforcing conventional commit messages.
  • Streamlined Publishing Settings: Simplified configuration for publishing artifacts to GitHub Packages.

📝 Setup & Usage

To integrate this build logic into your Kotlin Multiplatform project, follow the steps below.

Step 1: Configure settings.gradle.kts

Add the custom plugin repository to your root project settings.gradle.kts:

pluginManagement {
  repositories {
    maven(url = "https://maven.pkg.github.com/Kt-Kraft/build-logic/") {
      name = "GitHubPackages"
      credentials {
        username = providers.gradleProperty("github.username").orNull
          ?: System.getenv("GITHUB_USERNAME")
        password = providers.gradleProperty("github.token").orNull
          ?: System.getenv("GITHUB_TOKEN")
      }
    }
    google()
    mavenCentral()
    gradlePluginPortal()
  }
}

Step 2: Update build.gradle.kts in Root Project

Add plugin aliases and configurations in your root project’s build.gradle.kts:

plugins {
  alias(libs.plugins.jetbrains.compose) apply false
  alias(libs.plugins.kotlin.multiplatform) apply false
  alias(libs.plugins.convention.multiplatform) apply false
  alias(libs.plugins.convention.android.app) apply false
  alias(libs.plugins.convention.android.lib) apply false
  alias(libs.plugins.convention.compose.app) apply false
  alias(libs.plugins.convention.compose.lib) apply false
  alias(libs.plugins.convention.publishing) apply false
  alias(libs.plugins.convention.android.config)
  alias(libs.plugins.convention.publish.config)
  alias(libs.plugins.convention.commitlint)
}

// Initial configuration for subprojects
convention {
  multiplatform {
    android.set(true)
    iOS.set(true)
  }

  android {
    minSdk.set(28)
    targetSdk.set(35)
    compileSdk.set(35)
  }

  publishing {
    pom {
      setGitHubProject {
        owner = "Kt-Kraft"
        repository = "easy-multiplatform"
      }

      licenses { mit() }

      developers {
        developer(
          id = "indramahkota",
          name = "Indra Mahkota",
          email = "indramahkota1@gmail.com",
        )
      }
    }
  }
}

Step 3: Apply Plugins in Submodules

In your submodule build.gradle.kts files, apply the necessary plugins:

plugins {
  alias(libs.plugins.convention.compose.app)
  alias(libs.plugins.secret.gradle.plugin)
}

// or

plugins {
  alias(libs.plugins.convention.android.lib)
  alias(libs.plugins.convention.publishing)
}