Open
Conversation
89db000 to
c81039d
Compare
75beb07 to
f0fdb82
Compare
9d8281b to
2fea6d7
Compare
68fd968 to
13f396c
Compare
fb2a73d to
94a6097
Compare
b0ce7e9 to
83951b3
Compare
ad3a3ab to
850ffaa
Compare
002bc78 to
7bcd50a
Compare
2fd1c3a to
24294b1
Compare
24294b1 to
f8cd3f8
Compare
030e77f to
c3a1bc8
Compare
c3a1bc8 to
f018d10
Compare
30babaa to
2c3b5f4
Compare
ba4f408 to
d6c8d39
Compare
63cc195 to
309cd48
Compare
309cd48 to
93a8ae1
Compare
93a8ae1 to
22316c3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v4→v5v5→v6v5→v79.2.1→9.4.1v5→v68.0.0→8.4.01.1.0→1.2.01.0.0-alpha08→1.0.0-alpha099.0.0→9.1.11.3.0→1.4.01.17.0→1.18.01.5.5→1.6.11.9.4→1.10.61.9.4→1.10.61.51.0→1.59.01.51.0→1.59.01.51.0→1.59.01.51.0→1.59.04.16→4.16.11.1.7→1.2.11.5.5→1.6.11.0.0-beta01→1.0.01.9.4→1.10.61.9.4→1.10.61.6.0→1.6.11.12.2→1.13.01.5.5→1.6.11.5.5→1.6.11.6.0→1.6.11.6.0→1.6.12026.01.00→2026.03.013.3.0→3.4.03.3.0→3.4.02.9.4→2.10.01.5.5→1.6.11.3.0→1.4.01.3.0→1.4.01.6.0→1.6.12.9.4→2.10.02.9.4→2.10.01.8.0→1.10.01.8.0→1.10.01.8.0→1.10.01.5.0→1.6.01.5.0→1.6.01.5.0→1.6.01.5.0→1.6.02025.11.00→2026.03.011.5.6→1.6.11.5.6→1.6.11.5.6→1.6.11.2.1→1.3.01.11.0→1.13.01.12.0-rc01→1.13.01.5.6→1.6.18.13.1→9.1.18.13.1→9.1.19.1.0→9.1.19.0.0→9.1.19.0.0→9.1.1Release Notes
actions/cache (actions/cache)
v5Compare Source
actions/checkout (actions/checkout)
v6Compare Source
actions/upload-artifact (actions/upload-artifact)
v7Compare Source
v6Compare Source
gradle/gradle (gradle)
v9.4.1Compare Source
v9.4.0Compare Source
v9.3.1: 9.3.1Compare Source
This is a patch release for 9.3.0. We recommend using 9.3.1 instead of 9.3.0.
The following issues were resolved:
Read the Release Notes
Upgrade instructions
Switch your build to use Gradle 9.3.1 by updating your wrapper:
See the Gradle 9.x upgrade guide to learn about deprecations, breaking changes and other considerations when upgrading.
For Java, Groovy, Kotlin and Android compatibility, see the full compatibility notes.
Reporting problems
If you find a problem with this release, please file a bug on GitHub Issues adhering to our issue guidelines.
If you're not sure you're encountering a bug, please use the forum.
We hope you will build happiness with Gradle, and we look forward to your feedback via Twitter or on GitHub.
v9.3.0Compare Source
gradle/actions (gradle/actions)
v6Compare Source
takahirom/roborazzi (io.github.takahirom.roborazzi)
v1.59.0Compare Source
ROBORAZZI_DEBUG can now be passed as a command-line parameter
We already have the ROBORAZZI_DEBUG variable to control debug-log output, and it can be set in tests. From this release, you can also enable ROBORAZZI_DEBUG by adding
-Proborazzi.debug=trueto the command line.What's Changed
Full Changelog: takahirom/roborazzi@1.58.0...1.59.0
v1.58.0Compare Source
Bugfix: Fixed NoClassDefFoundError in RoborazziPlugin when the Android Plugin is not applied
Previously, we never touched the Android Plugin class when it wasn’t in use; nevertheless, a NoClassDefFoundError was raised because the plugin contained a method that referenced the Android Plugin class. I therefore extracted Android-related code into a separate class to resolve the issue. Thank you, @rnett, for reporting this.
Update: Device qualifiers
You can now specify device qualifiers via RobolectricDeviceQualifiers. The list has been expanded with new devices such as Pixel9, XRGlasses, and even AIGlasses!
Thank you, @joergmis, for your contribution.
What's Changed
New Contributors
Full Changelog: takahirom/roborazzi@1.57.0...1.58.0
v1.57.0Compare Source
Fix AGP 9.0 KMP preview screenshots
We had been using
unitTestSources?.**java**?.addGeneratedSourceDirectory, but this approach proved ineffective when we adoptedcom.android.kotlin.multiplatform.library. Consequently, we migrated tounitTestSources?.**kotlin**?.addGeneratedSourceDirectoryfor the KMP plugin. Unfortunately, when applyingcom.android.library,unitTestSources?.kotlinremains non-functional, so we must toggle between the two depending on the plugin.Thank you for reporting this @HLCaptain !
(This is our plugin code, you don't have to write this.)
Bugfix: Compose Preview’s
onSizeChanged{}wasn’t called when multiple windows exist.There is a bug in which Compose Preview’s
onSizeChanged{}fails to fire when multiple windows are present. This issue arises because we neglected to invokecomposeTestRule.mainClock.advanceTimeByFrame() composeTestRule.waitForIdle()Reproducing screenshots
What's Changed
Full Changelog: takahirom/roborazzi@1.56.0...1.57.0
v1.56.0Compare Source
Added AGP 9.0 compatibility to RoborazziPlugin
Roborazzi was previously using APIs and classes that have since been deprecated, such as
Variant.unitTestand TestedExtension. We have now migrated to alternative, supported classes and methods. Thanks for reporting this, @allanconda-mercari !Behavior changes: Stabilized preview LaunchedEffect execution for Compose Preview support
Previously, screenshots occasionally differed from Android Studio Composable Preview when using LaunchedEffect. We now invoke
composeTestRule.mainClock.advanceTimeByFrame()by default, so some screenshots may appear different. You can restore the previous behavior by implementing a custom tester as follows:What's Changed
Full Changelog: takahirom/roborazzi@1.55.0...1.56.0
v1.55.0Compare Source
Bugfix: Fix WebP ClassCastException
What happened
SdkSandboxClassLoader.ImageIO.getImageWritersByMIMEType, which internally caches writers in a static field. When the writer is first created, the code is executed by SdkSandboxClassLoader1.What we did
We leveraged reflection to force
ImageIO.getImageWritersByMIMETypeto use the System ClassLoader, thereby guaranteeing that the same class definition is shared irrespective of the current SdkSandboxClassLoader.Many thanks to @eygraber for reporting this bug!
What's Changed
Full Changelog: takahirom/roborazzi@1.54.0...1.55.0
v1.54.0Compare Source
Breaking change: Report HTML and JSON paths have changed
The HTML report used to be at
build/reports/roborazzi/index.htmlbut is now located atbuild/reports/roborazzi/<build_variant>/index.html. This is a first step toward fixing a long-standing issue where runningrecordRoborazzi(instead ofrecordRoborazziDebug) could break test results; further work is still needed to make it fully reliable.You should be able to fix it by adding
/debug/(or your build variant) to the path in your CI script. I believe the change is straightforward, but if you run into any cases where it's difficult please let me know.Note: This change does not affect the paths of the generated screenshot images, so most users will not be impacted.
Thank you for your contribution, @vladcudoidem!
Behavioral change: Fixed screenshot timing for Compose Preview Support
Previously, we used Espresso.onIdle() and ShadowLooper.idle(), but these APIs are not suitable for Compose. Consequently, screenshots could not be captured after onSizeChanged completed.
If you encounter issues with infinite animations—such as
CircularProgressIndicator—you can configure frame-based captures using@RoboComposePreviewOptions.Thank you for reporting this issue, @savvasenok!
What's Changed
Full Changelog: takahirom/roborazzi@1.53.0...1.54.0
v1.53.0Compare Source
New feature
generatedTestClassCountand behavior changes to Compose Preview supportWe've added the
generatedTestClassCountoption, which enables us to run Preview tests in parallel when you set maxParallelForks to a value greater than 1.As the name
generatedTestClassCountsuggests, this option generates as many test classes as specified. It creates tests whosepreviewIndex % totalTestClassCount == testClassIndex. However, this option does not modify maxParallelForks, so you must also set maxParallelForks yourself to run tests in parallel. This is our policy: we never alter other plugin(AGP) settings in order to keep one single source of configuration.Behavior changes: generatedTestClassCount now defaults to the same value as maxParallelForks. Therefore, if you already use maxParallelForks during testing, the behavior may change if your tests are non-deterministic—for example, if they depend on the order in which other tests run.
Last but not least, thanks to @sergio-sastre for suggesting this feature, reviewing the code, and confirming the approach works!
Fix configuration-time resolution when using BOM to Compose Preview support
Fixed an error where the version verification logic triggered configuration-time resolution errors when using BOM (Bill of Materials) for dependency management.
The fix simplifies the
verifyComposablePreviewScannerVersionmethod by removing the complex fallback logic that attempted to infer versions from test configurations. Instead, the plugin now only checks explicitly declared versions—when no version is specified (indicating BOM management), verification is skipped.Thanks to @igokoro for reporting this issue!
Fix iOS snapshot not creating parent directories before writing files
Fixed a critical bug where iOS snapshot tests weren't being recorded on the first run. The root cause was that
NSData.writeToFilesilently fails when parent directories don't exist.The fix ensures parent directories are automatically created before writing files using
NSFileManager.defaultManager.createDirectoryAtPathwithwithIntermediateDirectories = true. Additionally, error logging was added to report both successful and failed file operations, preventing silent failures.Thanks to @jl-jonas for reporting this issue!
What's Changed
34e1148by @renovate[bot] in #764Full Changelog: takahirom/roborazzi@1.52.0...1.53.0
v1.52.0Compare Source
Support for
com.android.kotlin.multiplatform.librarypluginEven though we can use
androidUnitTestin Kotlin Multiplatform Plugin, there is a way to add Android target to KMP and this might become mainstream. Roborazzi did not add the task for this plugin so we added tasks likerecordRoborazziAndroidHostTest. Thank you for reporting this issue @xVemu !Support for KMP testRuns API
When we add testRuns in build.gradle, that enables us to control dependencies for tests in KMP, Roborazzi used to fail with
Cannot add task 'clearRoborazziJvm' as a task with that name already exists.. Thank you for reporting this issue as well @xVemu !Fix preview tests plugin when using Bom dependencies
There are patterns that we cannot build with Roborazzi due to configuration cache issues. We addressed this issue using a new API for configuration cache. Thank you for reporting this @igokoro !
What's Changed
Full Changelog: takahirom/roborazzi@1.51.0...1.52.0
coil-kt/coil (io.coil-kt.coil3:coil-network-okhttp)
v3.4.0Compare Source
ConcurrentRequestStrategyto support combining in-flight network requests for the same key. (#2995, #3326)DeDupeConcurrentRequestStrategyenables this behavior and lets waiters wait for the results of an in-flight network request.diskCacheKey.OkHttpNetworkFetcherFactory,KtorNetworkFetcherFactory, andNetworkFetcher.Factorynow acceptconcurrentRequestStrategy.linuxX64andlinuxArm64) for non-Compose multiplatform artifacts. (#3054)ImageRequest.Builder.useExistingImageAsPlaceholderenables crossfading from the previous image when no placeholder is set.ImageRequest.Builder.preferEndFirstIntrinsicSizeletsCrossfadePainterprefer the end painter's intrinsic size.ImageLoader.Builder.repeatCount(Int)incoil-gifto set a global animated image repeat count. (#3143)coil-video. (#3107)coil-lintwithcoil-coreand add a lint check to catch accidentalkotlin.error()calls inImageRequest.Builderblocks. (#3304)BitmapFetcheravailable in common code. (#3286)applicationContextwhen creating the singletonImageLoaderon Android. (#3246)404) and stop caching non-cacheable responses (e.g.500). (#3137, #3139)maxBitmapSizeedge case to prevent oversized bitmap crashes on Android. (#3259)kotlinx-io-okioto 0.9.0.androidx.coreto 1.16.0.androidx.lifecycleto 2.9.4.androidx.exifinterfaceto 1.4.2.androidx/media (androidx.media3:media3-exoplayer-workmanager)
v1.10.0Compare Source
This release includes the following changes since
1.9.1 release:
Player.mute()andPlayer.unmute()fromUnstableApitostable.
Format.pcmEncodingandC.PcmEncodingfromUnstableApitostable.
Format.primaryTrackGroupIdto identify the primary group ofembedded
Formatinstances(#294).
AdsMediaSource.MediaCodecVideoRenderertobetter align scheduling work and CPU wake-cycles to when video frames
can be processed. You can enable this using
experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()inthe
DefaultRenderersFactory.DataSource.FactoryinDefaultPreloadManager.Builder.ExoPlayerto be mocked without Robolectric by moving somedefault constants to
ExoPlayer.Builder. Mocking this complex interfaceis not generally encouraged - only when the usage is
minimal/simple/incidental
(#2985).
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSfrom
ExoPlayertoExoPlayer.Builder(without deprecation).ProgressiveMediaSourcepropagates out-of-date timelineinfo to the player, and the queued periods unexpectedly get removed
(#3016).
playback is requested during phone calls.
re-buffers at the end of the on-demand content
(#3052).
(#2830).
ArrayIndexOutOfBoundsException(#3125).
EditedMediaItem.removeVideo.EditedMediaItem.Builder.setFrameRate()can now set a maximum outputframe rate for video, which is particularly helpful when increasing
media speed with
setSpeed().DefaultTrackSelector.selectAllTracksto includethe output array as a parameter, pre-populated with track overrides.
whether the corresponding primary track is selected
(#294).
TrackSelectionParametersoptions forpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsandselectTextByDefault.uuidboxes before other boxes likemoov(#3046).containers.
Configuration
📅 Schedule: (UTC)
* 0-3 * * *)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.