Skip to content

Releases: alien-tools/roseau

Release early-access

Release early-access Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Jun 06:28
fa3d35d

Changelog

🚀 Features

  • f062e84 feat: run smoke tests nightly, disable for regular builds, keep for release
  • 50a5112 feat: add support for detecting TYPE_NOW_SEALED breaking changes
  • 3451553 feat: add support for detecting CLASS_NO_LONGER_CONCRETELY_EXTENSIBLE breaking changes

🐛 Fixes

  • ccbe329 fix: making the constructor of an abstract class protected isn't breaking as it cannot have been instantiated
  • 6c3713d fix: fire FORMAL_TYPE_PARAMETER_REMOVED whenever the executable remains generic with fewer type parameters
  • c03aef2 fix: don't propagate verbosity to all dependencies in the CLI, only Roseau/ASM/JDT
  • e69914b fix: don't report EXECUTABLE_NO_LONGER_THROWS_CHECKED_EXCEPTION when an exception becomes unchecked
  • 2b1d8fe fix: proper type-parameter substitution in inherited type members, avoiding spurious FPs/FNs
  • 62d9f79 fix: void-to-anything is assignment-compatible
  • ff5d3be fix: CLI and Maven plug-in should ship their own log4j implementation to avoid annoying startup warning
  • 064f247 fix: remove generic classpath warning and log individual resolution failures instead

🔄️ Changes

  • e46b5a4 refactor!: keep API as a resolved snapshot, compose an analyzer

🧪 Tests

  • a249ba4 test: include additional smoke libraries
  • 0b713b4 test: run JdkTestIT using the jmods and sources of the running JDK
  • edebc8e test: fix a few @client that wouldn't compile

🧰 Tasks

  • 97a7e20 chore: only analyze TEST-*.xml with dorny/test-reporter

