Skip to content
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

Fix maven release changes #665

Merged
merged 12 commits into from
Sep 20, 2024
9 changes: 3 additions & 6 deletions .github/actions/maven-publish/action.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
name: Publish release to Java

inputs:
java-version:
required: true
ossr-username:
required: true
ossr-token:
Expand All @@ -9,12 +11,7 @@ inputs:
required: true
signing-password:
required: true
java-version:
required: true
is-android:
required: true
version:
required: true


runs:
using: composite
Expand Down
6 changes: 1 addition & 5 deletions .github/workflows/java-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@ on:
java-version:
required: true
type: string
is-android:
required: true
type: string

secrets:
ossr-username:
required: true
Expand Down Expand Up @@ -70,8 +68,6 @@ jobs:
- uses: ./.github/actions/maven-publish
with:
java-version: ${{ inputs.java-version }}
is-android: ${{ inputs.is-android }}
version: ${{ steps.get_version.outputs.version }}
ossr-username: ${{ secrets.ossr-username }}
ossr-token: ${{ secrets.ossr-token }}
signing-key: ${{ secrets.signing-key }}
Expand Down
107 changes: 77 additions & 30 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,43 +1,30 @@
buildscript {
repositories {
jcenter()
}

dependencies {
// https://github.com/melix/japicmp-gradle-plugin/issues/36
classpath 'com.google.guava:guava:31.1-jre'
}
}


plugins {
id 'java'
id 'jacoco'
id 'com.auth0.gradle.oss-library.java'
id 'me.champeau.gradle.japicmp' version '0.2.9'
}

repositories {
mavenCentral()
}

group = 'com.auth0'
logger.lifecycle("Using version ${version} for ${name} group $group")

def signingKey = findProperty('signingKey')
def signingKeyPwd = findProperty('signingPassword')

oss {
name 'auth0'
repository 'auth0-java'
organization 'auth0'
description 'Java client library for the Auth0 platform.'
baselineCompareVersion '2.0.0'
testInJavaVersions = [8, 11, 17]
skipAssertSigningConfiguration true

developers {
auth0 {
displayName = 'Auth0'
email = 'oss@auth0.com'
}
lbalmaceda {
displayName = 'Luciano Balmaceda'
email = 'luciano.balmaceda@auth0.com'
}
}
}
apply from: rootProject.file('gradle/versioning.gradle')

signing {
useInMemoryPgpKeys(signingKey, signingKeyPwd)
}
version = getVersionFromFile()
group = GROUP
logger.lifecycle("Using version ${version} for ${name} group $group")

