Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,8 @@ vendor/

# Backup files created by scripts
*.bak


# Local API docs generated by Dokka for previewing the docs site
docs-website/static/api/
!docs-website/static/api/.gitkeep
7 changes: 7 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies {
compileOnly(libs.detekt.gradlePlugin)
compileOnly(libs.ktlint.gradlePlugin)
compileOnly(libs.spotless.gradle)
compileOnly(libs.dokka.gradlePlugin)
implementation(libs.truth)
compileOnly(libs.androidx.room.gradle.plugin)
compileOnly(libs.firebase.crashlytics.gradlePlugin)
Expand Down Expand Up @@ -142,5 +143,11 @@ gradlePlugin {
description = "Configures keystore management tasks for the project"
}

// Dokka for documentation
register("dokkaConvention") {
id = "org.convention.dokka.plugin"
implementationClass = "DokkaConventionPlugin"
description = "Configures Dokka for the project."
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class CMPFeatureConventionPlugin : Plugin<Project> {
apply("org.jetbrains.compose")
apply("org.convention.detekt.plugin")
apply("org.convention.spotless.plugin")
apply("org.convention.dokka.plugin")
}

dependencies {
Expand Down
23 changes: 23 additions & 0 deletions build-logic/convention/src/main/kotlin/DokkaConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

import org.convention.dokkaGradle
import org.gradle.api.Plugin
import org.convention.configureDokka
import org.gradle.api.Project

class DokkaConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
applyPlugins()

dokkaGradle {
configureDokka(this)
}
}
}

private fun Project.applyPlugins() {
pluginManager.apply {
apply("org.jetbrains.dokka")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class KMPLibraryConventionPlugin: Plugin<Project> {
apply("org.convention.spotless.plugin")
apply("org.jetbrains.kotlin.plugin.serialization")
apply("org.jetbrains.kotlin.plugin.parcelize")
apply("org.convention.dokka.plugin")
}

configureKotlinMultiplatform()
Expand Down
31 changes: 31 additions & 0 deletions build-logic/convention/src/main/kotlin/org/convention/Dokka.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.convention

import org.gradle.api.Project
import org.jetbrains.dokka.gradle.DokkaExtension
import org.jetbrains.dokka.gradle.DokkaTask

/**
* Configures Dokka and suppresses non-allowed modules.
* Sets moduleName only for modules inside :core and :core-base.
*
* e.g., ":core-base:designsystem" -> "core-base-designsystem"
* "core:designsystem" -> "core-designsystem"
*/
internal fun Project.configureDokka(extension: DokkaExtension) = extension.apply {
val isUnderCoreTrees = project.path.matches(Regex("^:(core|core-base):.+$"))
if (isUnderCoreTrees) {
val moduleId = project.path
.trimStart(':')
.replace(':', '-')
.ifBlank { project.name }
moduleName.set(moduleId)
}

// Allow only :cmp-*, :core, :core-base, :feature and any of their submodules
val allowed = project.path.matches(Regex("^:(cmp-[^:]+|core(?:-base)?|feature)(?::.*)?$"))
if (!allowed) {
dokkaSourceSets.configureEach {
suppress.set(true)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType
import org.jetbrains.dokka.gradle.DokkaExtension
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyBuilder
import org.jetbrains.dokka.gradle.DokkaTask

/**
* Get the `libs` version catalog.
Expand Down Expand Up @@ -36,4 +38,12 @@ inline fun Project.detektGradle(crossinline configure: DetektExtension.() -> Uni
inline fun Project.spotlessGradle(crossinline configure: SpotlessExtension.() -> Unit) =
extensions.configure<SpotlessExtension> {
configure()
}

/**
* Configures the `dokka` plugin with the [configure] lambda for all DokkaTasks.
*/
inline fun Project.dokkaGradle(crossinline configure: DokkaExtension.() -> Unit) =
extensions.configure<DokkaExtension> {
configure()
}
40 changes: 40 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,46 @@ plugins {
alias(libs.plugins.ktrofit) apply false

alias(libs.plugins.room) apply false
alias(libs.plugins.dokka)
}

dokka {
dokkaPublications.html {
outputDirectory.set(layout.buildDirectory.dir("$rootDir/docs-website/static/api"))
}
}

// Currently cmp-web throws some unresolved symbol errors
// So it is not included in the dokka task

dependencies {
dokka(project(":cmp-shared"))
dokka(project(":cmp-desktop"))
dokka(project(":cmp-android"))
// dokka(project(":cmp-web"))
dokka(project(":cmp-navigation"))
dokka(project(":core:data"))
dokka(project(":core:domain"))
dokka(project(":core:datastore"))
dokka(project(":core:designsystem"))
dokka(project(":core:ui"))
dokka(project(":core:common"))
dokka(project(":core:network"))
dokka(project(":core:model"))
dokka(project(":core:analytics"))
dokka(project(":core:database"))

dokka(project(":feature:home"))
dokka(project(":feature:profile"))
dokka(project(":feature:settings"))

dokka(project(":core-base:common"))
dokka(project(":core-base:database"))
dokka(project(":core-base:network"))
dokka(project(":core-base:designsystem"))
dokka(project(":core-base:platform"))
dokka(project(":core-base:ui"))
dokka(project(":core-base:analytics"))
}

object DynamicVersion {
Expand Down
6 changes: 6 additions & 0 deletions cmp-android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ plugins {
alias(libs.plugins.baselineprofile)
alias(libs.plugins.roborazzi)
alias(libs.plugins.aboutLibraries)
alias(libs.plugins.keystore.management)
alias(libs.plugins.ksp)
alias(libs.plugins.dokka)
}

val packageNameSpace: String = libs.versions.androidPackageNamespace.get()
Expand Down Expand Up @@ -159,4 +161,8 @@ baselineProfile {

// Make use of Dex Layout Optimizations via Startup Profiles
dexLayoutOptimization = true
}

dokka {
moduleName.set("cmp-android")
}
5 changes: 5 additions & 0 deletions cmp-desktop/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ plugins {
alias(libs.plugins.compose.compiler)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.dokka)
}

kotlin {
Expand Down Expand Up @@ -84,3 +85,7 @@ compose.desktop {
}
}
}

dokka {
moduleName.set("cmp-desktop")
}
1 change: 1 addition & 0 deletions cmp-web/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.dokka)
}

kotlin {
Expand Down
Empty file.
2 changes: 1 addition & 1 deletion core/ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,4 @@ compose.resources {
publicResClass = true
generateResClass = always
packageOfResClass = "org.mifos.core.ui.generated.resources"
}
}
20 changes: 20 additions & 0 deletions docs-website/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Dependencies
/node_modules

# Production
/build

# Generated files
.docusaurus
.cache-loader

# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
41 changes: 41 additions & 0 deletions docs-website/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Website

This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.

## Installation

```bash
yarn
```

## Local Development

```bash
yarn start
```

This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.

## Build

```bash
yarn build
```

This command generates static content into the `build` directory and can be served using any static contents hosting service.

## Deployment

Using SSH:

```bash
USE_SSH=true yarn deploy
```

Not using SSH:

```bash
GIT_USER=<Your GitHub username> yarn deploy
```

If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
12 changes: 12 additions & 0 deletions docs-website/blog/2019-05-28-first-blog-post.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
slug: first-blog-post
title: First Blog Post
authors: [slorber, yangshun]
tags: [hola, docusaurus]
---

Lorem ipsum dolor sit amet...

<!-- truncate -->

...consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
44 changes: 44 additions & 0 deletions docs-website/blog/2019-05-29-long-blog-post.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
slug: long-blog-post
title: Long Blog Post
authors: yangshun
tags: [hello, docusaurus]
---

This is the summary of a very long blog post,

Use a `<!--` `truncate` `-->` comment to limit blog post size in the list view.

<!-- truncate -->

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
24 changes: 24 additions & 0 deletions docs-website/blog/2021-08-01-mdx-blog-post.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
slug: mdx-blog-post
title: MDX Blog Post
authors: [slorber]
tags: [docusaurus]
---

Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).

:::tip

Use the power of React to create interactive blog posts.

:::

{/* truncate */}

For example, use JSX to create an interactive button:

```js
<button onClick={() => alert('button clicked!')}>Click me!</button>
```

<button onClick={() => alert('button clicked!')}>Click me!</button>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading