Releases: takahirom/roborazzi
1.18.0
Migrating from java.io.File
to kotlinx-io
Note: We are not changing the API for users, so the captureRoboImage methods are still using the java.io.File class.
Roborazzi previously used java.io.File
for saving and loading files. Although Roborazzi supports iOS, sharing much of the logic is challenging when using java.io.File
. Therefore, we have migrated to kotlinx-io
.
We are attentive to the Kotlin versions our users employ. We upgraded from version 1.9.21 to 1.9.22 due to a dependency on kotlinx-io. Since Kotlin 1.9.22 was released last year, it should be compatible with most projects.
Thank you, @eyedol, for your outstanding contribution! Your efforts are greatly appreciated.
| \--- org.jetbrains.kotlinx:kotlinx-io-core:0.3.3
| +--- org.jetbrains.kotlinx:kotlinx-io-bytestring:0.3.3
| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*)
What's Changed
- Migrate from java.io to kotlinx-io by @eyedol in #368
- Use kotlinx-io 0.3.3 to avoid updating Kotlin by @takahirom in #381
New Contributors
Full Changelog: 1.17.0...1.18.0
1.17.0
Bug Fixes
- There seemed to be a pattern where ActivityScenario's close was not being called when tests failed, causing leaks, so I used a use block to ensure it is closed properly. @yschimke, thank you for pointing out this issue.
- At companies that use Roborazzi on a large scale, there were issues with the output dir not being restored properly due to Configuration cache and other factors, so I simplified the design to make problems less likely to occur.
- There were occasional errors reporting that a directory did not exist, and I've added code to address this issue. @lukas-mercari, thank you for your contribution.
What's Changed
- Use the
use
block to prevent leaks by @takahirom in #376 - Declare input directories as files to avoid issues when they don't exist by @lukas-mercari in #374
- Fix output image consistency issue by @takahirom in #366
- [CI] Update toolchain to Java 17 for all modules by @mannodermaus in #365 . Thank you for managing our build process, @mannodermaus!
- [Sample] fix(deps): update dependency androidx.compose.material:material to v1.6.7 by @renovate in #342
- fix(deps): update dependency org.robolectric:robolectric to v4.12.2 by @renovate in #369
- [CI] Exclude
io.github.takahirom.roborazzi
dependency from Renovate updates by @sanao1006 in #372
New Contributors
- @mannodermaus made their first contribution in #365
Full Changelog: 1.16.1...1.17.0
1.16.1
Bugfix
We removed the setting for the test task's input directory in 1.16.0, but it caused incorrect results in the compare tests. Therefore, I reverted the changes to the test input directory. This bug is now covered by Roborazzi's integration tests.
What's Changed
- Fix issue where input images are overwritten and add test by @takahirom in #364
Full Changelog: 1.16.0...1.16.1
1.16.0
Improvements
- @lukas-mercari informed me that we can optimize our build-cache strategy by eliminating outdated cache invalidation logic. With this adjustment, Roborazzi's integration test time was reduced from 10 minutes to 6 minutes by utilizing caches. Thanks for the excellent improvement suggestion. This might also help other users' projects. Roborazzi's integration tests cover several use cases, but if you encounter any issues related to caching, please let me know.
- We have been supporting iOS since the previous version of Roborazzi and want to share code with the iOS sourceset as much as possible. Therefore, we migrated from Gson to Kotlinx.serialization 1.6.3. Thank you for your contribution, @sanao1006
- Roborazzi has been supporting accessibility dumps for Android, and we have now added the capability to check the disabled status within these dumps. Thank you for your contribution, @lukas-mercari !
What's Changed
- Remove unneeded cache invalidation by @takahirom in #362
- Include Disabled semantic property in accessibility explanation by @lukas-mercari in #361
- [Docs] Add "Why do my screenshot tests fail inconsistently across different operating systems" section by @takahirom in #353
- Migrate from Gson to KotlinX.Serialization by @sanao1006 in #350
- [Sample] fix(deps): update androidx.navigation to v2.7.7 by @renovate in #337
- [Sample] fix(deps): update dependency androidx.compose.material3:material3 to v1.2.1 by @renovate in #341
- [CI] chore(deps): update gradle/gradle-build-action action to v2.12.0 by @renovate in #356
Full Changelog: 1.15.0...1.16.0
1.15.0
Improvements
- Resolved a Race Condition in Roborazzi Gradle Integration Tests: In version 1.14.0, we identified an intermittent issue where images from Roborazzi did not always appear in the output directory during certain test scenarios, particularly when test results were cached. Despite efforts to resolve this in 1.14.0, the issue persisted due to its elusive nature. In this release, we have successfully addressed this problem, ensuring that images are now consistently placed in the output directory under similar conditions. This improvement has been verified through our integration tests. This issue may occur in user projects, so we recommend updating to this version.
We continue to refine our testing processes to prevent similar issues in future releases.
What's Changed
- Update CompileSdk 34 by @takahirom in #344
- Add debug code for flaky test by @takahirom in #346
- Fix issue where finalizedTask is skipped unexpectedly by @takahirom in #347
- Improve performance for race condition workaround by @takahirom in #348
- Improve performance for race condition workaround2 by @takahirom in #349
- [CI]Pin dependencies by @renovate in #329
- [CI]Update actions/checkout action to v3.6.0 by @renovate in #334
- [CI]Update actions/setup-java action to v3.13.0 by @renovate in #335
- [CI]Update dawidd6/action-download-artifact action to v2.28.0 by @renovate in #338
- [Sample]Update dependency androidx.appcompat:appcompat to v1.6.1 by @renovate in #339
- [Sample]Update dependency androidx.constraintlayout:constraintlayout to v2.1.4 by @renovate in #330
Full Changelog: 1.14.0...1.15.0
1.14.0
Bug fixes
Cache-related Flakiness in Comparison Results: We've identified and resolved an intermittent issue where cached data could sometimes prevent users from seeing comparison results in Roborazzi.
#323
What's Changed
- [CI]Configure Renovate by @renovate in #317
- [CI]Pin JetBrains/writerside-github-action action to 5a6920d by @renovate in #318
- [CI]Update actions/checkout digest to 0ad4b8f by @renovate in #319
- Update composeMultiplatform to v1.6.2 by @renovate in #321
- [Test]Update dependency com.ashampoo:kim to v0.17.7 by @renovate in #322
- Fix issue where cache restoration fails by @takahirom in #323
- [Test]fix typo in RoborazziGradleProject.kt by @sanao1006 in #325
- [CI]Remove renovate rule by @takahirom in #328
New Contributors
Full Changelog: 1.13.0...1.14.0
1.13.0
Add experimental, minimal support for iOS in Compose Multiplatform
Roborazzi has supported Compose Desktop, but we hadn't yet supported iOS, which could be a major use case for Compose Multiplatform. Therefore, I have added support for iOS.
Now, you can record, compare, and verify just as you would with Android support.
https://takahirom.github.io/roborazzi/compose-multiplatform.html#experimental-feature-ios-support
However, Roborazzi is fundamentally based on the JVM. Currently, we offer only minimal features. If you are interested in helping to improve these features, please take a look at these issues:
#302 #305
Changes Affecting Existing Support
To support iOS, we have made some dependency changes for Android and Compose Desktop. I believe these changes will not affect existing behavior. However, if you notice anything, please let me know.
All
Kotlin:
1.8.22 -> 1.9.21
dropbox/differ:
0.0.1 -> 0.0.2
Desktop Compose Version
Compose Multiplatform:
1.4.3 -> 1.6.1
What's Changed
- Add Minimal Compose Multiplatform iOS Support by @takahirom in #301
- [docs]Fix docs page by @takahirom in #303
- [docs]Fix docs by @takahirom in #304
- Add roborazzi-painter ios file for building klib by @takahirom in #306
- [CI]Fix false positive diff in Roborazzi CI by using the same platform for store and compare by @takahirom in #307
- Remove unneeded jvm form compose ios by @takahirom in #308
- Fix task and fix ios recording by @takahirom in #310
- Fix iOS recording path by @takahirom in #311
- Fix iOS golden path and report time logic by @takahirom in #312
- Fix iOS comparison logic by @takahirom in #313
Full Changelog: 1.12.0...1.13.0
1.12.0
Bug Fixes
- Fixed an issue where recorded images with a transparent background and a scaling option (e.g., 0.5F) were always detected as changes. Thanks for reporting this, @yongsuk44!
- Addressed a bug related to
robolectric.screenshot.hwrdr.native
introduced in Robolectric 4.12, which caused unwanted shadows when using Compose'sroboCaptureImage{}
with this new option. This has now been corrected by @lukas-mercari. Thanks for your contribution!
What's Changed
- Hide action bar to avoid shadow creeping into images captured using captureRoboImage by @lukas-mercari in #283
- [CI]Compare with base branch by @takahirom in #284
- update robolectric version from 4.10.3 to 4.12.1 by @sanao1006 in #289
- Add roundTransparentResizeCompose test by @takahirom in #297
- Fix false positive issue in verification of scaled transparent images by @takahirom in #298
New Contributors
- @lukas-mercari made their first contribution in #283
Full Changelog: 1.11.0...1.12.0
1.11.0
New feature
In Roborazzi, if you specify outputDir in the Gradle settings, you can use the build cache. Now, Roborazzi passes the setting into the test.
build.gradle
roborazzi {
outputDir = "src/your/screenshot/folder"
}
roborazzi.record.filePathStrategy=relativePathFromRoborazziContextOutputDirectory
Test
captureRoboImage()
-> saved src/your/screenshot/folder/package.class.method.png
captureRoboImage("test.png")
-> saved src/your/screenshot/folder/test.png
What's Changed
- Add helpful error message for class cast exception by @takahirom in #267
- Use 'verify' task when specifying both 'compare' and 'verify' by @takahirom in #269
- Respect gradle build dir for reports by @takahirom in #270
- Add "The images taken from Roborazzi seem broken" FAQ by @takahirom in #277
Full Changelog: 1.10.1...1.11.0
1.10.1
Changes from 1.10.0
This release includes a bug fix for a Javascript error that prevented the HTML report from being displayed.
Changes from 1.9.0
New experimental feature
Custom context data for images and reports
Custom context data enables the addition of information to images and reports in Roborazzi's tests, which I believe is very important. For example, it can include the test class name of a screenshot or whether it is in dark mode.
You can now add custom context data using RoborazziOptions, and Roborazzi will add the test class name metadata if you use RoborazziRule. If you have any opinions about this feature, please let me know at #257.
Furthermore, this opens up possibilities with AI. Given that AI now possesses multimodal capabilities, it has become feasible for AI to process images.
This feature was made possible thanks to @sanao1006 's contribution of migrating from org.json to gson.
onView(ViewMatchers.isRoot())
.captureRoboImage(
roborazziOptions = RoborazziOptions(
contextData = mapOf(
"context_data_key" to "context_data_value"
)
)
)
}
Important bug fix
Gradle attempts to load the test cache whenever possible, but there was an issue where Roborazzi couldn't restore images from the cache. This release includes a fix for this problem. Thank you, @francescocervone, for reporting this issue.
What's Changed
- [CI]Escape branch name by @takahirom in #253
- refactor: migrating from the
org.json
Library toGson
by @sanao1006 in #248 - doc: Add build.gradle.kts examples by @sanao1006 in #256
- Enable adding metadata to image by @takahirom in #259
- Add contextdata tabs to HTML report by @takahirom in #260
- Fix Roborazzi output cache by @takahirom in #262
New Contributors
- @sanao1006 made their first contribution in #248
Full Changelog: 1.9.0...1.10.0