Skip to content

Commit

Permalink
Merge pull request #11 from mataku/feature/kmp
Browse files Browse the repository at this point in the history
Multiplatform compatible
  • Loading branch information
mataku authored Apr 14, 2024
2 parents 415144a + 4808e6a commit 3eee0f5
Show file tree
Hide file tree
Showing 43 changed files with 1,102 additions and 443 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: zulu
java-version: 11
java-version: 17
- name: Build
run: |
./gradlew MiddleEllipsisText:assembleRelease
./gradlew MiddleEllipsisText3:assembleRelease
- name: Publish to Sonatype
run: |
./gradlew MiddleEllipsisText:publishMavenPublicationToSonatypeRepository
./gradlew MiddleEllipsisText3:publishMavenPublicationToSonatypeRepository
./gradlew MiddleEllipsisText:publishMavenPublicationToReleaseRepository
./gradlew MiddleEllipsisText3:publishMavenPublicationToReleaseRepository
32 changes: 32 additions & 0 deletions .github/workflows/snapshot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Snapshot Publish

on:
workflow_dispatch:

env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }}

jobs:
publish_snapshot:
name: Build and publish to snapshpt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: zulu
java-version: 17
- name: Build
run: |
./gradlew MiddleEllipsisText:assembleRelease
./gradlew MiddleEllipsisText3:assembleRelease
- name: Publish to Sonatype
run: |
./gradlew MiddleEllipsisText:publishMavenPublicationToSnapshotRepository
./gradlew MiddleEllipsisText3:publishMavenPublicationToSnapshotRepository
9 changes: 4 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ concurrency:

jobs:
instrumentation_test:
# ubuntu-latest is enough, but needed for Android Emulator: https://issuetracker.google.com/issues/193118030
runs-on: macos-latest
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
Expand All @@ -21,7 +20,7 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: zulu
java-version: 11
java-version: 17
- name: Cache gradle dir
uses: actions/cache@v3
with:
Expand All @@ -33,9 +32,9 @@ jobs:
${{ runner.os }}-gradle-
- name: Setup Android SDK
uses: android-actions/setup-android@v2
- name: Run layout tests
- name: Run build
run: |
./gradlew cleanManagedDevices --unused-only && ./gradlew MiddleEllipsisText:pixel4Api30DebugAndroidTest MiddleEllipsisText3:pixel4Api30DebugAndroidTest -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect"
./gradlew MiddleEllipsisText:assembleRelease MiddleEllipsisText3:assembleRelease
env:
OSSRH_USERNAME: username
OSSRH_PASSWORD: password
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ local.properties
.idea/inspectionProfiles/
.idea/androidTestResultsUserPreferences.xml
.idea/kotlinc.xml
.idea/deploymentTargetDropDown.xml
.idea/migrations.xml

*.iml
.env
Expand Down
190 changes: 154 additions & 36 deletions MiddleEllipsisText/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,45 +1,127 @@
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest

plugins {
id("middleellipsistext.android.library")
id("middleellipsistext.android.compose")
id("middleellipsistext.android.test")
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.android.library)
alias(libs.plugins.compose.jb)
alias(libs.plugins.roborazzi)
id("maven-publish")
signing
}

android {
testOptions {
managedDevices {
devices.maybeCreate<com.android.build.api.dsl.ManagedVirtualDevice>("pixel4Api30").apply {
device = "Pixel 4"
apiLevel = 30
systemImageSource = "aosp-atd"
kotlin {
androidTarget {
publishLibraryVariants("release")
compilations.all {
kotlinOptions {
jvmTarget = "11"
}
}
}
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach {
it.binaries.framework {
baseName = "middle-ellipsis-text"
isStatic = true
}
}

namespace = "io.github.mataku.middleellipsistext"
}
applyDefaultHierarchyTemplate()

dependencies {
implementation(platform(libs.compose.bom))
implementation(libs.compose.ui)
implementation(libs.compose.runtime)
implementation(libs.compose.foundation)
implementation(libs.compose.material)
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.ui)
implementation(libs.skiko)
}
}

androidTestImplementation(libs.compose.ui.test.junit4)
debugImplementation(libs.compose.ui.test.manifest)
}
val commonTest by getting {
dependencies {
implementation(libs.kotlin.test.common)
implementation(libs.kotlin.test.annotations.common)
implementation(libs.compose.ui.test)

implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
}
}

val androidSourcesJar = tasks.register<Jar>("androidSourcesJar") {
archiveClassifier.set("sources")
from("android.sourceSets.main.java.srcDirs")
val iosTest by getting {
dependencies {
implementation(libs.compose.ui.test)
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.ui)
}
}
val androidUnitTest by getting {
dependencies {
implementation(libs.kotlin.test)
implementation(libs.kotlin.test.junit)
implementation(libs.androidx.test.ext.junit)
implementation(libs.robolectric)
implementation(libs.roborazzi)
implementation(libs.compose.ui.test.junit4)
implementation(libs.compose.ui.test.manifest)
}
}
}

