|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
17 | | -import java.time.LocalDate |
18 | | -import java.time.format.DateTimeFormatter |
19 | | - |
20 | 17 | plugins { |
21 | 18 | kotlin("jvm") apply false |
| 19 | + id("kover-release-conventions") |
22 | 20 | alias(libs.plugins.kotlinx.dokka) apply false |
23 | 21 | alias(libs.plugins.kotlinx.binaryCompatibilityValidator) apply false |
24 | 22 | } |
25 | 23 |
|
26 | | - |
27 | | - |
28 | | -// ==================== |
29 | | -// Release preparation |
30 | | -// ==================== |
31 | | -tasks.register("prepareRelease") { |
32 | | - |
33 | | - doLast { |
34 | | - if (!project.hasProperty("releaseVersion")) { |
35 | | - throw GradleException("Property 'releaseVersion' is required to run this task") |
36 | | - } |
37 | | - val releaseVersion = project.property("releaseVersion") as String |
38 | | - val prevReleaseVersion = project.property("kover.release.version") as String |
39 | | - |
40 | | - val projectDir = layout.projectDirectory |
41 | | - |
42 | | - projectDir.file("gradle.properties").asFile.patchProperties(releaseVersion) |
43 | | - projectDir.file("CHANGELOG.md").asFile.patchChangeLog(releaseVersion) |
44 | | - |
45 | | - projectDir.file("README.md").asFile.replaceInFile(prevReleaseVersion, releaseVersion) |
46 | | - |
47 | | - // replace versions in examples |
48 | | - projectDir.dir("kover-gradle-plugin").dir("examples").patchExamples(releaseVersion, prevReleaseVersion) |
49 | | - projectDir.dir("kover-offline-runtime").dir("examples").patchExamples(releaseVersion, prevReleaseVersion) |
50 | | - |
51 | | - // replace versions in docs |
52 | | - projectDir.dir("docs").patchDocs(releaseVersion, prevReleaseVersion) |
53 | | - } |
54 | | -} |
55 | | - |
56 | | -fun Directory.patchExamples(releaseVersion: String, prevReleaseVersion: String) { |
57 | | - asFileTree.matching { |
58 | | - include("**/*gradle") |
59 | | - include("**/*gradle.kts") |
60 | | - }.files.forEach { |
61 | | - it.replaceInFile(prevReleaseVersion, releaseVersion) |
62 | | - } |
63 | | -} |
64 | | - |
65 | | -fun Directory.patchDocs(releaseVersion: String, prevReleaseVersion: String) { |
66 | | - asFileTree.files.forEach { |
67 | | - it.replaceInFile(prevReleaseVersion, releaseVersion) |
68 | | - } |
69 | | -} |
70 | | - |
71 | | -fun File.patchChangeLog(releaseVersion: String) { |
72 | | - val oldContent = readText() |
73 | | - writer().use { |
74 | | - it.appendLine("$releaseVersion / ${LocalDate.now().format(DateTimeFormatter.ISO_DATE)}") |
75 | | - it.appendLine("===================") |
76 | | - it.appendLine("TODO add changelog!") |
77 | | - it.appendLine() |
78 | | - it.append(oldContent) |
79 | | - } |
80 | | -} |
81 | | - |
82 | | -fun File.patchProperties(releaseVersion: String) { |
83 | | - val oldLines = readLines() |
84 | | - writer().use { writer -> |
85 | | - oldLines.forEach { line -> |
86 | | - when { |
87 | | - line.startsWith("version=") -> writer.append("version=").appendLine(increaseSnapshotVersion(releaseVersion)) |
88 | | - line.startsWith("kover.release.version=") -> writer.append("kover.release.version=").appendLine(releaseVersion) |
89 | | - else -> writer.appendLine(line) |
90 | | - } |
91 | | - } |
92 | | - } |
93 | | -} |
94 | | - |
95 | | -// modify version '1.2.3' to '1.2.4' and '1.2.3-Beta' to '1.2.3-SNAPSHOT' |
96 | | -fun increaseSnapshotVersion(releaseVersion: String): String { |
97 | | - // remove postfix like '-Alpha' |
98 | | - val correctedVersion = releaseVersion.substringBefore('-') |
99 | | - if (correctedVersion != releaseVersion) { |
100 | | - return "$correctedVersion-SNAPSHOT" |
101 | | - } |
102 | | - |
103 | | - // split version 0.0.0 to int parts |
104 | | - val parts = correctedVersion.split('.') |
105 | | - val newVersion = parts.mapIndexed { index, value -> |
106 | | - if (index == parts.size - 1) { |
107 | | - (value.toInt() + 1).toString() |
108 | | - } else { |
109 | | - value |
110 | | - } |
111 | | - }.joinToString(".") |
112 | | - |
113 | | - return "$newVersion-SNAPSHOT" |
114 | | -} |
115 | | - |
116 | | -fun File.replaceInFile(old: String, new: String) { |
117 | | - val newContent = readText().replace(old, new) |
118 | | - writeText(newContent) |
119 | | -} |
120 | | - |
0 commit comments