-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support includePrivatePreviews of ComposablePreviewScanner #445
Support includePrivatePreviews of ComposablePreviewScanner #445
Conversation
* The fully qualified class name of the custom test class that implements [com.github.takahirom.roborazzi.ComposePreviewTester]. | ||
* This is advanced usage. You can implement your own test class that implements [com.github.takahirom.roborazzi.ComposePreviewTester]. | ||
*/ | ||
val testerQualifiedClassName: Property<String> = objects.property(String::class.java) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've simply changed the order because testerQualifiedClassName is an advanced option.
@@ -19,13 +19,24 @@ fun ComposablePreview<AndroidPreviewInfo>.captureRoboImage( | |||
|
|||
@ExperimentalRoborazziApi | |||
interface ComposePreviewTester<T : Any> { | |||
class Options( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This would be the biggest change for users in this PR. This change is a breaking change for users using ComposePreviewTester. This is for reducing future breaking changes when we add options, as adding parameters to the interface would break users' implementations. Do you have any opinions about this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it does not require a breaking change.
You could simply extend the interface with
fun getPreviewOptions(): Options = defaultOptionsHere
So for the new methods you have a default (java default interfaces to the rescue) and then use that new method in ComposePreviewTester<AndroidPreviewInfo>.previews()
to apply them
That way you can always extend without breaking changes.
on the other hand, you need that new method to be used in the previews(), what makes them somehow dependent from each other…
Your call
@sergio-sastre Thanks as always. I've added support for includePrivatePreviews. I also did a little refactoring to avoid making breaking changes. I would appreciate your opinion. Do you have time to review this? |
Sure! I‘ll find some time today in the evening 😉 |
You can add the following dependency to your project to use the helper function: | ||
|
||
`testImplementation("io.github.takahirom.roborazzi:roborazzi-compose-preview-scanner-support:[version]")` | ||
|
||
Then you can use the `ComposablePreview<AndroidPreviewInfo>.captureRoboImage()` function to capture the Composable Preview using the settings in Preview annotations. | ||
To obtain the `ComposablePreview` object, please refer to [ComposePreviewScanner](https://github.com/sergio-sastre/ComposablePreviewScanner). | ||
To obtain the `ComposablePreview` object, please refer to [ComposablePreviewScanner](https://github.com/sergio-sastre/ComposablePreviewScanner). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I named it like that and I had my own doubts.
Google is also inconsistent on whether to call them "Compose Previews", like in "Compose Preview Screenshot Testing tool" or "Composable Previews" like here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe I know it should not be Compose Composable Preview
. 😊
"A good name is long enough to fully communicate what the item is or does, without being so long that it becomes hard to read." https://google.github.io/eng-practices/review/reviewer/looking-for.html
I personally think we can use ComposePreview in an Android context, and also I think we can use ComposablePreview in a Jetpack Compose context. This is because Composable is an annotation name, so it's a minor distinction, while Compose is the framework name.
val privateImages = | ||
testProjectDir.root.resolve("$moduleName/build/outputs/roborazzi/").listFiles() | ||
.orEmpty() | ||
.filter { it.name.contains("PreviewWithPrivate") } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why not to name it "WithPrivatePreviews" instead?
@@ -19,13 +19,24 @@ fun ComposablePreview<AndroidPreviewInfo>.captureRoboImage( | |||
|
|||
@ExperimentalRoborazziApi | |||
interface ComposePreviewTester<T : Any> { | |||
class Options( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it does not require a breaking change.
You could simply extend the interface with
fun getPreviewOptions(): Options = defaultOptionsHere
So for the new methods you have a default (java default interfaces to the rescue) and then use that new method in ComposePreviewTester<AndroidPreviewInfo>.previews()
to apply them
That way you can always extend without breaking changes.
on the other hand, you need that new method to be used in the previews(), what makes them somehow dependent from each other…
Your call
…d support JUnit rule from the options()
interface TestLifecycleOptions | ||
class JUnit4TestLifecycleOptions( | ||
// Used from generated tests | ||
@Suppress("unused") val testRule: TestRule = object : TestWatcher() {}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yschimke
Thanks as always. It's a little unrelated to this PR, but to address the feedback, I introduced a test rule option to support lifecycle hooks in Preview Support. Could you take a look?
#446 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like to see a sample of using it.
Does every test get it's own instance of TestRule?
They can be stateful https://github.com/junit-team/junit4/blob/ed47b7f487bafa48cff47f051af81a004cd36049/src/main/java/org/junit/rules/ErrorCollector.java
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your great review! I changed testRule to testRuleFactory to create a test rule for each test and added integration tests. Could you check it out?
9e20058#diff-caa31d18b2a269ce09960b3943b693c5dcdd8c57ee34cd096b4a7ce27b6423adR8
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I think that looks good
Thank you for the great advice. I applied it, and it allowed us to pass the JUnit test rules from users. |
/** | ||
* The TestRule factory to be used for the generated tests. | ||
* You can use this to add custom behavior to the generated tests. | ||
*/ | ||
// Used from generated tests | ||
@Suppress("unused") val testRuleFactory: () -> TestRule = { object : TestWatcher() {} }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do wonder whether there is some context that should be passed into the testRuleFactory? Or the methods on TestRule are enough?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought the most likely scenario would be that we need to pass ComposeRule. I made adjustments to enable passing the ComposeRule.
2f12551#diff-caa31d18b2a269ce09960b3943b693c5dcdd8c57ee34cd096b4a7ce27b6423adR13
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That looks like a great option. I've frequently needed to use the ComposeTestRule to interact with the UI. nice.
/** | ||
* Retrieves a list of composable previews from the specified packages. | ||
* | ||
* @param packages Vararg parameter representing the package names to scan for previews. | ||
* @return A list of ComposablePreview objects of type T. | ||
*/ | ||
fun previews(vararg packages: String): List<ComposablePreview<T>> | ||
fun previews(): List<ComposablePreview<T>> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is going to be a breaking change. I considered providing a default method, but I think it would make it difficult for users to know what to do.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The release note will be like this.
New feature: Support for includePrivatePreviews in Compose Preview Support
Compose Preview Support, initially released in version 1.22.0, now includes the includePrivatePreviews
option. This feature allows you to include private previews in your Compose Preview Support setup. You can enable this by setting includePrivatePreviews
in roborazzi.generateComposePreviewRobolectricTests.includePrivatePreviews
.
New feature: JUnit rule support in ComposePreviewTester
We've enhanced ComposePreviewTester to support JUnit rules. Previously, ComposePreviewTester lacked lifecycle hooks, which made certain scenarios challenging to handle. Now, you can pass your own Test rules, including your Compose Test Rule, and use them in tests. For a sample implementation, check out this integration test.
Breaking changes for users of the ComposePreviewTester
interface
As we continue to improve Compose Preview Support, we've made some changes to the ComposePreviewTester
interface. These changes introduce a breaking change for current users.
ComposePreviewTester is an interface for modifying the behavior of Compose Preview Support. Previously, the API was prone to breaking changes with each new option added. We've addressed this issue by introducing a new options()
function. However, this necessitates a change in how you use the interface.
Old interface:
fun previews(vararg packages: String): List<ComposablePreview<T>>
New interface (Packages can now be accessed via options().scanOptions.packages
):
fun previews(): List<ComposablePreview<T>>
Thank you for your reviews. I'll merge and release this. |
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [io.github.takahirom.roborazzi](https://togithub.com/takahirom/roborazzi) | plugin | minor | `1.23.0` -> `1.24.0` | | [io.github.takahirom.roborazzi:roborazzi-junit-rule](https://togithub.com/takahirom/roborazzi) | dependencies | minor | `1.23.0` -> `1.24.0` | | [io.github.takahirom.roborazzi:roborazzi-compose](https://togithub.com/takahirom/roborazzi) | dependencies | minor | `1.23.0` -> `1.24.0` | | [io.github.takahirom.roborazzi:roborazzi](https://togithub.com/takahirom/roborazzi) | dependencies | minor | `1.23.0` -> `1.24.0` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>takahirom/roborazzi (io.github.takahirom.roborazzi)</summary> ### [`v1.24.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.24.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.23.0...1.24.0) ##### New feature: Support for includePrivatePreviews in Compose Preview Support Compose Preview Support, initially released in version 1.22.0, now includes the `includePrivatePreviews` option. This feature allows you to include private previews in your Compose Preview Support setup. You can enable this by setting `includePrivatePreviews` in `roborazzi.generateComposePreviewRobolectricTests.includePrivatePreviews`. Thank you for submitting this feature request, [@​yuchan2215](https://togithub.com/yuchan2215) ! ##### New feature: JUnit rule support in ComposePreviewTester We've enhanced ComposePreviewTester to support JUnit rules. Previously, ComposePreviewTester lacked lifecycle hooks, which made certain scenarios challenging to handle. Now, you can pass your own Test rules, including your Compose Test Rule, and use them in tests. For a sample implementation, check out [this integration test](https://togithub.com/takahirom/roborazzi/blob/2519f46ec0e5a8dadc5139ae833e2925c90c8b21/include-build/roborazzi-gradle-plugin/src/integrationTest/projects/sample-generate-preview-tests/src/test/java/com/github/takahirom/sample/CustomPreviewTester.kt). ##### Breaking changes for users of the `ComposePreviewTester` interface As we continue to improve Compose Preview Support, we've made some changes to the `ComposePreviewTester` interface. These changes introduce a breaking change for current users. ComposePreviewTester is an interface for modifying the behavior of Compose Preview Support. Previously, the API was prone to breaking changes with each new option added. We've addressed this issue by introducing a new `options()` function. However, this necessitates a change in how you use the interface. Old interface: ```kotlin fun previews(vararg packages: String): List<ComposablePreview<T>> ``` New interface (Packages can now be accessed via `options().scanOptions.packages`): ```kotlin fun previews(): List<ComposablePreview<T>> ``` ##### Acknowledgments We'd like to extend our sincere thanks to [@​yschimke](https://togithub.com/yschimke) and [@​sergio-sastre](https://togithub.com/sergio-sastre) for their valuable design reviews and insightful feedback, which greatly contributed to the improvements in this release. ##### What's Changed - \[Idea Plugin] Improve performance of idea plugin by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/439](https://togithub.com/takahirom/roborazzi/pull/439) - \[Idea Plugin] Prepare for release of IntelliJ IDEA plugin by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/442](https://togithub.com/takahirom/roborazzi/pull/442) - \[Idea Plugin] Tweak idea plugin UI by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/443](https://togithub.com/takahirom/roborazzi/pull/443) - \[Feature, Breaking Changes] Support includePrivatePreviews of ComposablePreviewScanner by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/445](https://togithub.com/takahirom/roborazzi/pull/445) - \[Docs] Add mention to the sample in Compose Preview Support document by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/448](https://togithub.com/takahirom/roborazzi/pull/448) - \[Docs] Fix URL of the README link by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/449](https://togithub.com/takahirom/roborazzi/pull/449) **Full Changelog**: takahirom/roborazzi@1.23.0...1.24.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44LjMiLCJ1cGRhdGVkSW5WZXIiOiIzOC44LjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [io.github.takahirom.roborazzi](https://togithub.com/takahirom/roborazzi) | `1.23.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.github.takahirom.roborazzi/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.github.takahirom.roborazzi/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.github.takahirom.roborazzi/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.github.takahirom.roborazzi/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi-junit-rule](https://togithub.com/takahirom/roborazzi) | `1.23.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.github.takahirom.roborazzi:roborazzi-junit-rule/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.github.takahirom.roborazzi:roborazzi-junit-rule/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.github.takahirom.roborazzi:roborazzi-junit-rule/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.github.takahirom.roborazzi:roborazzi-junit-rule/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi-compose-desktop](https://togithub.com/takahirom/roborazzi) | `1.23.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.github.takahirom.roborazzi:roborazzi-compose-desktop/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.github.takahirom.roborazzi:roborazzi-compose-desktop/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.github.takahirom.roborazzi:roborazzi-compose-desktop/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.github.takahirom.roborazzi:roborazzi-compose-desktop/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi-compose](https://togithub.com/takahirom/roborazzi) | `1.23.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.github.takahirom.roborazzi:roborazzi-compose/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.github.takahirom.roborazzi:roborazzi-compose/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.github.takahirom.roborazzi:roborazzi-compose/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.github.takahirom.roborazzi:roborazzi-compose/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi](https://togithub.com/takahirom/roborazzi) | `1.23.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.github.takahirom.roborazzi:roborazzi/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.github.takahirom.roborazzi:roborazzi/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.github.takahirom.roborazzi:roborazzi/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.github.takahirom.roborazzi:roborazzi/1.23.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>takahirom/roborazzi (io.github.takahirom.roborazzi)</summary> ### [`v1.25.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.25.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.24.0...1.25.0) ##### New Experimental Gradle Task: `clear` The Roborazzi Gradle Plugin saves image caches in `build/intermediates/roborazzi`. When users remove images in `build/outputs/roborazzi` and rerun the tests, it doesn't work as expected. To address this, we've added a Gradle task `clearRoborazziDebug` to remove all images. I'm gathering feedback about this task in [#​452](https://togithub.com/takahirom/roborazzi/issues/452). Please let me know if this causes any issues in your workflow. I'm aware that there are many different ways to use Roborazzi, and I'd like to improve your project workflow. ##### What's Changed - \[IDE Plugin] Hide dropdown border if no gradle tasks exists by [@​eyedol](https://togithub.com/eyedol) in [https://github.com/takahirom/roborazzi/pull/451](https://togithub.com/takahirom/roborazzi/pull/451) Thank you for your contribution! - \[Feature] Add clear roborazzi task by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/453](https://togithub.com/takahirom/roborazzi/pull/453) **Full Changelog**: takahirom/roborazzi@1.24.0...1.25.0 ### [`v1.24.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.24.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.23.0...1.24.0) ##### New feature: Support for includePrivatePreviews in Compose Preview Support Compose Preview Support, initially released in version 1.22.0, now includes the `includePrivatePreviews` option. This feature allows you to include private previews in your Compose Preview Support setup. You can enable this by setting `includePrivatePreviews` in `roborazzi.generateComposePreviewRobolectricTests.includePrivatePreviews`. Thank you for submitting this feature request, [@​yuchan2215](https://togithub.com/yuchan2215) ! ##### New feature: JUnit rule support in ComposePreviewTester We've enhanced ComposePreviewTester to support JUnit rules. Previously, ComposePreviewTester lacked lifecycle hooks, which made certain scenarios challenging to handle. Now, you can pass your own Test rules, including your Compose Test Rule, and use them in tests. For a sample implementation, check out [this integration test](https://togithub.com/takahirom/roborazzi/blob/2519f46ec0e5a8dadc5139ae833e2925c90c8b21/include-build/roborazzi-gradle-plugin/src/integrationTest/projects/sample-generate-preview-tests/src/test/java/com/github/takahirom/sample/CustomPreviewTester.kt). ##### Breaking changes for users of the `ComposePreviewTester` interface As we continue to improve Compose Preview Support, we've made some changes to the `ComposePreviewTester` interface. These changes introduce a breaking change for current users. ComposePreviewTester is an interface for modifying the behavior of Compose Preview Support. Previously, the API was prone to breaking changes with each new option added. We've addressed this issue by introducing a new `options()` function. However, this necessitates a change in how you use the interface. Old interface: ```kotlin fun previews(vararg packages: String): List<ComposablePreview<T>> ``` New interface (Packages can now be accessed via `options().scanOptions.packages`): ```kotlin fun previews(): List<ComposablePreview<T>> ``` ##### Acknowledgments We'd like to extend our sincere thanks to [@​yschimke](https://togithub.com/yschimke) and [@​sergio-sastre](https://togithub.com/sergio-sastre) for their valuable design reviews and insightful feedback, which greatly contributed to the improvements in this release. ##### What's Changed - \[Idea Plugin] Improve performance of idea plugin by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/439](https://togithub.com/takahirom/roborazzi/pull/439) - \[Idea Plugin] Prepare for release of IntelliJ IDEA plugin by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/442](https://togithub.com/takahirom/roborazzi/pull/442) - \[Idea Plugin] Tweak idea plugin UI by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/443](https://togithub.com/takahirom/roborazzi/pull/443) - \[Feature, Breaking Changes] Support includePrivatePreviews of ComposablePreviewScanner by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/445](https://togithub.com/takahirom/roborazzi/pull/445) - \[Docs] Add mention to the sample in Compose Preview Support document by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/448](https://togithub.com/takahirom/roborazzi/pull/448) - \[Docs] Fix URL of the README link by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/449](https://togithub.com/takahirom/roborazzi/pull/449) **Full Changelog**: takahirom/roborazzi@1.23.0...1.24.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/chrisbanes/haze). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
close #441
close #446