Skip to content
This repository was archived by the owner on Sep 8, 2025. It is now read-only.

Commit b72f0be

Browse files
authored
Merge pull request #281 from icerockdev/develop
Release 0.1.0 dev 20
2 parents 751235e + 6ac144a commit b72f0be

File tree

370 files changed

+4269
-2786
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

370 files changed

+4269
-2786
lines changed

.github/workflows/compilation-check.yml

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,11 @@ jobs:
1616
uses: actions/setup-java@v1
1717
with:
1818
java-version: 1.8
19-
- name: Check plugin
20-
run: ./gradlew -PpluginPublish publishPluginPublicationToMavenLocal
21-
- name: Check core
22-
run: ./gradlew -PcorePublish :widgets:publishToMavenLocal
2319
- name: Cocoapods install
2420
run: (cd sample/ios-app && pod install)
25-
- name: Check flat
26-
run: ./gradlew -PadditionsPublish :widgets-flat:publishToMavenLocal
27-
- name: Check bottomsheet
28-
run: ./gradlew -PadditionsPublish :widgets-bottomsheet:publishToMavenLocal
29-
- name: Check sms
30-
run: ./gradlew -PadditionsPublish :widgets-sms:publishToMavenLocal
31-
- name: Check datetime-picker
32-
run: ./gradlew -PadditionsPublish :widgets-datetime-picker:publishToMavenLocal
33-
- name: Check collection
34-
run: ./gradlew -PadditionsPublish :widgets-collection:publishToMavenLocal
21+
- name: Check build
22+
run: ./gradlew build
23+
- name: Check plugin publication
24+
run: ./gradlew -p plugin publishToMavenLocal
25+
- name: Check runtime publication
26+
run: ./gradlew publishToMavenLocal

.github/workflows/publish-dev.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: KMP library publish dev version
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
paths-ignore:
8+
- '**/*.md'
9+
10+
jobs:
11+
build:
12+
runs-on: macOS-latest
13+
14+
steps:
15+
- uses: actions/checkout@v1
16+
- name: Set up JDK 1.8
17+
uses: actions/setup-java@v1
18+
with:
19+
java-version: 1.8
20+
- name: Cocoapods install
21+
run: (cd sample/ios-app && pod install)
22+
- name: Plugin publication
23+
run: |
24+
./gradlew -p plugin -PdevPublish \
25+
publishNoValidationToBintray \
26+
-DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }} \
27+
--stacktrace
28+
- name: Runtime publication
29+
run: |
30+
./gradlew -PdevPublish \
31+
publishNoValidationToBintray \
32+
-DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }} \
33+
--stacktrace

.github/workflows/publish.yml

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: KMP library publish
1+
name: KMP library publish production version
22

