Add --continue to the unit tests, screenshot tests, detekt and ktlint
Gradle invocations, so that a failure in one module does not prevent
the other modules from being checked, and the CI reports all the
failures at once.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The enterprise repository is private, so only mention the number of new
commits in the generated PR description.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
When a PR is merged on develop with the enterprise submodule targeting a commit
which is not on the enterprise main branch, open a PR to update it to the latest
commit of main. The workflow also runs daily and manually to keep the submodule
up to date.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Each Maestro run logs in to @maestroelement:matrix.org, and the sessions
pile up on the account. Run tools/mas/delete_all_sessions.py at the end
of the Maestro job, even if the tests failed, to end them all.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Recording rewrote every screenshot unconditionally, so renderer noise far below
the verification tolerance produced large "Update screenshots" commits.
Use `app.cash.paparazzi.overwriteOnMaxPercentDifference` to keep screenshots that
are within tolerance. Existing screenshots are no longer deleted before recording;
obsolete ones are pruned afterwards, only when their preview produced no
screenshot at all.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* Remove Roborazzi, use Paparazzi for Compound
The new screenshots will be recorded with the rest of the Paparazzi ones. Note the names changed, since Paparazzi enforces a `$packagename.$testname.$name.$extension` format
* Set a max width value for color previews
* Merge the `verifyPaparazziDebug` CI steps
* Update screenshots
---------
Co-authored-by: ElementBot <android@element.io>
* Set `maxParallelForks = 1` for most tests, except for screenshot ones
It turns out the Robolectric setup penalty compounds the more parallel JVMs you spawn. Using 1 JVM vs 8 was up to 2.5x faster in local tests.
* Split the roborazzi tests tasks config and CI step
Secrets are never exposed to pull_request runs from forks, so checkEnv.js
throws on MAESTRO_PASSWORD after a full APK build and emulator boot, and the
red check is indistinguishable from a real test failure. The existing guard
checked github.event.pull_request.fork, a field that does not exist on the
pull_request payload (it lives at head.repo.fork), so it was always true.
Gate both jobs at job level on head.repo.full_name == github.repository
(workflow_dispatch still runs), and drop the dead step-level condition.
Fixes#7653
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
With the default (queue: single), a run that finishes Build APK while
another run is already pending in the maestro-test group cancels that
pending run, which then never gets a Maestro verdict for its commit.
queue: max keeps the one-at-a-time constraint (no cancel-in-progress) and
lets up to 100 runs wait, at no runner cost.
Fixes#7654
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The PR metadata checks move to a new PR Checks workflow, and the lint,
ktlint and detekt reports are now surfaced as inline annotations from the
quality workflow. This removes the danger-js dependency, its ad-hoc npm
installs and the need for the ElementBot token, so the checks also run on
pull requests from forks.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
recordScreenshots.sh runs under `set -e`, and the `git commit -m "Update
screenshots"` at the end of it is unconditional. When a recording run
produces no diff — the common case once the snapshots are already up to
date — `git commit` exits 1 with "nothing to commit, working tree clean"
and takes the whole workflow down with it, reporting a red job for a
successful run.
Stage as before, then return early when the staged diff is empty. `set -e`
is left in place: it was added deliberately so that a failed Gradle run
cannot push a commit that deletes every snapshot. Using `git diff --cached
--quiet` as an `if` condition is `set -e`-safe, because its non-zero "there
are changes" status is consumed by the condition. The early return also
skips the push, which had nothing to send.
* Check if splitting the steps for testing and generating the reports improves performance and keeps the coverage stats
* Exclude Konsist tests and include `:app` ones
* Remove the extra dependency of `koverVerifyAll` on `:app:koverVerify{variant}`
New locales added via Localazy would change the locales line in
aaptDump.txt and break the manifest CI check if the reference file
is not kept in sync.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>