Releases: alien-tools/roseau
Releases · alien-tools/roseau
Release list
Release early-access
Changelog
🚀 Features
- f062e84 feat: run smoke tests nightly, disable for regular builds, keep for release
- 50a5112 feat: add support for detecting
TYPE_NOW_SEALEDbreaking changes - 3451553 feat: add support for detecting
CLASS_NO_LONGER_CONCRETELY_EXTENSIBLEbreaking 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
v0.6.0
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:
--formatwas removed and--report <path>was replaced by repeatable--report FORMAT=PATH.--v1and--v2now accept Maven coordinates, e.g.groupId:artifactId:version.--apinow prints the extracted API JSON to stdout when--api-jsonis omitted.
- Some breaking change kinds were renamed or split:
METHOD_REMOVEDandCONSTRUCTOR_REMOVED->EXECUTABLE_REMOVEDMETHOD_NOW_PROTECTEDandCONSTRUCTOR_NOW_PROTECTED->EXECUTABLE_NOW_PROTECTEDMETHOD_NOW_THROWS_CHECKED_EXCEPTION->EXECUTABLE_NOW_THROWS_CHECKED_EXCEPTIONMETHOD_NO_LONGER_THROWS_CHECKED_EXCEPTION->EXECUTABLE_NO_LONGER_THROWS_CHECKED_EXCEPTIONMETHOD_PARAMETER_GENERICS_CHANGED->EXECUTABLE_PARAMETER_GENERICS_CHANGEDFIELD_TYPE_CHANGED->FIELD_TYPE_ERASURE_CHANGEDorFIELD_TYPE_CHANGED_INCOMPATIBLEMETHOD_RETURN_TYPE_CHANGED->METHOD_RETURN_TYPE_ERASURE_CHANGEDorMETHOD_RETURN_TYPE_CHANGED_INCOMPATIBLE- New breaking change kind:
METHOD_OVERRIDABLE_NOW_STATIC
- CSV, JSON, and Markdown reports now include
newSymbol,binaryBreaking, andsourceBreaking. - 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
skipIfBaselineUnresolvableto optionally skip checks when baseline is unavailable - 06f5565 feat(maven-plugin): replace
baselineVersionwithbaselineDependencyand introducebaselineCoordinatesfor 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...
v0.5.0
Breaking
- Roseau now requires Java 25.
- Some breaking change kinds were renamed for consistency:
CLASS_TYPE_CHANGED->TYPE_KIND_CHANGEDSUPERTYPE_REMOVED->TYPE_SUPERTYPE_REMOVEDMETHOD_ADDED_TO_INTERFACEandMETHOD_ABSTRACT_ADDED_TO_CLASS->TYPE_NEW_ABSTRACT_METHODTYPE_FORMAL_TYPE_PARAMETERS_*andMETHOD_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.
- ASM is used for JARs, JDT is used for source trees; removed support for
- YAML configuration file data model has been updated:
ignoremoved underdiff.ignore.diff.sourceOnlyanddiff.binaryOnlyadded.
- 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
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
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
What's Changed
- Various bugfixes
combinatorialsubmodule 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
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
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.xmlfiles - 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
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