mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2025-11-02 01:43:40 +01:00
Refactor: Modernize build and publishing workflow
- Upgraded Kotlin from 1.7.20 to 1.9.20. - Upgraded JDK from 11 to 21 across all GitHub Actions workflows. - Replaced the legacy `maven-publish` plugin with `com.vanniktech.maven.publish` for simplified publishing to Maven Central. - Removed the `publishSnapshot.yml` workflow, as snapshot publishing is now managed by the new plugin. - Updated `publishRelease.yml` to use the `publishToMavenCentral` task and new secrets (`MAVEN_CENTRAL_USERNAME`, `MAVEN_CENTRAL_PASSWORD`). - Simplified `build.gradle.kts` by removing manual publishing and signing logic. - Set the JVM target to "21". - Bumped the project version to `3.1.1`. - Removed `js` targets and related configurations. - Added a new code style configuration file for the project (`.idea/codeStyles/Project.xml`).
This commit is contained in:
20
.github/workflows/publishRelease.yml
vendored
20
.github/workflows/publishRelease.yml
vendored
@@ -19,20 +19,18 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Set up JDK 11
|
- name: Set up JDK 21
|
||||||
uses: actions/setup-java@v2
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: adopt
|
distribution: temurin
|
||||||
java-version: 11
|
java-version: '21'
|
||||||
|
|
||||||
# Runs upload, and then closes & releases the repository
|
# Runs upload, and then closes & releases the repository
|
||||||
- name: Publish to MavenCentral
|
- name: Publish to MavenCentral
|
||||||
run: ./gradlew publish --max-workers 1
|
run: ./gradlew publishToMavenCentral
|
||||||
env:
|
env:
|
||||||
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
|
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
|
||||||
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
|
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
|
||||||
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
|
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }}
|
||||||
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
|
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
|
||||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
|
||||||
SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }}
|
|
||||||
SNAPSHOT: false
|
SNAPSHOT: false
|
||||||
35
.github/workflows/publishSnapshot.yml
vendored
35
.github/workflows/publishSnapshot.yml
vendored
@@ -1,35 +0,0 @@
|
|||||||
name: Publish Snapshot
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
uses: ./.github/workflows/test.yml
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
publish:
|
|
||||||
needs: test
|
|
||||||
name: Publish Snapshot
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
- name: Set up JDK 11
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
distribution: adopt
|
|
||||||
java-version: 11
|
|
||||||
|
|
||||||
# Runs upload, and then closes & releases the repository
|
|
||||||
- name: Publish to snapshot to Sonatype
|
|
||||||
run: ./gradlew publish --max-workers 1
|
|
||||||
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 }}
|
|
||||||
SNAPSHOT: true
|
|
||||||
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
@@ -12,11 +12,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Set up JDK 11
|
- name: Set up JDK 21
|
||||||
uses: actions/setup-java@v2
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
distribution: adopt
|
distribution: temurin
|
||||||
java-version: 11
|
java-version: '21'
|
||||||
|
|
||||||
# Builds the release artifacts of the library
|
# Builds the release artifacts of the library
|
||||||
- name: Test
|
- name: Test
|
||||||
|
|||||||
35
.idea/codeStyles/Project.xml
generated
35
.idea/codeStyles/Project.xml
generated
@@ -1,5 +1,40 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<code_scheme name="Project" version="173">
|
<code_scheme name="Project" version="173">
|
||||||
|
<JavaCodeStyleSettings>
|
||||||
|
<option name="IMPORT_LAYOUT_TABLE">
|
||||||
|
<value>
|
||||||
|
<package name="" withSubpackages="true" static="false" module="true" />
|
||||||
|
<package name="android" withSubpackages="true" static="true" />
|
||||||
|
<package name="androidx" withSubpackages="true" static="true" />
|
||||||
|
<package name="com" withSubpackages="true" static="true" />
|
||||||
|
<package name="junit" withSubpackages="true" static="true" />
|
||||||
|
<package name="net" withSubpackages="true" static="true" />
|
||||||
|
<package name="org" withSubpackages="true" static="true" />
|
||||||
|
<package name="java" withSubpackages="true" static="true" />
|
||||||
|
<package name="javax" withSubpackages="true" static="true" />
|
||||||
|
<package name="" withSubpackages="true" static="true" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="android" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="androidx" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="com" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="junit" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="net" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="org" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="java" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="javax" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</JavaCodeStyleSettings>
|
||||||
<JetCodeStyleSettings>
|
<JetCodeStyleSettings>
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
</JetCodeStyleSettings>
|
</JetCodeStyleSettings>
|
||||||
|
|||||||
167
build.gradle.kts
167
build.gradle.kts
@@ -1,147 +1,82 @@
|
|||||||
import org.jetbrains.kotlin.konan.properties.Properties
|
import org.jetbrains.kotlin.konan.properties.Properties
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("multiplatform") version "1.7.20"
|
kotlin("multiplatform") version "1.9.20"
|
||||||
id("org.jetbrains.dokka") version "1.7.20"
|
id("org.jetbrains.dokka") version "1.9.20"
|
||||||
id("maven-publish")
|
id("com.vanniktech.maven.publish") version "0.34.0"
|
||||||
signing
|
signing
|
||||||
}
|
}
|
||||||
|
|
||||||
val PUBLISH_GROUP_ID = "com.github.adriankuta"
|
val PUBLISH_GROUP_ID = "com.github.adriankuta"
|
||||||
val PUBLISH_ARTIFACT_ID = "tree-structure"
|
val PUBLISH_ARTIFACT_ID = "tree-structure" // base artifact; KMP will add -jvm, -ios*, etc.
|
||||||
val PUBLISH_VERSION = "3.1.0"
|
val PUBLISH_VERSION = "3.1.1"
|
||||||
|
|
||||||
val secretFile = File(rootProject.rootDir, "local.properties")
|
|
||||||
if (secretFile.exists()) {
|
|
||||||
secretFile.reader().use {
|
|
||||||
Properties().apply {
|
|
||||||
load(it)
|
|
||||||
}
|
|
||||||
}.onEach { (name, value) ->
|
|
||||||
project.ext[name.toString()] = value
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Prefer Central Portal credentials via environment variables
|
|
||||||
project.ext["centralUsername"] = System.getenv("CENTRAL_USERNAME")
|
|
||||||
project.ext["centralPassword"] = System.getenv("CENTRAL_PASSWORD")
|
|
||||||
// Fallback legacy OSSRH credentials (still supported on s01)
|
|
||||||
project.ext["ossrhUsername"] = System.getenv("OSSRH_USERNAME")
|
|
||||||
project.ext["ossrhPassword"] = System.getenv("OSSRH_PASSWORD")
|
|
||||||
project.ext["sonatypeStagingProfileId"] = System.getenv("SONATYPE_STAGING_PROFILE_ID")
|
|
||||||
project.ext["signingKeyId"] = System.getenv("SIGNING_KEY_ID")
|
|
||||||
project.ext["signingPassword"] = System.getenv("SIGNING_PASSWORD")
|
|
||||||
project.ext["signingKey"] = System.getenv("SIGNING_KEY")
|
|
||||||
project.ext["snapshot"] = System.getenv("SNAPSHOT")
|
|
||||||
}
|
|
||||||
val snapshot: String? by project
|
val snapshot: String? by project
|
||||||
|
|
||||||
group = PUBLISH_GROUP_ID
|
group = PUBLISH_GROUP_ID
|
||||||
version = if (snapshot.toBoolean()) "$PUBLISH_VERSION-SNAPSHOT" else PUBLISH_VERSION
|
version = if (snapshot.toBoolean()) "$PUBLISH_VERSION-SNAPSHOT" else PUBLISH_VERSION
|
||||||
|
|
||||||
val dokkaHtml by tasks.getting(org.jetbrains.dokka.gradle.DokkaTask::class)
|
mavenPublishing {
|
||||||
|
// Central Portal + auto release when we call publishAndReleaseToMavenCentral
|
||||||
|
publishToMavenCentral(automaticRelease = false)
|
||||||
|
signAllPublications()
|
||||||
|
|
||||||
val javadocJar: TaskProvider<Jar> by tasks.registering(Jar::class) {
|
coordinates(PUBLISH_GROUP_ID, PUBLISH_ARTIFACT_ID, version.toString())
|
||||||
dependsOn(dokkaHtml)
|
|
||||||
archiveClassifier.set("javadoc")
|
|
||||||
from(dokkaHtml.outputDirectory)
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
pom {
|
||||||
publications {
|
name.set("Tree Data Structure")
|
||||||
|
description.set("Simple implementation to store object in tree structure.")
|
||||||
|
url.set("https://github.com/AdrianKuta/Tree-Data-Structure")
|
||||||
|
|
||||||
withType<MavenPublication> {
|
licenses {
|
||||||
artifact(javadocJar)
|
license {
|
||||||
pom {
|
name.set("MIT License")
|
||||||
name.set("Tree Data Structure")
|
url.set("https://opensource.org/licenses/MIT")
|
||||||
description.set("Simple implementation to store object in tree structure.")
|
distribution.set("repo")
|
||||||
url.set("https://github.com/AdrianKuta/Tree-Data-Structure")
|
|
||||||
licenses {
|
|
||||||
license {
|
|
||||||
name.set("MIT License")
|
|
||||||
url.set("https://www.mit.edu/~amini/LICENSE.md")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
developers {
|
|
||||||
developer {
|
|
||||||
name.set("Adrian Kuta")
|
|
||||||
email.set("adrian.kuta93@gmail.com")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scm {
|
|
||||||
connection.set("scm:git:github.com/AdrianKuta/Tree-Data-Structure.git")
|
|
||||||
developerConnection.set("scm:git:ssh://github.com/AdrianKuta/Tree-Data-Structure.git")
|
|
||||||
url.set("https://github.com/AdrianKuta/Tree-Data-Structure/tree/master")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
developers {
|
||||||
|
developer {
|
||||||
repositories {
|
id.set("AdrianKuta")
|
||||||
maven {
|
name.set("Adrian Kuta")
|
||||||
name = "SonatypeS01"
|
email.set("adrian.kuta93@gmail.com")
|
||||||
// s01 is the supported Nexus host for Central publishing via Maven-compatible uploads
|
|
||||||
val releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
|
|
||||||
val snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
|
|
||||||
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
|
|
||||||
credentials {
|
|
||||||
// Prefer Central Portal credentials when provided, fallback to legacy OSSRH credentials
|
|
||||||
val centralUsername: String? by project
|
|
||||||
val centralPassword: String? by project
|
|
||||||
val CENTRAL_USERNAME: String? by project
|
|
||||||
val CENTRAL_PASSWORD: String? by project
|
|
||||||
val ossrhUsername: String? by project
|
|
||||||
val ossrhPassword: String? by project
|
|
||||||
username = centralUsername
|
|
||||||
?: CENTRAL_USERNAME
|
|
||||||
?: ossrhUsername
|
|
||||||
?: System.getenv("CENTRAL_USERNAME")
|
|
||||||
?: System.getenv("OSSRH_USERNAME")
|
|
||||||
password = centralPassword
|
|
||||||
?: CENTRAL_PASSWORD
|
|
||||||
?: ossrhPassword
|
|
||||||
?: System.getenv("CENTRAL_PASSWORD")
|
|
||||||
?: System.getenv("OSSRH_PASSWORD")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
scm {
|
||||||
|
url.set("https://github.com/AdrianKuta/Tree-Data-Structure")
|
||||||
|
connection.set("scm:git:https://github.com/AdrianKuta/Tree-Data-Structure.git")
|
||||||
|
developerConnection.set("scm:git:ssh://git@github.com/AdrianKuta/Tree-Data-Structure.git")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
signing {
|
// No legacy publishing {} block or s01 repos — Central Portal handles it.
|
||||||
val signingKeyId: String? by project
|
|
||||||
val signingPassword: String? by project
|
|
||||||
val signingKey: String? by project
|
|
||||||
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
|
|
||||||
|
|
||||||
sign(publishing.publications)
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(21))
|
||||||
|
}
|
||||||
|
}
|
||||||
kotlin {
|
kotlin {
|
||||||
|
jvmToolchain(21);
|
||||||
jvm {
|
jvm {
|
||||||
compilations.all {
|
compilations.all {
|
||||||
kotlinOptions.jvmTarget = "1.8"
|
kotlinOptions {
|
||||||
}
|
jvmTarget = "21" // <- was "1.8"
|
||||||
withJava()
|
|
||||||
testRuns["test"].executionTask.configure {
|
|
||||||
useJUnitPlatform()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
js(BOTH) {
|
|
||||||
browser {
|
|
||||||
commonWebpackConfig {
|
|
||||||
cssSupport.enabled = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add iOS targets
|
// iOS targets
|
||||||
iosX64()
|
iosX64()
|
||||||
iosArm64()
|
iosArm64()
|
||||||
iosSimulatorArm64()
|
iosSimulatorArm64()
|
||||||
|
|
||||||
|
// Native host target
|
||||||
val hostOs = System.getProperty("os.name")
|
val hostOs = System.getProperty("os.name")
|
||||||
val isMingwX64 = hostOs.startsWith("Windows")
|
val isMingwX64 = hostOs.startsWith("Windows")
|
||||||
val nativeTarget = when {
|
val nativeTarget = when {
|
||||||
@@ -153,29 +88,15 @@ kotlin {
|
|||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
val commonMain by getting
|
val commonMain by getting
|
||||||
val commonTest by getting {
|
val commonTest by getting { dependencies { implementation(kotlin("test")) } }
|
||||||
dependencies {
|
val jvmMain by getting { dependencies { implementation(kotlin("script-runtime")) } }
|
||||||
implementation(kotlin("test"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val jvmMain by getting {
|
|
||||||
dependencies {
|
|
||||||
implementation(kotlin("script-runtime"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val jvmTest by getting
|
val jvmTest by getting
|
||||||
val jsMain by getting
|
|
||||||
val jsTest by getting
|
|
||||||
val nativeMain by getting
|
val nativeMain by getting
|
||||||
val nativeTest by getting
|
val nativeTest by getting
|
||||||
|
|
||||||
// Shared iOS source sets
|
// Shared iOS source sets
|
||||||
val iosMain by creating {
|
val iosMain by creating { dependsOn(commonMain) }
|
||||||
dependsOn(commonMain)
|
val iosTest by creating { dependsOn(commonTest) }
|
||||||
}
|
|
||||||
val iosTest by creating {
|
|
||||||
dependsOn(commonTest)
|
|
||||||
}
|
|
||||||
val iosX64Main by getting { dependsOn(iosMain) }
|
val iosX64Main by getting { dependsOn(iosMain) }
|
||||||
val iosArm64Main by getting { dependsOn(iosMain) }
|
val iosArm64Main by getting { dependsOn(iosMain) }
|
||||||
val iosSimulatorArm64Main by getting { dependsOn(iosMain) }
|
val iosSimulatorArm64Main by getting { dependsOn(iosMain) }
|
||||||
|
|||||||
Reference in New Issue
Block a user