jacocoTestReport {
reports {
Expand All @@ -63,6 +50,61 @@ compileTestJava {
options.compilerArgs << "-Xlint:deprecation" << "-Werror"
}

import me.champeau.gradle.japicmp.JapicmpTask

project.afterEvaluate {

def versions = project.ext.testInJavaVersions
for (pluginJavaTestVersion in versions) {
def taskName = "testInJava-${pluginJavaTestVersion}"
tasks.register(taskName, Test) {
def versionToUse = taskName.split("-").getAt(1) as Integer
description = "Runs unit tests on Java version ${versionToUse}."
project.logger.quiet("Test will be running in ${versionToUse}")
group = 'verification'
javaLauncher.set(javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(versionToUse)
})
shouldRunAfter(tasks.named('test'))
}
tasks.named('check') {
dependsOn(taskName)
}
}

project.configure(project) {
def baselineVersion = project.ext.baselineCompareVersion
task('apiDiff', type: JapicmpTask, dependsOn: 'jar') {
oldClasspath = files(getBaselineJar(project, baselineVersion))
newClasspath = files(jar.archiveFile)
onlyModified = true
failOnModification = true
ignoreMissingClasses = true
htmlOutputFile = file("$buildDir/reports/apiDiff/apiDiff.html")
txtOutputFile = file("$buildDir/reports/apiDiff/apiDiff.txt")
doLast {
project.logger.quiet("Comparing against baseline version ${baselineVersion}")
}
}
}
}

private static File getBaselineJar(Project project, String baselineVersion) {
// Use detached configuration: https://github.com/square/okhttp/blob/master/build.gradle#L270
def group = project.group
try {
def baseline = "${project.group}:${project.name}:$baselineVersion"
project.group = 'virtual_group_for_japicmp'
def dependency = project.dependencies.create(baseline + "@jar")
return project.configurations.detachedConfiguration(dependency).files.find {
it.name == "${project.name}-${baselineVersion}.jar"
}
} finally {
project.group = group
}
}


test {
testLogging {
events "skipped", "failed"
Expand All @@ -75,6 +117,9 @@ ext {
okhttpVersion = '4.11.0'
hamcrestVersion = '2.2'
jupiterVersion = '5.9.3'

baselineCompareVersion = '2.0.0'
testInJavaVersions = [8, 11, 17, 21]
}

dependencies {
Expand Down Expand Up @@ -105,3 +150,5 @@ dependencies {
}
}
}

apply from: rootProject.file('gradle/maven-publish.gradle')
21 changes: 21 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
GROUP=com.auth0
POM_ARTIFACT_ID=auth0
VERSION_NAME=2.12.0

POM_NAME=auth0-java
POM_DESCRIPTION=Java client library for the Auth0 platform
POM_PACKAGING=jar

POM_URL=https://github.com/auth0/auth0-java
POM_SCM_URL=https://github.com/auth0/auth0-java

POM_SCM_CONNECTION=scm:git:https://github.com/auth0/auth0-java.git
POM_SCM_DEV_CONNECTION=scm:git:https://github.com/auth0/auth0-java.git

POM_LICENCE_NAME=The MIT License (MIT)
POM_LICENCE_URL=https://github.com/auth0/auth0-java/master/LICENSE
POM_LICENCE_DIST=repo

POM_DEVELOPER_ID=auth0
POM_DEVELOPER_NAME=Auth0
POM_DEVELOPER_EMAIL=oss@auth0.com
111 changes: 111 additions & 0 deletions gradle/maven-publish.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
apply plugin: 'maven-publish'
apply plugin: 'signing'

task('sourcesJar', type: Jar, dependsOn: classes) {
archiveClassifier = 'sources'
from sourceSets.main.allSource
}

task('javadocJar', type: Jar, dependsOn: javadoc) {
archiveClassifier = 'javadoc'
from javadoc.getDestinationDir()
}
tasks.withType(Javadoc).configureEach {
javadocTool = javaToolchains.javadocToolFor {
// Use latest JDK for javadoc generation
languageVersion = JavaLanguageVersion.of(17)
}
}

javadoc {
// Specify the Java version that the project will use
options.addStringOption('-release', "8")
}
artifacts {
archives sourcesJar, javadocJar
}


final releaseRepositoryUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
final snapshotRepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/"

publishing {
publications {
mavenJava(MavenPublication) {

groupId = GROUP
artifactId = POM_ARTIFACT_ID
version = getVersionName()

artifact("$buildDir/libs/${project.name}-${version}.jar")
artifact sourcesJar
artifact javadocJar

pom {
name = POM_NAME
packaging = POM_PACKAGING
description = POM_DESCRIPTION
url = POM_URL

licenses {
license {
name = POM_LICENCE_NAME
url = POM_LICENCE_URL
distribution = POM_LICENCE_DIST
}
}

developers {
developer {
id = POM_DEVELOPER_ID
name = POM_DEVELOPER_NAME
email = POM_DEVELOPER_EMAIL
}
}

scm {
url = POM_SCM_URL
connection = POM_SCM_CONNECTION
developerConnection = POM_SCM_DEV_CONNECTION
}

pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')

project.configurations.implementation.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
repositories {
maven {
name = "sonatype"
url = version.endsWith('SNAPSHOT') ? snapshotRepositoryUrl : releaseRepositoryUrl
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
}
}

signing {
def signingKey = System.getenv("SIGNING_KEY")
def signingPassword = System.getenv("SIGNING_PASSWORD")
useInMemoryPgpKeys(signingKey, signingPassword)

sign publishing.publications.mavenJava
}

javadoc {
if(JavaVersion.current().isJava9Compatible()) {
options.addBooleanOption('html5', true)
}
}


17 changes: 17 additions & 0 deletions gradle/versioning.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
def getVersionFromFile() {
def versionFile = rootProject.file('.version')
return versionFile.text.readLines().first().trim()
}

def isSnapshot() {
return hasProperty('isSnapshot') ? isSnapshot.toBoolean() : true
}

def getVersionName() {
return isSnapshot() ? project.version+"-SNAPSHOT" : project.version
}

ext {
getVersionName = this.&getVersionName
getVersionFromFile = this.&getVersionFromFile
}
3 changes: 0 additions & 3 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ pluginManagement {
repositories {
gradlePluginPortal()
}
plugins {
id 'com.auth0.gradle.oss-library.java' version '0.18.0'
}
}

rootProject.name = 'auth0'
Loading