Skip to content
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
35 changes: 35 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,41 @@ jobs:
path: examples/target/generated-pdfs/**
if-no-files-found: error

binary-compat:
name: Binary Compatibility (japicmp vs v1.6.5)
if: github.event_name == 'pull_request'
needs: architecture-and-documentation-guards
runs-on: ubuntu-latest
env:
JAVA_TOOL_OPTIONS: -Djava.awt.headless=true

steps:
- name: Check out repository
uses: actions/checkout@v6

- name: Set up Temurin JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '17'
cache: maven

- name: Compare public API against baseline
# The `japicmp` profile pulls the v1.6.5 jar from JitPack and
# diffs it against the freshly-built artifact. Fails the job on
# any binary-incompatible modification to the public surface.
# Source-incompatible changes are reported only (phased policy).
# See Track E1 in the v1.6.5→1.7 readiness taskboard.
run: ./mvnw -B -ntp -DskipTests -P japicmp verify -pl .

- name: Upload japicmp report
if: always()
uses: actions/upload-artifact@v7
with:
name: japicmp-report-${{ github.run_id }}
path: target/japicmp/**
if-no-files-found: ignore

perf-smoke:
name: Performance Smoke Check
if: github.event_name == 'pull_request'
Expand Down
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,25 @@
All notable changes to GraphCompose are documented here. Versions
follow semantic versioning; release dates are ISO 8601.

## v1.6.6 — Planned

First Maven Central release. Adds publishable sources/javadoc jars,
GPG-signed artifacts, a binary-compatibility gate against v1.6.5, and
the metadata Maven Central requires. Zero breaking changes; users on
JitPack continue to resolve through the existing coordinates.

### Build

- **Binary-compatibility gate against v1.6.5** (`japicmp` profile,
Track E1). The new `binary-compat` CI job builds the artifact on every
pull request and diffs it against `com.github.DemchaAV:GraphCompose:v1.6.5`
pulled from JitPack. Binary-incompatible modifications to the public
surface fail the build; source-incompatible changes are reported only
(phased policy, will tighten after the 1.6.6 cut). Run locally with
`./mvnw -DskipTests -P japicmp verify -pl .`; HTML/MD/XML reports
land in `target/japicmp/`. JitPack repository is scoped to the
`japicmp` profile, so downstream consumers do not inherit it.

## v1.6.5 — 2026-05-30

### Templates v2
Expand Down
66 changes: 66 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@
<maven.compiler.plugin.version>3.15.0</maven.compiler.plugin.version>
<maven.javadoc.plugin.version>3.12.0</maven.javadoc.plugin.version>
<maven.surefire.plugin.version>3.5.5</maven.surefire.plugin.version>

<!-- Binary compatibility baseline (japicmp profile) -->
<japicmp.version>0.23.1</japicmp.version>
<japicmp.baseline>v1.6.5</japicmp.baseline>
</properties>

<dependencyManagement>
Expand Down Expand Up @@ -355,4 +359,66 @@
</plugin>
</plugins>
</build>

<profiles>
<!--
Binary-compatibility baseline against the last published
release. Activated with `-P japicmp`. Resolves the baseline
artifact from JitPack (kept profile-local so consumers do
NOT inherit a JitPack repository). Fails the build on any
binary-incompatible modification to the public surface;
source-incompatible changes are reported but do not fail
(yet) so the team can phase the policy in. Tracked in the
v1.6.6 stabilization (Track E1).
-->
<profile>
<id>japicmp</id>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>com.github.siom79.japicmp</groupId>
<artifactId>japicmp-maven-plugin</artifactId>
<version>${japicmp.version}</version>
<executions>
<execution>
<id>japicmp-against-baseline</id>
<phase>verify</phase>
<goals>
<goal>cmp</goal>
</goals>
</execution>
</executions>
<configuration>
<oldVersion>
<dependency>
<groupId>com.github.DemchaAV</groupId>
<artifactId>GraphCompose</artifactId>
<version>${japicmp.baseline}</version>
</dependency>
</oldVersion>
<newVersion>
<file>
<path>${project.build.directory}/${project.build.finalName}.jar</path>
</file>
</newVersion>
<parameter>
<onlyModified>true</onlyModified>
<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
<breakBuildOnSourceIncompatibleModifications>false</breakBuildOnSourceIncompatibleModifications>
<includeSynthetic>false</includeSynthetic>
<reportOnlyFilename>true</reportOnlyFilename>
<skipPomModules>true</skipPomModules>
</parameter>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>