aboutsummaryrefslogtreecommitdiffstats
path: root/build-logic/android-plugins/src/main/kotlin/versioning/VersioningTask.kt
diff options
context:
space:
mode:
Diffstat (limited to 'build-logic/android-plugins/src/main/kotlin/versioning/VersioningTask.kt')
-rw-r--r--build-logic/android-plugins/src/main/kotlin/versioning/VersioningTask.kt46
1 files changed, 46 insertions, 0 deletions
diff --git a/build-logic/android-plugins/src/main/kotlin/versioning/VersioningTask.kt b/build-logic/android-plugins/src/main/kotlin/versioning/VersioningTask.kt
new file mode 100644
index 00000000..fe437c04
--- /dev/null
+++ b/build-logic/android-plugins/src/main/kotlin/versioning/VersioningTask.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+package versioning
+
+import com.vdurmont.semver4j.Semver
+import org.gradle.api.DefaultTask
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
+
+@CacheableTask
+abstract class VersioningTask : DefaultTask() {
+ @get:Input abstract val semverString: Property<String>
+
+ @get:OutputFile abstract val propertyFile: RegularFileProperty
+
+ /** Generate the Android 'versionCode' property */
+ private fun Semver.androidCode(): Int {
+ return major * 1_00_00 + minor * 1_00 + patch
+ }
+
+ private fun Semver.toPropFileText(): String {
+ val newVersionCode = androidCode()
+ val newVersionName = toString()
+ return buildString {
+ appendLine(VERSIONING_PROP_COMMENT)
+ append(VERSIONING_PROP_VERSION_CODE)
+ append('=')
+ appendLine(newVersionCode)
+ append(VERSIONING_PROP_VERSION_NAME)
+ append('=')
+ appendLine(newVersionName)
+ }
+ }
+
+ @TaskAction
+ fun execute() {
+ propertyFile.get().asFile.writeText(Semver(semverString.get()).toPropFileText())
+ }
+}