Setup GitHub Actions and fastlane (#174)

This commit is contained in:
Tommy Chow 2022-08-04 23:47:08 -04:00 • committed by GitHub
parent 128c41e54a
commit d2c57921b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 317 additions and 69 deletions

64
.github/workflows/gh-release.yml vendored Normal file
View file

@ -0,0 +1,64 @@
# Drafts a GitHub release with the APK attached.
name: Draft GitHub release
on:
workflow_dispatch:
push:
tags:
- v*.*.*
jobs:
android:
name: Draft release and attach APK
runs-on: ubuntu-latest
env:
UPLOAD_KEYSTORE: ${{ secrets.UPLOAD_KEYSTORE }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
KEY_FILE_PATH: android/key.properties
CLIENT_ID: ${{ secrets.CLIENT_ID }}
SECRET: ${{ secrets.SECRET }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
steps:
- name: Checkout Frosty repo
uses: actions/checkout@v3
# Setup Java so that we can build the APK.
- name: Set up Java
uses: actions/setup-java@v2
with:
distribution: zulu
java-version: 11
# Setup and cache Flutter to install packages and build.
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
cache: true
# Decode and create the upload-keystore.jks file, used for signing the app.
- name: Decode and create upload-keystore.jks
run: echo $UPLOAD_KEYSTORE | base64 --decode > android/upload-keystore.jks
# Create the key.properties file, used for signing the app.
- name: Create key.properties
run: |
echo storePassword=$STORE_PASSWORD >> $KEY_FILE_PATH
echo keyPassword=$KEY_PASSWORD >> $KEY_FILE_PATH
echo keyAlias=upload >> $KEY_FILE_PATH
echo storeFile=upload-keystore.jks >> $KEY_FILE_PATH
# Build the APK with the environment variables and move/rename it.
- name: Build for Android
run: |
flutter build apk --dart-define CLIENT_ID=$CLIENT_ID --dart-define SECRET=$SECRET --dart-define SENTRY_DSN=$SENTRY_DSN
mv build/app/outputs/flutter-apk/app-release.apk frosty-${{ github.ref_name }}.apk
# Create a draft release on GitHub.
- name: Release
uses: softprops/action-gh-release@v1
with:
draft: true
generate_release_notes: true
files: frosty-${{ github.ref_name }}.apk

View file

@ -1,46 +0,0 @@
name: Release
# For now, have the option to run manually just to test things.
on: [workflow_dispatch]
jobs:
deploy:
name: Release/deploy the app for iOS and Android
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
- name: Futter pre-checks and install packages
run: |
flutter doctor -v
flutter pub get
flutter analyze
- name: Build for iOS and Android
env:
CLIENT_ID: ${{ secrets.CLIENT_ID }}
SECRET: ${{ secrets.SECRET }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
UPLOAD_KEYSTORE: ${{ secrets.UPLOAD_KEYSTORE }}
run: |
echo "$UPLOAD_KEYSTORE" | base64 --decode > /android/key.properties
flutter build appbundle --dart-define CLIENT_ID=$CLIENT_ID --dart-define SECRET=$SECRET --dart-define SENTRY_DSN=$SENTRY_DSN
- name: Install bundler
run: gem install bundler
- name: Install fastlane Android dependencies with bundler
run: |
cd android
bundle install
- name: Run fastlane for Android
env:
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }}
run: |
cd android
fastlane deploy

103
.github/workflows/store-release.yml vendored Normal file
View file

@ -0,0 +1,103 @@
# Builds and releases frosty on the Google Play Store and Apple App Store through fastlane.
name: Build and release Frosty
on:
# Enable the option to manually run the workflow in the Actions tab.
workflow_dispatch:
# Only run if a semver tag was pushed.
push:
tags:
- v*.*.*
# Setup environment variables for use in all jobs.
env:
# Gemfile path used for caching dependencies.
BUNDLE_GEMFILE: ${{ github.workspace }}/android/Gemfile
CLIENT_ID: ${{ secrets.CLIENT_ID }}
SECRET: ${{ secrets.SECRET }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
jobs:
android:
name: Build and release Frosty on Android
runs-on: ubuntu-latest
env:
UPLOAD_KEYSTORE: ${{ secrets.UPLOAD_KEYSTORE }}
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
KEY_FILE_PATH: android/key.properties
PLAY_STORE_CREDENTIALS: ${{ secrets.PLAY_STORE_CREDENTIALS }}
steps:
- name: Checkout Frosty repo
uses: actions/checkout@v3
# Install Ruby and install/cache dependencies with bundler in order to use fastlane.
- name: Set up Ruby and Bundler
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1
bundler-cache: true
# Setup Java so that we can build the appbundle.
- name: Set up Java
uses: actions/setup-java@v2
with:
distribution: zulu
java-version: 11
# Setup and cache Flutter to install packages and build.
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
cache: true
# Decode and create the upload-keystore.jks file, used for signing the app.
- name: Decode and create upload-keystore.jks
run: echo $UPLOAD_KEYSTORE | base64 --decode > $GITHUB_WORKSPACE/android/upload-keystore.jks
# Create the key.properties file, used for signing the app.
- name: Create key.properties
run: |
echo storePassword=$STORE_PASSWORD >> $KEY_FILE_PATH
echo keyPassword=$KEY_PASSWORD >> $KEY_FILE_PATH
echo keyAlias=upload >> $KEY_FILE_PATH
echo storeFile=$GITHUB_WORKSPACE/android/upload-keystore.jks >> $KEY_FILE_PATH
# Build the Android app bundle (AAB) and pass the environment variables.
- name: Build the Android AAB
run: flutter build appbundle --dart-define CLIENT_ID=$CLIENT_ID --dart-define SECRET=$SECRET --dart-define SENTRY_DSN=$SENTRY_DSN
# Deploy to the play store with fastlane.
- name: Deploy with fastlane
run: cd android && bundle exec fastlane deploy
ios:
name: Build and release Frosty on iOS
runs-on: macos-latest
env:
APP_STORE_KEY_ID: ${{ secrets.APP_STORE_KEY_ID }}
APP_STORE_ISSUER_ID: ${{ secrets.APP_STORE_ISSUER_ID }}
APP_STORE_CREDENTIALS: ${{ secrets.APP_STORE_CREDENTIALS }}
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
steps:
- name: Checkout Frosty repo
uses: actions/checkout@v3
# Install Ruby and install/cache dependencies with bundler in order to use fastlane.
- name: Set up Ruby and Bundler
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1
bundler-cache: true
# Setup and cache Flutter to install packages and build.
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
cache: true
# Setup the iOS project with environment variables without signing (building and signing will happen in fastlane).
- name: Config the iOS build
run: flutter build ios --no-codesign --config-only --dart-define CLIENT_ID=$CLIENT_ID --dart-define SECRET=$SECRET --dart-define SENTRY_DSN=$SENTRY_DSN
# Sign, build the app, and deploy to app store with fastlane.
- name: Sign, build, and release with fastlane
run: cd ios && bundle exec fastlane release