~ knotless Search/
↑↓ move↵ open⇧↵ all results

grain.social/grain-android

1 collaborator
0
1

Pulls check that the debug app builds

Merged
Merged chadtmiller.com asked to merge into main from grain.social/grain-android:ci/workflows

What changes

build.yml is a second workflow beside test.yml. It runs :app:assembleDebug on pushes to main and on pulls into it. It uses test.yml's image, Android SDK setup, caches and Gradle memory settings, so the two share the SDK and Gradle caches and run as two jobs side by side.

Why

test.yml already runs the JVM tests and the coverage gate, but nothing checked that the app still assembles. The debug build is signed with the SDK's debug key, so it needs no keystore and no secret. The release build stays out, as test.yml explains: R8 takes about an hour.

How it was checked

Only on the runner: nothing was built locally. At this head, build passes in about 5 minutes (the debug build is 4m50s of it) and test passes beside it.

Shortcomings

Android lint is left out. :app:lintDebug fails on main as it is, with 8 errors and 106 warnings: MissingPermission at data/push/GrainMessagingService.kt:64 (a call that needs a runtime permission without checking it or catching SecurityException), and seven ViewModelConstructorInComposable ("Constructing a view model in a composable"). It ran on an earlier head of this pull. Once those are fixed or put in a lint baseline, it is one more step after the build: ./gradlew $GRADLE_FLAGS :app:lintDebug, as build.yml's header says.

Instrumented tests (app/src/androidTest) are not run: the runner has no emulator.

The workflow runs on pushes to main and on pulls into main, the same as test.yml, not on pushes to every branch: a pull's branch would then run twice.

🤖 Generated with Claude Code

chadtmiller.com added 1 commit
Approved

This adds build.yml, which runs :app:assembleDebug and then :app:lintDebug on pushes to main and on pulls into it. The image, SDK setup, caches and triggers match test.yml, and I found nothing wrong in it.

Two things to know:

  • Checks not finished: the build check was still running when I read it, and test was queued. Lint runs with no baseline, so any existing lint error on main will fail the first run. Check that run before merging.
  • Encoding flag: test.yml passes -Dfile.encoding=UTF-8 in its jvmargs and this workflow's GRADLE_FLAGS doesn't. That is probably harmless for assemble and lint. If the build shows encoding trouble, add the flag.
chadtmiller.com added 1 commit
Approved

This adds build.yml, which runs :app:assembleDebug and then :app:lintDebug on pushes to main and on pulls into it. Compared with the last round, the lint step now prints the Error-severity findings from the XML report when lint fails, so a failure can be read from the log. I found nothing wrong with that.

My earlier note about -Dfile.encoding=UTF-8 is still open. It is probably harmless, so I'm not asking for it.

Both checks were still unfinished when I read them: build was running and test was queued. Lint has no baseline, so an existing lint error on main would fail the first run. Check that run before merging.

Approved

This round removes the lint step. Lint found 8 errors on main (MissingPermission, and seven ViewModelConstructorInComposable), so build.yml now only runs :app:assembleDebug, and a comment explains how to add lint back. I found nothing wrong with the workflow itself.

Two things before you merge:

  • Stale title and body: both still say the workflow runs :app:lintDebug, and the "Shortcomings" section still describes lint running with no baseline. Update them to say lint is left out until main passes it.
  • Checks not finished: build and test were both still queued when I read them. Confirm the assemble step passes.

My earlier note about -Dfile.encoding=UTF-8 is still open. It is probably harmless, so I'm not asking for it.

Title and body now say lint is left out, with its 8 errors. Checks at 4d22369: build passes in 5m16s, test passes. On -Dfile.encoding=UTF-8: left out on purpose. GRADLE_FLAGS is expanded unquoted, so a jvmargs value with a space in it would split into two arguments, and the build passed without it: Kotlin and AGP read sources as UTF-8 whatever the JVM default. If it is ever needed it belongs in gradle.properties for both workflows rather than here.

Merged as 4d22369