From d7515489f688c651117e172144a5933b13471d74 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Sun, 31 May 2026 10:53:37 +0100 Subject: [PATCH] build(api): add japicmp binary-compatibility gate vs v1.6.5 (E1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tracks the public surface against the last published release on every pull request so an unintended binary break is caught before merge — the foundation Track E of the v1.6.6 Maven Central debut depends on. Changes: - pom.xml: new `japicmp` profile carrying japicmp-maven-plugin and a profile-local JitPack repository (downstream consumers do NOT inherit it). Pinned versions in properties: japicmp.version=0.23.1, japicmp.baseline=v1.6.5. The plugin binds its cmp goal to the verify phase, so `mvn -P japicmp verify` runs the diff after building the jar. - .github/workflows/ci.yml: new `binary-compat` job, PR-only, runs `mvnw -DskipTests -P japicmp verify -pl .` after the guards job and uploads the report directory as an artifact. - CHANGELOG.md: opens a `## v1.6.6 — Planned` entry with a Build subsection documenting the gate, its phased policy (binary breaks fail the build, source breaks reported only), and the local invocation. Policy: - breakBuildOnBinaryIncompatibleModifications=true - breakBuildOnSourceIncompatibleModifications=false (phased; will tighten) - onlyModified=true; reports HTML/MD/XML/diff under target/japicmp/ Local verification: `mvnw -P japicmp verify -pl .` against develop returns `No changes. Semantic versioning suggestion: 0.0.1` — develop is bit-identical to v1.6.5 at the jar level, as expected fresh after the release. The next public-surface PR will exercise the gate end-to-end. --- .github/workflows/ci.yml | 35 +++++++++++++++++++++ CHANGELOG.md | 19 ++++++++++++ pom.xml | 66 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8f1ecae..224c468e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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' diff --git a/CHANGELOG.md b/CHANGELOG.md index c7c30d53..484b3c5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/pom.xml b/pom.xml index cc3dc92b..7242a31c 100644 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,10 @@ 3.15.0 3.12.0 3.5.5 + + + 0.23.1 + v1.6.5 @@ -355,4 +359,66 @@ + + + + + japicmp + + + jitpack.io + https://jitpack.io + + + + + + com.github.siom79.japicmp + japicmp-maven-plugin + ${japicmp.version} + + + japicmp-against-baseline + verify + + cmp + + + + + + + com.github.DemchaAV + GraphCompose + ${japicmp.baseline} + + + + + ${project.build.directory}/${project.build.finalName}.jar + + + + true + true + false + false + true + true + + + + + + +