Skip to content

CI

CI #828

Workflow file for this run

---
name: CI
on:
workflow_dispatch:
pull_request:
push:
branches:
- master
env:
FLUTTER_VERSION: 3.24.0
jobs:
linting:
name: Linting
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Flutter version
run: flutter --version
- name: Dart format
run: dart format --set-exit-if-changed .
- name: Flutter analyze
run: flutter analyze
testing:
name: Testing
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Flutter version
run: flutter --version
- name: Flutter test
run: flutter test -r expanded
integration-ios:
name: Integration Testing - iOS
runs-on: macos-13
steps:
- name: "List all simulators"
run: "xcrun xctrace list devices"
- name: "Start Simulator"
env:
DEVICE: ${{ vars.IOS_SIMULATOR }}
run: |
UDID=$(xcrun xctrace list devices | grep "^$DEVICE (" | awk '{gsub(/[()]/,""); print $NF}')
echo $UDID
xcrun simctl boot "${UDID:?No Simulator with this name found}"
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Cache build files
uses: irgaly/xcode-cache@v1
with:
key: build-pubspec-${{ runner.os }}-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
build-pubspec-${{ runner.os }}
- name: Install Flutter dependencies
run: flutter pub get
- name: Run integration tests
run: |
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/main.dart
- name: Upload Artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: screenshots
path: screenshots
deploy-ios:
name: Deploy - iOS
needs: [linting, testing]
# Don't try multiple builds concurrently,
# because build numbers would conflict.
concurrency: deploy-ios
if: | # Don't deploy on draft PRs
github.event_name == 'workflow_dispatch'
|| (github.event_name == 'push' && github.ref == 'refs/heads/master')
|| (github.event_name == 'pull_request' && !github.event.pull_request.draft)
runs-on: macos-13
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Cache build files
uses: irgaly/xcode-cache@v1
with:
key: build-pubspec-${{ runner.os }}-${{ hashFiles('**/pubspec.lock') }}
restore-keys: |
build-pubspec-${{ runner.os }}
- name: Flutter version
run: flutter --version
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
ruby-version: 3.3.4
- name: Decode secrets
env:
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
run: |
echo $APPLE_API_KEY | base64 --decode > $GITHUB_WORKSPACE/app-store.p8
- name: Build app
env:
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
MATCH_GIT_PRIVATE_KEY: ${{ secrets.PASSWORDS_REPO_DEPLOY_KEY }}
THALIA_OAUTH_APP_ID: ${{ secrets.THALIA_OAUTH_APP_ID }}
THALIA_OAUTH_APP_SECRET: ${{ secrets.THALIA_OAUTH_APP_SECRET }}
TOSTI_API_HOST: ${{ vars.TOSTI_API_HOST }}
TOSTI_OAUTH_APP_ID: ${{ secrets.TOSTI_OAUTH_APP_ID }}
TOSTI_OAUTH_APP_SECRET: ${{ secrets.TOSTI_OAUTH_APP_SECRET }}
CHANGELOG: ${{ github.ref }}
run: bundle exec fastlane ios deploy_internal changelog:"$CHANGELOG"
deploy-android:
name: Deploy - Android
needs: [linting, testing]
# Don't try multiple builds concurrently,
# because build numbers would conflict.
concurrency: deploy-android
if: | # Don't deploy on draft PRs
github.event_name == 'workflow_dispatch'
|| (github.event_name == 'push' && github.ref == 'refs/heads/master')
|| (github.event_name == 'pull_request' && !github.event.pull_request.draft)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Checkout passwords repo
uses: actions/checkout@v3
with:
repository: svthalia/ThaliApp-passwords
path: thaliapp-passwords
ssh-key: ${{ secrets.PASSWORDS_REPO_DEPLOY_KEY }}
- name: Decode secrets
env:
GOOGLE_PLAY_CONFIG: ${{ secrets.GOOGLE_PLAY_CONFIG_JSON }}
RELEASE_CONFIG_STORE_PASS: ${{ secrets.ANDROID_RELEASE_CONFIG_STORE_PASS }}
RELEASE_CONFIG_KEY_PASS: ${{ secrets.ANDROID_RELEASE_CONFIG_KEY_PASS }}
RELEASE_CONFIG_KEY_ALIAS: ${{ vars.ANDROID_RELEASE_CONFIG_KEY_ALIAS }}
run: |
echo $GOOGLE_PLAY_CONFIG > $GITHUB_WORKSPACE/google-play.json
echo "storeFile=$GITHUB_WORKSPACE/thaliapp-passwords/upload.keystore" > $GITHUB_WORKSPACE/android/key.properties
echo "storePassword=$RELEASE_CONFIG_STORE_PASS" >> $GITHUB_WORKSPACE/android/key.properties
echo "keyPassword=$RELEASE_CONFIG_KEY_PASS" >> $GITHUB_WORKSPACE/android/key.properties
echo "keyAlias=$RELEASE_CONFIG_KEY_ALIAS" >> $GITHUB_WORKSPACE/android/key.properties
- name: Setup JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: zulu
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Flutter version
run: flutter --version
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
ruby-version: 3.3.4
- name: Gradle cache
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build app
env:
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
THALIA_OAUTH_APP_ID: ${{ secrets.THALIA_OAUTH_APP_ID }}
THALIA_OAUTH_APP_SECRET: ${{ secrets.THALIA_OAUTH_APP_SECRET }}
TOSTI_API_HOST: ${{ vars.TOSTI_API_HOST }}
TOSTI_OAUTH_APP_ID: ${{ secrets.TOSTI_OAUTH_APP_ID }}
TOSTI_OAUTH_APP_SECRET: ${{ secrets.TOSTI_OAUTH_APP_SECRET }}
SUPPLY_UPLOAD_MAX_RETRIES: ${{ vars.SUPPLY_UPLOAD_MAX_RETRIES }}
run: bundle exec fastlane android deploy_internal