tasks.getByName<KotlinNativeSimulatorTest>("iosSimulatorArm64Test") {
device.set("iPhone 13")
}
tasks.getByName<KotlinNativeSimulatorTest>("iosX64Test") {
device.set("iPhone 13")
}
}

artifacts {
archives(androidSourcesJar)
android {
namespace = "io.github.mataku.middleellipsistext"
compileSdk = 34

defaultConfig {
minSdk = 24

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

dependencies {
implementation(platform(libs.compose.bom))
implementation(libs.compose.ui)
implementation(libs.compose.runtime)
implementation(libs.compose.foundation)
implementation(libs.compose.material)

debugImplementation(libs.compose.ui.test.manifest)

testImplementation(libs.kotlin.test)
testImplementation(libs.kotlin.test.junit)
testImplementation(libs.androidx.test.ext.junit)
testImplementation(libs.robolectric)
}

testOptions {
unitTests.isIncludeAndroidResources = true
}
}


ext["signing.password"] = ""

signing {
Expand All @@ -53,20 +135,42 @@ signing {

val libName = "middle-ellipsis-text"

group = rootProject.properties["groupId"] as String
version = rootProject.properties["version"] as String

afterEvaluate {
publishing {
publications {
create<MavenPublication>("maven") {
groupId = "io.github.mataku"
artifactId = libName
version = "1.0.0"
if (project.plugins.hasPlugin("com.android.library")) {
from(components["release"])
} else {
from(components["java"])
repositories {
maven {
name = "Snapshot"
val snapshotsRepoUrl = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")
url = snapshotsRepoUrl
credentials {
username = System.getenv("OSSRH_USERNAME") ?: rootProject.extra["ossrhUsername"] as String
password = System.getenv("OSSRH_PASSWORD") ?: rootProject.extra["ossrhPassword"] as String
}
}

maven {
name = "Release"
val releasesRepoUrl =
uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
url = releasesRepoUrl
credentials {
username = System.getenv("OSSRH_USERNAME") ?: rootProject.extra["ossrhUsername"] as String
password = System.getenv("OSSRH_PASSWORD") ?: rootProject.extra["ossrhPassword"] as String
}
artifact(androidSourcesJar)
}
}
publications {
withType<MavenPublication> {
val publication = this
pom {
artifactId = if (publication.name == "kotlinMultiplatform") {
libName
} else {
"${libName}-${publication.name}"
}
name.set(libName)
description.set("Jetpack Compose Component with ellipsis in the middle of text")
url.set("https://github.com/mataku/MiddleEllipsisText")
Expand Down Expand Up @@ -94,3 +198,17 @@ afterEvaluate {
}
}
}

tasks.withType<PublishToMavenLocal> {
dependsOn(":MiddleEllipsisText:signIosX64Publication")
dependsOn(":MiddleEllipsisText:signIosArm64Publication")
dependsOn(":MiddleEllipsisText:signIosSimulatorArm64Publication")
dependsOn(":MiddleEllipsisText:signKotlinMultiplatformPublication")
}

tasks.withType<PublishToMavenRepository> {
dependsOn(":MiddleEllipsisText:signIosX64Publication")
dependsOn(":MiddleEllipsisText:signIosArm64Publication")
dependsOn(":MiddleEllipsisText:signIosSimulatorArm64Publication")
dependsOn(":MiddleEllipsisText:signKotlinMultiplatformPublication")
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.github.mataku.middleellipsistext.internal

internal class AndroidBreakIterator : BreakIterator {

private val instance = android.icu.text.BreakIterator.getCharacterInstance()

override fun next(): Int {
return instance.next()
}

override fun makeCharacterInstance(): BreakIterator {
return this
}

override fun setText(text: String?) {
instance.setText(text)
}

override fun current(): Int {
return instance.current()
}
}

actual fun getBreakIterator(): BreakIterator = AndroidBreakIterator()
Loading

0 comments on commit 3eee0f5

Please sign in to comment.