Skip to content

Commit

Permalink
feat: add tagPrefix extension
Browse files Browse the repository at this point in the history
  • Loading branch information
ichromanrd committed Feb 4, 2024
1 parent d8adbb2 commit 43f4457
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ class GradleReleasePaperworkPlugin : Plugin<Project> {
val commit = commitChanges(
project = project,
newVersion = versionToRelease,
extension = extension,
changedFiles = arrayOf(releaseNotesFile, getProjectVersionFile(project, extension))
)
createTag(versionToRelease, project, commit)
createTag(versionToRelease, project, extension, commit)
}
}
}
Expand Down Expand Up @@ -241,8 +242,9 @@ class GradleReleasePaperworkPlugin : Plugin<Project> {
val log = Git.open(project.rootDir).log().call()
val result = mutableListOf<String>()
val maxChanges = getMaxChangesPerRelease(extension)
val releaseCommitRegex = getReleaseCommitRegex(extension)
for (commit in log) {
if (RELEASE_COMMIT_REGEX.matches(commit.shortMessage)) {
if (releaseCommitRegex.matches(commit.shortMessage)) {
// skip release commit
continue
}
Expand Down Expand Up @@ -337,19 +339,30 @@ class GradleReleasePaperworkPlugin : Plugin<Project> {
projectVersionFile.writeText(newContent)
}

private fun commitChanges(project: Project, newVersion: String, vararg changedFiles: File): RevCommit {
private fun commitChanges(
project: Project,
newVersion: String,
extension: GradleReleasePaperworkPluginExtension,
vararg changedFiles: File,
): RevCommit {
val git = Git.open(project.rootDir)
for (file in changedFiles) {
val pathToCommit = project.rootDir.toPath().relativize(file.toPath()).toString()
project.logger.lifecycle("committing file $pathToCommit")
git.add().addFilepattern(pathToCommit).call()
}
return git.commit().setMessage(String.format(RELEASE_COMMIT_MESSAGE_PATTERN, newVersion)).call()
val tagPrefix = getTagPrefix(extension)
return git.commit().setMessage(String.format(tagPrefix, newVersion)).call()
}

private fun createTag(newVersion: String, project: Project, commitId: RevCommit) {
private fun createTag(
newVersion: String,
project: Project,
extension: GradleReleasePaperworkPluginExtension,
commitId: RevCommit
) {
val git = Git.open(project.rootDir)
val tagName = String.format(RELEASE_COMMIT_MESSAGE_PATTERN, newVersion)
val tagName = String.format(getTagPrefix(extension), newVersion)
project.logger.lifecycle("creating git tag $tagName")
git
.tag()
Expand All @@ -359,15 +372,23 @@ class GradleReleasePaperworkPlugin : Plugin<Project> {
.call()
}

private fun getTagPrefix(extension: GradleReleasePaperworkPluginExtension) =
if (extension.tagPrefix.isPresent) "${extension.tagPrefix.get()}%s"
else DEFAULT_RELEASE_COMMIT_MESSAGE_PATTERN

private fun getReleaseCommitRegex(extension: GradleReleasePaperworkPluginExtension): Regex {
val prefix = getTagPrefix(extension)
return prefix.replace("%s", "\\S+").toRegex()
}

companion object {
val DEFAULT_PROJECT_VERSION_REGEX = """version\s*=\s*['"]([^'"]+)""".toRegex()
const val DEFAULT_RELEASE_NOTES_FILE = "RELEASE_NOTES.md"
const val RELEASE_COMMIT_MESSAGE_PATTERN = "release-%s"
val RELEASE_COMMIT_REGEX = RELEASE_COMMIT_MESSAGE_PATTERN.replace("%s", "\\S+").toRegex()
const val DEFAULT_RELEASE_COMMIT_MESSAGE_PATTERN = "release-%s"
const val RELEASE_DESCRIPTION_FORMAT = "v<version> released on <date><additional-release-description>"
const val COMMIT_DESCRIPTION_FORMAT = " * <commit-hash> <commit-description>"
val COMMIT_DESCRIPTION_SUFFIX_REGEX = """\s+\*\s+""".toRegex()
val DATE_SYSTEM_PROPERTY_NAME = "paperwork.release.date"
const val DATE_SYSTEM_PROPERTY_NAME = "paperwork.release.date"
val ZONE_UTC = ZoneId.of("UTC")
private val DATE_FORMATTER: DateTimeFormatter = DateTimeFormatter.ofPattern("dd MMM yyyy z")
private const val DEFAULT_MAX_CHANGES_PER_RELEASE = 20
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ interface GradleReleasePaperworkPluginExtension {
val changeDescription: Property<(String) -> String?>

val maxChangesPerRelease: Property<Int>

val tagPrefix: Property<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,28 @@ internal class GradleReleasePaperworkPluginTest {
""".trimIndent())
runBuild()

val expected = String.format(GradleReleasePaperworkPlugin.RELEASE_COMMIT_MESSAGE_PATTERN, version)
val expected = String.format(GradleReleasePaperworkPlugin.DEFAULT_RELEASE_COMMIT_MESSAGE_PATTERN, version)
val tag = git.tagList().call().find {
val actual = it.name.substring("refs/tags/".length)
actual == expected
}
assertThat(tag).isNotNull
}

@Test
fun `when tagPrefix is defined then tag created will be using that`() {
val version = "1.0.0"
val prefix = "v"
gradleFile.appendText("""
version = "$version"
releasePaperwork {
tagPrefix.set("$prefix")
}
""".trimIndent())
runBuild()

val expected = "$prefix$version"
val tag = git.tagList().call().find {
val actual = it.name.substring("refs/tags/".length)
actual == expected
Expand Down

0 comments on commit 43f4457

Please sign in to comment.