Skip to content

Commit bcd7a1b

Browse files
authored
fix(publish): regex doesn't match double digit releases (#283)
* update * update * update * test * formatting * Update upload-artifacts.yml * Update upload-artifacts.yml * Update .craft.yml * clean up
1 parent a8cebc1 commit bcd7a1b

File tree

3 files changed

+102
-4
lines changed

3 files changed

+102
-4
lines changed

.craft.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ targets:
1010
mavenRepoUrl: https://oss.sonatype.org/service/local/staging/deploy/maven2/
1111
android:
1212
distDirRegex: /^(sentry-android-|.*-android).*$/
13-
fileReplaceeRegex: /\d\.\d\.\d(-\w+(\.\d)?)?(-SNAPSHOT)?/
13+
fileReplaceeRegex: /\d+\.\d+\.\d+(-\w+(\.\d+)?)?(-SNAPSHOT)?/
1414
fileReplacerStr: release.aar
1515
kmp:
1616
rootDistDirRegex: /^(?!.*(?:jvm|android|ios|watchos|tvos|macos)).*$/

.github/workflows/upload-artifacts.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ jobs:
3333
cd sentry-kotlin-multiplatform-gradle-plugin
3434
./gradlew distZip sentryPluginMarkerDistZip
3535
36+
- name: Validate distributions
37+
run: |
38+
./gradlew validateDistributions
39+
3640
- name: Archive packages
3741
uses: actions/upload-artifact@v4
3842
with:

build.gradle.kts

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import com.diffplug.spotless.LineEnding
22
import com.vanniktech.maven.publish.MavenPublishPlugin
33
import com.vanniktech.maven.publish.MavenPublishPluginExtension
44
import io.gitlab.arturbosch.detekt.Detekt
5+
import java.util.zip.ZipFile
56

67
plugins {
78
id(Config.gradleMavenPublishPlugin).version(Config.gradleMavenPublishPluginVersion)
@@ -15,7 +16,8 @@ plugins {
1516
id(Config.BuildPlugins.buildConfig).version(Config.BuildPlugins.buildConfigVersion).apply(false)
1617
kotlin(Config.kotlinSerializationPlugin).version(Config.kotlinVersion).apply(false)
1718
id(Config.QualityPlugins.kover).version(Config.QualityPlugins.koverVersion).apply(false)
18-
id(Config.QualityPlugins.binaryCompatibility).version(Config.QualityPlugins.binaryCompatibilityVersion).apply(false)
19+
id(Config.QualityPlugins.binaryCompatibility).version(Config.QualityPlugins.binaryCompatibilityVersion)
20+
.apply(false)
1921
}
2022

2123
allprojects {
@@ -39,8 +41,8 @@ subprojects {
3941
val distributionFilePath =
4042
"${this.project.buildDir}${sep}distributions${sep}${this.project.name}-${this.project.version}.zip"
4143
val file = File(distributionFilePath)
42-
if (!file.exists()) throw IllegalStateException("Distribution file: $distributionFilePath does not exist")
43-
if (file.length() == 0L) throw IllegalStateException("Distribution file: $distributionFilePath is empty")
44+
if (!file.exists()) throw GradleException("Distribution file: $distributionFilePath does not exist")
45+
if (file.length() == 0L) throw GradleException("Distribution file: $distributionFilePath is empty")
4446
}
4547
}
4648

@@ -61,6 +63,98 @@ subprojects {
6163
}
6264
}
6365

66+
tasks.register("validateDistributions") {
67+
subprojects {
68+
val subproject = this@subprojects
69+
if (subproject.name == "sentry-kotlin-multiplatform") {
70+
subproject.validateKotlinMultiplatformCoreArtifacts()
71+
}
72+
}
73+
}
74+
75+
private fun Project.validateKotlinMultiplatformCoreArtifacts() {
76+
val distributionDir = project.layout.buildDirectory.dir("distributions").get().asFile
77+
val expectedNumOfFiles = 15
78+
val filesList = distributionDir.listFiles()
79+
val actualNumOfFiles = filesList?.size ?: 0
80+
81+
if (actualNumOfFiles == expectedNumOfFiles) {
82+
println("✅ Found $actualNumOfFiles distribution files as expected.")
83+
} else {
84+
throw GradleException("❌ Expected $expectedNumOfFiles distribution files, but found $actualNumOfFiles")
85+
}
86+
87+
val baseFileName = "sentry-kotlin-multiplatform"
88+
val platforms = listOf(
89+
"watchosx64", "watchossimulatorarm64", "watchosarm64", "watchosarm32",
90+
"tvosx64", "tvossimulatorarm64", "tvosarm64",
91+
"macosx64", "macosarm64",
92+
"jvm",
93+
"iosx64", "iossimulatorarm64", "iosarm64",
94+
"android"
95+
)
96+
97+
val artifactPaths = buildList {
98+
add(distributionDir.resolve("$baseFileName-$version.zip"))
99+
addAll(
100+
platforms.map { platform ->
101+
distributionDir.resolve("$baseFileName-$platform-$version.zip")
102+
}
103+
)
104+
}
105+
106+
val commonRequiredEntries = listOf(
107+
"javadoc",
108+
"sources",
109+
"module",
110+
"pom-default.xml"
111+
)
112+
113+
artifactPaths.forEach { artifactFile ->
114+
if (!artifactFile.exists()) {
115+
throw GradleException("❌ Artifact file: ${artifactFile.path} does not exist")
116+
}
117+
if (artifactFile.length() == 0L) {
118+
throw GradleException("❌ Artifact file: ${artifactFile.path} is empty")
119+
}
120+
121+
ZipFile(artifactFile).use { zip ->
122+
val entries = zip.entries().asSequence().map { it.name }.toList()
123+
124+
commonRequiredEntries.forEach { requiredEntry ->
125+
if (entries.none { it.contains(requiredEntry) }) {
126+
throw GradleException("$requiredEntry not found in ${artifactFile.name}")
127+
} else {
128+
println("✅ Found $requiredEntry in ${artifactFile.name}")
129+
}
130+
}
131+
132+
when {
133+
artifactFile.name.contains("ios", ignoreCase = true) ||
134+
artifactFile.name.contains("macos", ignoreCase = true) ||
135+
artifactFile.name.contains("watchos", ignoreCase = true) ||
136+
artifactFile.name.contains("tvos", ignoreCase = true) -> {
137+
val expectedNumOfKlibFiles = 3
138+
val actualKlibFiles = entries.count { it.contains("klib") }
139+
if (actualKlibFiles != expectedNumOfKlibFiles) {
140+
throw GradleException("❌ Expected $expectedNumOfKlibFiles klib files in ${artifactFile.name}, but found $actualKlibFiles")
141+
} else {
142+
println("✅ Found $expectedNumOfKlibFiles klib files in ${artifactFile.name}")
143+
}
144+
}
145+
146+
artifactFile.name.contains("android", ignoreCase = true) -> {
147+
if (entries.none { it.contains("aar") }) {
148+
throw GradleException("❌ aar file not found in ${artifactFile.name}")
149+
} else {
150+
println("✅ Found aar file in ${artifactFile.name}")
151+
}
152+
}
153+
}
154+
}
155+
}
156+
}
157+
64158
subprojects {
65159
if (project.name.contains("sentry-kotlin-multiplatform")) {
66160
apply(plugin = Config.dokka)

0 commit comments

Comments
 (0)