Horologist is a group of libraries that aim to supplement Wear OS developers with features that are commonly required by developers but not yet available.
takahirom/roborazzi (io.github.takahirom.roborazzi)
### [`v1.31.0`](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.31.0)
[Compare Source](https://redirect.github.com/takahirom/roborazzi/compare/1.30.1...1.31.0)
##### Added Experimental Support for Cleaning Up Old Screenshots
This release introduces the `roborazzi.cleanupOldScreenshots=true` option in `gradle.properties`, allowing users to automatically remove outdated screenshots. By default, this is set to `false` to prevent accidental deletions when running filtered tests. **Please note that enabling this option may result in unintended deletions when running filtered tests.** You can use `-Proborazzi.cleanupOldScreenshots=true` for CI configurations to clean up screenshots only in CI runs without affecting local settings.
This cleanup implementation may affect the cache mechanism. We have some integration tests in place, but if you notice any issues, please let us know.
Thank you, [@JackEblan](https://redirect.github.com/JackEblan), for suggesting the cleanup feature!
##### Improve AI Assertion Error Message
In the previous release, we introduced [Roborazzi AI-Powered Image Assertion](https://takahirom.github.io/roborazzi/ai-powered-image-assertion.html).
When an AI assertion fails, itβs important to review the screenshots to understand what went wrong with the images. Therefore, I enhanced the error message to include the file paths of the images.
![image](https://redirect.github.com/user-attachments/assets/7c2b68d6-d004-4676-aa81-3a3b37378e28)
##### What's Changed
- Add cleanupOldScreenshots option by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/539](https://redirect.github.com/takahirom/roborazzi/pull/539)
- Improve AI assertion error message by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/540](https://redirect.github.com/takahirom/roborazzi/pull/540)
**Full Changelog**: https://github.com/takahirom/roborazzi/compare/1.30.1...1.31.0
### [`v1.30.1`](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.30.1)
[Compare Source](https://redirect.github.com/takahirom/roborazzi/compare/1.30.0...1.30.1)
##### Roborazzi AI-Powered Image Assertion π€ β¨
Roborazzi introduces an experimental AI-powered image assertion feature to simplify and scale the process of verifying screenshot test content. This feature helps automate tedious visual checks by comparing images based on customizable AI prompts, utilizing either the Gemini API or OpenAI API. **It only activates when images differ, conserving resources**. Additionally, manual AI assertion is available, allowing users to leverage local language models without external dependencies.
**We don't include Gemini or OpenAI dependencies in the `roborazzi` module. To use these models, you can add either `roborazzi-ai-gemini` or `roborazzi-ai-openai` as dependencies.**
```kotlin
onView(ViewMatchers.isRoot())
.captureRoboImage(
roborazziOptions = provideRoborazziContext().options.addedAiAssertion(
assertionPrompt = "The screen should have a PREVIOUS button",
)
)
```
For more information, please check out this documentation page:
https://takahirom.github.io/roborazzi/ai-powered-image-assertion.html
##### Roborazzi Compose Preview Support now supports the device parameter`@Preview(device = "")` π±
[Roborazzi Compose Preview Support](https://takahirom.github.io/roborazzi/preview-support.html) uses [ComposablePreviewScanner](https://redirect.github.com/sergio-sastre/ComposablePreviewScanner) and [ComposablePreviewScanner now supports parsing device parameter](https://redirect.github.com/sergio-sastre/ComposablePreviewScanner/releases/tag/0.4.0). It is introduced to Compose Preview Support. Thank you, [@sergio-sastre](https://redirect.github.com/sergio-sastre), for developing this adapter and integrating it with Roborazzi.
**If you are using Roborazzi Compose Preview Support with device parameters, you need to update your ComposablePreviewScanner to version 0.4.0.**
##### Remove Context Receiver from roborazzi-desktop β»οΈ
The Context Receiver in Kotlin is now deprecated, so we need to remove it. The `context(DesktopComposeUiTest)` requirement existed because the file `compose/ui/ui-test/src/skikoMain/kotlin/androidx/compose/ui/test/SkikoImageHelpers.kt` was previously unavailable, necessitating the use of DesktopComposeUiTest. Now that SkikoImageHelpers is available, we can eliminate the `context(DesktopComposeUiTest)` requirement.
This functionality was introduced in the Compose Multiplatform core repository (commit [`1664fba`](https://redirect.github.com/takahirom/roborazzi/commit/1664fba): https://github.com/JetBrains/compose-multiplatform-core/commit/1664fba611ae965a7815c6432485da8bcbb0f47f) and has been supported since Compose Multiplatform version 1.5.12 (https://github.com/JetBrains/compose-multiplatform-core/releases/tag/v1.5.12).
**Please note that this may be a breaking change if you are using Compose Multiplatform version 1.5.12 or earlier.**
##### Changes from 1.30.0
- Breaking changes to 1.30.0:
Renamed parameter `assertPrompt` to `assertionPrompt`.
- Use `max_tokens` instead of `max_completion_tokens` for the OpenAI API:
Although `max_tokens` has been deprecated, we still need to use it in certain environments.
##### What's Changed
- \[Documentation] Add description how to configure Differ by [@darekbx](https://redirect.github.com/darekbx) in [https://github.com/takahirom/roborazzi/pull/507](https://redirect.github.com/takahirom/roborazzi/pull/507)
- \[Idea Plugin] Fix the issue with the Roborazzi Idea Plugin not being able to display images by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/504](https://redirect.github.com/takahirom/roborazzi/pull/504)
- \[CI] Update actions/checkout digest to [`eef6144`](https://redirect.github.com/takahirom/roborazzi/commit/eef6144) by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/509](https://redirect.github.com/takahirom/roborazzi/pull/509)
- \[CI] Update actions/upload-artifact digest to [`b4b15b8`](https://redirect.github.com/takahirom/roborazzi/commit/b4b15b8) by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/510](https://redirect.github.com/takahirom/roborazzi/pull/510)
- \[CI] Add dependency diff by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/514](https://redirect.github.com/takahirom/roborazzi/pull/514)
- \[CI] Fix dependency diff workflow by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/516](https://redirect.github.com/takahirom/roborazzi/pull/516)
- \[CI] Fix comment workflow diff path by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/517](https://redirect.github.com/takahirom/roborazzi/pull/517)
- \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.ui:ui-test-junit4 to v1.7.4 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/469](https://redirect.github.com/takahirom/roborazzi/pull/469)
- \[CI] Pin dependencies by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/518](https://redirect.github.com/takahirom/roborazzi/pull/518)
- \[CI] Update actions/checkout digest to [`11bd719`](https://redirect.github.com/takahirom/roborazzi/commit/11bd719) by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/519](https://redirect.github.com/takahirom/roborazzi/pull/519)
- \[BREAKING CHANGE in Roborazzi Plugin (I believe this library is not very popular, so I don't anticipate any issues, but please let me know if anything comes up.)] Update dependency org.webjars:webjars-locator-lite to v0.0.6 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/425](https://redirect.github.com/takahirom/roborazzi/pull/425)
- \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.material3:material3 to v1.3.0 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/521](https://redirect.github.com/takahirom/roborazzi/pull/521)
- \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.material:material to v1.7.5 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/523](https://redirect.github.com/takahirom/roborazzi/pull/523)
- \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.material3:material3 to v1.3.1 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/525](https://redirect.github.com/takahirom/roborazzi/pull/525)
- Try to remove context receiver of desktop by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/533](https://redirect.github.com/takahirom/roborazzi/pull/533)
- Use RobolectricDeviceQualifierBuilder from ComposablePreviewScanner to support preview info "device" by [@sergio-sastre](https://redirect.github.com/sergio-sastre) in [https://github.com/takahirom/roborazzi/pull/530](https://redirect.github.com/takahirom/roborazzi/pull/530)
- Roborazzi AI-Powered Image Assertion by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/491](https://redirect.github.com/takahirom/roborazzi/pull/491)
- Add roborazzi-ai-gemini roborazzi-ai-openai to dependency diff by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/534](https://redirect.github.com/takahirom/roborazzi/pull/534)
- Fix the naming of `assertPrompt` to `assertionPrompt` by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/535](https://redirect.github.com/takahirom/roborazzi/pull/535)
- Use max_tokens instead of max_completion_tokens for OpenAI API by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/536](https://redirect.github.com/takahirom/roborazzi/pull/536)
##### New Contributors
- [@darekbx](https://redirect.github.com/darekbx) made their first contribution in [https://github.com/takahirom/roborazzi/pull/507](https://redirect.github.com/takahirom/roborazzi/pull/507)
- [@sergio-sastre](https://redirect.github.com/sergio-sastre) made their first contribution in [https://github.com/takahirom/roborazzi/pull/530](https://redirect.github.com/takahirom/roborazzi/pull/530)
**Full Changelog**: https://github.com/takahirom/roborazzi/compare/1.29.0...1.30.0
**Full Changelog**: https://github.com/takahirom/roborazzi/compare/1.30.0...1.30.1
### [`v1.30.0`](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.30.0)
[Compare Source](https://redirect.github.com/takahirom/roborazzi/compare/1.29.0...1.30.0)
Please refer to version [1.30.1](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.30.1)
Configuration
π Schedule: Branch creation - "before 4am" (UTC), 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.
π» Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
1.9.0
->1.9.1
1.5.0-alpha04
->1.5.0-alpha05
1.5.0-alpha04
->1.5.0-alpha05
1.5.0-alpha04
->1.5.0-alpha05
1.5.0-alpha04
->1.5.0-alpha05
1.7.4
->1.7.5
1.29.0
->1.31.0
1.29.0
->1.31.0
1.29.0
->1.31.0
1.29.0
->1.31.0
1.29.0
->1.31.0
8.7.1
->8.7.2
2.3.0
->2.4.2
1.3.0
->1.3.1
2.9.1
->2.10.0
2.9.1
->2.10.0
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
2.8.6
->2.8.7
1.13.1
->1.15.0
1.13.1
->1.15.0
1.0.1
->1.1.0
Release Notes
takahirom/roborazzi (io.github.takahirom.roborazzi)
### [`v1.31.0`](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.31.0) [Compare Source](https://redirect.github.com/takahirom/roborazzi/compare/1.30.1...1.31.0) ##### Added Experimental Support for Cleaning Up Old Screenshots This release introduces the `roborazzi.cleanupOldScreenshots=true` option in `gradle.properties`, allowing users to automatically remove outdated screenshots. By default, this is set to `false` to prevent accidental deletions when running filtered tests. **Please note that enabling this option may result in unintended deletions when running filtered tests.** You can use `-Proborazzi.cleanupOldScreenshots=true` for CI configurations to clean up screenshots only in CI runs without affecting local settings. This cleanup implementation may affect the cache mechanism. We have some integration tests in place, but if you notice any issues, please let us know. Thank you, [@JackEblan](https://redirect.github.com/JackEblan), for suggesting the cleanup feature! ##### Improve AI Assertion Error Message In the previous release, we introduced [Roborazzi AI-Powered Image Assertion](https://takahirom.github.io/roborazzi/ai-powered-image-assertion.html). When an AI assertion fails, itβs important to review the screenshots to understand what went wrong with the images. Therefore, I enhanced the error message to include the file paths of the images. ![image](https://redirect.github.com/user-attachments/assets/7c2b68d6-d004-4676-aa81-3a3b37378e28) ##### What's Changed - Add cleanupOldScreenshots option by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/539](https://redirect.github.com/takahirom/roborazzi/pull/539) - Improve AI assertion error message by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/540](https://redirect.github.com/takahirom/roborazzi/pull/540) **Full Changelog**: https://github.com/takahirom/roborazzi/compare/1.30.1...1.31.0 ### [`v1.30.1`](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.30.1) [Compare Source](https://redirect.github.com/takahirom/roborazzi/compare/1.30.0...1.30.1) ##### Roborazzi AI-Powered Image Assertion π€ β¨ Roborazzi introduces an experimental AI-powered image assertion feature to simplify and scale the process of verifying screenshot test content. This feature helps automate tedious visual checks by comparing images based on customizable AI prompts, utilizing either the Gemini API or OpenAI API. **It only activates when images differ, conserving resources**. Additionally, manual AI assertion is available, allowing users to leverage local language models without external dependencies. **We don't include Gemini or OpenAI dependencies in the `roborazzi` module. To use these models, you can add either `roborazzi-ai-gemini` or `roborazzi-ai-openai` as dependencies.** ```kotlin onView(ViewMatchers.isRoot()) .captureRoboImage( roborazziOptions = provideRoborazziContext().options.addedAiAssertion( assertionPrompt = "The screen should have a PREVIOUS button", ) ) ``` For more information, please check out this documentation page: https://takahirom.github.io/roborazzi/ai-powered-image-assertion.html ##### Roborazzi Compose Preview Support now supports the device parameter`@Preview(device = "")` π± [Roborazzi Compose Preview Support](https://takahirom.github.io/roborazzi/preview-support.html) uses [ComposablePreviewScanner](https://redirect.github.com/sergio-sastre/ComposablePreviewScanner) and [ComposablePreviewScanner now supports parsing device parameter](https://redirect.github.com/sergio-sastre/ComposablePreviewScanner/releases/tag/0.4.0). It is introduced to Compose Preview Support. Thank you, [@sergio-sastre](https://redirect.github.com/sergio-sastre), for developing this adapter and integrating it with Roborazzi. **If you are using Roborazzi Compose Preview Support with device parameters, you need to update your ComposablePreviewScanner to version 0.4.0.** ##### Remove Context Receiver from roborazzi-desktop β»οΈ The Context Receiver in Kotlin is now deprecated, so we need to remove it. The `context(DesktopComposeUiTest)` requirement existed because the file `compose/ui/ui-test/src/skikoMain/kotlin/androidx/compose/ui/test/SkikoImageHelpers.kt` was previously unavailable, necessitating the use of DesktopComposeUiTest. Now that SkikoImageHelpers is available, we can eliminate the `context(DesktopComposeUiTest)` requirement. This functionality was introduced in the Compose Multiplatform core repository (commit [`1664fba`](https://redirect.github.com/takahirom/roborazzi/commit/1664fba): https://github.com/JetBrains/compose-multiplatform-core/commit/1664fba611ae965a7815c6432485da8bcbb0f47f) and has been supported since Compose Multiplatform version 1.5.12 (https://github.com/JetBrains/compose-multiplatform-core/releases/tag/v1.5.12). **Please note that this may be a breaking change if you are using Compose Multiplatform version 1.5.12 or earlier.** ##### Changes from 1.30.0 - Breaking changes to 1.30.0: Renamed parameter `assertPrompt` to `assertionPrompt`. - Use `max_tokens` instead of `max_completion_tokens` for the OpenAI API: Although `max_tokens` has been deprecated, we still need to use it in certain environments. ##### What's Changed - \[Documentation] Add description how to configure Differ by [@darekbx](https://redirect.github.com/darekbx) in [https://github.com/takahirom/roborazzi/pull/507](https://redirect.github.com/takahirom/roborazzi/pull/507) - \[Idea Plugin] Fix the issue with the Roborazzi Idea Plugin not being able to display images by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/504](https://redirect.github.com/takahirom/roborazzi/pull/504) - \[CI] Update actions/checkout digest to [`eef6144`](https://redirect.github.com/takahirom/roborazzi/commit/eef6144) by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/509](https://redirect.github.com/takahirom/roborazzi/pull/509) - \[CI] Update actions/upload-artifact digest to [`b4b15b8`](https://redirect.github.com/takahirom/roborazzi/commit/b4b15b8) by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/510](https://redirect.github.com/takahirom/roborazzi/pull/510) - \[CI] Add dependency diff by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/514](https://redirect.github.com/takahirom/roborazzi/pull/514) - \[CI] Fix dependency diff workflow by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/516](https://redirect.github.com/takahirom/roborazzi/pull/516) - \[CI] Fix comment workflow diff path by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/517](https://redirect.github.com/takahirom/roborazzi/pull/517) - \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.ui:ui-test-junit4 to v1.7.4 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/469](https://redirect.github.com/takahirom/roborazzi/pull/469) - \[CI] Pin dependencies by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/518](https://redirect.github.com/takahirom/roborazzi/pull/518) - \[CI] Update actions/checkout digest to [`11bd719`](https://redirect.github.com/takahirom/roborazzi/commit/11bd719) by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/519](https://redirect.github.com/takahirom/roborazzi/pull/519) - \[BREAKING CHANGE in Roborazzi Plugin (I believe this library is not very popular, so I don't anticipate any issues, but please let me know if anything comes up.)] Update dependency org.webjars:webjars-locator-lite to v0.0.6 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/425](https://redirect.github.com/takahirom/roborazzi/pull/425) - \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.material3:material3 to v1.3.0 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/521](https://redirect.github.com/takahirom/roborazzi/pull/521) - \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.material:material to v1.7.5 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/523](https://redirect.github.com/takahirom/roborazzi/pull/523) - \[Sample/Tests dependency. Not library dependency] Update dependency androidx.compose.material3:material3 to v1.3.1 by [@renovate](https://redirect.github.com/renovate) in [https://github.com/takahirom/roborazzi/pull/525](https://redirect.github.com/takahirom/roborazzi/pull/525) - Try to remove context receiver of desktop by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/533](https://redirect.github.com/takahirom/roborazzi/pull/533) - Use RobolectricDeviceQualifierBuilder from ComposablePreviewScanner to support preview info "device" by [@sergio-sastre](https://redirect.github.com/sergio-sastre) in [https://github.com/takahirom/roborazzi/pull/530](https://redirect.github.com/takahirom/roborazzi/pull/530) - Roborazzi AI-Powered Image Assertion by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/491](https://redirect.github.com/takahirom/roborazzi/pull/491) - Add roborazzi-ai-gemini roborazzi-ai-openai to dependency diff by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/534](https://redirect.github.com/takahirom/roborazzi/pull/534) - Fix the naming of `assertPrompt` to `assertionPrompt` by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/535](https://redirect.github.com/takahirom/roborazzi/pull/535) - Use max_tokens instead of max_completion_tokens for OpenAI API by [@takahirom](https://redirect.github.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/536](https://redirect.github.com/takahirom/roborazzi/pull/536) ##### New Contributors - [@darekbx](https://redirect.github.com/darekbx) made their first contribution in [https://github.com/takahirom/roborazzi/pull/507](https://redirect.github.com/takahirom/roborazzi/pull/507) - [@sergio-sastre](https://redirect.github.com/sergio-sastre) made their first contribution in [https://github.com/takahirom/roborazzi/pull/530](https://redirect.github.com/takahirom/roborazzi/pull/530) **Full Changelog**: https://github.com/takahirom/roborazzi/compare/1.29.0...1.30.0 **Full Changelog**: https://github.com/takahirom/roborazzi/compare/1.30.0...1.30.1 ### [`v1.30.0`](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.30.0) [Compare Source](https://redirect.github.com/takahirom/roborazzi/compare/1.29.0...1.30.0) Please refer to version [1.30.1](https://redirect.github.com/takahirom/roborazzi/releases/tag/1.30.1)Configuration
π Schedule: Branch creation - "before 4am" (UTC), 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.
π» 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.