diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 77adcbe..28df9cf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -69,10 +69,10 @@ jobs: - 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" + 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"] + needs: ["test-xamarin", "test-flutter"] if: ${{ github.ref == 'refs/heads/main' }} steps: - uses: actions/checkout@v3 @@ -118,4 +118,118 @@ jobs: - 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" + 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-13 + needs: ["xamarin-ios"] # Depends on xamarin so that its version code is always bigger to allow updating + if: ${{ github.ref == 'refs/heads/main' }} + defaults: + run: + working-directory: "./example" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: "./.tool-versions" + - run: sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer + - run: npm install -g appcenter-cli + - uses: subosito/flutter-action@v2 + with: + # This has to be kept in sync with .tool-versions + flutter-version: '3.24.2' + 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 Center + env: + APPCENTER_ACCESS_TOKEN: ${{ secrets.IOS_APPCENTER_ACCESS_TOKEN }} + run: appcenter distribute release --debug --silent --file "./build/ios/ipa/Authgear Flutter.ipa" --store "App Store Connect Users" --app "Oursky/Authgear-Migrate-Tool-Xamarin-To-Flutter-Sample" --release-notes "flutter ios" + xamarin-ios: + runs-on: macos-12 + needs: ["test-xamarin", "test-flutter"] + if: ${{ github.ref == 'refs/heads/main' }} + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: "18.x" + - uses: actions/setup-dotnet@v3 + with: + global-json-file: ./global.json + # `select-xamarin-sdk-v2.sh --mono` set /Library/Frameworks/Mono.framework/Versions/Current + # Tools like `msbuild`, `nuget` comes from /Library/Frameworks/Mono.framework/Versions/Current/Commands/ + - run: npm install -g appcenter-cli + - 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 + - run: sudo xcode-select -s /Applications/Xcode_14.2.app/Contents/Developer + - name: nuget restore + run: | + nuget restore ./XamarinFormSample/XamarinFormSample/XamarinFormSample.csproj + nuget restore ./XamarinFormSample/XamarinFormSample.iOS/XamarinFormSample.iOS.csproj + - name: Install the Apple 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: Set CFBundleVersion + run: | + BUILD_NUMBER=$(date +%s) + /usr/libexec/Plistbuddy -c "Set CFBundleVersion $BUILD_NUMBER" ./XamarinFormSample/XamarinFormSample.iOS/Info.plist + - name: msbuild + run: msbuild ./XamarinFormSample/XamarinFormSample.iOS/XamarinFormSample.iOS.csproj /p:Configuration=Release /p:Platform=iPhone /p:BuildIpa=true /t:Rebuild /p:IpaPackageDir="$RUNNER_TEMP" + - name: Distribute to App Center + env: + APPCENTER_ACCESS_TOKEN: ${{ secrets.IOS_APPCENTER_ACCESS_TOKEN }} + run: appcenter distribute release --debug --silent --file "$RUNNER_TEMP/XamarinFormSample.iOS.ipa" --store "App Store Connect Users" --app "Oursky/Authgear-Migrate-Tool-Xamarin-To-Flutter-Sample" --release-notes "no release notes" + - name: Clean up keychain and provisioning profile + if: ${{ always() }} + run: | + security delete-keychain $RUNNER_TEMP/app-signing.keychain-db + rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision diff --git a/XamarinFormSample/XamarinFormSample.iOS/XamarinFormSample.iOS.csproj b/XamarinFormSample/XamarinFormSample.iOS/XamarinFormSample.iOS.csproj index 2a403aa..d1edf49 100644 --- a/XamarinFormSample/XamarinFormSample.iOS/XamarinFormSample.iOS.csproj +++ b/XamarinFormSample/XamarinFormSample.iOS/XamarinFormSample.iOS.csproj @@ -27,7 +27,7 @@ x86_64 None true - Authgear Demo Xamarin Dev + authgear-tool-migrate-xamarin-flutter DEV iPhone Developer Entitlements.plist @@ -39,7 +39,7 @@ 4 None x86_64 - Authgear Demo Xamarin + authgear-tool-migrate-xamarin-flutter PROD Apple Distribution: Oursky Limited (M7HB6C3N6X) Entitlements.plist