mirror of
https://github.com/InsanusMokrassar/KotlinPublicationScriptsBuilder.git
synced 2025-09-03 06:59:17 +00:00
Compare commits
14 Commits
build-b430
...
build-26a5
Author | SHA1 | Date | |
---|---|---|---|
26a5d20e26 | |||
ca1a91e0f0 | |||
26fe225577 | |||
9a95bddf08 | |||
c880d8e657 | |||
ac87a140cc | |||
0dbe3a866b | |||
7c50c58a90 | |||
ceff1eb1ef | |||
46d6d429bb | |||
dd9e71c9a2 | |||
6d2ffb8a6e | |||
25767eecb2 | |||
603da9a021 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -10,3 +10,4 @@ build/
|
|||||||
out/
|
out/
|
||||||
|
|
||||||
local.properties
|
local.properties
|
||||||
|
kotlin-js-store/
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
@@ -8,7 +7,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.0.2'
|
classpath 'com.android.tools.build:gradle:7.0.4'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
||||||
classpath "com.getkeepsafe.dexcount:dexcount-gradle-plugin:$dexcount_version"
|
classpath "com.getkeepsafe.dexcount:dexcount-gradle-plugin:$dexcount_version"
|
||||||
@@ -19,10 +18,8 @@ buildscript {
|
|||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
jcenter()
|
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
maven { url "https://kotlin.bintray.com/kotlinx" }
|
|
||||||
maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" }
|
maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,41 @@
|
|||||||
|
package dev.inmo.kmppscriptbuilder.core.export
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.GpgSigning
|
||||||
|
|
||||||
|
fun GpgSigning.generateMavenConfig() = when (this) {
|
||||||
|
GpgSigning.Disabled -> ""
|
||||||
|
GpgSigning.Optional ->
|
||||||
|
"""
|
||||||
|
if (project.hasProperty("signing.gnupg.keyName")) {
|
||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
signing {
|
||||||
|
useGpgCmd()
|
||||||
|
|
||||||
|
sign publishing.publications
|
||||||
|
}
|
||||||
|
|
||||||
|
task signAll {
|
||||||
|
tasks.withType(Sign).forEach {
|
||||||
|
dependsOn(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
GpgSigning.Enabled ->
|
||||||
|
"""
|
||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
signing {
|
||||||
|
useGpgCmd()
|
||||||
|
|
||||||
|
sign publishing.publications
|
||||||
|
}
|
||||||
|
|
||||||
|
task signAll {
|
||||||
|
tasks.withType(Sign).forEach {
|
||||||
|
dependsOn(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
}
|
@@ -0,0 +1,67 @@
|
|||||||
|
package dev.inmo.kmppscriptbuilder.core.export.js_only
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.generateMavenConfig
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
|
|
||||||
|
fun MavenConfig.buildJsOnlyMavenConfig(licenses: List<License>): String = """
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
|
task javadocJar(type: Jar) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
}
|
||||||
|
task sourcesJar(type: Jar) {
|
||||||
|
kotlin.sourceSets.all {
|
||||||
|
from(kotlin)
|
||||||
|
}
|
||||||
|
classifier = 'sources'
|
||||||
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
maven(MavenPublication) {
|
||||||
|
kotlin.js().components.forEach {
|
||||||
|
from(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
artifact javadocJar
|
||||||
|
artifact sourcesJar
|
||||||
|
|
||||||
|
pom {
|
||||||
|
resolveStrategy = Closure.DELEGATE_FIRST
|
||||||
|
|
||||||
|
description = "$description"
|
||||||
|
name = "$name"
|
||||||
|
url = "$url"
|
||||||
|
|
||||||
|
scm {
|
||||||
|
developerConnection = "scm:git:[fetch=]${vcsUrl}[push=]${vcsUrl}"
|
||||||
|
url = "$vcsUrl"
|
||||||
|
}
|
||||||
|
|
||||||
|
developers {
|
||||||
|
${developers.joinToString("\n") { """
|
||||||
|
developer {
|
||||||
|
id = "${it.id}"
|
||||||
|
name = "${it.name}"
|
||||||
|
email = "${it.eMail}"
|
||||||
|
}
|
||||||
|
""" }}
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
${licenses.joinToString("\n") { """
|
||||||
|
license {
|
||||||
|
name = "${it.title}"
|
||||||
|
url = "${it.url}"
|
||||||
|
}
|
||||||
|
""" }}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
${repositories.joinToString("\n ") { it.build(" ") }}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
${gpgSigning.generateMavenConfig()}
|
||||||
|
""".trimIndent()
|
@@ -1,69 +1,64 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.export.jvm_only
|
package dev.inmo.kmppscriptbuilder.core.export.jvm_only
|
||||||
|
|
||||||
|
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 = """
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
${if (includeGpgSigning) "apply plugin: 'signing'\n" else ""}
|
|
||||||
|
|
||||||
task javadocJar(type: Jar) {
|
|
||||||
from javadoc
|
|
||||||
classifier = 'javadoc'
|
|
||||||
}
|
|
||||||
task sourcesJar(type: Jar) {
|
|
||||||
from sourceSets.main.allSource
|
|
||||||
classifier = 'sources'
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
task javadocJar(type: Jar) {
|
||||||
publications {
|
from javadoc
|
||||||
maven(MavenPublication) {
|
classifier = 'javadoc'
|
||||||
from components.java
|
}
|
||||||
|
task sourcesJar(type: Jar) {
|
||||||
artifact javadocJar
|
from sourceSets.main.allSource
|
||||||
artifact sourcesJar
|
classifier = 'sources'
|
||||||
|
}
|
||||||
|
|
||||||
pom {
|
publishing {
|
||||||
resolveStrategy = Closure.DELEGATE_FIRST
|
publications {
|
||||||
|
maven(MavenPublication) {
|
||||||
|
from components.java
|
||||||
|
|
||||||
description = "$description"
|
artifact javadocJar
|
||||||
name = "$name"
|
artifact sourcesJar
|
||||||
url = "$url"
|
|
||||||
|
|
||||||
scm {
|
pom {
|
||||||
developerConnection = "scm:git:[fetch=]${vcsUrl}[push=]${vcsUrl}"
|
resolveStrategy = Closure.DELEGATE_FIRST
|
||||||
url = "$vcsUrl"
|
|
||||||
}
|
|
||||||
|
|
||||||
developers {
|
description = "$description"
|
||||||
${developers.joinToString("\n") { """
|
name = "$name"
|
||||||
developer {
|
url = "$url"
|
||||||
id = "${it.id}"
|
|
||||||
name = "${it.name}"
|
|
||||||
email = "${it.eMail}"
|
|
||||||
}
|
|
||||||
""" }}
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
scm {
|
||||||
${licenses.joinToString("\n") { """
|
developerConnection = "scm:git:[fetch=]${vcsUrl}[push=]${vcsUrl}"
|
||||||
license {
|
url = "$vcsUrl"
|
||||||
name = "${it.title}"
|
|
||||||
url = "${it.url}"
|
|
||||||
}
|
|
||||||
""" }}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
repositories {
|
|
||||||
${repositories.joinToString("\n ") { it.build(" ") }}
|
developers {
|
||||||
|
${developers.joinToString("\n") { """
|
||||||
|
developer {
|
||||||
|
id = "${it.id}"
|
||||||
|
name = "${it.name}"
|
||||||
|
email = "${it.eMail}"
|
||||||
|
}
|
||||||
|
""" }}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
${licenses.joinToString("\n") { """
|
||||||
|
license {
|
||||||
|
name = "${it.title}"
|
||||||
|
url = "${it.url}"
|
||||||
|
}
|
||||||
|
""" }}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
repositories {
|
||||||
|
${repositories.joinToString("\n ") { it.build(" ") }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
${if (includeGpgSigning) """
|
}
|
||||||
signing {
|
${gpgSigning.generateMavenConfig()}
|
||||||
useGpgCmd()
|
""".trimIndent()
|
||||||
sign publishing.publications
|
|
||||||
}
|
|
||||||
""" else ""}
|
|
||||||
""".trimIndent()
|
|
||||||
|
@@ -1,56 +1,52 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.export.mpp
|
package dev.inmo.kmppscriptbuilder.core.export.mpp
|
||||||
|
|
||||||
|
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 = """
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
${if (includeGpgSigning) "apply plugin: 'signing'\n" else ""}
|
|
||||||
task javadocsJar(type: Jar) {
|
|
||||||
classifier = 'javadoc'
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
task javadocsJar(type: Jar) {
|
||||||
publications.all {
|
classifier = 'javadoc'
|
||||||
artifact javadocsJar
|
}
|
||||||
|
|
||||||
pom {
|
publishing {
|
||||||
description = "$description"
|
publications.all {
|
||||||
name = "$name"
|
artifact javadocsJar
|
||||||
url = "$url"
|
|
||||||
|
|
||||||
scm {
|
pom {
|
||||||
developerConnection = "scm:git:[fetch=]${vcsUrl}[push=]${vcsUrl}"
|
description = "$description"
|
||||||
url = "$vcsUrl"
|
name = "$name"
|
||||||
}
|
url = "$url"
|
||||||
|
|
||||||
developers {
|
scm {
|
||||||
${developers.joinToString("\n") { """
|
developerConnection = "scm:git:[fetch=]${vcsUrl}[push=]${vcsUrl}"
|
||||||
developer {
|
url = "$vcsUrl"
|
||||||
id = "${it.id}"
|
|
||||||
name = "${it.name}"
|
|
||||||
email = "${it.eMail}"
|
|
||||||
}
|
|
||||||
""" }}
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
|
||||||
${licenses.joinToString("\n") { """
|
|
||||||
license {
|
|
||||||
name = "${it.title}"
|
|
||||||
url = "${it.url}"
|
|
||||||
}
|
|
||||||
""" }}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
repositories {
|
|
||||||
${repositories.joinToString("\n ") { it.build(" ") }}
|
developers {
|
||||||
|
${developers.joinToString("\n") { """
|
||||||
|
developer {
|
||||||
|
id = "${it.id}"
|
||||||
|
name = "${it.name}"
|
||||||
|
email = "${it.eMail}"
|
||||||
|
}
|
||||||
|
""" }}
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
${licenses.joinToString("\n") { """
|
||||||
|
license {
|
||||||
|
name = "${it.title}"
|
||||||
|
url = "${it.url}"
|
||||||
|
}
|
||||||
|
""" }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
repositories {
|
||||||
|
${repositories.joinToString("\n ") { it.build(" ") }}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
${if (includeGpgSigning) """
|
}
|
||||||
signing {
|
${gpgSigning.generateMavenConfig()}
|
||||||
useGpgCmd()
|
""".trimIndent()
|
||||||
sign publishing.publications
|
|
||||||
}
|
|
||||||
""" else ""}
|
|
||||||
""".trimIndent()
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.core.models
|
package dev.inmo.kmppscriptbuilder.core.models
|
||||||
|
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.export.js_only.buildJsOnlyMavenConfig
|
||||||
import dev.inmo.kmppscriptbuilder.core.export.jvm_only.buildJvmOnlyMavenConfig
|
import dev.inmo.kmppscriptbuilder.core.export.jvm_only.buildJvmOnlyMavenConfig
|
||||||
import dev.inmo.kmppscriptbuilder.core.export.mpp.buildMultiplatformMavenConfig
|
import dev.inmo.kmppscriptbuilder.core.export.mpp.buildMultiplatformMavenConfig
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
@@ -32,12 +33,6 @@ object ProjectTypeSerializer : KSerializer<ProjectType> {
|
|||||||
|
|
||||||
object MultiplatformProjectType : ProjectType() {
|
object MultiplatformProjectType : ProjectType() {
|
||||||
override val name: String = "Multiplatform"
|
override val name: String = "Multiplatform"
|
||||||
// override fun buildBintrayGradleConfig(
|
|
||||||
// bintrayConfig: BintrayConfig,
|
|
||||||
// licenses: List<License>
|
|
||||||
// ): String = bintrayConfig.buildMultiplatformGradleConfig(
|
|
||||||
// licenses
|
|
||||||
// )
|
|
||||||
|
|
||||||
override fun buildMavenGradleConfig(
|
override fun buildMavenGradleConfig(
|
||||||
mavenConfig: MavenConfig,
|
mavenConfig: MavenConfig,
|
||||||
@@ -49,12 +44,6 @@ object MultiplatformProjectType : ProjectType() {
|
|||||||
|
|
||||||
object JVMProjectType : ProjectType() {
|
object JVMProjectType : ProjectType() {
|
||||||
override val name: String = "JVM"
|
override val name: String = "JVM"
|
||||||
// override fun buildBintrayGradleConfig(
|
|
||||||
// bintrayConfig: BintrayConfig,
|
|
||||||
// licenses: List<License>
|
|
||||||
// ): String = bintrayConfig.buildJvmOnlyGradleConfig(
|
|
||||||
// licenses
|
|
||||||
// )
|
|
||||||
|
|
||||||
override fun buildMavenGradleConfig(
|
override fun buildMavenGradleConfig(
|
||||||
mavenConfig: MavenConfig,
|
mavenConfig: MavenConfig,
|
||||||
@@ -64,6 +53,15 @@ object JVMProjectType : ProjectType() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object JSProjectType : ProjectType() {
|
||||||
|
override val name: String = "JS"
|
||||||
|
|
||||||
|
override fun buildMavenGradleConfig(
|
||||||
|
mavenConfig: MavenConfig,
|
||||||
|
licenses: List<License>
|
||||||
|
): String = mavenConfig.buildJsOnlyMavenConfig(licenses)
|
||||||
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Config(
|
data class Config(
|
||||||
val licenses: List<License>,
|
val licenses: List<License>,
|
||||||
|
@@ -30,19 +30,19 @@ suspend fun HttpClient.getLicenses(): Map<String, License> {
|
|||||||
|
|
||||||
suspend fun HttpClient.searchLicense(name: String): List<License> {
|
suspend fun HttpClient.searchLicense(name: String): List<License> {
|
||||||
val licenses = licenses ?: getLicenses()
|
val licenses = licenses ?: getLicenses()
|
||||||
val lowerCase = name.toLowerCase()
|
val lowerCase = name.lowercase()
|
||||||
val upperCase = name.toUpperCase()
|
val upperCase = name.uppercase()
|
||||||
return licenses.values.filter {
|
return licenses.values.filter {
|
||||||
it.title.toLowerCase().contains(lowerCase) || it.title.toUpperCase().contains(upperCase) || it.title.contains(name)
|
it.title.lowercase().contains(lowerCase) || it.title.uppercase().contains(upperCase) || it.title.contains(name)
|
||||||
|| it.id.toLowerCase().contains(lowerCase) || it.id.toUpperCase().contains(upperCase) || it.id.contains(name)
|
|| it.id.lowercase().contains(lowerCase) || it.id.uppercase().contains(upperCase) || it.id.contains(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Map<String, License>.searchLicense(name: String): List<License> {
|
fun Map<String, License>.searchLicense(name: String): List<License> {
|
||||||
val lowerCase = name.toLowerCase()
|
val lowerCase = name.lowercase()
|
||||||
val upperCase = name.toUpperCase()
|
val upperCase = name.uppercase()
|
||||||
return values.filter {
|
return values.filter {
|
||||||
it.title.toLowerCase().contains(lowerCase) || it.title.toUpperCase().contains(upperCase) || it.title.contains(name)
|
it.title.lowercase().contains(lowerCase) || it.title.uppercase().contains(upperCase) || it.title.contains(name)
|
||||||
|| it.id.toLowerCase().contains(lowerCase) || it.id.toUpperCase().contains(upperCase) || it.id.contains(name)
|
|| it.id.lowercase().contains(lowerCase) || it.id.uppercase().contains(upperCase) || it.id.contains(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,15 +2,30 @@ package dev.inmo.kmppscriptbuilder.core.models
|
|||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
const val defaultProjectName = "\${project.name}"
|
||||||
|
const val defaultProjectDescription = "\${project.name}"
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
sealed class GpgSigning(val name: String) {
|
||||||
|
@Serializable
|
||||||
|
object Disabled : GpgSigning("Disabled")
|
||||||
|
@Serializable
|
||||||
|
object Optional : GpgSigning("Optional")
|
||||||
|
@Serializable
|
||||||
|
object Enabled : GpgSigning("Enabled")
|
||||||
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class MavenConfig(
|
data class MavenConfig(
|
||||||
val name: String,
|
val name: String,
|
||||||
val description: String,
|
val description: String,
|
||||||
val url: String,
|
val url: String,
|
||||||
val vcsUrl: String,
|
val vcsUrl: String,
|
||||||
val includeGpgSigning: Boolean = false,
|
|
||||||
val developers: List<Developer>,
|
val developers: List<Developer>,
|
||||||
val repositories: List<MavenPublishingRepository> = emptyList()
|
val repositories: List<MavenPublishingRepository> = emptyList(),
|
||||||
|
val gpgSigning: GpgSigning = GpgSigning.Disabled,
|
||||||
|
@Deprecated("Replaced with gpgSigning")
|
||||||
|
val includeGpgSigning: Boolean = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@@ -10,7 +10,6 @@ kotlin {
|
|||||||
jvm {
|
jvm {
|
||||||
compilations.main.kotlinOptions {
|
compilations.main.kotlinOptions {
|
||||||
jvmTarget = "11"
|
jvmTarget = "11"
|
||||||
useIR = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
@@ -1,62 +1,67 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.desktop
|
package dev.inmo.kmppscriptbuilder.desktop
|
||||||
|
|
||||||
import androidx.compose.desktop.Window
|
|
||||||
import androidx.compose.foundation.*
|
import androidx.compose.foundation.*
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.Colors
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
import androidx.compose.ui.window.Window
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.views.*
|
import androidx.compose.ui.window.application
|
||||||
|
import dev.inmo.kmppscriptbuilder.desktop.utils.init
|
||||||
|
import dev.inmo.kmppscriptbuilder.desktop.utils.loadConfigFile
|
||||||
|
import dev.inmo.kmppscriptbuilder.desktop.views.BuilderView
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
//private val uncaughtExceptionsBC = BroadcastChannel<DefaultErrorHandler.ErrorEvent>(Channel.CONFLATED)
|
//private val uncaughtExceptionsBC = BroadcastChannel<DefaultErrorHandler.ErrorEvent>(Channel.CONFLATED)
|
||||||
//val uncaughtExceptionsFlow: Flow<DefaultErrorHandler.ErrorEvent> = uncaughtExceptionsBC.asFlow()
|
//val uncaughtExceptionsFlow: Flow<DefaultErrorHandler.ErrorEvent> = uncaughtExceptionsBC.asFlow()
|
||||||
|
|
||||||
fun main(args: Array<String>) = Window(title = "Kotlin Multiplatform Publishing Builder") {
|
fun main(args: Array<String>) = application {
|
||||||
val builder = BuilderView()
|
Window(onCloseRequest = ::exitApplication, title = "Kotlin Multiplatform Publishing Builder") {
|
||||||
MaterialTheme(
|
val builder = BuilderView()
|
||||||
Colors(
|
MaterialTheme(
|
||||||
primary = Color(0x01, 0x57, 0x9b),
|
Colors(
|
||||||
primaryVariant = Color(0x00, 0x2f, 0x6c),
|
primary = Color(0x01, 0x57, 0x9b),
|
||||||
secondary = Color(0xb2, 0xeb, 0xf2),
|
primaryVariant = Color(0x00, 0x2f, 0x6c),
|
||||||
secondaryVariant = Color(0x81, 0xb9, 0xbf),
|
secondary = Color(0xb2, 0xeb, 0xf2),
|
||||||
background = Color(0xe1, 0xe2, 0xe1),
|
secondaryVariant = Color(0x81, 0xb9, 0xbf),
|
||||||
surface = Color(0xf5, 0xf5, 0xf6),
|
background = Color(0xe1, 0xe2, 0xe1),
|
||||||
error = Color(0xb7, 0x1c, 0x1c),
|
surface = Color(0xf5, 0xf5, 0xf6),
|
||||||
onPrimary = Color.White,
|
error = Color(0xb7, 0x1c, 0x1c),
|
||||||
onSecondary = Color.Black,
|
onPrimary = Color.White,
|
||||||
onBackground = Color.Black,
|
onSecondary = Color.Black,
|
||||||
onSurface = Color.Black,
|
onBackground = Color.Black,
|
||||||
onError = Color.White,
|
onSurface = Color.Black,
|
||||||
isLight = MaterialTheme.colors.isLight,
|
onError = Color.White,
|
||||||
)
|
isLight = MaterialTheme.colors.isLight,
|
||||||
) {
|
|
||||||
Box(
|
|
||||||
Modifier.fillMaxSize()
|
|
||||||
.background(color = Color(245, 245, 245))
|
|
||||||
) {
|
|
||||||
|
|
||||||
val stateVertical = rememberScrollState(0)
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.verticalScroll(stateVertical)
|
|
||||||
) {
|
|
||||||
builder.init()
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
VerticalScrollbar(
|
|
||||||
modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
|
|
||||||
adapter = rememberScrollbarAdapter(stateVertical)
|
|
||||||
)
|
)
|
||||||
|
) {
|
||||||
|
Box(
|
||||||
|
Modifier.fillMaxSize()
|
||||||
|
.background(color = Color(245, 245, 245))
|
||||||
|
) {
|
||||||
|
|
||||||
|
val stateVertical = rememberScrollState(0)
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.verticalScroll(stateVertical)
|
||||||
|
) {
|
||||||
|
builder.init()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
VerticalScrollbar(
|
||||||
|
modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
|
||||||
|
adapter = rememberScrollbarAdapter(stateVertical)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.isNotEmpty()) {
|
||||||
|
val config = loadConfigFile(File(args.first()))
|
||||||
|
builder.config = config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.isNotEmpty()) {
|
|
||||||
val config = loadConfigFile(File(args.first()))
|
|
||||||
builder.config = config
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,17 @@
|
|||||||
|
package dev.inmo.kmppscriptbuilder.desktop.utils
|
||||||
|
|
||||||
|
import java.awt.Desktop
|
||||||
|
import java.net.URI
|
||||||
|
|
||||||
|
fun openLink(link: String): Boolean {
|
||||||
|
val desktop = if (Desktop.isDesktopSupported()) Desktop.getDesktop() else null
|
||||||
|
if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
|
||||||
|
try {
|
||||||
|
desktop.browse(URI(link))
|
||||||
|
return true
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
@@ -1,12 +1,14 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.desktop.views
|
package dev.inmo.kmppscriptbuilder.desktop.views
|
||||||
|
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.*
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.*
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.svgResource
|
import androidx.compose.ui.draw.shadow
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.Config
|
import dev.inmo.kmppscriptbuilder.core.models.Config
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
||||||
@@ -28,6 +30,34 @@ class BuilderView : View() {
|
|||||||
saveAvailableState = true
|
saveAvailableState = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
|
@Composable
|
||||||
|
private fun createIcon(
|
||||||
|
tooltip: String,
|
||||||
|
resource: String,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) {
|
||||||
|
TooltipArea(
|
||||||
|
tooltip = {
|
||||||
|
Surface(
|
||||||
|
modifier = Modifier.shadow(4.dp),
|
||||||
|
color = MaterialTheme.colors.primarySurface,
|
||||||
|
shape = RoundedCornerShape(4.dp)
|
||||||
|
) {
|
||||||
|
Text(tooltip, modifier = Modifier.padding(10.dp), color = MaterialTheme.colors.onPrimary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
IconButton(onClick) {
|
||||||
|
Image(
|
||||||
|
painter = painterResource(resource),
|
||||||
|
contentDescription = tooltip
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun build() {
|
override fun build() {
|
||||||
Box(Modifier.fillMaxSize()) {
|
Box(Modifier.fillMaxSize()) {
|
||||||
@@ -37,56 +67,28 @@ class BuilderView : View() {
|
|||||||
CommonText("Kotlin publication scripts builder", Modifier.clickable { println(config) })
|
CommonText("Kotlin publication scripts builder", Modifier.clickable { println(config) })
|
||||||
},
|
},
|
||||||
actions = {
|
actions = {
|
||||||
IconButton(
|
createIcon("Open file", "images/open_file.svg") {
|
||||||
{
|
loadConfig()?.also {
|
||||||
loadConfig()?.also {
|
config = it
|
||||||
config = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
Image(
|
|
||||||
painter = svgResource("images/open_file.svg"),
|
|
||||||
contentDescription = "Open file"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (saveAvailableState) {
|
|
||||||
IconButton(
|
|
||||||
{
|
|
||||||
saveConfig(config)
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
Image(
|
|
||||||
painter = svgResource("images/save_file.svg"),
|
|
||||||
contentDescription = "Save file"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (saveAvailableState) {
|
if (saveAvailableState) {
|
||||||
IconButton(
|
createIcon("Save", "images/save_file.svg") {
|
||||||
{
|
saveConfig(config)
|
||||||
exportGradle(config)
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
Image(
|
|
||||||
painter = svgResource("images/export_gradle.svg"),
|
|
||||||
contentDescription = "Export Gradle script"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IconButton(
|
if (saveAvailableState) {
|
||||||
{
|
createIcon("Export Gradle script", "images/export_gradle.svg") {
|
||||||
if (saveAs(config)) {
|
exportGradle(config)
|
||||||
saveAvailableState = true
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createIcon("Save as", "images/save_as.svg") {
|
||||||
|
if (saveAs(config)) {
|
||||||
|
saveAvailableState = true
|
||||||
}
|
}
|
||||||
) {
|
|
||||||
Image(
|
|
||||||
painter = svgResource("images/save_as.svg"),
|
|
||||||
contentDescription = "Export Gradle script"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -100,4 +102,4 @@ class BuilderView : View() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@ package dev.inmo.kmppscriptbuilder.desktop.views
|
|||||||
|
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.Developer
|
import dev.inmo.kmppscriptbuilder.core.models.Developer
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
import dev.inmo.kmppscriptbuilder.desktop.utils.CommonTextField
|
||||||
|
|
||||||
class DeveloperState(
|
class DeveloperState(
|
||||||
id: String = "",
|
id: String = "",
|
||||||
|
@@ -53,7 +53,7 @@ class LicensesView: VerticalView("Licenses") {
|
|||||||
licensesOffersToShow.clear()
|
licensesOffersToShow.clear()
|
||||||
if (licenseSearchFilter.isNotEmpty()) {
|
if (licenseSearchFilter.isNotEmpty()) {
|
||||||
licensesOffersToShow.addAll(
|
licensesOffersToShow.addAll(
|
||||||
availableLicensesState.filter { filterText.all { symbol -> symbol.toLowerCase() in it.title } }
|
availableLicensesState.filter { filterText.all { symbol -> symbol.lowercaseChar() in it.title } }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,11 +1,13 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.desktop.views
|
package dev.inmo.kmppscriptbuilder.desktop.views
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.Button
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.mutableStateListOf
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
import dev.inmo.kmppscriptbuilder.desktop.utils.CommonText
|
||||||
|
import dev.inmo.kmppscriptbuilder.desktop.utils.VerticalView
|
||||||
|
|
||||||
abstract class ListView<T>(title: String) : VerticalView(title) {
|
abstract class ListView<T>(title: String) : VerticalView(title) {
|
||||||
protected val itemsList = mutableStateListOf<T>()
|
protected val itemsList = mutableStateListOf<T>()
|
||||||
|
@@ -1,9 +1,13 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.desktop.views
|
package dev.inmo.kmppscriptbuilder.desktop.views
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.ColumnScope
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.material.*
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.MavenConfig
|
import androidx.compose.ui.Alignment
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.SonatypeRepository
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.layout.VerticalAlignmentLine
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
||||||
|
|
||||||
class MavenInfoView : VerticalView("Project information") {
|
class MavenInfoView : VerticalView("Project information") {
|
||||||
@@ -11,37 +15,59 @@ class MavenInfoView : VerticalView("Project information") {
|
|||||||
private var projectDescriptionProperty by mutableStateOf("")
|
private var projectDescriptionProperty by mutableStateOf("")
|
||||||
private var projectUrlProperty by mutableStateOf("")
|
private var projectUrlProperty by mutableStateOf("")
|
||||||
private var projectVcsUrlProperty by mutableStateOf("")
|
private var projectVcsUrlProperty by mutableStateOf("")
|
||||||
private var includeGpgSignProperty by mutableStateOf(true)
|
private var gpgSignProperty by mutableStateOf<GpgSigning>(GpgSigning.Disabled)
|
||||||
private var publishToMavenCentralProperty by mutableStateOf(false)
|
private var publishToMavenCentralProperty by mutableStateOf(false)
|
||||||
private val developersView = DevelopersView()
|
private val developersView = DevelopersView()
|
||||||
private val repositoriesView = RepositoriesView()
|
private val repositoriesView = RepositoriesView()
|
||||||
|
|
||||||
var mavenConfig: MavenConfig
|
var mavenConfig: MavenConfig
|
||||||
get() = MavenConfig(
|
get() = MavenConfig(
|
||||||
projectNameProperty,
|
projectNameProperty.ifBlank { defaultProjectName },
|
||||||
projectDescriptionProperty,
|
projectDescriptionProperty.ifBlank { defaultProjectDescription },
|
||||||
projectUrlProperty,
|
projectUrlProperty,
|
||||||
projectVcsUrlProperty,
|
projectVcsUrlProperty,
|
||||||
includeGpgSignProperty,
|
|
||||||
developersView.developers,
|
developersView.developers,
|
||||||
repositoriesView.repositories + if (publishToMavenCentralProperty) {
|
repositoriesView.repositories + if (publishToMavenCentralProperty) {
|
||||||
listOf(SonatypeRepository)
|
listOf(SonatypeRepository)
|
||||||
} else {
|
} else {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
},
|
||||||
|
gpgSignProperty
|
||||||
)
|
)
|
||||||
set(value) {
|
set(value) {
|
||||||
projectNameProperty = value.name
|
projectNameProperty = value.name
|
||||||
projectDescriptionProperty = value.description
|
projectDescriptionProperty = value.description
|
||||||
projectUrlProperty = value.url
|
projectUrlProperty = value.url
|
||||||
projectVcsUrlProperty = value.vcsUrl
|
projectVcsUrlProperty = value.vcsUrl
|
||||||
includeGpgSignProperty = value.includeGpgSigning
|
gpgSignProperty = if (value.includeGpgSigning) {
|
||||||
|
GpgSigning.Enabled
|
||||||
|
} else {
|
||||||
|
value.gpgSigning
|
||||||
|
}
|
||||||
publishToMavenCentralProperty = value.repositories.any { it == SonatypeRepository }
|
publishToMavenCentralProperty = value.repositories.any { it == SonatypeRepository }
|
||||||
developersView.developers = value.developers
|
developersView.developers = value.developers
|
||||||
repositoriesView.repositories = value.repositories.filter { it != SonatypeRepository }
|
repositoriesView.repositories = value.repositories.filter { it != SonatypeRepository }
|
||||||
// developersView.developers = value.developers
|
// developersView.developers = value.developers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun addGpgSigningButton(gpgSigning: GpgSigning) {
|
||||||
|
if (gpgSignProperty == gpgSigning) {
|
||||||
|
Button({}, Modifier.padding(8.dp)) {
|
||||||
|
Text(gpgSigning.name)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OutlinedButton(
|
||||||
|
{
|
||||||
|
gpgSignProperty = gpgSigning
|
||||||
|
},
|
||||||
|
Modifier.padding(8.dp)
|
||||||
|
) {
|
||||||
|
Text(gpgSigning.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val content: @Composable ColumnScope.() -> Unit = {
|
override val content: @Composable ColumnScope.() -> Unit = {
|
||||||
CommonTextField(
|
CommonTextField(
|
||||||
projectNameProperty,
|
projectNameProperty,
|
||||||
@@ -60,11 +86,12 @@ class MavenInfoView : VerticalView("Project information") {
|
|||||||
"Public project VCS URL (with .git)"
|
"Public project VCS URL (with .git)"
|
||||||
) { projectVcsUrlProperty = it }
|
) { projectVcsUrlProperty = it }
|
||||||
|
|
||||||
SwitchWithLabel(
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
"Include GPG Signing",
|
Text("Gpg Signing: ")
|
||||||
includeGpgSignProperty,
|
addGpgSigningButton(GpgSigning.Disabled)
|
||||||
placeSwitchAtTheStart = true
|
addGpgSigningButton(GpgSigning.Optional)
|
||||||
) { includeGpgSignProperty = it }
|
addGpgSigningButton(GpgSigning.Enabled)
|
||||||
|
}
|
||||||
|
|
||||||
SwitchWithLabel(
|
SwitchWithLabel(
|
||||||
"Include publication to MavenCentral",
|
"Include publication to MavenCentral",
|
||||||
@@ -74,4 +101,4 @@ class MavenInfoView : VerticalView("Project information") {
|
|||||||
developersView.init()
|
developersView.init()
|
||||||
repositoriesView.init()
|
repositoriesView.init()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,33 +1,40 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.desktop.views
|
package dev.inmo.kmppscriptbuilder.desktop.views
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material.Switch
|
import androidx.compose.material.*
|
||||||
import androidx.compose.material.Text
|
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.*
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.VerticalView
|
import dev.inmo.kmppscriptbuilder.desktop.utils.VerticalView
|
||||||
|
|
||||||
class ProjectTypeView : VerticalView("Project type") {
|
class ProjectTypeView : VerticalView("Project type") {
|
||||||
private var projectTypeState by mutableStateOf<Boolean>(false)
|
var projectType by mutableStateOf<ProjectType>(MultiplatformProjectType)
|
||||||
private val calculatedProjectType: ProjectType
|
|
||||||
get() = if (projectTypeState) JVMProjectType else MultiplatformProjectType
|
@Composable
|
||||||
var projectType: ProjectType
|
private fun addProjectTypeButton(newProjectType: ProjectType) {
|
||||||
get() = calculatedProjectType
|
if (projectType == newProjectType) {
|
||||||
set(value) {
|
Button({}, Modifier.padding(8.dp)) {
|
||||||
projectTypeState = value == JVMProjectType
|
Text(newProjectType.name)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OutlinedButton(
|
||||||
|
{
|
||||||
|
projectType = newProjectType
|
||||||
|
},
|
||||||
|
Modifier.padding(8.dp)
|
||||||
|
) {
|
||||||
|
Text(newProjectType.name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val content: @Composable ColumnScope.() -> Unit = {
|
override val content: @Composable ColumnScope.() -> Unit = {
|
||||||
Row(horizontalArrangement = Arrangement.spacedBy(5.dp)) {
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
Text("Multiplatform", Modifier.alignByBaseline())
|
addProjectTypeButton(MultiplatformProjectType)
|
||||||
Switch(
|
addProjectTypeButton(JVMProjectType)
|
||||||
projectTypeState,
|
addProjectTypeButton(JSProjectType)
|
||||||
{ projectTypeState = it },
|
|
||||||
Modifier.padding(4.dp, 0.dp)
|
|
||||||
)
|
|
||||||
Text("JVM", Modifier.alignByBaseline())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@ package dev.inmo.kmppscriptbuilder.desktop.views
|
|||||||
|
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
|
import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
|
||||||
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
import dev.inmo.kmppscriptbuilder.desktop.utils.CommonTextField
|
||||||
|
|
||||||
class RepositoryState(
|
class RepositoryState(
|
||||||
name: String = "",
|
name: String = "",
|
||||||
|
@@ -6,27 +6,27 @@ kotlin.incremental.js=true
|
|||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
|
||||||
kotlin_version=1.4.30
|
kotlin_version=1.6.10
|
||||||
kotlin_coroutines_version=1.4.2
|
kotlin_coroutines_version=1.6.0
|
||||||
kotlin_serialisation_core_version=1.1.0
|
kotlin_serialisation_core_version=1.3.2
|
||||||
ktor_version=1.5.1
|
ktor_version=1.6.7
|
||||||
micro_utils_version=0.4.27
|
micro_utils_version=0.9.0
|
||||||
|
|
||||||
compose_version=0.3.0
|
compose_version=1.0.1
|
||||||
|
|
||||||
# ANDROID
|
# ANDROID
|
||||||
|
|
||||||
android_minSdkVersion=21
|
android_minSdkVersion=21
|
||||||
android_compileSdkVersion=30
|
android_compileSdkVersion=32
|
||||||
android_buildToolsVersion=30.0.2
|
android_buildToolsVersion=32.0.0
|
||||||
dexcount_version=2.0.0
|
dexcount_version=3.0.1
|
||||||
junit_version=4.12
|
junit_version=4.12
|
||||||
test_ext_junit_version=1.1.2
|
test_ext_junit_version=1.1.2
|
||||||
espresso_core=3.3.0
|
espresso_core=3.3.0
|
||||||
|
|
||||||
# Dokka
|
# Dokka
|
||||||
|
|
||||||
dokka_version=1.4.20
|
dokka_version=1.6.0
|
||||||
|
|
||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
|
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-6.8-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
||||||
|
@@ -14,12 +14,11 @@ fun saveFile(content: String, filename: String) {
|
|||||||
setAttribute("style", "visibility:hidden; display: none")
|
setAttribute("style", "visibility:hidden; display: none")
|
||||||
} as HTMLAnchorElement
|
} as HTMLAnchorElement
|
||||||
val blob = Blob(arrayOf(content), BlobPropertyBag(
|
val blob = Blob(arrayOf(content), BlobPropertyBag(
|
||||||
"text/plain;charset=utf-8"
|
"application/*;charset=utf-8"
|
||||||
))
|
))
|
||||||
val url = URL.createObjectURL(blob)
|
val url = URL.createObjectURL(blob)
|
||||||
a.href = url
|
a.href = url
|
||||||
a.download = filename
|
a.download = filename
|
||||||
a.target = "_blank"
|
|
||||||
a.click()
|
a.click()
|
||||||
URL.revokeObjectURL(url)
|
URL.revokeObjectURL(url)
|
||||||
a.remove()
|
a.remove()
|
||||||
|
@@ -48,7 +48,7 @@ class LicensesView(
|
|||||||
emptyList()
|
emptyList()
|
||||||
} else {
|
} else {
|
||||||
licensesTemplates.filter {
|
licensesTemplates.filter {
|
||||||
val lowercasedTitle = it.title.toLowerCase()
|
val lowercasedTitle = it.title.lowercase()
|
||||||
lowercased.all { it in lowercasedTitle }
|
lowercased.all { it in lowercasedTitle }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -57,12 +57,12 @@ class LicensesView(
|
|||||||
}
|
}
|
||||||
private val searchElement = rootElement.createTextField("Quick add", "Type some license name part to find it").apply {
|
private val searchElement = rootElement.createTextField("Quick add", "Type some license name part to find it").apply {
|
||||||
oninput = {
|
oninput = {
|
||||||
changeActor.offer(Unit)
|
changeActor.trySend(Unit)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var searchString: String
|
private var searchString: String
|
||||||
get() = searchElement.value.toLowerCase()
|
get() = searchElement.value.lowercase()
|
||||||
set(value) {
|
set(value) {
|
||||||
searchElement.value = value
|
searchElement.value = value
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ class LicensesView(
|
|||||||
createCommonButton(value.title).onclick = {
|
createCommonButton(value.title).onclick = {
|
||||||
searchString = ""
|
searchString = ""
|
||||||
licensesView.licenses += value
|
licensesView.licenses += value
|
||||||
changeActor.offer(Unit)
|
changeActor.trySend(Unit)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,4 +110,4 @@ class LicensesView(
|
|||||||
titleElement.value = to.title
|
titleElement.value = to.title
|
||||||
urlElement.value = to.url ?: ""
|
urlElement.value = to.url ?: ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package dev.inmo.kmppscriptbuilder.web.views
|
package dev.inmo.kmppscriptbuilder.web.views
|
||||||
|
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.MavenConfig
|
import dev.inmo.kmppscriptbuilder.core.models.*
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.SonatypeRepository
|
import dev.inmo.kmppscriptbuilder.web.utils.ukActive
|
||||||
import kotlinx.browser.document
|
import kotlinx.browser.document
|
||||||
import org.w3c.dom.HTMLElement
|
import org.w3c.dom.HTMLElement
|
||||||
import org.w3c.dom.HTMLInputElement
|
import org.w3c.dom.HTMLInputElement
|
||||||
@@ -11,23 +11,51 @@ class MavenProjectInfoView : View {
|
|||||||
private val descriptionElement = document.getElementById("projectDescriptionInput") as HTMLInputElement
|
private val descriptionElement = document.getElementById("projectDescriptionInput") as HTMLInputElement
|
||||||
private val urlElement = document.getElementById("projectUrlInput") as HTMLInputElement
|
private val urlElement = document.getElementById("projectUrlInput") as HTMLInputElement
|
||||||
private val vcsUrlElement = document.getElementById("projectVCSUrlInput") as HTMLInputElement
|
private val vcsUrlElement = document.getElementById("projectVCSUrlInput") as HTMLInputElement
|
||||||
private val includeGpgElement = document.getElementById("includeGpgSignToggle") as HTMLInputElement
|
private val disableGpgSigningElement = document.getElementById("disableGpgSigning") as HTMLElement
|
||||||
|
private val optionalGpgSigningElement = document.getElementById("optionalGpgSigning") as HTMLElement
|
||||||
|
private val enableGpgSigningElement = document.getElementById("enableGpgSigning") as HTMLElement
|
||||||
private val includeMavenCentralElement = document.getElementById("includeMavenCentralTargetRepoToggle") as HTMLInputElement
|
private val includeMavenCentralElement = document.getElementById("includeMavenCentralTargetRepoToggle") as HTMLInputElement
|
||||||
private val developersView = DevelopersView(document.getElementById("developersListDiv") as HTMLElement)
|
private val developersView = DevelopersView(document.getElementById("developersListDiv") as HTMLElement)
|
||||||
private val repositoriesView = RepositoriesView(document.getElementById("repositoriesListDiv") as HTMLElement)
|
private val repositoriesView = RepositoriesView(document.getElementById("repositoriesListDiv") as HTMLElement)
|
||||||
|
|
||||||
|
private var gpgSignMode: GpgSigning = GpgSigning.Disabled
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
when (value) {
|
||||||
|
GpgSigning.Enabled -> {
|
||||||
|
enableGpgSigningElement.ukActive = true
|
||||||
|
disableGpgSigningElement.ukActive = false
|
||||||
|
optionalGpgSigningElement.ukActive = false
|
||||||
|
}
|
||||||
|
GpgSigning.Optional -> {
|
||||||
|
enableGpgSigningElement.ukActive = false
|
||||||
|
disableGpgSigningElement.ukActive = false
|
||||||
|
optionalGpgSigningElement.ukActive = true
|
||||||
|
}
|
||||||
|
GpgSigning.Disabled -> {
|
||||||
|
enableGpgSigningElement.ukActive = false
|
||||||
|
disableGpgSigningElement.ukActive = true
|
||||||
|
optionalGpgSigningElement.ukActive = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var mavenConfig: MavenConfig
|
var mavenConfig: MavenConfig
|
||||||
get() = MavenConfig(
|
get() = MavenConfig(
|
||||||
nameElement.value,
|
nameElement.value.ifBlank { defaultProjectName },
|
||||||
descriptionElement.value,
|
descriptionElement.value.ifBlank { defaultProjectDescription },
|
||||||
urlElement.value,
|
urlElement.value,
|
||||||
vcsUrlElement.value,
|
vcsUrlElement.value,
|
||||||
includeGpgElement.checked,
|
|
||||||
developersView.developers,
|
developersView.developers,
|
||||||
repositoriesView.repositories + if (includeMavenCentralElement.checked) {
|
repositoriesView.repositories + if (includeMavenCentralElement.checked) {
|
||||||
listOf(SonatypeRepository)
|
listOf(SonatypeRepository)
|
||||||
} else {
|
} else {
|
||||||
emptyList()
|
emptyList()
|
||||||
|
},
|
||||||
|
when {
|
||||||
|
optionalGpgSigningElement.ukActive -> GpgSigning.Optional
|
||||||
|
enableGpgSigningElement.ukActive -> GpgSigning.Enabled
|
||||||
|
else -> GpgSigning.Disabled
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
set(value) {
|
set(value) {
|
||||||
@@ -35,10 +63,20 @@ class MavenProjectInfoView : View {
|
|||||||
descriptionElement.value = value.description
|
descriptionElement.value = value.description
|
||||||
urlElement.value = value.url
|
urlElement.value = value.url
|
||||||
vcsUrlElement.value = value.vcsUrl
|
vcsUrlElement.value = value.vcsUrl
|
||||||
includeGpgElement.checked = value.includeGpgSigning
|
gpgSignMode = if (value.includeGpgSigning) {
|
||||||
|
GpgSigning.Enabled
|
||||||
|
} else {
|
||||||
|
value.gpgSigning
|
||||||
|
}
|
||||||
developersView.developers = value.developers
|
developersView.developers = value.developers
|
||||||
val reposWithoutSonatype = value.repositories.filter { it != SonatypeRepository }
|
val reposWithoutSonatype = value.repositories.filter { it != SonatypeRepository }
|
||||||
includeMavenCentralElement.checked = value.repositories.size != reposWithoutSonatype.size
|
includeMavenCentralElement.checked = value.repositories.size != reposWithoutSonatype.size
|
||||||
repositoriesView.repositories = value.repositories
|
repositoriesView.repositories = reposWithoutSonatype
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
init {
|
||||||
|
enableGpgSigningElement.onclick = { gpgSignMode = GpgSigning.Enabled; Unit }
|
||||||
|
disableGpgSigningElement.onclick = { gpgSignMode = GpgSigning.Disabled; Unit }
|
||||||
|
optionalGpgSigningElement.onclick = { gpgSignMode = GpgSigning.Optional; Unit }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -8,16 +8,18 @@ import org.w3c.dom.HTMLElement
|
|||||||
class ProjectTypeView : View {
|
class ProjectTypeView : View {
|
||||||
private val mppProjectTypeElement = document.getElementById("mppProjectType") as HTMLElement
|
private val mppProjectTypeElement = document.getElementById("mppProjectType") as HTMLElement
|
||||||
private val jvmProjectTypeElement = document.getElementById("jvmProjectType") as HTMLElement
|
private val jvmProjectTypeElement = document.getElementById("jvmProjectType") as HTMLElement
|
||||||
|
private val jsProjectTypeElement = document.getElementById("jsProjectType") as HTMLElement
|
||||||
|
|
||||||
var projectType: ProjectType
|
var projectType: ProjectType
|
||||||
get() = if (jvmProjectTypeElement.ukActive) {
|
get() = when {
|
||||||
JVMProjectType
|
jvmProjectTypeElement.ukActive -> JVMProjectType
|
||||||
} else {
|
jsProjectTypeElement.ukActive -> JSProjectType
|
||||||
MultiplatformProjectType
|
else -> MultiplatformProjectType
|
||||||
}
|
}
|
||||||
set(value) {
|
set(value) {
|
||||||
mppProjectTypeElement.ukActive = value == MultiplatformProjectType
|
mppProjectTypeElement.ukActive = value == MultiplatformProjectType
|
||||||
jvmProjectTypeElement.ukActive = value == JVMProjectType
|
jvmProjectTypeElement.ukActive = value == JVMProjectType
|
||||||
|
jsProjectTypeElement.ukActive = value == JSProjectType
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -29,5 +31,9 @@ class ProjectTypeView : View {
|
|||||||
projectType = JVMProjectType
|
projectType = JVMProjectType
|
||||||
Unit
|
Unit
|
||||||
}
|
}
|
||||||
|
jsProjectTypeElement.onclick = {
|
||||||
|
projectType = JSProjectType
|
||||||
|
Unit
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@ class RepositoriesView(rootElement: HTMLElement) : MutableListView<MavenPublishi
|
|||||||
|
|
||||||
override fun HTMLElement.addContentBeforeRemoveButton(value: MavenPublishingRepository) {
|
override fun HTMLElement.addContentBeforeRemoveButton(value: MavenPublishingRepository) {
|
||||||
createTextField("Repository name", "This name will be used to identify repository in grade").value = value.name
|
createTextField("Repository name", "This name will be used to identify repository in grade").value = value.name
|
||||||
createTextField("Repository URL", "For example: https://repo.maven.apache.org/maven2/").value = value.name
|
createTextField("Repository URL", "For example: https://repo.maven.apache.org/maven2/").value = value.url
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun HTMLElement.updateElement(from: MavenPublishingRepository, to: MavenPublishingRepository) {
|
override fun HTMLElement.updateElement(from: MavenPublishingRepository, to: MavenPublishingRepository) {
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
<nav class="uk-navbar-container" uk-navbar>
|
<nav class="uk-navbar-container" uk-navbar>
|
||||||
<div class="uk-navbar-left">
|
<div class="uk-navbar-left">
|
||||||
<div class="uk-padding-small uk-text-lead">Kotlin Publication Scripts Builder</div>
|
<div class="uk-padding-small uk-text-lead">Kotlin Publication Scripts Builder</div>
|
||||||
|
<div class="uk-padding-small"><a href="https://github.com/InsanusMokrassar/KotlinPublicationScriptsBuilder"><img src="https://img.shields.io/github/stars/InsanusMokrassar/KotlinPublicationScriptsBuilder?label=Github&style=plastic"/></a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-navbar-right">
|
<div class="uk-navbar-right">
|
||||||
<ul class="uk-navbar-nav">
|
<ul class="uk-navbar-nav">
|
||||||
@@ -26,15 +27,11 @@
|
|||||||
<ul class="uk-subnav uk-subnav-pill">
|
<ul class="uk-subnav uk-subnav-pill">
|
||||||
<li id="mppProjectType" class="uk-active"><a href="#">Multiplatform</a></li>
|
<li id="mppProjectType" class="uk-active"><a href="#">Multiplatform</a></li>
|
||||||
<li id="jvmProjectType"><a href="#">JVM</a></li>
|
<li id="jvmProjectType"><a href="#">JVM</a></li>
|
||||||
|
<li id="jsProjectType"><a href="#">JS</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<legend class="uk-legend">Licenses</legend>
|
<legend class="uk-legend">Licenses</legend>
|
||||||
<div id="licensesListDiv" class="uk-padding-small">
|
<div id="licensesListDiv" class="uk-padding-small"></div>
|
||||||
<!-- <div class="uk-margin uk-width-1-1">-->
|
|
||||||
<!-- <input id="searchFilterInput" class="uk-input uk-width-expand" type="text" placeholder="License search filter">-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- <button class="uk-button uk-button-primary">Add empty license</button>-->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<legend class="uk-legend">Project information</legend>
|
<legend class="uk-legend">Project information</legend>
|
||||||
|
|
||||||
@@ -57,7 +54,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="uk-margin">
|
<div class="uk-margin">
|
||||||
<label><input id="includeGpgSignToggle" class="uk-checkbox" type="checkbox" checked> Include GPG Signing</label>
|
<label>GPG Signing</label>
|
||||||
|
|
||||||
|
<div class="uk-padding-small">
|
||||||
|
<ul class="uk-subnav uk-subnav-pill">
|
||||||
|
<li id="disableGpgSigning" class="uk-active" uk-tooltip="title: Signing will not be added"><a href="#">Disabled</a></li>
|
||||||
|
<li id="optionalGpgSigning" uk-tooltip="title: Signing will be added, but disabled in case of absence 'signatory.keyId'"><a href="#">Optional</a></li>
|
||||||
|
<li id="enableGpgSigning" uk-tooltip="title: Signing will be always enabled"><a href="#">Enabled</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-margin">
|
<div class="uk-margin">
|
||||||
<label><input id="includeMavenCentralTargetRepoToggle" class="uk-checkbox" type="checkbox"> Include publication to MavenCentral</label>
|
<label><input id="includeMavenCentralTargetRepoToggle" class="uk-checkbox" type="checkbox"> Include publication to MavenCentral</label>
|
||||||
@@ -77,4 +82,4 @@
|
|||||||
<!-- Internal JS -->
|
<!-- Internal JS -->
|
||||||
<script src="kmppscriptbuilder.web.js"></script>
|
<script src="kmppscriptbuilder.web.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Reference in New Issue
Block a user