Skip to content

Commit 5365411

Browse files
MGaetan89StaehliJ
andauthored
Improve version regex and add tests (#616)
Co-authored-by: Joaquim Stähli <[email protected]>
1 parent 4eac1bd commit 5365411

File tree

8 files changed

+95
-19
lines changed

8 files changed

+95
-19
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ jobs:
137137
- name: Run Unit Tests
138138
run: >
139139
./gradlew
140+
:build-logic:plugins:koverXmlReport
140141
:pillarbox-analytics:koverXmlReportDebug
141142
:pillarbox-cast:koverXmlReportDebug
142143
:pillarbox-core-business:koverXmlReportDebug

.github/workflows/release.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ on:
33
push:
44
# Pattern matched against refs/tags
55
tags:
6-
- '[0-9]+.[0-9].[0-9]'
7-
- '[0-9]+.[0-9].[0-9]-[0-9a-zA-Z]+'
6+
- '[0-9]+.[0-9]+.[0-9]+'
7+
- '[0-9]+.[0-9]+.[0-9]+-[0-9a-zA-Z]+'
88
jobs:
99
build:
1010
runs-on: ubuntu-latest
@@ -19,7 +19,7 @@ jobs:
1919
- name: Check if pre release tag
2020
id: check-tag
2121
run: |
22-
if [[ "${GITHUB_REF_NAME}" =~ [0-9]+.[0-9].[0-9]-[0-9a-zA-Z]+ ]]; then
22+
if [[ "${GITHUB_REF_NAME}" =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}-[0-9a-zA-Z]+$ ]]; then
2323
echo "prerelease=true" >> $GITHUB_OUTPUT
2424
fi
2525
- name: Print release tag
@@ -52,7 +52,7 @@ jobs:
5252
- name: Create Github release
5353
uses: ncipollo/release-action@v1
5454
with:
55-
draft: true
56-
prerelease: steps.check-tag.outputs.prerelease == 'true'
57-
skipIfReleaseExists: true
58-
generateReleaseNotes: true
55+
draft: true
56+
prerelease: steps.check-tag.outputs.prerelease == 'true'
57+
skipIfReleaseExists: true
58+
generateReleaseNotes: true

build-logic/plugins/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
77

88
plugins {
99
`kotlin-dsl`
10+
alias(libs.plugins.kotlinx.kover)
1011
}
1112

1213
group = "ch.srgssr.pillarbox.gradle"
@@ -26,6 +27,8 @@ dependencies {
2627
compileOnly(libs.android.gradle.api)
2728
compileOnly(libs.kotlinx.kover.gradle)
2829
compileOnly(libs.kotlin.gradle.plugin)
30+
31+
testImplementation(libs.kotlin.test)
2932
}
3033

