Skip to content

文档升级

文档升级 #13

Workflow file for this run

name: Android CI/CD
on:
push:
branches: [main, develop, 'release/*']
tags: ['v*']
pull_request:
branches: [main, develop]
workflow_dispatch:
inputs:
build_type:
description: '构建类型'
required: true
default: 'release'
type: choice
options: [debug, release]
env:
JAVA_VERSION: '21'
JAVA_DISTRIBUTION: 'temurin'
jobs:
build:
name: Build AAB & APK
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_DISTRIBUTION }}
cache: gradle
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.android/build-cache
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: gradle-${{ runner.os }}-
- name: Grant execute permission
run: chmod +x gradlew
- name: Run Tests
run: ./gradlew testDebugUnitTest
continue-on-error: true
- name: Run Lint
run: ./gradlew lint
continue-on-error: true
- name: Build Debug AAB
if: github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')
run: ./gradlew bundleDebug
- name: Build Debug APK
if: github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')
run: ./gradlew assembleDebug
- name: Decode Keystore
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || github.event.inputs.build_type == 'release')
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > app/keystore.jks
continue-on-error: true
- name: Build Release AAB
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || github.event.inputs.build_type == 'release')
run: ./gradlew bundleRelease
env:
KEYSTORE_FILE: ${{ github.workspace }}/app/keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
- name: Build Release APK
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || github.event.inputs.build_type == 'release')
run: ./gradlew assembleRelease
env:
KEYSTORE_FILE: ${{ github.workspace }}/app/keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
- name: Upload AAB
uses: actions/upload-artifact@v4
with:
name: app-bundle-${{ github.event_name == 'pull_request' && 'debug' || github.event.inputs.build_type || 'release' }}
path: app/build/outputs/bundle/**/*.aab
retention-days: 30
if: always()
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: app-apk-${{ github.event_name == 'pull_request' && 'debug' || github.event.inputs.build_type || 'release' }}
path: app/build/outputs/apk/**/*.apk
retention-days: 14
if: always()
- name: Upload Lint Report
if: always()
uses: actions/upload-artifact@v4
with:
name: lint-report
path: app/build/reports/lint-results*.html
continue-on-error: true
deploy-play-store:
name: Deploy to Play Store
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Download AAB
uses: actions/download-artifact@v4
with:
name: app-bundle-release
- name: Deploy to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_SERVICE_ACCOUNT }}
packageName: ${{ secrets.PACKAGE_NAME }}
releaseFiles: release/*.aab
track: internal
status: completed