name: Android CD Release
env:
GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g -Dorg.gradle.daemon=false"
GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true
on:
push:
tags:
- "android_v_dev_*"
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: 17
- name: Setup Ruby with caching
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0
bundler-cache: true
- name: Generate key.properties
run: |
echo '${{ secrets.KEY_PROPERTIES }}' | base64 --d >> ./android/key.properties
- name: Generate local.properties
run: |
echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 --d >> ./android/local.properties
- name: Generate google-services.json
run: echo '${{ secrets.GOOGLE_SERVICE_JSON }}' | base64 --d > ./android/app/google-services.json
- name: Generate keystore.jks
run: echo '${{ secrets.JKS }}' | base64 --d > ./android/app/hiing-keystore.jks
- name: Cache Fastlane
uses: actions/cache@v3
with:
path: |
~/.bundle
~/.fastlane
key: ${{ runner.os }}-fastlane-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-fastlane-
- name: Install Fastlane
run: |
cd android
gem install bundler
bundle install
- name: Cache Flutter dependencies
uses: actions/cache@v3
with:
path: ${{ matrix.flutter_path }}
key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
${{ runner.os }}-flutter-
- name: Setup Flutter
uses: subosito/flutter-action@v1
with:
channel: 'stable'
- name: setup flutter jdk directory
run: |
flutter config --jdk-dir /opt/hostedtoolcache/Java_Corretto_jdk/17.0.13-11.1/x64
- name: Configure Git
run: |
git config --global url."https://${{ vars.USER_NAME }}:${{ secrets.TOKEN_GITHUB }}@github.com/".insteadOf "https://github.com/"
- name: Install Dependencies
run: flutter pub get
- name: Generate Config
run: |
echo '${{ secrets.CONFIG }}' | base64 --d >> ./lib/common/config.dart
- name: Android Dev Build and Upload to Firebase App Distribution
run: |
cd android
fastlane android_apk_release_app_distribution
env:
CI: true
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
FIREBASE_CLI_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }}
FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID_ANDROID_DEV }}
APP_DISTRIBUTION_GROUPS: ${{ vars.APP_DISTRIBUTION_GROUPS }}
default_platform(:android)
platform :android do
desc "Create Release APK"
lane :android_apk_release_app_distribution do
sh "flutter build apk --release --flavor dev"
firebase_app_distribution(
app: ENV['FIREBASE_APP_ID'],
firebase_cli_token: ENV['FIREBASE_CLI_TOKEN'],
groups: ENV["APP_DISTRIBUTION_GROUPS"],
android_artifact_type: "APK",
apk_path: "../build/app/outputs/flutter-apk/app-dev-release.apk",
groups: ENV["APP_DISTRIBUTION_GROUPS"]
)
slack(message: "Android Dev App Distribution 배포 완료 🎉", slack_url: ENV["SLACK_WEBHOOK_URL"])
end
error do |lane, exception, options|
# 배포 실패 시 Slack 알림
slack(
message: "Android 자동배포 실패 🥲\n #{exception}",
success: false,
slack_url: ENV["SLACK_WEBHOOK_URL"]
)
end
end
이전 포스팅들에서 자세한 설명은 모두 했기에 이번엔 패스
원래 플레이스토어에 자동배포하려면 appFile에 들어갈 json 키를 추출해야하는데, 나는 app distribution만 사용하기때문에 그 과정은 필요 없었다.
플레이 스토어에 자동배포도 구현하고싶은데 현재 플레이스토어 마스터 계정에 문제가 있어 진행할 수 없음 ㅠㅠ