Skip to content

Commit 8def355

Browse files
authored
#minor: Add Jackson 3 plugin and migrate publishing to maven-publish (#185)
1 parent 09a5db7 commit 8def355

35 files changed

Lines changed: 1250 additions & 318 deletions

File tree

.github/workflows/build.yml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ jobs:
2020
runs-on: ${{ matrix.os }}
2121
strategy:
2222
matrix:
23-
java_version: [ '8' ]
23+
java_version: [ '17' ]
2424
os: [ ubuntu-latest, windows-latest, macOS-latest ]
2525
steps:
2626
- uses: actions/checkout@v2
2727
- name: Set up JDK ${{ matrix.java_version }}
28-
uses: actions/setup-java@v1
28+
uses: actions/setup-java@v5
2929
with:
30+
distribution: 'temurin'
3031
java-version: ${{ matrix.java_version }}
3132
- name: Grant execute permission for gradlew
3233
run: chmod +x gradlew
@@ -38,10 +39,11 @@ jobs:
3839
runs-on: ubuntu-latest
3940
steps:
4041
- uses: actions/checkout@v2
41-
- name: Set up JDK 8
42-
uses: actions/setup-java@v1
42+
- name: Set up JDK 17
43+
uses: actions/setup-java@v5
4344
with:
44-
java-version: 8
45+
distribution: 'temurin'
46+
java-version: 17
4547
- name: Grant execute permission for gradlew
4648
run: chmod +x gradlew
4749
- name: Jar
@@ -60,5 +62,4 @@ jobs:
6062
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_KEY_PASSPHRASE }}
6163
MAVEN_CENTRAL_TOKEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }}
6264
MAVEN_CENTRAL_TOKEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_TOKEN_PASSWORD }}
63-
run: ./gradlew signArchives uploadArchives -Pversion=$SNAPSHOT_VERSION -PossrhUsername=${MAVEN_CENTRAL_TOKEN_USERNAME} -PossrhPassword=${MAVEN_CENTRAL_TOKEN_PASSWORD} -Psign=true
64-
65+
run: ./gradlew publish -Pversion=$SNAPSHOT_VERSION -PossrhUsername=${MAVEN_CENTRAL_TOKEN_USERNAME} -PossrhPassword=${MAVEN_CENTRAL_TOKEN_PASSWORD} -Psign=true

.github/workflows/release.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ jobs:
1616
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1717
WITH_V: false
1818
DRY_RUN: true
19-
- name: Set up JDK 8
20-
uses: actions/setup-java@v1
19+
- name: Set up JDKs
20+
uses: actions/setup-java@v5
2121
with:
22-
java-version: 8
22+
distribution: 'temurin'
23+
java-version: 17
2324
- name: Grant execute permission for gradlew
2425
run: chmod +x gradlew
2526
- name: Jar
@@ -33,7 +34,7 @@ jobs:
3334
MAVEN_CENTRAL_TOKEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }}
3435
MAVEN_CENTRAL_TOKEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_TOKEN_PASSWORD }}
3536
RELEASE_VERSION: ${{ steps.tag_version_dry_run.outputs.tag }}
36-
run: ./gradlew -Pversion=$RELEASE_VERSION signArchives uploadArchives -PossrhUsername=${MAVEN_CENTRAL_TOKEN_USERNAME} -PossrhPassword=${MAVEN_CENTRAL_TOKEN_PASSWORD} -Psign=true
37+
run: ./gradlew -Pversion=$RELEASE_VERSION publish -PossrhUsername=${MAVEN_CENTRAL_TOKEN_USERNAME} -PossrhPassword=${MAVEN_CENTRAL_TOKEN_PASSWORD} -Psign=true
3738
- name: Close & Release Staging Repository
3839
env:
3940
MAVEN_CENTRAL_TOKEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }}
@@ -55,4 +56,4 @@ jobs:
5556
uses: softprops/action-gh-release@v1
5657
with:
5758
body: ${{steps.github_release.outputs.changelog}}
58-
tag_name: ${{ steps.tag_version.outputs.tag }}
59+
tag_name: ${{ steps.tag_version.outputs.tag }}

CONTRIBUTING.md

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ Gradle release plugin is not currently working so this is a manual process at th
4747

4848
```
4949
gpg --import private.key
50-
cd ~/.gnupg
5150
gpg -k
52-
gpg --export-secret-key YOUR_KEY_ID > ~/.gnupg/secring.gpg
5351
```
5452

