Skip to content

Add GMaven Version test #5257

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Aug 21, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/workflows/version-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Version Check

on:
workflow_dispatch:
pull_request:
branches:
- 'releases/**'

jobs:
version-check:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]

- name: Build
run: |
./gradlew gmavenVersionCheck
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,19 @@ class FirebaseJavaLibraryPlugin : BaseFirebaseLibraryPlugin() {
setupApiInformationAnalysis(project)
getIsPomValidTask(project, firebaseLibrary)
getSemverTaskJar(project, firebaseLibrary)
setupVersionCheckTask(project, firebaseLibrary)
configurePublishing(project, firebaseLibrary)
}

private fun setupVersionCheckTask(project: Project, firebaseLibrary: FirebaseLibraryExtension) {
project.tasks.register<GmavenVersionChecker>("gmavenVersionCheck") {
groupId.value(firebaseLibrary.groupId.get())
artifactId.value(firebaseLibrary.artifactId.get())
version.value(firebaseLibrary.version)
latestReleasedVersion.value(firebaseLibrary.latestReleasedVersion.orElseGet { "" })
}
}

private fun getSemverTaskJar(project: Project, firebaseLibrary: FirebaseLibraryExtension) {
project.mkdir("semver")
project.tasks.register<GmavenCopier>("copyPreviousArtifacts") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,19 @@ class FirebaseLibraryPlugin : BaseFirebaseLibraryPlugin() {
setupStaticAnalysis(project, firebaseLibrary)
getIsPomValidTask(project, firebaseLibrary)
getSemverTaskAar(project, firebaseLibrary)
setupVersionCheckTask(project, firebaseLibrary)
configurePublishing(project, firebaseLibrary, android)
}

private fun setupVersionCheckTask(project: Project, firebaseLibrary: FirebaseLibraryExtension) {
project.tasks.register<GmavenVersionChecker>("gmavenVersionCheck") {
groupId.value(firebaseLibrary.groupId.get())
artifactId.value(firebaseLibrary.artifactId.get())
version.value(firebaseLibrary.version)
latestReleasedVersion.value(firebaseLibrary.latestReleasedVersion.orElseGet { "" })
}
}

private fun getSemverTaskAar(project: Project, firebaseLibrary: FirebaseLibraryExtension) {
project.mkdir("semver")
project.tasks.register<GmavenCopier>("copyPreviousArtifacts") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,24 @@ class GmavenHelper(val groupId: String, val artifactId: String) {
return "${GMAVEN_ROOT}/${groupIdAsPath}/${artifactId}/${version}/${fileName}"
}

fun hasReleasedVersion(version: String): Boolean {
try {
val groupIdAsPath = groupId.replace(".", "/")
val mavenMetadataUrl = "${GMAVEN_ROOT}/${groupIdAsPath}/${artifactId}/maven-metadata.xml"
val factory: DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
val builder: DocumentBuilder = factory.newDocumentBuilder()
val doc: Document = builder.parse(URL(mavenMetadataUrl).openStream())
doc.documentElement.normalize()
val versions = doc.getElementsByTagName("version")
for (i in 0..versions.length - 1) {
if (versions.item(i).textContent == version) {
return true
}
}
} catch (e: FileNotFoundException) {}
return false
}

fun getLatestReleasedVersion(): String {
try {
val groupIdAsPath = groupId.replace(".", "/")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.google.firebase.gradle.plugins

import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction

abstract class GmavenVersionChecker : DefaultTask() {

@get:Input abstract val groupId: Property<String>

@get:Input abstract val artifactId: Property<String>

@get:Input abstract val latestReleasedVersion: Property<String>

@get:Input abstract val version: Property<String>

@TaskAction
fun run() {
val mavenHelper = GmavenHelper(groupId.get(), artifactId.get())
val latestMavenVersion = mavenHelper.getLatestReleasedVersion()
// Either the Maven metadata does not exist, or the library hasn't been released
if (latestMavenVersion.isEmpty()) {
return
}
if (version.get() == latestReleasedVersion.get()) {
throw GradleException(
"Current and latest released versions from gradle.properties are the same (${version.get()})" +
"\nLatest release should be ${latestMavenVersion}"
)
}
if (latestMavenVersion == version.get()) {
throw GradleException(
"Current version from gradle.properties (${version.get()}) is already the latest release on GMaven"
)
} else if (mavenHelper.hasReleasedVersion(version.get())) {
throw GradleException(
"Current version from gradle.properties (${version.get()}) has already been released on GMaven" +
"\nThe latest released version on GMaven ${latestMavenVersion}"
)
}
if (latestMavenVersion != latestReleasedVersion.get()) {
if (mavenHelper.hasReleasedVersion(latestReleasedVersion.get())) {
throw GradleException(
"Latest released version from gradle.properties (${latestReleasedVersion.get()}) is not the latest released on GMaven (${latestMavenVersion})"
)
} else {
throw GradleException(
"Latest released version from gradle.properties (${latestReleasedVersion.get()}) has not been released on GMaven" +
"\nThe latest released version on GMaven ${latestMavenVersion}"
)
}
}
}
}
2 changes: 1 addition & 1 deletion firebase-messaging/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
version=23.2.2
latestReleasedVersion=23.2.2
latestReleasedVersion=23.2.1
android.enableUnitTestBinaryResources=true
2 changes: 1 addition & 1 deletion protolite-well-known-types/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# IMPORTANT (b/285892320) Keep version and latestReleasedVersion in sync
# unless you are releasing a new version of the library to prevent issues
# with transitive dependencies.
version=18.0.0
version=18.0.1
latestReleasedVersion=18.0.0
4 changes: 2 additions & 2 deletions transport/transport-backend-cct/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
# See the License for the specific language governing permissions and
# limitations under the License.

version=3.1.9
latestReleasedVersion=3.1.8
version=3.1.10
latestReleasedVersion=3.1.9
4 changes: 2 additions & 2 deletions transport/transport-runtime/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.

version=3.1.9
latestReleasedVersion=3.1.8
version=3.1.10
latestReleasedVersion=3.1.9
android.enableUnitTestBinaryResources=true