mirror of
https://github.com/google/gson.git
synced 2026-03-13 08:01:59 +08:00
* 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.
68 lines
2.7 KiB
YAML
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
|