Files
gson/.github/workflows/check-api-compatibility.yml
Éamonn McManus dbf0f04165 Remove com.google.gson.graph. (#2990)
* Remove `com.google.gson.graph`.

This "extras" package provides a way to represent an arbitrary Java
object graph in JSON. However, it is not part of any supported artifact.
It is available for use internally at Google, but nothing uses it.

I have been experimenting with possibly changing
`ReflectiveTypeAdapterFactory` so that it can call a constructor whose
parameter names are known, rather than using `Unsafe.allocateInstance`.
However, `GraphAdapterBuilderTest` fails during deserialization,
complaining about recursive construction. Rather than trying to make
the test work, I am inclined to delete this unused functionality.

* Exclude 'extras' from API compatibility check.

We don't release any artifacts for this project.
2026-03-06 12:05:49 -08:00

68 lines
2.7 KiB
YAML

# This workflow makes sure that a pull request does not make any incompatible changes
# to the public API of Gson
name: Check API compatibility
on: pull_request
permissions:
contents: read # to fetch code (actions/checkout)
env:
# Common Maven arguments
MAVEN_ARGS: --show-version --batch-mode --no-transfer-progress
jobs:
check-api-compatibility:
runs-on: ubuntu-latest
# This setup tries to determine API incompatibility only for the changes introduced by the
# pull request. It does this by first checking out the 'old' version and installing it into
# the local Maven repository before then using japicmp to compare it to the current changes.
#
# Alternatively it would also be possible to compare against the last release version instead.
#
# Both approaches have their advantages and disadvantages, see description of
# https://github.com/google/gson/pull/2692 for details.
steps:
- name: Check out old version
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.base.sha }}
path: 'gson-old-japicmp'
- name: Set up JDK
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
- name: Build old version
run: |
cd gson-old-japicmp
# Set dummy version
mvn org.codehaus.mojo:versions-maven-plugin:2.16.2:set "-DnewVersion=0.0.0-JAPICMP-OLD"
# Install artifacts with dummy version in local repository; used later by Maven plugin for comparison
mvn install -Dmaven.test.skip --projects '!metrics,!test-graal-native-image,!test-jpms,!test-shrinker'
- name: Check out new version
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Check API compatibility
id: check-compatibility
run: |
mvn package japicmp:cmp --fail-at-end -Dmaven.test.skip --projects '!extras,!metrics,!test-graal-native-image,!test-jpms,!test-shrinker'
- name: Upload API differences artifacts
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
# Run on workflow success (in that case differences report might include added methods and classes)
# or when API compatibility check failed
if: success() || ( failure() && steps.check-compatibility.outcome == 'failure' )
with:
name: api-differences
path: |
**/japicmp/default-cli.html
**/japicmp/default-cli.diff
# Plugin should always have created report files (though they might be empty)
if-no-files-found: error