mirror of
https://github.com/InsanusMokrassar/KotlinPublicationScriptsBuilder.git
synced 2025-09-03 06:59:17 +00:00
Compare commits
16 Commits
build-f723
...
build-a360
Author | SHA1 | Date | |
---|---|---|---|
a360f081f2 | |||
c954e2cf42 | |||
ffe0f3f33b | |||
abb22519eb | |||
87f77543e2 | |||
429f2176f2 | |||
a56b8ae2b5 | |||
4324620932 | |||
265e839dc7 | |||
2144ca2cca | |||
bf21f92c6f | |||
41e8d2c540 | |||
047f51fd96 | |||
08da50705c | |||
3c216af814 | |||
6b5ab5acba |
17
.github/workflows/build.yml
vendored
17
.github/workflows/build.yml
vendored
@@ -1,17 +0,0 @@
|
|||||||
on: [push]
|
|
||||||
|
|
||||||
name: Build
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-ubuntu:
|
|
||||||
name: Commit release
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
- name: Setup JDK
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 11
|
|
||||||
- name: Build
|
|
||||||
run: ./gradlew build packageUberJarForCurrentOS
|
|
4
.github/workflows/commit-release.yml
vendored
4
.github/workflows/commit-release.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
publish_dir: ./web/build/distributions
|
publish_dir: ./core/build/dist/js/productionExecutable
|
||||||
publish_branch: site
|
publish_branch: site
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
id: create_release
|
id: create_release
|
||||||
@@ -44,6 +44,6 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
|
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
|
||||||
asset_path: "./core/build/compose/jars/*.jar"
|
asset_path: "./core/build/compose/jars/kmppscriptbuilder.core-linux-x64-${{ env.version }}${{ env.additional_version }}.jar"
|
||||||
asset_name: KotlinPublicationScriptsBuilder-linux-x64.jar
|
asset_name: KotlinPublicationScriptsBuilder-linux-x64.jar
|
||||||
asset_content_type: application/java-archive
|
asset_content_type: application/java-archive
|
||||||
|
@@ -0,0 +1,50 @@
|
|||||||
|
package dev.inmo.kmppscriptbuilder.core.export
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.MavenConfig
|
||||||
|
|
||||||
|
const val generateCentralSonatypeUploadingPartImports = """import java.nio.charset.StandardCharsets
|
||||||
|
import java.net.http.HttpClient
|
||||||
|
import java.net.http.HttpRequest
|
||||||
|
import java.net.http.HttpResponse"""
|
||||||
|
const val generateCentralSonatypeUploadingPart = """// This script work based on https://ossrh-staging-api.central.sonatype.com/swagger-ui/#/default/manual_upload_repository
|
||||||
|
// and getting available open repos and just uploading them
|
||||||
|
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
|
||||||
|
def taskName = "uploadSonatypePublication"
|
||||||
|
if (rootProject.tasks.names.contains(taskName) == false) {
|
||||||
|
rootProject.tasks.register(taskName) {
|
||||||
|
doLast {
|
||||||
|
def username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
||||||
|
def password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
||||||
|
def bearer = Base64.getEncoder().encodeToString("${"$"}username:${"$"}password".getBytes(StandardCharsets.UTF_8))
|
||||||
|
|
||||||
|
def client = HttpClient.newHttpClient()
|
||||||
|
def request = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create("https://ossrh-staging-api.central.sonatype.com/manual/search/repositories?state=open"))
|
||||||
|
.GET()
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.header("Authorization", "Bearer ${"$"}bearer")
|
||||||
|
.build()
|
||||||
|
|
||||||
|
def response = client.send(request, HttpResponse.BodyHandlers.ofString())
|
||||||
|
def keys = new ArrayList<String>()
|
||||||
|
response.body().findAll("\"key\"[\\s]*:[\\s]*\"[^\"]+\"").forEach {
|
||||||
|
def key = it.find("[^\"]+\"\$").find("[^\"]+")
|
||||||
|
keys.add(key)
|
||||||
|
}
|
||||||
|
keys.forEach {
|
||||||
|
println("Start uploading ${"$"}it")
|
||||||
|
def uploadRequest = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create("https://ossrh-staging-api.central.sonatype.com/manual/upload/repository/${"$"}it?publishing_type=user_managed"))
|
||||||
|
.POST(HttpRequest.BodyPublishers.ofString(""))
|
||||||
|
.header("Content-Type", "application/json")
|
||||||
|
.header("Authorization", "Bearer ${"$"}bearer")
|
||||||
|
.build()
|
||||||
|
def uploadResponse = client.send(uploadRequest, HttpResponse.BodyHandlers.ofString())
|
||||||
|
if (uploadResponse.statusCode() != 200) {
|
||||||
|
throw new IllegalStateException("Faced error of uploading for repo with key ${"$"}it. Response: ${"$"}uploadResponse")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}"""
|
@@ -8,18 +8,41 @@ fun GpgSigning.generateMavenConfig() = when (this) {
|
|||||||
"""
|
"""
|
||||||
if (project.hasProperty("signing.gnupg.keyName")) {
|
if (project.hasProperty("signing.gnupg.keyName")) {
|
||||||
apply plugin: 'signing'
|
apply plugin: 'signing'
|
||||||
|
|
||||||
signing {
|
signing {
|
||||||
useGpgCmd()
|
useGpgCmd()
|
||||||
|
|
||||||
sign publishing.publications
|
sign publishing.publications
|
||||||
}
|
}
|
||||||
|
|
||||||
task signAll {
|
task signAll {
|
||||||
tasks.withType(Sign).forEach {
|
tasks.withType(Sign).forEach {
|
||||||
dependsOn(it)
|
dependsOn(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Workaround to make android sign operations depend on signing tasks
|
||||||
|
project.getTasks().withType(AbstractPublishToMaven.class).configureEach {
|
||||||
|
def signingTasks = project.getTasks().withType(Sign.class)
|
||||||
|
mustRunAfter(signingTasks)
|
||||||
|
}
|
||||||
|
// Workaround to make test tasks use sign
|
||||||
|
project.getTasks().withType(Sign.class).configureEach { signTask ->
|
||||||
|
def withoutSign = (signTask.name.startsWith("sign") ? signTask.name.minus("sign") : signTask.name)
|
||||||
|
def pubName = withoutSign.endsWith("Publication") ? withoutSign.substring(0, withoutSign.length() - "Publication".length()) : withoutSign
|
||||||
|
// These tasks only exist for native targets, hence findByName() to avoid trying to find them for other targets
|
||||||
|
|
||||||
|
// Task ':linkDebugTest<platform>' uses this output of task ':sign<platform>Publication' without declaring an explicit or implicit dependency
|
||||||
|
def debugTestTask = tasks.findByName("linkDebugTest${'$'}pubName")
|
||||||
|
if (debugTestTask != null) {
|
||||||
|
signTask.mustRunAfter(debugTestTask)
|
||||||
|
}
|
||||||
|
// Task ':compileTestKotlin<platform>' uses this output of task ':sign<platform>Publication' without declaring an explicit or implicit dependency
|
||||||
|
def testTask = tasks.findByName("compileTestKotlin${'$'}pubName")
|
||||||
|
if (testTask != null) {
|
||||||
|
signTask.mustRunAfter(testTask)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
GpgSigning.Enabled ->
|
GpgSigning.Enabled ->
|
||||||
@@ -37,5 +60,28 @@ task signAll {
|
|||||||
dependsOn(it)
|
dependsOn(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Workaround to make android sign operations depend on signing tasks
|
||||||
|
project.getTasks().withType(AbstractPublishToMaven.class).configureEach {
|
||||||
|
def signingTasks = project.getTasks().withType(Sign.class)
|
||||||
|
mustRunAfter(signingTasks)
|
||||||
|
}
|
||||||
|
// Workaround to make test tasks use sign
|
||||||
|
project.getTasks().withType(Sign.class).configureEach { signTask ->
|
||||||
|
def withoutSign = (signTask.name.startsWith("sign") ? signTask.name.minus("sign") : signTask.name)
|
||||||
|
def pubName = withoutSign.endsWith("Publication") ? withoutSign.substring(0, withoutSign.length() - "Publication".length()) : withoutSign
|
||||||
|
// These tasks only exist for native targets, hence findByName() to avoid trying to find them for other targets
|
||||||
|
|
||||||
|
// Task ':linkDebugTest<platform>' uses this output of task ':sign<platform>Publication' without declaring an explicit or implicit dependency
|
||||||
|
def debugTestTask = tasks.findByName("linkDebugTest${'$'}pubName")
|
||||||
|
if (debugTestTask != null) {
|
||||||
|
signTask.mustRunAfter(debugTestTask)
|
||||||
|
}
|
||||||
|
// Task ':compileTestKotlin<platform>' uses this output of task ':sign<platform>Publication' without declaring an explicit or implicit dependency
|
||||||
|
def testTask = tasks.findByName("compileTestKotlin${'$'}pubName")
|
||||||
|
if (testTask != null) {
|
||||||
|
signTask.mustRunAfter(testTask)
|
||||||
|
}
|
||||||
|
}
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
@@ -1,19 +1,23 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.export.js_only
|
package dev.inmo.kmppscriptbuilder.core.export.js_only
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateCentralSonatypeUploadingPart
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateCentralSonatypeUploadingPartImports
|
||||||
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.*
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
|
|
||||||
fun MavenConfig.buildJsOnlyMavenConfig(licenses: List<License>): String = """
|
fun MavenConfig.buildJsOnlyMavenConfig(licenses: List<License>): String = """
|
||||||
|
${if (includeCentralSonatypeUploadingScript) "$generateCentralSonatypeUploadingPartImports\n" else ""}
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
${if (includeCentralSonatypeUploadingScript) "$generateCentralSonatypeUploadingPart\n" else ""}
|
||||||
|
|
||||||
task javadocJar(type: Jar) {
|
task javadocJar(type: Jar) {
|
||||||
classifier = 'javadoc'
|
archiveClassifier = 'javadoc'
|
||||||
}
|
}
|
||||||
task sourcesJar(type: Jar) {
|
task sourcesJar(type: Jar) {
|
||||||
kotlin.sourceSets.all {
|
kotlin.sourceSets.all {
|
||||||
from(kotlin)
|
from(kotlin)
|
||||||
}
|
}
|
||||||
classifier = 'sources'
|
archiveClassifier = 'sources'
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
@@ -57,11 +61,11 @@ publishing {
|
|||||||
""" }}
|
""" }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
repositories {
|
|
||||||
${repositories.joinToString("\n ") { it.build(" ") }}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
repositories {
|
||||||
|
${repositories.joinToString("\n ") { it.build(" ") }}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
${gpgSigning.generateMavenConfig()}
|
${gpgSigning.generateMavenConfig()}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
@@ -1,18 +1,22 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.export.jvm_only
|
package dev.inmo.kmppscriptbuilder.core.export.jvm_only
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateCentralSonatypeUploadingPart
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateCentralSonatypeUploadingPartImports
|
||||||
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.*
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
|
|
||||||
fun MavenConfig.buildJvmOnlyMavenConfig(licenses: List<License>): String = """
|
fun MavenConfig.buildJvmOnlyMavenConfig(licenses: List<License>): String = """
|
||||||
|
${if (includeCentralSonatypeUploadingScript) "$generateCentralSonatypeUploadingPartImports\n" else ""}
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
${if (includeCentralSonatypeUploadingScript) "$generateCentralSonatypeUploadingPart\n" else ""}
|
||||||
|
|
||||||
task javadocJar(type: Jar) {
|
task javadocJar(type: Jar) {
|
||||||
from javadoc
|
from javadoc
|
||||||
classifier = 'javadoc'
|
archiveClassifier = 'javadoc'
|
||||||
}
|
}
|
||||||
task sourcesJar(type: Jar) {
|
task sourcesJar(type: Jar) {
|
||||||
from sourceSets.main.allSource
|
from sourceSets.main.allSource
|
||||||
classifier = 'sources'
|
archiveClassifier = 'sources'
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
@@ -54,11 +58,11 @@ publishing {
|
|||||||
""" }}
|
""" }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
repositories {
|
|
||||||
${repositories.joinToString("\n ") { it.build(" ") }}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
repositories {
|
||||||
|
${repositories.joinToString("\n ") { it.build(" ") }}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
${gpgSigning.generateMavenConfig()}
|
${gpgSigning.generateMavenConfig()}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
@@ -1,13 +1,16 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.export.mpp
|
package dev.inmo.kmppscriptbuilder.core.export.mpp
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateCentralSonatypeUploadingPart
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateCentralSonatypeUploadingPartImports
|
||||||
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.*
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
|
|
||||||
fun MavenConfig.buildMultiplatformMavenConfig(licenses: List<License>): String = """
|
fun MavenConfig.buildMultiplatformMavenConfig(licenses: List<License>): String = """
|
||||||
|
${if (includeCentralSonatypeUploadingScript) "$generateCentralSonatypeUploadingPartImports\n" else ""}
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
${if (includeCentralSonatypeUploadingScript) "$generateCentralSonatypeUploadingPart\n" else ""}
|
||||||
task javadocsJar(type: Jar) {
|
task javadocsJar(type: Jar) {
|
||||||
classifier = 'javadoc'
|
archiveClassifier = 'javadoc'
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
@@ -24,28 +27,24 @@ publishing {
|
|||||||
url = "$vcsUrl"
|
url = "$vcsUrl"
|
||||||
}
|
}
|
||||||
|
|
||||||
developers {
|
developers {${developers.joinToString("\n") { """
|
||||||
${developers.joinToString("\n") { """
|
developer {
|
||||||
developer {
|
id = "${it.id}"
|
||||||
id = "${it.id}"
|
name = "${it.name}"
|
||||||
name = "${it.name}"
|
email = "${it.eMail}"
|
||||||
email = "${it.eMail}"
|
}""" }}
|
||||||
}
|
|
||||||
""" }}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
licenses {
|
licenses {${licenses.joinToString("\n") { """
|
||||||
${licenses.joinToString("\n") { """
|
license {
|
||||||
license {
|
name = "${it.title}"
|
||||||
name = "${it.title}"
|
url = "${it.url}"
|
||||||
url = "${it.url}"
|
}""" }}
|
||||||
}
|
|
||||||
""" }}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
repositories {
|
}
|
||||||
${repositories.joinToString("\n ") { it.build(" ") }}
|
repositories {
|
||||||
}
|
${repositories.joinToString("\n ") { it.build(" ") }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
${gpgSigning.generateMavenConfig()}
|
${gpgSigning.generateMavenConfig()}
|
||||||
|
@@ -26,6 +26,7 @@ data class MavenConfig(
|
|||||||
val gpgSigning: GpgSigning = GpgSigning.Disabled,
|
val gpgSigning: GpgSigning = GpgSigning.Disabled,
|
||||||
@Deprecated("Replaced with gpgSigning")
|
@Deprecated("Replaced with gpgSigning")
|
||||||
val includeGpgSigning: Boolean = false,
|
val includeGpgSigning: Boolean = false,
|
||||||
|
val includeCentralSonatypeUploadingScript: Boolean = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@@ -61,8 +62,7 @@ return """
|
|||||||
credentials {
|
credentials {
|
||||||
username = project.hasProperty('${usernameProperty}') ? project.property('${usernameProperty}') : System.getenv('${usernameProperty}')
|
username = project.hasProperty('${usernameProperty}') ? project.property('${usernameProperty}') : System.getenv('${usernameProperty}')
|
||||||
password = project.hasProperty('${passwordProperty}') ? project.property('${passwordProperty}') : System.getenv('${passwordProperty}')
|
password = project.hasProperty('${passwordProperty}') ? project.property('${passwordProperty}') : System.getenv('${passwordProperty}')
|
||||||
}
|
}"""
|
||||||
"""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -86,7 +86,10 @@ return """
|
|||||||
name = "$headerName"
|
name = "$headerName"
|
||||||
value = project.hasProperty('${headerValueProperty}') ? project.property('${headerValueProperty}') : System.getenv('${headerValueProperty}')
|
value = project.hasProperty('${headerValueProperty}') ? project.property('${headerValueProperty}') : System.getenv('${headerValueProperty}')
|
||||||
}
|
}
|
||||||
"""
|
|
||||||
|
authentication {
|
||||||
|
header(HttpHeaderAuthentication)
|
||||||
|
}"""
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -115,3 +118,4 @@ ${credsType.buildCredsPart()}
|
|||||||
}
|
}
|
||||||
|
|
||||||
val SonatypeRepository = MavenPublishingRepository("sonatype", "https://oss.sonatype.org/service/local/staging/deploy/maven2/")
|
val SonatypeRepository = MavenPublishingRepository("sonatype", "https://oss.sonatype.org/service/local/staging/deploy/maven2/")
|
||||||
|
val CentralSonatypeRepository = MavenPublishingRepository("sonatype", "https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/")
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.ui
|
package dev.inmo.kmppscriptbuilder.core.ui
|
||||||
|
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.CentralSonatypeRepository
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.GpgSigning
|
import dev.inmo.kmppscriptbuilder.core.models.GpgSigning
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.MavenConfig
|
import dev.inmo.kmppscriptbuilder.core.models.MavenConfig
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.SonatypeRepository
|
import dev.inmo.kmppscriptbuilder.core.models.SonatypeRepository
|
||||||
@@ -23,22 +24,31 @@ class MavenInfoView : VerticalView("Project information") {
|
|||||||
internal var projectVcsUrlProperty by mutableStateOf("")
|
internal var projectVcsUrlProperty by mutableStateOf("")
|
||||||
internal var gpgSignProperty by mutableStateOf<GpgSigning>(GpgSigning.Disabled)
|
internal var gpgSignProperty by mutableStateOf<GpgSigning>(GpgSigning.Disabled)
|
||||||
internal var publishToMavenCentralProperty by mutableStateOf(false)
|
internal var publishToMavenCentralProperty by mutableStateOf(false)
|
||||||
|
internal var publishToCentralSonatypeProperty by mutableStateOf(false)
|
||||||
|
internal var includeCentralSonatypeUploadingScriptProperty by mutableStateOf(false)
|
||||||
internal val developersView = DevelopersView()
|
internal val developersView = DevelopersView()
|
||||||
internal val repositoriesView = RepositoriesView()
|
internal val repositoriesView = RepositoriesView()
|
||||||
|
|
||||||
var mavenConfig: MavenConfig
|
var mavenConfig: MavenConfig
|
||||||
get() = MavenConfig(
|
get() = MavenConfig(
|
||||||
projectNameProperty.ifBlank { defaultProjectName },
|
name = projectNameProperty.ifBlank { defaultProjectName },
|
||||||
projectDescriptionProperty.ifBlank { defaultProjectDescription },
|
description = projectDescriptionProperty.ifBlank { defaultProjectDescription },
|
||||||
projectUrlProperty,
|
url = projectUrlProperty,
|
||||||
projectVcsUrlProperty,
|
vcsUrl = projectVcsUrlProperty,
|
||||||
developersView.developers,
|
developers = developersView.developers,
|
||||||
repositoriesView.repositories + if (publishToMavenCentralProperty) {
|
repositories = repositoriesView.repositories + if (publishToMavenCentralProperty) {
|
||||||
listOf(SonatypeRepository)
|
listOf(
|
||||||
|
if (publishToCentralSonatypeProperty) {
|
||||||
|
CentralSonatypeRepository
|
||||||
|
} else {
|
||||||
|
SonatypeRepository
|
||||||
|
}
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
emptyList()
|
emptyList()
|
||||||
},
|
},
|
||||||
gpgSignProperty
|
gpgSigning = gpgSignProperty,
|
||||||
|
includeCentralSonatypeUploadingScript = includeCentralSonatypeUploadingScriptProperty
|
||||||
)
|
)
|
||||||
set(value) {
|
set(value) {
|
||||||
projectNameProperty = value.name
|
projectNameProperty = value.name
|
||||||
@@ -50,9 +60,11 @@ class MavenInfoView : VerticalView("Project information") {
|
|||||||
} else {
|
} else {
|
||||||
value.gpgSigning
|
value.gpgSigning
|
||||||
}
|
}
|
||||||
publishToMavenCentralProperty = value.repositories.any { it == SonatypeRepository }
|
publishToMavenCentralProperty = value.repositories.any { it == SonatypeRepository || it == CentralSonatypeRepository }
|
||||||
developersView.developers = value.developers
|
developersView.developers = value.developers
|
||||||
repositoriesView.repositories = value.repositories.filter { it != SonatypeRepository }
|
repositoriesView.repositories = value.repositories.filter { it != SonatypeRepository && it != CentralSonatypeRepository }
|
||||||
|
publishToCentralSonatypeProperty = value.repositories.any { it == CentralSonatypeRepository }
|
||||||
|
includeCentralSonatypeUploadingScriptProperty = value.includeCentralSonatypeUploadingScript
|
||||||
}
|
}
|
||||||
|
|
||||||
private val gpgSigningDrawer = GpgSigningOptionDrawerWithView(this)
|
private val gpgSigningDrawer = GpgSigningOptionDrawerWithView(this)
|
||||||
@@ -100,6 +112,20 @@ class MavenInfoView : VerticalView("Project information") {
|
|||||||
publishToMavenCentralProperty,
|
publishToMavenCentralProperty,
|
||||||
placeSwitchAtTheStart = true
|
placeSwitchAtTheStart = true
|
||||||
) { publishToMavenCentralProperty = it }
|
) { publishToMavenCentralProperty = it }
|
||||||
|
if (publishToMavenCentralProperty) {
|
||||||
|
SwitchWithLabel(
|
||||||
|
"Use Central Sonatype instead of OSSRH (OSSRH has been deprecated)",
|
||||||
|
publishToCentralSonatypeProperty,
|
||||||
|
placeSwitchAtTheStart = true
|
||||||
|
) { publishToCentralSonatypeProperty = it }
|
||||||
|
if (publishToCentralSonatypeProperty) {
|
||||||
|
SwitchWithLabel(
|
||||||
|
"Add 'uploadSonatypePublication' root project task (required for Central Sonatype publishing)",
|
||||||
|
includeCentralSonatypeUploadingScriptProperty,
|
||||||
|
placeSwitchAtTheStart = true
|
||||||
|
) { includeCentralSonatypeUploadingScriptProperty = it }
|
||||||
|
}
|
||||||
|
}
|
||||||
developersView.build()
|
developersView.build()
|
||||||
repositoriesView.build()
|
repositoriesView.build()
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,18 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.ui
|
package dev.inmo.kmppscriptbuilder.core.ui
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.heightIn
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.Button
|
import androidx.compose.material.Button
|
||||||
import androidx.compose.material.Divider
|
import androidx.compose.material.Divider
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.focus.onFocusChanged
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonText
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonText
|
||||||
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonTextField
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonTextField
|
||||||
@@ -14,17 +21,29 @@ import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
|
|||||||
actual object LicensesDrawer : Drawer<LicensesView> {
|
actual object LicensesDrawer : Drawer<LicensesView> {
|
||||||
@Composable
|
@Composable
|
||||||
override fun LicensesView.draw() {
|
override fun LicensesView.draw() {
|
||||||
if (searchFieldFocused.value) {
|
val internalFocusState = remember { mutableStateOf(false) }
|
||||||
Column {
|
if (searchFieldFocused.value || internalFocusState.value) {
|
||||||
licensesOffersToShow.value.forEach {
|
}
|
||||||
Column(Modifier.padding(16.dp, 8.dp, 8.dp, 8.dp)) {
|
Column(
|
||||||
CommonText(it.title) {
|
Modifier
|
||||||
itemsList.add(it.toLicenseState())
|
.let {
|
||||||
licenseSearchFilter = ""
|
if (searchFieldFocused.value) {
|
||||||
}
|
it.heightIn(max = 128.dp)
|
||||||
Divider()
|
} else {
|
||||||
|
it.height(0.dp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.verticalScroll(rememberScrollState())
|
||||||
|
) {
|
||||||
|
licensesOffersToShow.value.forEach {
|
||||||
|
Column(Modifier.padding(16.dp, 8.dp, 8.dp, 8.dp)) {
|
||||||
|
CommonText(it.title) {
|
||||||
|
itemsList.add(it.toLicenseState())
|
||||||
|
licenseSearchFilter = ""
|
||||||
|
internalFocusState.value = false
|
||||||
|
}
|
||||||
|
Divider()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,7 @@ import androidx.compose.material.Divider
|
|||||||
import androidx.compose.material.OutlinedTextField
|
import androidx.compose.material.OutlinedTextField
|
||||||
import androidx.compose.material.Switch
|
import androidx.compose.material.Switch
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.material.TextButton
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@@ -73,7 +74,11 @@ actual fun CommonTextField(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun CommonText(text: String, onClick: (() -> Unit)?) {
|
actual fun CommonText(text: String, onClick: (() -> Unit)?) {
|
||||||
Text(text, modifier = Modifier.run { onClick ?.let { clickable(onClick = it) } ?: this })
|
onClick ?.let {
|
||||||
|
TextButton(it) {
|
||||||
|
Text(text)
|
||||||
|
}
|
||||||
|
} ?: Text(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@@ -4,18 +4,6 @@ kotlin.js.generate.externals=true
|
|||||||
kotlin.incremental=true
|
kotlin.incremental=true
|
||||||
kotlin.incremental.js=true
|
kotlin.incremental.js=true
|
||||||
|
|
||||||
kotlin_version=1.7.20
|
|
||||||
kotlin_coroutines_version=1.6.4
|
|
||||||
kotlin_serialisation_core_version=1.4.1
|
|
||||||
ktor_version=2.1.3
|
|
||||||
micro_utils_version=0.14.2
|
|
||||||
|
|
||||||
compose_version=1.2.1
|
|
||||||
|
|
||||||
# Dokka
|
|
||||||
|
|
||||||
dokka_version=1.7.20
|
|
||||||
|
|
||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
kt = "1.7.20"
|
kt = "1.9.20"
|
||||||
kt-serialization = "1.4.1"
|
kt-serialization = "1.6.0"
|
||||||
kt-coroutines = "1.6.4"
|
kt-coroutines = "1.7.3"
|
||||||
|
|
||||||
jb-compose = "1.2.1"
|
jb-compose = "1.5.10"
|
||||||
jb-dokka = "1.7.20"
|
jb-dokka = "1.9.10"
|
||||||
microutils = "0.14.2"
|
microutils = "0.20.11"
|
||||||
kjsuikit = "0.4.1"
|
kjsuikit = "0.7.3"
|
||||||
|
|
||||||
ktor = "2.1.3"
|
ktor = "2.3.5"
|
||||||
|
|
||||||
gh-release = "2.4.1"
|
gh-release = "2.4.1"
|
||||||
|
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
|
||||||
|
@@ -13,7 +13,7 @@ kotlin {
|
|||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('stdlib')
|
implementation kotlin('stdlib')
|
||||||
api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialisation_core_version"
|
api libs.kt.serialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commonTest {
|
commonTest {
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
project.version = "$version" + System.getenv("additional_version")
|
project.version = "$version" + (System.getenv("additional_version") == null ? "" : System.getenv("additional_version"))
|
||||||
project.group = "$group"
|
project.group = "$group"
|
||||||
|
|
||||||
// apply from: "$publishGradlePath"
|
// apply from: "$publishGradlePath"
|
||||||
@@ -14,7 +14,7 @@ kotlin {
|
|||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('stdlib')
|
implementation kotlin('stdlib')
|
||||||
api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialisation_core_version"
|
api libs.kt.serialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
commonTest {
|
commonTest {
|
||||||
|
Reference in New Issue
Block a user