5553
## Preparing
@@ -62,13 +60,12 @@ gpg --export-secret-key YOUR_KEY_ID > ~/.gnupg/secring.gpg
6260
```
6361
export SONAR_USERNAME=?
6462
export SONAR_PASSWORD=?
65-
export GPG_KEY_ID=?
66-
export GPG_KEY_PASSPHRASE=?
67-
export PATH_TO_SECRING_GPG=~/.gnupg/secring.gpg
63+
export ORG_GRADLE_PROJECT_signingKey="$(cat private.key)"
64+
export ORG_GRADLE_PROJECT_signingPassword=?
6865
6966
# I found shadowed classes are not included if you don't separate the gradle operations
7067
./gradlew clean shadowJar
71-
./gradlew signArchives uploadArchives -PossrhUsername=${SONAR_USERNAME} -PossrhPassword=${SONAR_PASSWORD} -Psigning.keyId=${GPG_KEY_ID} -Psigning.password=${GPG_KEY_PASSPHRASE} -Psigning.secretKeyRingFile=${PATH_TO_SECRING_GPG}
68+
./gradlew publish -PossrhUsername=${SONAR_USERNAME} -PossrhPassword=${SONAR_PASSWORD} -Psign=true
7269
```
7370

7471
## Releasing [Full Tutorial](https://central.sonatype.org/pages/ossrh-guide.html)
@@ -86,4 +83,4 @@ export PATH_TO_SECRING_GPG=~/.gnupg/secring.gpg
8683

8784
1. Checkout master branch
8885
1. Increment version number in `gradle.properties`
89-
1. Create pull request for merge
86+
1. Create pull request for merge

