Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ buildscript {
classpath(libs.ksp.gradle.plugin)
classpath(libs.tapmoc.at.build.time)
classpath(libs.serialization.gradle.plugin)
classpath(libs.compose.compiler)
}
}

Expand Down
7 changes: 6 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
[versions]
kgp = "2.3.0-RC"
kgp = "2.3.0"
nmcp = "1.3.0"
mosaic = "0.18.0"

[libraries]
agp = "com.android.tools.build:gradle:8.2.0"
bcv = "org.jetbrains.kotlinx:binary-compatibility-validator:0.16.3"
bouncycastle-pg = "org.bouncycastle:bcpg-jdk18on:1.78.1"
bouncycastle-prov = "org.bouncycastle:bcprov-jdk18on:1.78.1"
compose-compiler = { module = "org.jetbrains.kotlin.plugin.compose:org.jetbrains.kotlin.plugin.compose.gradle.plugin", version.ref = "kgp" }
clikt = "com.github.ajalt.clikt:clikt:3.5.0"
tapmoc = "com.gradleup.tapmoc:tapmoc-gradle-plugin:0.3.2"
tapmoc-at-build-time = "com.gradleup.tapmoc:tapmoc-gradle-plugin:0.2.1-SNAPSHOT-dda1362c1d0f8389f50b362a08967793e320cf29"
Expand All @@ -25,10 +28,12 @@ librarian-gradle-plugin = "com.gradleup.librarian:librarian-gradle-plugin:0.2.2-
maven-sympathy = "com.gradleup.maven-sympathy:maven-sympathy:0.0.2"
mockserver = "com.apollographql.mockserver:apollo-mockserver:0.0.3"
mordant = "com.github.ajalt.mordant:mordant:2.7.1"
mosaic-runtime = { module = "com.jakewharton.mosaic:mosaic-runtime", version.ref = "mosaic" }
nmcp = { module = "com.gradleup.nmcp:com.gradleup.nmcp.gradle.plugin", version.ref = "nmcp" }
nmcp-tasks = { module = "com.gradleup.nmcp:nmcp-tasks", version.ref = "nmcp" }
nmcp-build-time = "com.gradleup.nmcp:com.gradleup.nmcp.gradle.plugin:1.2.0-SNAPSHOT-b2b859946a8e9938f7b7f22003e9dc029aac69af"
okhttp = "com.squareup.okhttp3:okhttp:4.12.0"
serialization-gradle-plugin = {module = "org.jetbrains.kotlin.plugin.serialization:org.jetbrains.kotlin.plugin.serialization.gradle.plugin", version.ref = "kgp"}
serialization-json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0"
xmlutil = "io.github.pdvrieze.xmlutil:serialization:0.91.1"
semver = "net.swiftzer.semver:semver:2.1.0"
40 changes: 40 additions & 0 deletions librarian-cli/api/librarian-cli.api
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ public final class com/gradleup/librarian/cli/MainKt {
}

public final class com/gradleup/librarian/cli/MultilineSecretComponent : com/github/kinquirer/core/Component {
public static final field $stable I
public fun <init> (Ljava/lang/String;)V
public fun isInteracting ()Z
public fun onEvent (Lcom/github/kinquirer/core/KInquirerEvent;)V
Expand All @@ -12,6 +13,7 @@ public final class com/gradleup/librarian/cli/MultilineSecretComponent : com/git
}

