From 4eff1f19890f1a0dcdb0d3e6f257c432b2635c8e Mon Sep 17 00:00:00 2001 From: AndyChen1024 Date: Thu, 3 Sep 2026 19:03:35 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E9=AA=8C=E8=AF=81=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E4=B8=8E=20CI=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 34 ++++++++++++++++++++++++++++ scripts/verify.sh | 49 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 scripts/verify.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..053b31d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: CI + +on: + push: + branches: [main, master] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - uses: gradle/actions/setup-gradle@v4 + + - name: Spotless check + run: ./gradlew spotlessCheck --console=plain + + - name: Unit tests + run: ./gradlew test testDebugUnitTest --console=plain + + - name: Assemble debug APK + run: ./gradlew :app:assembleDebug --console=plain + + - name: Architecture check + run: ./gradlew verifyArchitecture --console=plain + + - name: Lint + run: ./gradlew lintDebug --console=plain diff --git a/scripts/verify.sh b/scripts/verify.sh new file mode 100644 index 0000000..8edb7c6 --- /dev/null +++ b/scripts/verify.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# verify.sh — 确定性验证脚本(harness-engineering) +# 用法:bash scripts/verify.sh +# 任何一步失败即非零退出;所有成功声明以本脚本的新鲜输出为证据。 +set -euo pipefail + +cd "$(dirname "$0")/.." + +echo "==> 1/6 检查必需文件" +required_files=( + "AGENTS.md" + "README.md" + "docs/architecture.md" + "docs/conventions.md" + "docs/testing.md" + "docs/deployment.md" + "docs/progress.md" + "docs/decisions/0001-multi-module-nia.md" + "docs/decisions/0002-convention-plugins-and-version-catalog.md" + "docs/decisions/0003-toolchain-and-versions.md" + "docs/decisions/0004-package-name.md" + "gradle/libs.versions.toml" + "build-logic/convention/build.gradle.kts" + ".editorconfig" +) +for f in "${required_files[@]}"; do + if [[ ! -f "$f" ]]; then + echo "缺失必需文件: $f" >&2 + exit 1 + fi +done +echo " OK" + +echo "==> 2/6 spotlessCheck(确定性格式化)" +./gradlew spotlessCheck --console=plain + +echo "==> 3/6 单元测试(JVM + Android)" +./gradlew test testDebugUnitTest --console=plain + +echo "==> 4/6 构建调试 APK" +./gradlew :app:assembleDebug --console=plain + +echo "==> 5/6 架构检查(模块依赖方向)" +./gradlew verifyArchitecture --console=plain + +echo "==> 6/6 Android Lint" +./gradlew lintDebug --console=plain + +echo "✅ 全部通过"