33
on:
44
release:
@@ -14,19 +14,17 @@ jobs:
1414
uses: actions/setup-java@v1
1515
with:
1616
java-version: 1.8
17-
- name: Publish plugin
18-
run: ./gradlew -PpluginPublish publishPluginPublicationToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
19-
- name: Publish core
20-
run: ./gradlew -PcorePublish :widgets:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
2117
- name: Cocoapods install
2218
run: (cd sample/ios-app && pod install)
23-
- name: Publish flat
24-
run: ./gradlew -PadditionsPublish :widgets-flat:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
25-
- name: Publish bottomsheet
26-
run: ./gradlew -PadditionsPublish :widgets-bottomsheet:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
27-
- name: Publish sms
28-
run: ./gradlew -PadditionsPublish :widgets-sms:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
29-
- name: Publish datetime-picker
30-
run: ./gradlew -PadditionsPublish :widgets-datetime-picker:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
31-
- name: Publish collection
32-
run: ./gradlew -PadditionsPublish :widgets-collection:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
19+
- name: Plugin publication
20+
run: |
21+
./gradlew -p plugin \
22+
publishNoValidationToBintray \
23+
-DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }} \
24+
--stacktrace
25+
- name: Runtime publication
26+
run: |
27+
./gradlew \
28+
publishNoValidationToBintray \
29+
-DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }} \
30+
--stacktrace

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ allprojects {
268268

269269
project build.gradle
270270
```groovy
271-
apply plugin: "dev.icerock.mobile.multiplatform-widgets-generator"
271+
apply plugin: "dev.icerock.mobile.multiplatform-widgets-generator" // must apply before kotlin-multiplatform plugin
272272
```
273273

274274
## Usage

build.gradle.kts

Lines changed: 92 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,25 @@
22
* Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

5-
allprojects {
5+
buildscript {
66
repositories {
7-
mavenLocal()
7+
jcenter()
8+
google()
89

10+
maven { url = uri("https://dl.bintray.com/kotlin/kotlin") }
11+
maven { url = uri("https://kotlin.bintray.com/kotlinx") }
12+
maven { url = uri("https://plugins.gradle.org/m2/") }
13+
maven { url = uri("https://dl.bintray.com/icerockdev/plugins") }
14+
15+
maven { url = uri("https://dl.bintray.com/icerockdev/plugins-dev") }
16+
}
17+
dependencies {
18+
Deps.plugins.values.forEach { classpath(it) }
19+
}
20+
}
21+
22+
allprojects {
23+
repositories {
924
google()
1025
jcenter()
1126

@@ -14,12 +29,85 @@ allprojects {
1429
maven { url = uri("https://dl.bintray.com/icerockdev/moko") }
1530
maven { url = uri("https://dl.bintray.com/icerockdev/plugins") }
1631
maven { url = uri("http://dl.bintray.com/lukaville/maven") }
32+
33+
maven { url = uri("https://dl.bintray.com/icerockdev/moko-dev") }
34+
maven { url = uri("https://dl.bintray.com/icerockdev/plugins-dev") }
1735
}
1836

19-
// workaround for https://youtrack.jetbrains.com/issue/KT-27170
20-
configurations.create("compileClasspath")
37+
// Workaround for https://youtrack.jetbrains.com/issue/KT-36721.
38+
pluginManager.withPlugin("kotlin-multiplatform") {
39+
val kotlinExtension = project.extensions.getByName("kotlin")
40+
as org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
41+
val uniqueName = "${project.group}.${project.name}"
42+
43+
kotlinExtension.targets.withType(org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget::class.java) {
44+
compilations["main"].kotlinOptions.freeCompilerArgs += listOf(
45+
"-module-name",
46+
uniqueName
47+
)
48+
}
49+
}
50+
51+
configurations
52+
.matching { it.name == "compileOnly" }
53+
.configureEach {
54+
dependencies {
55+
// fix of package javax.annotation does not exist import javax.annotation.Generated in DataBinding code
56+
"compileOnly"("javax.annotation:jsr250-api:1.0")
57+
}
58+
}
59+
60+
val project = this
61+
val bintrayPath: Pair<String, String>?
62+
when {
63+
this.name.startsWith("widgets") -> {
64+
bintrayPath = "moko" to "moko-widgets"
65+
66+
this.group = "dev.icerock.moko"
67+
this.version = Versions.Libs.MultiPlatform.mokoWidgets
68+
69+
this.plugins.withType<com.android.build.gradle.LibraryPlugin> {
70+
this@allprojects.configure<com.android.build.gradle.LibraryExtension> {
71+
compileSdkVersion(Versions.Android.compileSdk)
72+
73+
defaultConfig {
74+
minSdkVersion(Versions.Android.minSdk)
75+
targetSdkVersion(Versions.Android.targetSdk)
76+
}
77+
}
78+
}
79+
}
80+
else -> {
81+
bintrayPath = null
82+
}
83+
}
84+
85+
if (bintrayPath != null) {
86+
project.plugins.withType<MavenPublishPlugin> {
87+
project.configure<PublishingExtension> {
88+
val repo = bintrayPath.first
89+
val artifact = bintrayPath.second
90+
val isDevPublish = project.properties.containsKey("devPublish")
91+
val fullRepoName = if (isDevPublish) "$repo-dev" else repo
92+
val mavenUrl =
93+
"https://api.bintray.com/maven/icerockdev/$fullRepoName/$artifact/;publish=1"
94+
95+
repositories.maven(mavenUrl) {
96+
this.name = "bintray"
97+
98+
credentials {
99+
username = System.getProperty("BINTRAY_USER")
100+
password = System.getProperty("BINTRAY_KEY")
101+
}
102+
}
103+
}
104+
}
105+
106+
apply<dev.icerock.moko.widgets.gradle.BintrayPublishingPlugin>()
107+
}
21108
}
22109

23110
tasks.register("clean", Delete::class).configure {
111+
group = "build"
24112
delete(rootProject.buildDir)
25113
}

buildSrc/build.gradle.kts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
/*
22
* Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
33
*/
4+
import java.io.ByteArrayOutputStream
5+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
46

57
plugins {
6-
`kotlin-dsl`
8+
kotlin("jvm") version "1.3.72"
9+
id("com.github.kukuhyoniatmoko.buildconfigkotlin") version "1.0.5"
710
}
811

912
repositories {
@@ -13,12 +16,38 @@ repositories {
1316
maven { url = uri("https://dl.bintray.com/icerockdev/plugins") }
1417
}
1518

19+
val devPublishing: Boolean = properties.containsKey("devPublish")
20+
val mokoWidgetsVersion: String = when (devPublishing) {
21+
true -> getGitCommit()
22+
false -> "0.1.0-dev-20"
23+
}
24+
25+
buildConfigKotlin {
26+
sourceSet("main") {
27+
buildConfig(name = "widgetsVersion", value = mokoWidgetsVersion)
28+
}
29+
}
30+
1631
dependencies {
17-
implementation("dev.icerock:mobile-multiplatform:0.6.0")
18-
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.70")
19-
implementation("com.android.tools.build:gradle:3.6.1")
32+
implementation("dev.icerock:mobile-multiplatform:0.6.1")
33+
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72")
34+
implementation("com.android.tools.build:gradle:3.6.4")
35+
}
36+
37+
fun getGitCommit(): String {
38+
val stdout = ByteArrayOutputStream()
39+
exec {
40+
commandLine = listOf("git", "rev-parse", "--short", "HEAD")
41+
standardOutput = stdout
42+
}
43+
return stdout.toString().trim()
2044
}
2145

22-
kotlinDslPluginOptions {
23-
experimentalWarning.set(false)
46+
val compileKotlin: KotlinCompile by tasks
47+
compileKotlin.kotlinOptions {
48+
jvmTarget = "1.8"
2449
}
50+
val compileTestKotlin: KotlinCompile by tasks
51+
compileTestKotlin.kotlinOptions {
52+
jvmTarget = "1.8"
53+
}

buildSrc/src/main/kotlin/Deps.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,26 @@ object Deps {
8383
iosX64 = "dev.icerock.moko:widgets-datetime-picker-iosx64:${Versions.Libs.MultiPlatform.mokoWidgets}",
8484
iosArm64 = "dev.icerock.moko:widgets-datetime-picker-iosarm64:${Versions.Libs.MultiPlatform.mokoWidgets}"
8585
)
86+
val mokoWidgetsImageNetwork = MultiPlatformLibrary(
87+
common = "dev.icerock.moko:widgets-image-network:${Versions.Libs.MultiPlatform.mokoWidgets}",
88+
iosX64 = "dev.icerock.moko:widgets-image-network-iosx64:${Versions.Libs.MultiPlatform.mokoWidgets}",
89+
iosArm64 = "dev.icerock.moko:widgets-image-network-iosarm64:${Versions.Libs.MultiPlatform.mokoWidgets}"
90+
)
91+
val mokoWidgetsPermissions = MultiPlatformLibrary(
92+
common = "dev.icerock.moko:widgets-permissions:${Versions.Libs.MultiPlatform.mokoWidgets}",
93+
iosX64 = "dev.icerock.moko:widgets-permissions-iosx64:${Versions.Libs.MultiPlatform.mokoWidgets}",
94+
iosArm64 = "dev.icerock.moko:widgets-permissions-iosarm64:${Versions.Libs.MultiPlatform.mokoWidgets}"
95+
)
96+
val mokoWidgetsMedia = MultiPlatformLibrary(
97+
common = "dev.icerock.moko:widgets-media:${Versions.Libs.MultiPlatform.mokoWidgets}",
98+
iosX64 = "dev.icerock.moko:widgets-media-iosx64:${Versions.Libs.MultiPlatform.mokoWidgets}",
99+
iosArm64 = "dev.icerock.moko:widgets-media-iosarm64:${Versions.Libs.MultiPlatform.mokoWidgets}"
100+
)
101+
val mokoWidgetsSms = MultiPlatformLibrary(
102+
common = "dev.icerock.moko:widgets-sms:${Versions.Libs.MultiPlatform.mokoWidgets}",
103+
iosX64 = "dev.icerock.moko:widgets-sms-iosx64:${Versions.Libs.MultiPlatform.mokoWidgets}",
104+
iosArm64 = "dev.icerock.moko:widgets-sms-iosarm64:${Versions.Libs.MultiPlatform.mokoWidgets}"
105+
)
86106
val mokoResources = MultiPlatformLibrary(
87107
common = "dev.icerock.moko:resources:${Versions.Libs.MultiPlatform.mokoResources}",
88108
iosX64 = "dev.icerock.moko:resources-iosx64:${Versions.Libs.MultiPlatform.mokoResources}",
@@ -108,6 +128,11 @@ object Deps {
108128
iosX64 = "dev.icerock.moko:media-iosx64:${Versions.Libs.MultiPlatform.mokoMedia}",
109129
iosArm64 = "dev.icerock.moko:media-iosarm64:${Versions.Libs.MultiPlatform.mokoMedia}"
110130
)
131+
val mokoPermissions = MultiPlatformLibrary(
132+
common = "dev.icerock.moko:permissions:${Versions.Libs.MultiPlatform.mokoPermissions}",
133+
iosX64 = "dev.icerock.moko:permissions-iosx64:${Versions.Libs.MultiPlatform.mokoPermissions}",
134+
iosArm64 = "dev.icerock.moko:permissions-iosarm64:${Versions.Libs.MultiPlatform.mokoPermissions}"
135+
)
111136
val mokoGraphics = MultiPlatformLibrary(
112137
common = "dev.icerock.moko:graphics:${Versions.Libs.MultiPlatform.mokoGraphics}",
113138
iosX64 = "dev.icerock.moko:graphics-iosx64:${Versions.Libs.MultiPlatform.mokoGraphics}",

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ object Versions {
99
const val minSdk = 16
1010
}
1111

12-
const val kotlin = "1.3.70"
13-
private const val mokoWidgets = "0.1.0-dev-19"
14-
private const val mokoResources = "0.9.0"
12+
const val kotlin = "1.3.72"
13+
private const val mokoWidgets = BuildConfig.widgetsVersion
14+
private const val mokoResources = "0.11.0"
1515

1616
object Plugins {
1717
const val mokoWidgets = Versions.mokoWidgets
@@ -39,10 +39,11 @@ object Versions {
3939

4040
const val mokoWidgets = Versions.mokoWidgets
4141
const val mokoResources = Versions.mokoResources
42-
const val mokoMvvm = "0.6.0"
42+
const val mokoMvvm = "0.7.1"
4343
const val mokoFields = "0.3.0"
4444
const val mokoUnits = "0.3.1"
45-
const val mokoMedia = "0.4.0"
45+
const val mokoMedia = "0.4.1"
46+
const val mokoPermissions = "0.5.0"
4647
const val mokoGraphics = "0.3.0"
4748
const val mokoParcelize = "0.3.0"
4849
const val klock = "1.9.1"
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright 2020 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package dev.icerock.moko.widgets.gradle
6+
7+
import org.gradle.api.Plugin
8+
import org.gradle.api.Project
9+
import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
10+
import org.gradle.api.publish.plugins.PublishingPlugin
11+
12+
class BintrayPublishingPlugin : Plugin<Project> {
13+
override fun apply(target: Project) {
14+
// schedule after evaluate action...but no guarantee that our action will be last.
15+
// so we just shedule another afterEvaluate in our action to set action at end of evaluation :)
16+
target.afterEvaluate {
17+
target.afterEvaluate { setupNoValidationPublish(target) }
18+
}
19+
}
20+
21+
private fun setupNoValidationPublish(project: Project) {
22+
val publishNoValidationTasks = project.tasks.filterIsInstance<PublishToMavenRepository>()
23+
.map { publishTask ->
24+
val newName = publishTask.name.replace("publish", "publishNoValidation")
25+
val newTask: PublishToBintrayRepository =
26+
project.tasks.create(newName, PublishToBintrayRepository::class.java)
27+
28+
newTask.group = PublishingPlugin.PUBLISH_TASK_GROUP + " no validation"
29+
newTask.publication = publishTask.publication
30+
newTask.repository = publishTask.repository
31+
newTask.setDependsOn(publishTask.dependsOn)
32+
33+
newTask
34+
}
35+
36+
publishNoValidationTasks
37+
.groupBy { it.repository }
38+
.forEach { (repo, publishTasks) ->
39+
val repoName = repo.name.capitalize()
40+
project.tasks.create("publishNoValidationTo$repoName") {
41+
it.group = PublishingPlugin.PUBLISH_TASK_GROUP + " no validation"
42+
it.setDependsOn(publishTasks)
43+
}
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)