From 2f3a0b32069255e5793d02aeb8aa081e8506cbe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gonz=C3=A1lez?= Date: Tue, 24 Sep 2024 17:29:08 +0200 Subject: [PATCH 1/2] use latest tag to retrieve versionCode for nightly releases --- versioning.gradle | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/versioning.gradle b/versioning.gradle index 596d9a4a0b62..d5ea0946d189 100644 --- a/versioning.gradle +++ b/versioning.gradle @@ -31,15 +31,35 @@ ext { } buildNumberCode = { - filePath = "${CI_HOME_DIR}/build_number.properties" - if(!new File(filePath).exists()) return 0 - def suffix = getVersionNameSuffix() if (suffix?.trim()) { - def props = new Properties() - props.load(new FileInputStream(filePath)) - String buildNumber = props["build"] - if (buildNumber == null) return 0 else return Integer.valueOf(buildNumber) + println("This is a nightly release, incrementing from previous release...") + String revision = 'git rev-list --tags --max-count=1'.execute().text + def stag = new StringBuilder(), serror = new StringBuilder() + def proc = "git describe --tags ${revision}".execute() + proc.consumeProcessOutput(stag, serror) + proc.waitForOrKill(1000) + def err = serror.toString() + if (err.isEmpty()){ + def tag = stag.toString() + if (tag.contains('nightly')) { + println("Last tag $tag was a nightly release, incrementing from previous one...") + + def (major, minor, patch, nightly) = tag.toLowerCase().tokenize('.') + (major, minor, patch, nightly) = [major, minor, patch, nightly].collect { it.toString() } + + def (code, sufix) = nightly.toLowerCase().tokenize('-') + (code, sufix) = [code, sufix].collect { it.toString() } + + def newCode = Integer.parseInt(code) + 1 + println("Previous code was $code, incrementing to $newCode") + return newCode + } else { + return 0 + } + } else { + throw new IllegalStateException("Error retrieving git tag $err") + } } else { return 0 } @@ -97,4 +117,10 @@ tasks.register('getBuildVersionName') { doLast { print buildVersionName() } +} + +tasks.register('getBuildVersionCode') { + doLast { + print buildNumberCode() + } } \ No newline at end of file From 7efc5fb073abb2eb78c1264a4c93a63caaf9fdcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gonz=C3=A1lez?= Date: Tue, 1 Oct 2024 22:42:44 +0200 Subject: [PATCH 2/2] running external process as recommended in the guidelines --- versioning.gradle | 58 ++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/versioning.gradle b/versioning.gradle index d5ea0946d189..82d63793fe6a 100644 --- a/versioning.gradle +++ b/versioning.gradle @@ -1,10 +1,15 @@ +import javax.inject.Inject +import org.gradle.api.provider.ValueSourceParameters +import java.nio.charset.Charset + ext { buildVersionCode = { + def versionCode = buildNumberCode() def versionName = getVersionName() def (major, minor, patch) = versionName.toLowerCase().tokenize('.') (major, minor, patch) = [major, minor, patch].collect { it.toInteger() } - (major * 10_000_000) + (minor * 10_000) + (patch * 1_000) + buildNumberCode() + (major * 10_000_000) + (minor * 10_000) + (patch * 1_000) + versionCode } getVersionName = { @@ -33,32 +38,19 @@ ext { buildNumberCode = { def suffix = getVersionNameSuffix() if (suffix?.trim()) { - println("This is a nightly release, incrementing from previous release...") - String revision = 'git rev-list --tags --max-count=1'.execute().text - def stag = new StringBuilder(), serror = new StringBuilder() - def proc = "git describe --tags ${revision}".execute() - proc.consumeProcessOutput(stag, serror) - proc.waitForOrKill(1000) - def err = serror.toString() - if (err.isEmpty()){ - def tag = stag.toString() - if (tag.contains('nightly')) { - println("Last tag $tag was a nightly release, incrementing from previous one...") - - def (major, minor, patch, nightly) = tag.toLowerCase().tokenize('.') - (major, minor, patch, nightly) = [major, minor, patch, nightly].collect { it.toString() } - - def (code, sufix) = nightly.toLowerCase().tokenize('-') - (code, sufix) = [code, sufix].collect { it.toString() } - - def newCode = Integer.parseInt(code) + 1 - println("Previous code was $code, incrementing to $newCode") - return newCode - } else { - return 0 - } + def latestGitTagProvider = providers.of(LatestGitTagValueSource.class) {} + def tag = latestGitTagProvider.get() + if (tag.contains('nightly')) { + def (major, minor, patch, nightly) = tag.toLowerCase().tokenize('.') + (major, minor, patch, nightly) = [major, minor, patch, nightly].collect { it.toString() } + + def (code, sufix) = nightly.toLowerCase().tokenize('-') + (code, sufix) = [code, sufix].collect { it.toString() } + + def newCode = Integer.parseInt(code) + 1 + return newCode } else { - throw new IllegalStateException("Error retrieving git tag $err") + return 0 } } else { return 0 @@ -123,4 +115,18 @@ tasks.register('getBuildVersionCode') { doLast { print buildNumberCode() } +} + +abstract class LatestGitTagValueSource implements ValueSource { + @Inject + abstract ExecOperations getExecOperations() + + String obtain() { + ByteArrayOutputStream output = new ByteArrayOutputStream() + execOperations.exec { + it.commandLine "git", "describe", "--tags", "--abbrev=0" + it.standardOutput = output + } + return new String(output.toByteArray(), Charset.defaultCharset()) + } } \ No newline at end of file