3134
tasks {

build-logic/plugins/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxAndroidApplicationPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class PillarboxAndroidApplicationPlugin : Plugin<Project> {
3535
defaultConfig {
3636
applicationId = namespace
3737
targetSdk = AppConfig.targetSdk
38-
versionCode = VersionConfig.versionCode()
39-
versionName = VersionConfig.versionName()
38+
versionCode = VersionConfig().versionCode()
39+
versionName = VersionConfig().versionName()
4040
vectorDrawables.useSupportLibrary = true
4141
}
4242

build-logic/plugins/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxAndroidLibraryPublishingPlugin.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class PillarboxAndroidLibraryPublishingPlugin : Plugin<Project> {
4343
extensions.configure<LibraryExtension> {
4444
defaultConfig {
4545
group = "ch.srgssr.pillarbox"
46-
version = VersionConfig.versionName()
46+
version = VersionConfig().versionName()
4747
}
4848

4949
publishing {

build-logic/plugins/src/main/java/ch/srgssr/pillarbox/gradle/internal/VersionConfig.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@ package ch.srgssr.pillarbox.gradle.internal
88
* VersionConfig will build
99
* - VersionName for Pillarbox Demo
1010
* - Version for Libraries
11+
*
12+
* @param envVersionName Environment variable set by workflow.
1113
*/
12-
internal object VersionConfig {
13-
/**
14-
* Environment variable set by workflow.
15-
*/
16-
private val ENV_VERSION_NAME: String? = System.getenv("VERSION_NAME")
17-
private val versionOnlyRegex = "[0-9]+.[0-9].[0-9]".toRegex()
14+
internal class VersionConfig(
15+
private val envVersionName: String? = System.getenv("VERSION_NAME"),
16+
) {
17+
private val versionOnlyRegex = "^[0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{1,2}$".toRegex()
1818

1919
/**
2020
* Version name
2121
*
22-
* @return "Local" if [ENV_VERSION_NAME] no set.
22+
* @return "Local" if [envVersionName] no set.
2323
*/
2424
internal fun versionName(): String {
25-
return ENV_VERSION_NAME ?: "Local"
25+
return envVersionName ?: "Local"
2626
}
2727

2828
/**
@@ -31,7 +31,7 @@ internal object VersionConfig {
3131
* 0.0.0, 0.0.99, 0.1.0, 0.99.99
3232
*/
3333
internal fun versionCode(): Int {
34-
return ENV_VERSION_NAME
34+
return envVersionName
3535
?.let { versionOnlyRegex.find(it)?.value }
3636
?.let {
3737
val versions = it.split(".").map { value -> value.toInt() }
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright (c) SRG SSR. All rights reserved.
3+
* License information is available from the LICENSE file.
4+
*/
5+
package ch.srgssr.pillarbox.gradle.internal
6+
7+
import org.junit.runner.RunWith
8+
import org.junit.runners.Parameterized
9+
import org.junit.runners.Parameterized.Parameters
10+
import kotlin.test.BeforeTest
11+
import kotlin.test.Test
12+
import kotlin.test.assertEquals
13+
14+
@RunWith(Parameterized::class)
15+
class VersionConfigTest(
16+
private val envVersionName: String?,
17+
private val versionName: String,
18+
private val versionCode: Int,
19+
) {
20+
private lateinit var versionConfig: VersionConfig
21+
22+
@BeforeTest
23+
fun setUp() {
24+
versionConfig = VersionConfig(envVersionName)
25+
}
26+
27+
@Test
28+
fun `version name`() {
29+
assertEquals(versionName, versionConfig.versionName())
30+
}
31+
32+
@Test
33+
fun `version code`() {
34+
assertEquals(versionCode, versionConfig.versionCode())
35+
}
36+
37+
companion object {
38+
@JvmStatic
39+
@Parameters(name = "{index}: envVersionName={0}, versionName={1}, versionCode={2}")
40+
fun parameters(): Iterable<Any> {
41+
return listOf(
42+
// Invalid envVersionName
43+
arrayOf(null, "Local", 9999),
44+
arrayOf("", "", 9999),
45+
arrayOf("Foo", "Foo", 9999),
46+
47+
// Invalid version format
48+
arrayOf("1.2", "1.2", 9999),
49+
arrayOf("1a2b3", "1a2b3", 9999),
50+
arrayOf("1.2.3.4", "1.2.3.4", 9999),
51+
arrayOf("111.2.3", "111.2.3", 9999),
52+
arrayOf("1.222.3", "1.222.3", 9999),
53+
arrayOf("1.2.333", "1.2.333", 9999),
54+
55+
// Valid version format
56+
arrayOf("0.0.0", "0.0.0", 0),
57+
arrayOf("1.2.3", "1.2.3", 10203),
58+
arrayOf("12.34.56", "12.34.56", 123456),
59+
arrayOf("01.02.03", "01.02.03", 10203),
60+
arrayOf("99.99.99", "99.99.99", 999999),
61+
)
62+
}
63+
}
64+
}

build-logic/settings.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,14 @@
33
* License information is available from the LICENSE file.
44
*/
55

6+
pluginManagement {
7+
repositories {
8+
gradlePluginPortal()
9+
google()
10+
mavenCentral()
11+
}
12+
}
13+
614
dependencyResolutionManagement {
715
repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
816

0 commit comments

Comments
 (0)