본문으로 건너뛰기
cccskills
무료GitHub에 공개

ci-workflow-authoring

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).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구GitHub
설치 방법 보기

포함된 파일(1)

  • SKILL.md6.1 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

CI Workflow Authoring

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 architecture (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.

Environment Setup Pattern

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.

Caching Strategy

CacheImplementationNotes
GradleExact pinned gradle/actions/setup-gradle SHA from the nearest jobPreferred over hand-rolled cache blocks
Rust workspaceExact pinned Swatinem/rust-cache SHA from the nearest jobCaches native/rust -> target
Rust compiler cacheExact pinned sccache action SHA from the nearest jobUsed on native-heavy jobs
Benchmark baselinesactions/cache/restore / saveUsed by criterion baselines on PRs and main
Tool installstaiki-e/install-action@v2Used for cargo-nextest, cargo-llvm-cov, cargo-bloat

Manual Dispatch Inputs

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.

Adding or Modifying a CI Job

Checklist:

  1. Decide which workflow the job belongs in -- inspect .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.
  2. Copy environment setup from the nearest existing job instead of inventing a new setup pattern.
  3. Read the NDK version from gradle.properties; never hardcode it in YAML.
  4. Add timeout-minutes unless the job is trivially short.
  5. Use if: always() on artifact upload steps.
  6. Keep artifact names stable when downstream debugging depends on them.
  7. If the job is nightly-only, gate it explicitly on schedule or workflow_dispatch.
  8. If the job runs :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.

Job template

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 Workflow (codeql.yml)

  • Current scope is only language: actions.
  • Kotlin/Java analysis remains disabled; re-check the current workflow comment and active Kotlin version before changing that decision.
  • If re-enabling Kotlin analysis, restore explicit Android/JDK build steps rather than assuming the default CodeQL autobuild is enough.

Release Workflows (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 Workflow (mutation-testing.yml)

  • Runs cargo-mutants against the Rust workspace.
  • Exposes manual filters such as package selection and diff-only mode.
  • Produces target/mutants-output/ artifacts.

Common Mistakes

MistakeFix
Hardcoding the NDK versionRead ripdpi.nativeNdkVersion from gradle.properties
Using outdated action versions from old workflow snippetsCopy the exact pinned SHA and version comment from the nearest current workflow job
Forgetting schedule/manual gating on soak or load jobsMirror the existing `schedule
Uploading artifacts only on successUse if: always() so failure artifacts are preserved
Treating CodeQL as if Kotlin were enabledThe current workflow analyzes only GitHub Actions files
Hand-rolling emulator setup for instrumented testsUse 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

See Also

  • 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.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

po4yka/RIPDPI812026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

po4yka/RIPDPI812026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

po4yka/RIPDPI812026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

po4yka/RIPDPI812026년 10월 20일 업데이트

RIPDPI Appium failure triage: flaky tests, locator/session/wait issues, screenshot and element-tree debugging. Use when an Appium test fails or is flaky.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

po4yka/RIPDPI812026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

po4yka/RIPDPI812026년 10월 20일 업데이트

po4yka의 스킬 모두 보기

이 스킬의 문제 신고