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 all commits
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 @@ -56,11 +56,17 @@ class FirebaseJavaLibraryPlugin : BaseFirebaseLibraryPlugin() {
setupStaticAnalysis(project, firebaseLibrary)
setupApiInformationAnalysis(project)
getIsPomValidTask(project, firebaseLibrary)
getSemverTaskJar(project, firebaseLibrary)
setupVersionCheckTasks(project, firebaseLibrary)
configurePublishing(project, firebaseLibrary)
}

private fun getSemverTaskJar(project: Project, firebaseLibrary: FirebaseLibraryExtension) {
private fun setupVersionCheckTasks(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 { "" })
}
project.mkdir("semver")
project.tasks.register<GmavenCopier>("copyPreviousArtifacts") {
dependsOn("jar")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,17 @@ class FirebaseLibraryPlugin : BaseFirebaseLibraryPlugin() {
android.testServer(FirebaseTestServer(project, firebaseLibrary.testLab, android))
setupStaticAnalysis(project, firebaseLibrary)
getIsPomValidTask(project, firebaseLibrary)
getSemverTaskAar(project, firebaseLibrary)
setupVersionCheckTasks(project, firebaseLibrary)
configurePublishing(project, firebaseLibrary, android)
}

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

fun hasReleasedVersion(version: String): Boolean {
val doc: Document? = getMavenMetadata()
if (doc != null) {
val versions = doc.getElementsByTagName("version")
for (i in 0..versions.length - 1) {
if (versions.item(i).textContent == version) {
return true
}
}
}
return false
}

fun getLatestReleasedVersion(): String {
val doc: Document? = getMavenMetadata()
return doc?.getElementsByTagName("latest")?.item(0)?.getTextContent() ?: ""
}

fun getMavenMetadata(): Document? {
val groupIdAsPath = groupId.replace(".", "/")
val mavenMetadataUrl = "${GMAVEN_ROOT}/${groupIdAsPath}/${artifactId}/maven-metadata.xml"
val factory: DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
val builder: DocumentBuilder = factory.newDocumentBuilder()
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()
return doc.getElementsByTagName("latest").item(0).getTextContent()
return doc
} catch (e: FileNotFoundException) {
return ""
return null
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

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()
val info =
"\n latestReleasedVersion in gradle.properties should match the latest release on GMaven (${latestMavenVersion})" +
"\n version in gradle.properties should be a version bump above this, following SemVer, and should not be released on GMaven"
// Either the Maven metadata does not exist, or the library hasn't been released
if (latestMavenVersion.isEmpty()) {
return
}
// TODO(b/285892320): Remove condition when bug fixed
if (artifactId.get() == "protolite-well-known-types") {
return
}
if (version.get() == latestReleasedVersion.get()) {
throw GradleException(
"version and latestReleasedVersion from gradle.properties are the same (${version.get()})" +
info
)
}
if (latestMavenVersion == version.get()) {
throw GradleException(
"version from gradle.properties (${version.get()}) is already the latest release on GMaven" +
info
)
} else if (mavenHelper.hasReleasedVersion(version.get())) {
throw GradleException(
"version from gradle.properties (${version.get()}) has already been released on GMaven" +
info
)
}
if (latestMavenVersion != latestReleasedVersion.get()) {
if (mavenHelper.hasReleasedVersion(latestReleasedVersion.get())) {
throw GradleException(
"latestReleasedVersion from gradle.properties (${latestReleasedVersion.get()}) has been released but is not the latest release on GMaven (${latestMavenVersion})"
)
} else {
throw GradleException(
"latestReleasedVersion from gradle.properties (${latestReleasedVersion.get()}) has not been released on GMaven" +
info
)
}
}
}
}
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
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