Skip to content

CI

CI #85

Workflow file for this run

name: CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches:
- "*"
- "!gh-pages"
tags:
- "*"
pull_request:
branches:
- "*"
- "!gh-pages"
jobs:
test-xamarin:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- uses: actions/setup-dotnet@v3
with:
global-json-file: ./global.json
- working-directory: ./XamarinFormSample
run: dotnet format --verify-no-changes
test-flutter:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.10.0'
channel: 'stable'
- working-directory: flutter-example
run: |
flutter pub get
flutter test
flutter analyze --no-fatal-infos
dart format --set-exit-if-changed lib
flutter-android:
runs-on: macos-12
needs: ["xamarin-android"] # Depends on xamarin so that its version code is always bigger to allow updating
if: ${{ github.ref == 'refs/heads/main' }}
defaults:
run:
working-directory: "./flutter-example"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
# https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md#java
- name: Set java version
run: |
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
- run: npm install -g appcenter-cli
- uses: subosito/flutter-action@v2
with:
# Do _NOT_ use the latest stable as those contain breaking changes
flutter-version: '3.10.0'
channel: 'stable'
- run: flutter pub get
- run: flutter test
- run: flutter analyze --no-fatal-infos
- run: dart format --set-exit-if-changed lib
- name: Build .apk
run: |
BUILD_NUMBER=$(date +%s)
flutter build apk --build-number $BUILD_NUMBER
- name: Distribute to App Center
env:
APPCENTER_ACCESS_TOKEN: ${{ secrets.ANDROID_APPCENTER_ACCESS_TOKEN }}
run: appcenter distribute release --debug --silent --file "./build/app/outputs/flutter-apk/app-release.apk" --group "Collaborators" --app "Oursky/Authgear-Migrate-Tool-Xamarin-To-Flutter-Sample" --release-notes "flutter android"
xamarin-android:
runs-on: macos-12
needs: ["test-xamarin", "test-flutter"]
if: ${{ github.ref == 'refs/heads/main' }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-dotnet@v3
with:
global-json-file: ./global.json
- uses: actions/setup-node@v3
with:
node-version: "18.x"
- name: Set Xamarin SDK versions
run: |
# https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md
$VM_ASSETS/select-xamarin-sdk-v2.sh --mono=6.12 --ios=16.2 --android=13.2
- name: nuget restore
run: |
nuget restore ./XamarinFormSample/XamarinFormSample/XamarinFormSample.csproj
nuget restore ./XamarinFormSample/XamarinFormSample.Android/XamarinFormSample.Android.csproj
- name: Set versionCode
run: |
VERSION_CODE=$(date +%s)
sed -I "" -E 's/android:versionCode="[[:digit:]]+"/android:versionCode="'"$VERSION_CODE"'"/' XamarinFormSample/XamarinFormSample.Android/Properties/AndroidManifest.xml
- name: msbuild
run: msbuild ./XamarinFormSample/XamarinFormSample.Android/XamarinFormSample.Android.csproj /p:Configuration=Release /t:PackageForAndroid
- name: Run zipalign
run: |
BUILD_TOOLS_VERSION="35.0.0"
ls "$ANDROID_HOME/build-tools/$BUILD_TOOLS_VERSION"
"$ANDROID_HOME/build-tools/$BUILD_TOOLS_VERSION/zipalign" -p -f -v 4 ./XamarinFormSample/XamarinFormSample.Android/bin/Release/com.authgear.sdk.migratepluginexampleapp.xamarinflutter.apk "$RUNNER_TEMP/app-aligned.apk"
- name: Run apksigner
env:
ANDROID_KEYSTORE_PASSWORD: Abcd1234!
ANDROID_KEY_ALIAS: main
ANDROID_KEY_PASSWORD: Abcd1234!
run: |
BUILD_TOOLS_VERSION="35.0.0"
"$ANDROID_HOME/build-tools/$BUILD_TOOLS_VERSION/apksigner" sign \
--ks keystore-main.jks \
--ks-key-alias "$ANDROID_KEY_ALIAS" \
--ks-pass "pass:$ANDROID_KEYSTORE_PASSWORD" \
--key-pass "pass:$ANDROID_KEY_PASSWORD" \
--out "$RUNNER_TEMP/app-signed.apk" \
"$RUNNER_TEMP/app-aligned.apk"
- name: Distribute to App Center
env:
APPCENTER_ACCESS_TOKEN: ${{ secrets.ANDROID_APPCENTER_ACCESS_TOKEN }}
run: appcenter distribute release --debug --silent --file "$RUNNER_TEMP/app-signed.apk" --group "Collaborators" --app "Oursky/Authgear-Migrate-Tool-Xamarin-To-Flutter-Sample" --release-notes "xamarin android"
flutter-ios:
runs-on: macos-14
needs: ["test-xamarin", "test-flutter"] # We are not building xamarin in CD now
if: ${{ github.ref == 'refs/heads/main' }}
defaults:
run:
working-directory: "./flutter-example"
steps:
- uses: actions/checkout@v4
- run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer
- run: gem install bundler
- run: bundle install
- uses: subosito/flutter-action@v2
with:
# Do _NOT_ use the latest stable as those contain breaking changes
flutter-version: '3.10.0'
channel: 'stable'
# This action takes 1m30s to finish. Enable cache to make it shorter.
cache: true
- run: flutter pub get
- run: flutter test
- run: flutter analyze --no-fatal-infos
- run: dart format --set-exit-if-changed lib
- name: Prepare certificate and provisioning profile
env:
IOS_CERTIFICATE_BASE64: ${{ secrets.IOS_CERTIFICATE_BASE64 }}
IOS_PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_PROVISIONING_PROFILE_BASE64 }}
run: |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
echo -n "$IOS_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
echo -n "$IOS_PROVISIONING_PROFILE_BASE64" | base64 --decode -o $PP_PATH
security create-keychain -p "" $KEYCHAIN_PATH
security set-keychain-settings $KEYCHAIN_PATH
security unlock-keychain -p "" $KEYCHAIN_PATH
security import $CERTIFICATE_PATH -P "" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
- name: Build .ipa
run: |
BUILD_NUMBER=$(date +%s)
flutter build ipa --export-options-plist ./exportOptions.plist --build-number $BUILD_NUMBER
- name: Distribute to App Store Connect
env:
IOS_FASTLANE_APP_STORE_CONNECT_API_KEY_JSON_BASE64: ${{ secrets.IOS_FASTLANE_APP_STORE_CONNECT_API_KEY_JSON_BASE64 }}
run: |
export APP_STORE_CONNECT_API_KEY_FILE=$RUNNER_TEMP/app_store_connect_key.json
export APP_IPA_FILE_PATH="./build/ios/ipa/Authgear Flutter.ipa"
echo -n "$IOS_FASTLANE_APP_STORE_CONNECT_API_KEY_JSON_BASE64" | base64 --decode -o $APP_STORE_CONNECT_API_KEY_FILE
bundle exec fastlane app_testflight
#xamarin-ios is removed for now as there is no trivial way to build ios17+ xamarin app on github action.