Skip to content

Commit 48bccb9

Browse files
committed
Publishing workflow attempt 1
1 parent 61b7148 commit 48bccb9

File tree

7 files changed

+122
-57
lines changed

7 files changed

+122
-57
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 0 additions & 44 deletions
This file was deleted.

.teamcity/_Self/LinBus.kt

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package _Self
22

3-
import jetbrains.buildServer.configs.kotlin.BuildSteps
4-
import jetbrains.buildServer.configs.kotlin.BuildType
5-
import jetbrains.buildServer.configs.kotlin.DslContext
6-
import jetbrains.buildServer.configs.kotlin.RelativeId
3+
import jetbrains.buildServer.configs.kotlin.*
74
import jetbrains.buildServer.configs.kotlin.buildFeatures.commitStatusPublisher
85
import jetbrains.buildServer.configs.kotlin.buildSteps.GradleBuildStep
96
import jetbrains.buildServer.configs.kotlin.buildSteps.gradle
7+
import jetbrains.buildServer.configs.kotlin.buildSteps.script
108
import jetbrains.buildServer.configs.kotlin.triggers.vcs
119

1210
fun BuildSteps.configuredGradle(init: GradleBuildStep.() -> Unit) {
@@ -47,3 +45,49 @@ object Build : BuildType({
4745
}
4846
}
4947
})
48+
49+
object Release : BuildType({
50+
id = RelativeId("Release")
51+
name = "Release"
52+
description = "Make a release of the project."
53+
54+
vcs {
55+
root(DslContext.settingsRoot)
56+
branchFilter = "+:master"
57+
}
58+
59+
dependencies {
60+
snapshot(Build) {
61+
onDependencyFailure = FailureAction.FAIL_TO_START
62+
}
63+
}
64+
65+
steps {
66+
configuredGradle {
67+
name = "Switch to release version"
68+
tasks = "changeSnapshotToRelease"
69+
}
70+
configuredGradle {
71+
name = "Publish release version"
72+
tasks = "publishToMavenLocal artifactoryPublish"
73+
}
74+
script {
75+
name = "Push release version commit"
76+
scriptContent = """
77+
set -e
78+
git push master --tags
79+
""".trimIndent()
80+
}
81+
configuredGradle {
82+
name = "Switch to next snapshot version"
83+
tasks = "changeReleaseToNextSnapshot"
84+
}
85+
script {
86+
name = "Push snapshot version commit"
87+
scriptContent = """
88+
set -e
89+
git push
90+
""".trimIndent()
91+
}
92+
}
93+
})

build-logic/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,9 @@ gradlePlugin {
3333
id = "org.enginehub.lin-bus.publishing"
3434
implementationClass = "org.enginehub.gradle.PublishingPlugin"
3535
}
36+
create("release") {
37+
id = "org.enginehub.lin-bus.release"
38+
implementationClass = "org.enginehub.gradle.ReleasePlugin"
39+
}
3640
}
3741
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.enginehub.gradle
2+
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.process.ExecOperations
6+
import java.io.File
7+
import javax.inject.Inject
8+
9+
const val RELEASE_GROUP = "Release Tasks"
10+
11+
class ReleasePlugin @Inject constructor(
12+
private val execOperations: ExecOperations
13+
) : Plugin<Project> {
14+
override fun apply(project: Project) {
15+
val versionFile = project.file("version.txt")
16+
if (!versionFile.exists()) {
17+
throw IllegalStateException("version.txt file does not exist")
18+
}
19+
project.tasks.register("changeSnapshotToRelease") {
20+
group = RELEASE_GROUP
21+
description = "Change the version from a snapshot to a release version, commit it, and tag it"
22+
doLast {
23+
val version = getVersion(versionFile)
24+
val newVersion = version.removeSuffix("-SNAPSHOT")
25+
if (version == newVersion) {
26+
throw IllegalStateException("Version is not a snapshot version")
27+
}
28+
replaceVersion(versionFile, newVersion)
29+
30+
execOperations.exec {
31+
commandLine("git", "commit", "-m", "Release version $newVersion", versionFile.absolutePath)
32+
}
33+
execOperations.exec {
34+
commandLine("git", "tag", "v${newVersion}", "-m", "Release version $newVersion")
35+
}
36+
}
37+
}
38+
project.tasks.register("changeReleaseToNextSnapshot") {
39+
group = RELEASE_GROUP
40+
description = "Change the version from a release to the next snapshot version and commit it"
41+
doLast {
42+
val version = getVersion(versionFile)
43+
if (version.endsWith("-SNAPSHOT")) {
44+
throw IllegalStateException("Version is already a snapshot version")
45+
}
46+
val parts = version.split(".")
47+
val lastPart = parts.last()
48+
val newLastPart = (lastPart.toInt() + 1).toString()
49+
val newVersion = parts.dropLast(1).joinToString(".") + ".$newLastPart-SNAPSHOT"
50+
replaceVersion(versionFile, newVersion)
51+
52+
execOperations.exec {
53+
commandLine(
54+
"git",
55+
"commit",
56+
"-m",
57+
"Switch to next snapshot version $newVersion",
58+
versionFile.absolutePath
59+
)
60+
}
61+
}
62+
}
63+
}
64+
65+
private fun getVersion(versionFile: File): String = versionFile.readText().trim()
66+
67+
private fun replaceVersion(versionFile: File, version: String) = versionFile.writeText(version)
68+
}

build.gradle.kts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
11
plugins {
22
id("org.enginehub.lin-bus.publishing")
3-
id("net.researchgate.release") version "3.0.2"
4-
}
5-
6-
release {
7-
tagTemplate = "v\${version}"
8-
buildTasks = listOf<String>()
9-
git.requireBranch = "master"
3+
id("org.enginehub.lin-bus.release")
104
}

gradle.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
group=org.enginehub.lin-bus
22
url=https://enginehub.org
33
organization=EngineHub
4-
version=0.1.0-SNAPSHOT
54

6-
org.gradle.configureondemand=true
75
org.gradle.parallel=true

version.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.1.0-SNAPSHOT

0 commit comments

Comments
 (0)