README.md

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ testImplementation 'io.github.origin-energy:java-snapshot-testing-junit5:4.+'
3232
testImplementation("org.slf4j:slf4j-simple:2.0.0-alpha0")
3333
3434
// Optional: Many will want to serialize into JSON. In this case you should also add the Jackson plugin
35+
testImplementation 'io.github.origin-energy:java-snapshot-testing-plugin-jackson3:4.+'
36+
testImplementation 'tools.jackson.core:jackson-core:3.1.0'
37+
testImplementation 'tools.jackson.core:jackson-databind:3.1.0'
38+
39+
// For Jackson 2 use the dedicated plugin and serializer classes instead
3540
testImplementation 'io.github.origin-energy:java-snapshot-testing-plugin-jackson:4.+'
3641
testImplementation 'com.fasterxml.jackson.core:jackson-core:2.11.3'
3742
testImplementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3'
@@ -49,8 +54,12 @@ testRuntimeOnly 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3'
4954
```text
5055
serializer=au.com.origin.snapshots.serializers.v1.ToStringSnapshotSerializer
5156
serializer.base64=au.com.origin.snapshots.serializers.v1.Base64SnapshotSerializer
52-
serializer.json=au.com.origin.snapshots.jackson.serializers.v1.JacksonSnapshotSerializer
53-
serializer.orderedJson=au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer
57+
serializer.json=au.com.origin.snapshots.jackson3.serializers.v1.Jackson3SnapshotSerializer
58+
serializer.orderedJson=au.com.origin.snapshots.jackson3.serializers.v1.DeterministicJackson3SnapshotSerializer
59+
60+
# Jackson 2 alternative
61+
# serializer.json=au.com.origin.snapshots.jackson.serializers.v1.JacksonSnapshotSerializer
62+
# serializer.orderedJson=au.com.origin.snapshots.jackson.serializers.v1.DeterministicJacksonSnapshotSerializer
5463
comparator=au.com.origin.snapshots.comparators.v1.PlainTextEqualsComparator
5564
reporters=au.com.origin.snapshots.reporters.v1.PlainTextSnapshotReporter
5665
snapshot-dir=__snapshots__
@@ -151,14 +160,18 @@ We currently support:
151160
Plugins
152161

153162
- [Jackson for JSON serialization](https://search.maven.org/search?q=a:java-snapshot-testing-plugin-jackson)
163+
- [Jackson 3 for JSON serialization](https://search.maven.org/search?q=a:java-snapshot-testing-plugin-jackson3)
154164
- You need jackson on your classpath (Gradle example)
155165
```groovy
156-
// Required java-snapshot-testing peer dependencies
166+
// Jackson 2 plugin
167+
testImplementation 'io.github.origin-energy:java-snapshot-testing-plugin-jackson:4.+'
157168
testImplementation 'com.fasterxml.jackson.core:jackson-core:2.11.3'
158169
testImplementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3'
159-
// Optional java-snapshot-testing peer dependencies
160-
testRuntimeOnly 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3'
161-
testRuntimeOnly 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3'
170+
171+
// Jackson 3 plugin
172+
testImplementation 'io.github.origin-energy:java-snapshot-testing-plugin-jackson3:4.+'
173+
testImplementation 'tools.jackson.core:jackson-core:3.1.0'
174+
testImplementation 'tools.jackson.core:jackson-databind:3.1.0'
162175
```
163176
164177
## How does it work?

build.gradle

Lines changed: 55 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,79 @@
1+
import org.gradle.api.tasks.compile.GroovyCompile
2+
import org.gradle.api.tasks.compile.JavaCompile
3+
import org.gradle.api.tasks.javadoc.Javadoc
4+
import org.gradle.api.tasks.testing.Test
5+
16
plugins {
27
id 'net.researchgate.release' version '2.6.0' apply false
3-
id 'com.github.johnrengelman.shadow' version '5.2.0' apply false
8+
id 'com.gradleup.shadow' version '9.3.2' apply false
49
id 'io.codearte.nexus-staging' version '0.22.0'
5-
id "com.diffplug.spotless" version "6.11.0" apply false
10+
id 'com.diffplug.spotless' version '8.4.0' apply false
11+
}
12+
13+
ext {
14+
junit5Version = '5.10.2'
15+
lombokVersion = '1.18.20'
16+
slf4jVersion = '2.0.0-alpha0'
17+
assertjVersion = '3.11.1'
618
}
719

820
subprojects { subproject ->
9-
// FIXME this plugin is currently not working for multi-module projects even when defined at the top level only
10-
// Will need to release and TAG manually for now
1121
subproject.apply plugin: 'net.researchgate.release'
1222
subproject.apply plugin: 'java-library'
13-
subproject.apply plugin: 'com.github.johnrengelman.shadow'
23+
subproject.apply plugin: 'com.gradleup.shadow'
1424
subproject.apply plugin: 'maven-publish'
1525

16-
sourceCompatibility = '1.8'
17-
targetCompatibility = '1.8'
26+
java {
27+
sourceCompatibility = JavaVersion.VERSION_1_8
28+
targetCompatibility = JavaVersion.VERSION_1_8
29+
}
1830

1931
repositories {
2032
mavenCentral()
2133
}
2234

35+
tasks.withType(JavaCompile).configureEach {
36+
javaCompiler = javaToolchains.compilerFor {
37+
languageVersion = JavaLanguageVersion.of(17)
38+
}
39+
}
40+
41+
tasks.withType(Javadoc).configureEach {
42+
javadocTool = javaToolchains.javadocToolFor {
43+
languageVersion = JavaLanguageVersion.of(17)
44+
}
45+
}
46+
47+
tasks.withType(Test).configureEach {
48+
javaLauncher = javaToolchains.launcherFor {
49+
languageVersion = JavaLanguageVersion.of(17)
50+
}
51+
}
52+
53+
tasks.withType(GroovyCompile).configureEach {
54+
javaLauncher = javaToolchains.launcherFor {
55+
languageVersion = JavaLanguageVersion.of(17)
56+
}
57+
}
58+
2359
shadowJar {
24-
classifier = ''
60+
archiveClassifier = ''
2561
relocate 'org.assertj', 'shadow.org.assertj'
2662
relocate 'org.opentest4j', 'shadow.org.opentest4j'
27-
exclude "module-info.class"
63+
exclude 'module-info.class'
64+
}
65+
66+
jar {
67+
archiveClassifier = 'thin'
2868
}
2969

3070
dependencies {
31-
// Lombok
32-
compileOnly 'org.projectlombok:lombok:1.18.20'
33-
annotationProcessor 'org.projectlombok:lombok:1.18.20'
34-
testCompileOnly 'org.projectlombok:lombok:1.18.20'
35-
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
36-
37-
// Logging implementation
38-
compileOnly 'org.slf4j:slf4j-api:2.0.0-alpha0'
71+
compileOnly "org.projectlombok:lombok:${project.lombokVersion}"
72+
annotationProcessor "org.projectlombok:lombok:${project.lombokVersion}"
73+
testCompileOnly "org.projectlombok:lombok:${project.lombokVersion}"
74+
testAnnotationProcessor "org.projectlombok:lombok:${project.lombokVersion}"
75+
76+
compileOnly "org.slf4j:slf4j-api:${project.slf4jVersion}"
3977
}
4078

4179
// Add verbose logging for Github Actions

gradle/junit5.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
dependencies {
2+
testImplementation platform("org.junit:junit-bom:${project.junit5Version}")
3+
testImplementation 'org.junit.jupiter:junit-jupiter'
4+
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
5+
}
6+
7+
test {
8+
useJUnitPlatform()
9+
}

0 commit comments

Comments
 (0)