public final class com/gradleup/librarian/cli/Update_repoKt {
public static final fun main ([Ljava/lang/String;)V
public static final fun updateRepo ([Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
}

Expand All @@ -24,11 +26,13 @@ public final class com/gradleup/librarian/cli/VersionKt {
}

public final class com/gradleup/librarian/cli/command/CreateGitHubRepository : com/github/ajalt/clikt/core/CliktCommand {
public static final field $stable I
public fun <init> ()V
public fun run ()V
}

public final class com/gradleup/librarian/cli/command/FileContext {
public static final field $stable I
public fun <init> ()V
public final fun replaceAllArtifactVersions (Ljava/lang/String;)V
public final fun replaceArtifactVersion (Ljava/lang/String;)V
Expand All @@ -37,17 +41,20 @@ public final class com/gradleup/librarian/cli/command/FileContext {
}

public final class com/gradleup/librarian/cli/command/GenerateKey : com/github/ajalt/clikt/core/CliktCommand {
public static final field $stable I
public fun <init> ()V
public fun run ()V
}

public final class com/gradleup/librarian/cli/command/UploadKey : com/github/ajalt/clikt/core/CliktCommand {
public static final field $stable I
public fun <init> ()V
public final fun getKeyFile ()Ljava/lang/String;
public fun run ()V
}

public final class com/gradleup/librarian/cli/command/VersionContext {
public static final field $stable I
public fun <init> (Ljava/lang/String;)V
public final fun file (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
public final fun getVersion ()Ljava/lang/String;
Expand All @@ -58,7 +65,40 @@ public final class com/gradleup/librarian/cli/command/init/GitHubSecretsKt {
}

public final class com/gradleup/librarian/cli/command/init/GradleWrapperCommand : com/github/ajalt/clikt/core/CliktCommand {
public static final field $stable I
public fun <init> ()V
public fun run ()V
}

public final class com/gradleup/librarian/cli/component/Choice {
public static final field $stable I
public fun <init> (Ljava/lang/String;Ljava/lang/Object;)V
public final fun getData ()Ljava/lang/Object;
public final fun getText ()Ljava/lang/String;
}

public final class com/gradleup/librarian/cli/component/ListInputKt {
public static final fun ListInput (Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
public static final fun ListInput2 (Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
}

public final class com/gradleup/librarian/cli/component/TextInputKt {
public static final fun TextInput-ObWx_Vo (Ljava/lang/String;Lcom/jakewharton/mosaic/modifier/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
}

public final class com/gradleup/librarian/cli/screen/AskVersionKt {
public static final fun AskVersion (Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
}

public final class com/gradleup/librarian/cli/screen/MainScreenKt {
public static final fun MainScreen (Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
}

public final class com/gradleup/librarian/cli/screen/PrepareNextVersionScreenKt {
public static final fun CommitChangesScreen (Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
}

public final class com/gradleup/librarian/cli/screen/SetVersionScreenKt {
public static final fun SetVersionScreen (Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
}

2 changes: 2 additions & 0 deletions librarian-cli/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id("java")
id("org.jetbrains.kotlin.jvm")
id("distribution")
id("org.jetbrains.kotlin.plugin.compose")
}

Librarian.module(project)
Expand All @@ -13,6 +14,7 @@ dependencies {
api(libs.clikt)
implementation(libs.inquirer)
implementation(libs.mordant)
implementation(libs.mosaic.runtime)

implementation(libs.jansi)
testImplementation(kotlin("test"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.optional
import com.github.kinquirer.KInquirer
import com.github.kinquirer.components.promptConfirm
import com.gradleup.librarian.core.tooling.Version
import com.gradleup.librarian.core.tooling.SemVer
import com.gradleup.librarian.core.tooling.next
import com.gradleup.librarian.core.tooling.getCurrentVersion
import com.gradleup.librarian.core.tooling.nextMinor
import com.gradleup.librarian.core.tooling.nextPatch
import com.gradleup.librarian.core.tooling.runCommand
import com.gradleup.librarian.core.tooling.tagAndBump
import com.gradleup.librarian.core.tooling.toVersionOrNull
import com.gradleup.librarian.core.tooling.semVerOrNull
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
import kotlin.io.path.Path
Expand All @@ -36,7 +36,7 @@ internal fun exit(message: String): Nothing {
internal abstract class AbstractTagAndBump : CliktCommand() {
val versionToRelease by argument().optional()

abstract fun run(versionToRelease: Version)
abstract fun run(versionToRelease: SemVer)

private fun confirmOrExit(message: String) {
if (!KInquirer.promptConfirm(message, true)) {
Expand All @@ -46,7 +46,7 @@ internal abstract class AbstractTagAndBump : CliktCommand() {

override fun run() {
val currentVersion = getCurrentVersion()
val currentVersionParsed = currentVersion.toVersionOrNull()
val currentVersionParsed = currentVersion.semVerOrNull()
checkOrExit(currentVersionParsed != null) {
"Cannot parse current version: '${currentVersion}'"
}
Expand All @@ -67,7 +67,7 @@ internal abstract class AbstractTagAndBump : CliktCommand() {
versionToRelease = currentVersionParsed.nextMinor().toString()
}

val tagVersionParsed = versionToRelease.toVersionOrNull()
val tagVersionParsed = versionToRelease.semVerOrNull()
checkOrExit(tagVersionParsed != null) {
"Version '$versionToRelease' cannot be parsed (expected 'major.minor.patch[-prerelease.version][-SNAPSHOT]')"
}
Expand All @@ -82,13 +82,13 @@ internal abstract class AbstractTagAndBump : CliktCommand() {
}

internal class TriggerTagAndBump : AbstractTagAndBump() {
override fun run(versionToRelease: Version) {
override fun run(versionToRelease: SemVer) {
Path(".").runCommand("gh", "workflow", "run", "tag-and-bump.yaml", "-f", "versionToRelease=$versionToRelease")
}
}

internal class TagAndBump : AbstractTagAndBump() {
override fun run(versionToRelease: Version) {
override fun run(versionToRelease: SemVer) {
tagAndBump(versionToRelease)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.gradleup.librarian.cli.component

import androidx.compose.runtime.Composable
import com.jakewharton.mosaic.layout.onKeyEvent
import com.jakewharton.mosaic.modifier.Modifier
import com.jakewharton.mosaic.ui.Column
import com.jakewharton.mosaic.ui.Text
import com.jakewharton.mosaic.ui.TextStyle

class Choice<out D>(val text: String, val data: D)

@Composable
fun <D> ListInput(
question: String,
choices: List<Choice<D>>,
index: Int,
onHighlight: (Int) -> Unit,
onChoice: (Choice<D>) -> Unit
) {
var index = index
Column(modifier = Modifier.onKeyEvent { event ->
when (event.key) {
"ArrowUp" -> index -= 1
"ArrowDown" -> index += 1
"Enter" -> onChoice(choices.get(index))
else -> return@onKeyEvent false
}

index = index.coerceIn(0, choices.lastIndex)

onHighlight(index)
true
}) {
Text(question)
Text("")
choices.forEachIndexed { i, choice ->
Text(
"${if (index == i) ">" else " "} ${choice.text}",
textStyle = if (index == i) TextStyle.Bold else TextStyle.Unspecified
)
}
}
}

@Composable
@JvmName("ListInput2")
fun ListInput(
question: String,
choices: List<String>,
index: Int,
onHighlight: (Int) -> Unit,
onChoice: (Int) -> Unit
) {
ListInput(
question = question,
choices = choices.mapIndexed { index, string -> Choice(string, index) },
index = index,
onHighlight = onHighlight,
onChoice = { onChoice(it.data) }
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.gradleup.librarian.cli.component

import androidx.compose.runtime.Composable
import com.jakewharton.mosaic.layout.KeyEvent
import com.jakewharton.mosaic.layout.onKeyEvent
import com.jakewharton.mosaic.modifier.Modifier
import com.jakewharton.mosaic.ui.Text
import com.jakewharton.mosaic.ui.TextStyle

@Composable
fun TextInput(
value: String,
modifier: Modifier = Modifier,
textStyle: TextStyle = TextStyle.Unspecified,
onEnter: (() -> Unit) = {},
onTextChanged: ((String) -> Unit),
) {
Text(
value = value,
textStyle = textStyle,
modifier = modifier.onKeyEvent { event ->
when {
event == KeyEvent("c", ctrl = true) -> return@onKeyEvent false
event.key.toCharArray().singleOrNull() != null -> onTextChanged(value + event.key)
event == KeyEvent("Backspace") -> onTextChanged(value.dropLast(1))
event == KeyEvent("Enter") -> onEnter()
else -> return@onKeyEvent false
}
true
},
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.gradleup.librarian.cli.screen

import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import com.gradleup.librarian.cli.command.setCurrentVersion
import com.gradleup.librarian.cli.component.ListInput
import com.gradleup.librarian.cli.component.TextInput
import com.gradleup.librarian.core.tooling.getCurrentVersion
import com.jakewharton.mosaic.ui.Column
import com.jakewharton.mosaic.ui.Row
import com.jakewharton.mosaic.ui.Text

@Composable
fun AskVersion(
onVersionSet: () -> Unit,
) {
Row {
val text = remember { mutableStateOf(getCurrentVersion()) }
Text("What version should be set? ")
TextInput(
value = text.value,
onEnter = {
setCurrentVersion(text.value)
onVersionSet()
},
onTextChanged = {
text.value = it
},
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.gradleup.librarian.cli.screen

import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import com.gradleup.librarian.cli.component.ListInput

@Composable
fun MainScreen(
onSetVersion: () -> Unit,
onPrepareNextVersion: () -> Unit,
) {
val indexState = remember { mutableStateOf(0) }

ListInput(
question = "What do you want to do?",
choices = listOf(
"Set version.",
"Prepare next version."
),
index = indexState.value,
onHighlight = { indexState.value = it },
onChoice = {
when (it) {
0 -> onSetVersion()
1 -> onPrepareNextVersion()
}
},
)
}
Loading