Skip to content

Commit 1273c19

Browse files
runningcodeclaude
andauthored
Switch from Roborazzi to Paparazzi for snapshot testing (#767)
Replace Roborazzi plugin with Paparazzi for snapshot generation. This PR also updates to Gradle 9.1 because paparazzi requires it. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 55ba7c6 commit 1273c19

10 files changed

Lines changed: 23 additions & 178 deletions

File tree

β€Ž.github/workflows/android_emerge_snapshots.ymlβ€Ž

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,7 @@ on:
88
paths: [android/**]
99

1010
jobs:
11-
emerge:
12-
runs-on: ubuntu-latest
13-
14-
defaults:
15-
run:
16-
working-directory: ./android
17-
18-
steps:
19-
- uses: actions/checkout@v6
20-
with:
21-
ref: ${{ github.event.pull_request.head.sha }}
22-
- name: Set up JDK 21
23-
uses: actions/setup-java@v5
24-
with:
25-
java-version: "21"
26-
distribution: "temurin"
27-
- name: Setup Gradle build action
28-
uses: gradle/actions/setup-gradle@v6
29-
- name: Emerge snapshots
30-
run: ./gradlew :app:bundleDebug :app:emergeUploadSnapshotBundleDebug
31-
env:
32-
EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }}
33-
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }}
34-
35-
roborazzi:
11+
paparazzi:
3612
runs-on: ubuntu-latest
3713

3814
defaults:
@@ -62,8 +38,8 @@ jobs:
6238
- name: Setup gems
6339
run: gem install emerge
6440

65-
- name: Generate Roborazzi snapshots
66-
run: ./gradlew :app:recordRoborazziDebug :app:sentryUploadSnapshotsRelease
41+
- name: Generate Paparazzi snapshots
42+
run: ./gradlew :app:recordPaparazziDebug :app:sentryUploadSnapshotsDebug
6743
env:
6844
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_SENTRY_AUTH_TOKEN }}
6945

@@ -72,9 +48,10 @@ jobs:
7248
EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }}
7349
run: |
7450
emerge upload snapshots \
75-
--name "HackerNews Roborazzi" \
76-
--id "com.emerge.hackernews.roborazzi" \
51+
--name "Hacker News" \
52+
--id "com.emergetools.hackernews.debug" \
7753
--repo-name "EmergeTools/hackernews" \
54+
--tag "snapshot" \
7855
--debug \
79-
--client-library roborazzi \
56+
--client-library paparazzi \
8057
--project-root .

β€Žandroid/app/build.gradle.ktsβ€Ž

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import io.github.takahirom.roborazzi.RoborazziExtension
21
import io.sentry.android.gradle.tasks.SentryUploadSnapshotsTask
2+
import org.gradle.api.tasks.testing.Test
33
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
44

55
plugins {
@@ -10,7 +10,7 @@ plugins {
1010
alias(libs.plugins.kotlin.ksp)
1111
alias(libs.plugins.emerge)
1212
alias(libs.plugins.sentry)
13-
alias(libs.plugins.roborazzi)
13+
alias(libs.plugins.paparazzi)
1414
alias(libs.plugins.androidx.room)
1515
}
1616

@@ -56,6 +56,7 @@ android {
5656
getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
5757
)
5858
signingConfig = signingConfigs.getByName("debug")
59+
enableUnitTestCoverage = false
5960
}
6061
create("playStoreRelease") {
6162
initWith(getByName("release"))
@@ -99,10 +100,6 @@ ksp {
99100
}
100101

101102
emerge {
102-
snapshots {
103-
tag.set("snapshot")
104-
}
105-
106103
vcs {
107104
gitHub {
108105
// System.getenv override is for integration tests from the emerge-android repository
@@ -127,16 +124,13 @@ sentry {
127124
updateSdkVariants.add("beta")
128125
}
129126

130-
debug = true
131-
}
132-
133-
afterEvaluate {
134-
tasks.named<SentryUploadSnapshotsTask>("sentryUploadSnapshotsRelease") {
135-
dependsOn(tasks.named("recordRoborazziDebug"))
136-
snapshotsPath.set(
137-
project.extensions.getByType<RoborazziExtension>().outputDir
138-
)
127+
snapshots {
128+
enabled = true
129+
includePrivatePreviews = true
130+
theme = "android:Theme.Transluscent.NoTitleBar"
139131
}
132+
133+
debug = true
140134
}
141135

142136
dependencies {
@@ -171,18 +165,12 @@ dependencies {
171165
ksp(libs.androidx.room.compiler)
172166

173167
testImplementation(libs.junit)
174-
testImplementation(libs.robolectric)
175-
testImplementation(libs.roborazzi)
176-
testImplementation(libs.roborazzi.compose)
177-
testImplementation(libs.roborazzi.rule)
178168

179169
androidTestImplementation(libs.androidx.junit)
180170
androidTestImplementation(libs.androidx.espresso.core)
181171
androidTestImplementation(platform(libs.androidx.compose.bom))
182172
androidTestImplementation(libs.androidx.ui.test.junit4)
183-
androidTestImplementation(libs.emerge.snapshots)
184173

185174
debugImplementation(libs.androidx.ui.tooling)
186175
debugImplementation(libs.androidx.ui.test.manifest)
187-
188176
}

β€Žandroid/app/src/test/kotlin/BookmarksScreenComposeTest.ktβ€Ž

Lines changed: 0 additions & 71 deletions
This file was deleted.

β€Žandroid/app/src/test/kotlin/StoryRowComposeTest.ktβ€Ž

Lines changed: 0 additions & 37 deletions
This file was deleted.

β€Žandroid/build.gradle.ktsβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
alias(libs.plugins.compose.compiler) apply false
66
alias(libs.plugins.kotlin.serialization) apply false
77
alias(libs.plugins.kotlin.ksp) apply false
8-
alias(libs.plugins.roborazzi) apply false
8+
alias(libs.plugins.paparazzi) apply false
99
alias(libs.plugins.androidx.room) apply false
1010
alias(libs.plugins.sentry) apply false
1111
alias(libs.plugins.android.test) apply false

β€Žandroid/gradle/libs.versions.tomlβ€Ž

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ ksp = "2.3.6"
55
coreKtx = "1.18.0"
66
junit = "4.13.2"
77
junitVersion = "1.1.5" # This is to match Compose's version
8-
robolectric = "4.16.1"
9-
roborazzi = "1.59.0"
108
espressoCore = "3.5.0" # This is to match Compose's version
119
lifecycleRuntimeKtx = "2.10.0"
1210
activityCompose = "1.13.0"
@@ -17,8 +15,7 @@ viewmodel = "2.10.0"
1715
navigation = "2.9.7"
1816
browser = "1.10.0"
1917
emergePlugin = "4.4.0"
20-
emergeSnapshots = "1.5.1"
21-
sentry = "6.3.0"
18+
sentry = "6.4.0"
2219
shapes = "1.1.0"
2320
datastore = "1.2.1"
2421
room = "2.8.4"
@@ -61,14 +58,9 @@ retrofit-kotlinx-serialization = { group = "com.squareup.retrofit2", name = "con
6158
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }
6259
jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoup" }
6360

64-
emerge-snapshots = { group = "com.emergetools.snapshots", name = "snapshots", version.ref = "emergeSnapshots" }
65-
emerge-snapshots-runtime = { group = "com.emergetools.snapshots", name = "snapshots-runtime", version.ref = "emergeSnapshots" }
61+
emerge-snapshots-runtime = { group = "com.emergetools.snapshots", name = "snapshots-runtime", version = "1.5.1" }
6662

6763
junit = { group = "junit", name = "junit", version.ref = "junit" }
68-
robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" }
69-
roborazzi = { group = "io.github.takahirom.roborazzi", name = "roborazzi", version.ref = "roborazzi" }
70-
roborazzi-compose = { group = "io.github.takahirom.roborazzi", name = "roborazzi-compose", version.ref = "roborazzi" }
71-
roborazzi-rule = { group = "io.github.takahirom.roborazzi", name = "roborazzi-junit-rule", version.ref = "roborazzi" }
7264
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
7365
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
7466
androidx-ui-test-junit4-android = { group = "androidx.compose.ui", name = "ui-test-junit4-android", version.ref = "uiTestJunit4Android" }
@@ -82,8 +74,8 @@ compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "
8274
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
8375
kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
8476
emerge = { id = "com.emergetools.android", version.ref = "emergePlugin" }
77+
paparazzi = { id = "app.cash.paparazzi", version = "2.0.0-alpha04" }
8578
sentry = { id = "io.sentry.android.gradle", version.ref = "sentry" }
86-
roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
8779
androidx-room = { id = "androidx.room", version.ref = "room" }
8880
android-test = { id = "com.android.test", version.ref = "agp" }
8981

1.65 KB
Binary file not shown.

β€Žandroid/gradle/wrapper/gradle-wrapper.propertiesβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

β€Žandroid/gradlewβ€Ž

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žandroid/gradlew.batβ€Ž

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
Β (0)