RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Add or modify a GitHub Actions job. Use when editing a file under .github/workflows/. Not for running a workflow locally (local-ci-act) or release signing (release-signing).
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Workflow count, jobs, dispatch inputs, action versions, and concurrency rules
are source-controlled in .github/workflows/. Inspect the current manifests
and copy the nearest existing job; do not maintain a second hand-written
inventory here.
ci.yml)Derive the current job graph, triggers, dispatch inputs, and concurrency:
policy directly from .github/workflows/ci.yml; these change too often for a
second inventory here.
Most Android/native jobs reuse .github/actions/setup-android-rust. Copy that
composite action or the nearest current job, including every exact action SHA;
never substitute a floating tag from an example.
| Cache | Implementation | Notes |
|---|---|---|
| Gradle | Exact pinned gradle/actions/setup-gradle SHA from the nearest job | Preferred over hand-rolled cache blocks |
| Rust workspace | Exact pinned Swatinem/rust-cache SHA from the nearest job | Caches native/rust -> target |
| Rust compiler cache | Exact pinned sccache action SHA from the nearest job | Used on native-heavy jobs |
| Benchmark baselines | actions/cache/restore / save | Used by criterion baselines on PRs and main |
| Tool installs | taiki-e/install-action@v2 | Used for cargo-nextest, cargo-llvm-cov, cargo-bloat |
Derive the current inputs from the workflow_dispatch.inputs mapping in
ci.yml; it changes as optional lanes evolve. Typical inputs include:
workflow_dispatch:
inputs:
soak_profile: smoke|full
run_maestro_smoke: true|false
run_appium_smoke: true|false
If you add a new manual-only lane, wire its input into both the job if: condition and the step logic that consumes it.
Checklist:
.github/workflows/ for the current file list and pick the nearest match; the repo has grown well past a small fixed set and this skill does not maintain a second inventory of it.gradle.properties; never hardcode it in YAML.timeout-minutes unless the job is trivially short.if: always() on artifact upload steps.schedule or workflow_dispatch.:app or :baselineprofile instrumented tests, use the Gradle Managed Device pattern: a <device>...AndroidTest task plus the shared device registry in build-logic/convention/src/main/kotlin/RipDpiManagedDevices.kt (see the android-instrumented-tests and android-macrobenchmark jobs). Specialized emulator lanes (journeys, relay-smoke, network-e2e) still use the scripts/ci/start-android-emulator.sh harness.my-new-job:
needs: [build]
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@<copy-exact-pinned-sha-from-nearest-job>
- uses: ./.github/actions/setup-android-rust
- name: Run tests
run: ./gradlew :module:testDebugUnitTest
- uses: actions/upload-artifact@<copy-exact-pinned-sha-from-nearest-job>
if: always()
with:
name: my-results
path: module/build/reports/
retention-days: 7
codeql.yml)language: actions.release-candidate.yml, release.yml)These are two separate workflows with different triggers -- do not conflate them:
release-candidate.yml is workflow_dispatch-triggered. It decodes the base64 keystore secret and runs the flavor-qualified Play/Fdroid/Github release tasks to produce a signed candidate artifact.release.yml is triggered only by v* tag pushes (no manual dispatch). It verifies the tag against an already-successful release-candidate.yml run and promotes that exact, already-signed candidate; it never touches the keystore secret and never runs an assemble task itself.This skill owns CI job authoring, not the release contract. For signing, R8 keep-rule, and versioning details, read the release-signing skill; for the gated multi-phase prepare-integrate-produce-publish procedure and its authorization boundaries, read the ripdpi-release skill.
mutation-testing.yml)cargo-mutants against the Rust workspace.target/mutants-output/ artifacts.| Mistake | Fix |
|---|---|
| Hardcoding the NDK version | Read ripdpi.nativeNdkVersion from gradle.properties |
| Using outdated action versions from old workflow snippets | Copy the exact pinned SHA and version comment from the nearest current workflow job |
| Forgetting schedule/manual gating on soak or load jobs | Mirror the existing `schedule |
| Uploading artifacts only on success | Use if: always() so failure artifacts are preserved |
| Treating CodeQL as if Kotlin were enabled | The current workflow analyzes only GitHub Actions files |
| Hand-rolling emulator setup for instrumented tests | Use the Gradle Managed Device pattern (RipDpiManagedDevices.kt + a <device>...AndroidTest task); reserve scripts/ci/start-android-emulator.sh for the journeys/relay/network-e2e lanes |
local-ci-act skill -- local workflow execution with act.release-signing skill -- release signing and R8 details.dependency-update skill -- version changes that affect workflow setup.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
RIPDPI's own Compose conventions: ViewModel pattern, Route/Screen split, DataStore->StateFlow, RipDpiThemeTokens. Use for how this app does Compose, not generic Compose API questions (see compose).
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
ADB-based RIPDPI device/emulator debugging: build/install/launch, logcat filtering, fixture port-forwarding, instrumented tests, crash/ANR triage. Use when debugging on a real device or emulator.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
RIPDPI Appium launch-contract reference: start routes and permission/service/data presets. Use when a test launches to the wrong screen or a new automation route is added. General flakiness: appium-test-debug.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
RIPDPI Appium test authoring: page objects, resource-id locators, assertions, wait tiers. Use when writing a new Appium test or page object, or adding coverage for a new screen.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
RIPDPI Appium failure triage: flaky tests, locator/session/wait issues, screenshot and element-tree debugging. Use when an Appium test fails or is flaky.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Conservative review of end-user legal exposure from diagnostics targets and probe hosts, by jurisdiction. Use when shipping or editing diagnostics target lists, probe hosts, or bootstrap endpoints.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.