From 2035c58b9cb6299f9b9fb16a5361751e31b5bc48 Mon Sep 17 00:00:00 2001 From: Mirurin Date: Tue, 28 Apr 2026 00:18:53 +0800 Subject: [PATCH] chore: setup initial github actions workflow --- .github/workflows/ci.yml | 174 +++++++++++++++++++++++++++++++++++++++ .idea/.gitignore | 1 + 2 files changed, 175 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8b8bcb8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,174 @@ +name: CI + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main, develop ] + workflow_dispatch: + +env: + JAVA_VERSION: '21' + ANDROID_COMPILE_SDK: '37' + ANDROID_BUILD_TOOLS_VERSION: '37.0.0' + GRADLE_VERSION: '8.12' + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: 'gradle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + + - name: Run lint + run: ./gradlew lint --no-daemon --parallel + + - name: Upload lint reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: lint-reports + path: app/build/reports/lint-results-*.xml + retention-days: 7 + + test: + name: Unit Tests + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: 'gradle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + + - name: Run unit tests + run: ./gradlew testDebugUnitTest --no-daemon --parallel + + - name: Upload test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-reports + path: app/build/reports/tests/testDebugUnitTest + retention-days: 14 + + android-test: + name: Android Instrumented Tests + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: 'gradle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + + - name: Run instrumented tests + run: ./gradlew connectedDebugAndroidTest --no-daemon --parallel + + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: android-test-results + path: app/build/reports/androidTests/connected + retention-days: 14 + + build-debug: + name: Build Debug APK + runs-on: ubuntu-latest + needs: [lint, test] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: 'gradle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + + - name: Build debug APK + run: ./gradlew assembleDebug --no-daemon --parallel + + - name: Upload debug APK + uses: actions/upload-artifact@v4 + with: + name: debug-apk + path: app/build/outputs/apk/debug/app-debug.apk + retention-days: 5 + + build-release: + name: Build Release APK + runs-on: ubuntu-latest + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) + needs: [lint, test] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: 'gradle' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + + - name: Decode keystore + run: echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > release.jks + + - name: Build release APK + run: ./gradlew assembleRelease --no-daemon --parallel + env: + RELEASE_STORE_FILE: release.jks + RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }} + RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }} + RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} + + - name: Upload release APK + uses: actions/upload-artifact@v4 + with: + name: release-apk + path: app/build/outputs/apk/release/app-release.apk + retention-days: 30 \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore index 1bcf9a5..8ca85cb 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -18,6 +18,7 @@ compiler.xml vcs.xml markdown.xml .name +planningMode.xml # --- Project Structure --- libraries/