🛠 Build

  • fa3d35d build(deps): bump org.junit:junit-bom from 6.1.0 to 6.1.1 (#179)
  • b5f0300 build(deps): bump actions/cache from 5 to 6 (#178)
  • dad5fe7 build(deps): bump actions/checkout from 6 to 7 (#177)
  • 0053108 build(deps): bump org.eclipse.jdt:org.eclipse.jdt.core (#175)
  • fa9e9e4 build(deps): bump the pip group across 1 directory with 2 updates (#171)
  • 7249df2 build(deps): bump org.apache.maven.plugins:maven-surefire-plugin (#172)
  • 29195e3 build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin (#173)

📝 Documentation

Others

  • 18b967c doc: minimal Gradle setup
  • 0bf6263 Prepare next iteration v0.7.0

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 07 Jun 13:43

v0.6.0 introduces a new Maven plug-in, several renamings/splits of breaking change kinds, as well as improved accuracy around type parameters handling and distinguishing source- vs binary-breaking changes.

What's Changed

  • New Maven plug-in: roseau:check, with support for Maven baselines, local JAR baselines, report generation, and CI failure policies.
  • CLI options changed:
    • --format was removed and --report <path> was replaced by repeatable --report FORMAT=PATH.
    • --v1 and --v2 now accept Maven coordinates, e.g. groupId:artifactId:version.
    • --api now prints the extracted API JSON to stdout when --api-json is omitted.
  • Some breaking change kinds were renamed or split:
    • METHOD_REMOVED and CONSTRUCTOR_REMOVED -> EXECUTABLE_REMOVED
    • METHOD_NOW_PROTECTED and CONSTRUCTOR_NOW_PROTECTED -> EXECUTABLE_NOW_PROTECTED
    • METHOD_NOW_THROWS_CHECKED_EXCEPTION -> EXECUTABLE_NOW_THROWS_CHECKED_EXCEPTION
    • METHOD_NO_LONGER_THROWS_CHECKED_EXCEPTION -> EXECUTABLE_NO_LONGER_THROWS_CHECKED_EXCEPTION
    • METHOD_PARAMETER_GENERICS_CHANGED -> EXECUTABLE_PARAMETER_GENERICS_CHANGED
    • FIELD_TYPE_CHANGED -> FIELD_TYPE_ERASURE_CHANGED or FIELD_TYPE_CHANGED_INCOMPATIBLE
    • METHOD_RETURN_TYPE_CHANGED -> METHOD_RETURN_TYPE_ERASURE_CHANGED or METHOD_RETURN_TYPE_CHANGED_INCOMPATIBLE
    • New breaking change kind: METHOD_OVERRIDABLE_NOW_STATIC
  • CSV, JSON, and Markdown reports now include newSymbol, binaryBreaking, and sourceBreaking.
  • Improved source/binary classification for field type changes, method return type changes, executable changes, and removed supertypes.
  • Fixed several generic type-parameter edge cases.
  • Fixed compact constructor extraction for records in the JDT extractor.
  • Updated JDT parser support to Java 25.
  • Reworked the documentation website, including new CLI, Maven plug-in, reports, configuration, CI, API surface, and breaking-change kind references.

Changelog

🚀 Features

  • afb937e feat: bump JDT's parser API level to Java 25
  • 544c82f feat: enhance and align the information presented in CSV/JSON/MD reports
  • bc37ff5 feat: accept Maven coordinates as --v1/--v2
  • 7f12cf1 feat(maven-plugin): add skipIfBaselineUnresolvable to optionally skip checks when baseline is unavailable
  • 06f5565 feat(maven-plugin): replace baselineVersion with baselineDependency and introduce baselineCoordinates for CLI override
  • e6ab82e feat: print --api to stdout if no --api-json is provided
  • fae69e9 feat: simple unresolved structural equality for APIs

🐛 Fixes

  • 81c773a fix: typos in README
  • 156218a fix: do not throw a whole stacktrace when the plug-in cannot resolve the baseline
  • 5699ad8 fix: record compact constructors don't need any special treatment to be extracted by JDT
  • abffc9d fix: asymmetric equals() and missing FieldDecl.compileTimeConstant in comparison
  • a91a689 fix: maven-wrapper shouldn't use the daemon; bump to 3.9.14
  • 101b935 fix: make roseau's Maven plug-in phase binding error more actionable
  • 2a0c381 fix: effectively-final check must be applied on the enclosing type for nested types, not the nested type itself
  • b40fe31 fix: normalize type parameter names across versions; fixes type parameter renaming/generization bugs

🔄️ Changes

  • aa48030 refactor!: merge and rename executable-related BCs to EXECUTABLE_*
  • 41088f0 refactor: type-check JdtApiVisitor.stream() properly
  • 6c3153c perf: compute API::getExportedTypes only once
  • 360027e refactor: JDT#3252 has been fixed so we don't need to carry ASTs around anymore for sealedness checks

🧪 Tests

  • a5b1a62 test: ensure all paths in cached classpath files are valid or recompute them in PopularLibrariesTestIT
  • ca0bcf7 test: strengthen the detection capabilities of many @client
  • a399d69 test: get rid of assertBinary/assertSource utilities for dataset generation
  • f1cbd44 test: missing @client annotations on FieldTypeChangedTest
  • 946ba6d test: store popular libraries in popular-libraries.tsv and use that as cache for CI workflows
  • 4b15753 test: cleanup PopularLibrariesTestIT's setup phase and cache test fixtures locally
  • 25efdc1 test: added a few test cases asserting breaking changes in identical APIs that are indirectly impacted by classpath changes

🧰 Tasks

  • 2cf0d60 chore: CHANGELOG.md now handled by JReleaser

🛠 Build

  • e8a07b1 build(deps): bump com.fasterxml.jackson:jackson-bom (#169)
  • 7abe418 build(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin (#166)
  • 4e2b907 build(deps): bump com.github.siom79.japicmp:japicmp (#168)
  • d453e04 build(deps): bump org.apache.maven.resolver:maven-resolver-api (#167)
  • 4c2fe8d build(deps): bump org.json:json from 20251224 to 20260522 (#160)
  • de4e5e0 build(deps): bump com.github.siom79.japicmp:japicmp (#161)
  • fd2293e build(deps): bump org.junit:junit-bom from 6.0.3 to 6.1.0 (#162)
  • d93169a build(deps): bump org.ow2.asm:asm-bom from 9.10 to 9.10.1 (#163)
  • 4c4b278 build(deps): bump maven.version from 3.9.15 to 3.9.16 (#157)
  • 5554e3b build(deps): bump org.ow2.asm:asm-bom from 9.9.1 to 9.10 (#158)
  • b30eb9c build(deps): bump urllib3 in /docs in the pip group across 1 directory (#156)
  • 1ec7585 build(deps): bump com.github.siom79.japicmp:japicmp (#154)
  • 5571e5d build(deps): bump org.apache.logging.log4j:log4j-bom (#155)
  • 67a5382 build(deps): bump org.apache.maven.resolver:maven-resolver-api (#150)
  • 07d08ec build(deps-dev): bump org.jreleaser:jreleaser-maven-plugin (#152)
  • 8708578 build(deps): bump com.fasterxml.jackson:jackson-bom (#153)
  • e6b1094 build(deps): bump maven.version from 3.9.14 to 3.9.15 (#146)
  • ae4fb50 build(deps): bump com.github.siom79.japicmp:japicmp (#147)
  • fd16b35 build(deps): bump com.google.guava:guava-bom (#148)
  • 86f5e76 build(deps-dev): bump com.tngtech.archunit:archunit-junit5 (#149)
  • a86aff4 build(deps): bump com.github.siom79.japicmp:japicmp (#145)
  • b5339d4 build(deps): bump org.apache.logging.log4j:log4j-bom (#144)
  • e3628f4 build(deps): bump requests in /docs in the pip group across 1 directory (#143)
  • 93e42d9 build(deps): bump com.fasterxml.jackson:jackson-bom (#142)
  • 4031845 build(deps): bump dorny/test-reporter from 2 to 3 (#141)
  • 696edac build(deps): bump org.eclipse.jdt:org.eclipse.jdt.core (#139)
  • 95aef89 build(deps): bump org.mockito:mockito-bom from 5.22.0 to 5.23.0 (#140)
  • f3130a8 build(deps-dev): bump org.apache.maven.plugins:maven-dependency-plugin (#138)
  • 087db3e build(deps): bump maven.version from 3.9.13 to 3.9.14 (#137)
  • cf68c65 build: reusing main's library fixtures cache on PR's runner isn't safe
  • 5b6fdd6 build: fix PR build concurrency in build-pr.yml
  • 560bdc2 build: attempt to consider all standalone distributions in jreleaser.yml
  • d8909b0 build: basic custom CHANGELOG for rolling releases
  • ee9aafa build: can't use wildcards in classpaths for jlink due to Windows
  • 616557e build: basic CHANGELOG configuration for JReleaser
  • 1a7884c build: disable mvnd on Windows runners (known timeout issue)
  • f159a72 build: disable mvnd on Windows runners (known timeout issue)
  • 6bc068f build: verify on OS matrix in release.yml before publishing a release
  • 19e9a1a build: set default workflow shell to bash, avoiding PowerShell shenanigans
  • 8dbc807 build: test-report should only report surefire-reports
  • ad16d30 build: jlink for packaging, jreleaser for release and deployment (#136)

📝 Documentation

  • eb38854 docs: point to the new fat JAR location
  • 2e7db90 docs: document that the CLI now accepts Maven coordinates as --v1/--v2
  • 691ea19 docs: document skipIfBaselineUnresolvable in the Maven plug-in guide
  • c2c82ab docs: point to the user documentation website in README.md
  • 0e69dbc docs: completely revamped the user documentation website

Dependencies

  • ef1d949 Bump maven.version from 3.9.11 to 3.9.13
  • cf2306c Bump org.apache.maven.resolver:maven-resolver-api from 1.9.24 to 2.0.16
  • 029b37d Bump org.mockito:mockito-bom from 5.21.0 to 5.22.0
  • dc647cf Bump com.fasterxml.jackson:jackson-bom from 2.21.0 to 2.21.1
  • c52768e Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.4 to 3.5.5
  • 369373b Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.5.4 to 3.5.5
  • c0593b3 Bump org.junit:junit-bom from 6.0.2 to 6.0.3

Others

  • cc75524 Release v0.6.0
  • 40138ff tests: add missing EXECUTABLE_PARAMETER_GENERICS_CHANGED tests
  • 5271e50 Update CHANGELOG.md
  • 6d70ce9 New repeatable --report=FORMAT=PATH option to write multiple reports at once on CLI
  • a55da5c RoseauTest tests
  • e361854 Streamline Roseau's entrypoints and update README.md
  • 14a1b12 Move LibraryTypes.toAPI() logic into Roseau, move exclusion logic to the report
  • f457e53 Refactor ClasspathTypeProvider to avoid AutoCloseable shenanigans and leaks
  • 996f697 Maven plug-in (#25)
  • f723ed8 Refine subtyping/assignability logic for type parameter resolution
  • 907f78b TYPE_SUPERTYPE_REMOVED is actually binary-breaking ('Stack map does not match')
  • b28c337 Distinguish source-breaking METHOD_OVERRIDABLE_NOW_STATIC from binary-breaking METHOD_NOW_STATIC
  • 6cabc2d Properly pass the TypeParameterScope in BC rules
  • 6f3f343 Split METHOD_RETURN_TYPE_CHANGED into source-/binary-breaking BCs
  • 3fdea95 TYPE_SUPERTYPE_REMOVED should rely on simple nominal subtyping
  • 54a3cf9 Split FIELD_TYPE_CHANGED into FIELD_TYPE_ERASURE_CHANGED and FIELD_TYPE_CHANGED_INCOMPATIBLE with proper assignability logic
  • ff37acd Unit tests for providers logic
  • 06f921d Proper logic for type subtyping/assignability with type parameter bounds resolution
  • fb86b26 Define the notion of a TypeParameterScope within the API model to enable scoped type parameter resolution
  • f1ab7fb Extract and store compile-time constant information in API model
  • a2...
Read more

v0.5.0

Choose a tag to compare

@tdegueul tdegueul released this 23 Feb 18:15

Breaking

  • Roseau now requires Java 25.
  • Some breaking change kinds were renamed for consistency:
    • CLASS_TYPE_CHANGED -> TYPE_KIND_CHANGED
    • SUPERTYPE_REMOVED -> TYPE_SUPERTYPE_REMOVED
    • METHOD_ADDED_TO_INTERFACE and METHOD_ABSTRACT_ADDED_TO_CLASS -> TYPE_NEW_ABSTRACT_METHOD
    • TYPE_FORMAL_TYPE_PARAMETERS_* and METHOD_FORMAL_TYPE_PARAMETERS_* -> FORMAL_TYPE_PARAMETER_*
    • ANNOTATION_METHOD_ADDED_WITHOUT_DEFAULT -> ANNOTATION_NEW_METHOD_WITHOUT_DEFAULT
  • Removed Spoon extractor and any dependency towards Spoon
    • ASM is used for JARs, JDT is used for source trees; removed support for --extractor, --v1-extractor, and --v2-extractor.
  • YAML configuration file data model has been updated:
    • ignore moved under diff.ignore.
    • diff.sourceOnly and diff.binaryOnly added.
  • CLI output has been updated, e.g.:
$ roseau --diff [...]
Breaking Changes found: 5 (4 binary-breaking, 3 source-breaking)
⚠ foo.T.m() METHOD_RETURN_TYPE_CHANGED [java.util.Set<java.lang.String> → java.util.List<java.nio.file.Path>]
  ✗ binary-breaking ✗ source-breaking
  → foo/T.java:22
[...]
  • Get rid of Spoon as an extractor and type resolver; resolve type references with ASM directly by @tdegueul in #103
  • Migrating Roseau to Java 25 by @tdegueul in #104
  • APIDiff: explode walking/matching/diffing API symbols, split individual rules by @tdegueul in #110

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@tdegueul tdegueul released this 22 Oct 12:45

This version focuses on improved reporting with new and reworked breaking changes formatters, new CLI options to handle ignored/accepted breaking changes, and name- or annotation-based symbol exclusions. Additionally, a new YAML configuration file centralizes configuration options for Roseau.

What's Changed

  • Support external YAML configuration file by @tdegueul in #94
  • Name/annotation-based exclusion of symbols from BC reports by @tdegueul in #97
  • Improve BCs reporting: BC-specific details and new HTML formatter by @tdegueul in #77
  • CLI improvements by @tdegueul in #87
  • Refine java.lang.Object methods handling and contextualize BCs at the right level by @tdegueul in #86
  • Unify sealable and permitted subtypes in API model by @tdegueul in #76
  • New output mode for Roseau GitHub Action by @CorentinLat in #89
  • Generate a standalone BCs dataset from our test suite by @tdegueul in #78
  • Ensure Roseau successfully runs on Windows by @tdegueul in #92
<dependency>
  <groupId>io.github.alien-tools</groupId>
  <artifactId>roseau-core</artifactId>
  <version>0.4.0</version>
</dependency>

Dependencies update

  • Bump org.mockito:mockito-bom from 5.18.0 to 5.20.0 by @dependabot[bot] in #81
  • Bump org.sonatype.central:central-publishing-maven-plugin from 0.8.0 to 0.9.0 by @dependabot[bot] in #83
  • Bump org.assertj:assertj-bom from 3.27.5 to 3.27.6 by @dependabot[bot] in #85
  • Bump org.pitest:pitest-maven from 1.20.2 to 1.21.0 by @dependabot[bot] in #95
  • Bump github/codeql-action from 3 to 4 by @dependabot[bot] in #96

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@tdegueul tdegueul released this 24 Sep 19:04

What's Changed

  • Unify source locations across JDT/ASM/Spoon sources by @tdegueul in #46
  • Simple input/output facades by @tdegueul in #47
  • Model annotation interfaces in APIs and detect associated breaking changes by @tdegueul in #72
  • Support for Java modules by @tdegueul in #73
<dependency>
  <groupId>io.github.alien-tools</groupId>
  <artifactId>roseau-core</artifactId>
  <version>0.3.0</version>
</dependency>

Dependencies update

  • Bump org.pitest:pitest-junit5-plugin from 1.2.1 to 1.2.3 by @dependabot[bot] in #52
  • Bump info.picocli:picocli from 4.7.6 to 4.7.7 by @dependabot[bot] in #48
  • Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.5.1 to 3.5.3 by @dependabot[bot] in #49
  • Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.2 to 3.5.3 by @dependabot[bot] in #50
  • Bump org.junit:junit-bom from 5.11.4 to 5.13.3 by @dependabot[bot] in #51
  • Bump org.junit:junit-bom from 5.13.3 to 5.13.4 by @dependabot[bot] in #56
  • Bump org.json:json from 20250107 to 20250517 by @dependabot[bot] in #54
  • Bump org.apache.maven.plugins:maven-compiler-plugin from 3.11.0 to 3.14.0 by @dependabot[bot] in #53
  • Bump com.fasterxml.jackson:jackson-bom from 2.19.1 to 2.19.2 by @dependabot[bot] in #55
  • Bump org.revapi:revapi-java from 0.28.1 to 0.28.4 by @dependabot[bot] in #58
  • Bump net.openhft:zero-allocation-hashing from 0.16 to 0.27ea1 by @dependabot[bot] in #60
  • Bump org.apache.logging.log4j:log4j-bom from 2.24.3 to 2.25.1 by @dependabot[bot] in #62
  • Bump actions/checkout from 4 to 5 by @dependabot[bot] in #63
  • Bump org.pitest:pitest-maven from 1.20.0 to 1.20.2 by @dependabot[bot] in #65
  • Bump actions/setup-java from 4 to 5 by @dependabot[bot] in #64
  • Bump org.codehaus.mojo:appassembler-maven-plugin from 1.10 to 2.1.0 by @dependabot[bot] in #59
  • Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.11.2 to 3.12.0 by @dependabot[bot] in #71
  • Bump org.assertj:assertj-bom from 3.27.3 to 3.27.5 by @dependabot[bot] in #70
  • Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.7 to 3.2.8 by @dependabot[bot] in #69
  • Bump com.google.guava:guava-bom from 33.4.8-jre to 33.5.0-jre by @dependabot[bot] in #67

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@tdegueul tdegueul released this 19 Jul 09:56

What's Changed

  • Various bugfixes
  • combinatorial submodule that systematically generates APIs and clients to test Roseau's accuracy by @CorentinLat
  • Better CLI
  • Fully immutable API models that are later resolved in the context of a given classpath
  • Migrate from Hamcrest to AssertJ
  • xxHash-based incremental API model updates
  • Pass user classpath to reflective TypeProvider to enable resolution of external references by @tdegueul in #45
<dependency>
  <groupId>io.github.alien-tools</groupId>
  <artifactId>roseau-core</artifactId>
  <version>0.2.0</version>
</dependency>

Dependencies update

  • Bump org.pitest:pitest-maven from 1.18.1 to 1.20.0 by @dependabot[bot] in #43
  • Bump com.fasterxml.jackson.core:jackson-databind from 2.18.2 to 2.19.1 by @dependabot[bot] in #42
  • Bump org.eclipse.jdt:org.eclipse.jdt.core from 3.39.0 to 3.42.0 by @dependabot[bot] in #41
  • Bump com.fasterxml.jackson.module:jackson-module-paranamer from 2.18.2 to 2.19.1 by @dependabot[bot] in #40
  • Bump com.fasterxml.jackson.datatype:jackson-datatype-jdk8 from 2.18.2 to 2.19.1 by @dependabot[bot] in #39

Full Changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@tdegueul tdegueul released this 19 Mar 14:33

What's Changed

  • First releasing to Maven Central
  • New root package is io.github.alien.roseau
  • New coordinates are
<dependency>
  <groupId>io.github.alien-tools</groupId>
  <artifactId>roseau-core</artifactId>
  <version>0.1.0</version>
</dependency>
  • Javadoc for most APIs
  • Updated CLI with --pom/--classpath

Full Changelog: v0.0.4...v0.1.0

v0.0.4

Choose a tag to compare

@tdegueul tdegueul released this 15 Mar 14:55

What's Changed

  • New API extractor from bytecode using ASM
  • New API extractor from source code using JDT
  • Spoon now runs JDT in "diet" mode
  • Incremental parsing and partial API updates using the JDT extractor
  • Accept user-defined classpath and/or automatically extract classpath from pom.xml files
  • Many new API/BCs accuracy tests
  • Updated CLI to reflect changes
  • Proper logging configuration
  • Various other performance improvements

Full Changelog: v0.0.3...v0.0.4

v0.0.3

Choose a tag to compare

@tdegueul tdegueul released this 17 Jul 19:27

What's Changed

  • Huge time and memory performance improvements
  • More accurate checks for generics and wildcards
  • Accuracy fixes all around the place
  • JSON/CSV/HTML formatters

Full Changelog: v0.0.2...v0.0.3

v0.0.2

Choose a tag to compare

@tdegueul tdegueul released this 14 Feb 14:29
  • Complete rewrite of Roseau's API and internal API models