Skip to content
Merged
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
39 changes: 39 additions & 0 deletions .github/workflows/publish-kotlin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# SMOODEV-2386: manual publish of the Kotlin SDK to Maven Central (ai.smoo).
# Prereqs (one-time, Brent): Sonatype Central account + ai.smoo namespace
# verification (smoo.ai DNS TXT), then repo secrets OSSRH_USERNAME /
# OSSRH_PASSWORD (portal token) / MAVEN_SIGNING_KEY (ASCII-armored PGP
# private key) / MAVEN_SIGNING_PASSWORD.
name: Publish Kotlin SDK
on:
workflow_dispatch:
inputs:
version:
description: Version to publish (e.g. 0.1.0)
required: true
jobs:
publish:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- name: Guard secrets
env:
U: ${{ secrets.OSSRH_USERNAME }}
K: ${{ secrets.MAVEN_SIGNING_KEY }}
run: |
if [ -z "$U" ] || [ -z "$K" ]; then
echo "::error::Maven Central secrets not configured — see SMOODEV-2386 prereqs in this workflow's header"; exit 1
fi
- name: Test + publish
working-directory: kotlin
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
MAVEN_SIGNING_KEY: ${{ secrets.MAVEN_SIGNING_KEY }}
MAVEN_SIGNING_PASSWORD: ${{ secrets.MAVEN_SIGNING_PASSWORD }}
run: |
./gradlew test publish -Pversion=${{ inputs.version }} --console=plain
56 changes: 55 additions & 1 deletion kotlin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ plugins {
kotlin("jvm") version "2.1.20"
kotlin("plugin.serialization") version "2.1.20"
`maven-publish`
signing
}

group = "ai.smoo"
Expand All @@ -20,6 +21,12 @@ kotlin {
jvmToolchain(17)
}

java {
// Central requires -sources and -javadoc jars.
withSourcesJar()
withJavadocJar()
}

dependencies {
api("io.ktor:ktor-client-core:3.2.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1")
Expand All @@ -34,11 +41,58 @@ tasks.test {
useJUnitPlatform()
}

// JitPack runs `gradle publishToMavenLocal` (see /jitpack.yml).
// JitPack runs `gradle publishToMavenLocal` (see /jitpack.yml). Maven Central
// (SMOODEV-2386) runs `gradle publish -Pversion=<x.y.z>` from release.yml with
// OSSRH_USERNAME/OSSRH_PASSWORD (Sonatype central portal token) + the signing
// env vars below; all publishing metadata Central requires lives on the POM.
publishing {
publications {
create<MavenPublication>("maven") {
from(components["java"])
artifactId = "smooai-config"
pom {
name.set("SmooAIConfig")
description.set("Mobile runtime mode of @smooai/config — baked public config + live feature flags/limits for Kotlin/Android.")
url.set("https://github.com/SmooAI/config")
licenses {
license {
name.set("MIT")
url.set("https://github.com/SmooAI/config/blob/main/LICENSE")
}
}
developers {
developer {
id.set("smooai")
name.set("Smoo AI")
url.set("https://smoo.ai")
}
}
scm {
url.set("https://github.com/SmooAI/config")
connection.set("scm:git:https://github.com/SmooAI/config.git")
}
}
}
}
repositories {
maven {
name = "central"
url = uri("https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/")
credentials {
username = System.getenv("OSSRH_USERNAME")
password = System.getenv("OSSRH_PASSWORD")
}
}
}
}

// Signing is REQUIRED by Central but must not break local dev / JitPack:
// only sign when the key is present (CI publish path).
signing {
val signingKey = System.getenv("MAVEN_SIGNING_KEY")
val signingPassword = System.getenv("MAVEN_SIGNING_PASSWORD")
if (!signingKey.isNullOrBlank()) {
useInMemoryPgpKeys(signingKey, signingPassword)
sign(publishing.publications["maven"])
}
}
Loading