diff --git a/.github/workflows/build-ios-app.yml b/.github/workflows/build-ios-app.yml new file mode 100644 index 0000000..11f9368 --- /dev/null +++ b/.github/workflows/build-ios-app.yml @@ -0,0 +1,122 @@ +name: Build iOS app + +on: + workflow_call: + inputs: + IOS_KEY_ID: + required: true + type: string + IOS_ISSUER_ID: + required: true + type: string + IOS_APP_IDENTIFIER: + required: true + type: string + IOS_EXPORT_OPTIONS_PLIST_PATH: + required: true + type: string + IOS_DISTRIBUTE_EXTERNAL: + required: true + type: string + IOS_NOTIFY_EXTERNAL_TESTERS: + required: true + type: string + IOS_TESTERS_GROUPS: + required: true + type: string + IOS_SUBMIT_BETA_REVIEW: + required: true + type: string + FLAVOR: + required: true + type: string + secrets: + BUILD_CERTIFICATE_BASE64: + required: true + P12_PASSWORD: + required: true + BUILD_PROVISION_PROFILE_BASE64: + required: true + KEYCHAIN_PASSWORD: + required: true + APP_STORE_CONNECT_API_KEY: + required: true + +env: + IOS_KEY_ID: ${{ inputs.IOS_KEY_ID }} + IOS_ISSUER_ID: ${{ inputs.IOS_ISSUER_ID }} + IOS_APP_IDENTIFIER: ${{ inputs.IOS_APP_IDENTIFIER }} + IOS_EXPORT_OPTIONS_PLIST_PATH: ${{ inputs.IOS_EXPORT_OPTIONS_PLIST_PATH }} + IOS_DISTRIBUTE_EXTERNAL: ${{ inputs.IOS_DISTRIBUTE_EXTERNAL }} + IOS_NOTIFY_EXTERNAL_TESTERS: ${{ inputs.IOS_NOTIFY_EXTERNAL_TESTERS }} + IOS_TESTERS_GROUPS: ${{ inputs.IOS_TESTERS_GROUPS }} + IOS_SUBMIT_BETA_REVIEW: ${{ inputs.IOS_SUBMIT_BETA_REVIEW }} + FLAVOR: ${{ inputs.FLAVOR }} + IOS_BUILD_PATH: build/ios/ipa/dab.ipa + +jobs: + build: + name: Build iOS + #runs-on: macos-13 + runs-on: [self-hosted, macOS, ARM64, mr-mac] + defaults: + run: + working-directory: ios + steps: + - uses: actions/checkout@v4 +# - uses: subosito/flutter-action@v2 +# with: +# flutter-version: '3.16.8' +# channel: 'stable' +# cache: true +# - name: Install the Apple certificate and provisioning profile +# env: +# BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} +# P12_PASSWORD: ${{ secrets.P12_PASSWORD }} +# BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} +# KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} +# run: | +# # create variables +# CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 +# PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision +# KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db +# +# # import certificate and provisioning profile from secrets +# echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH +# echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH +# +# # create temporary keychain +# security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH +# security set-keychain-settings -lut 21600 $KEYCHAIN_PATH +# security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH +# +# # import certificate to keychain +# security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH +# security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH +# security list-keychain -d user -s $KEYCHAIN_PATH +# +# # apply provisioning profile +# mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles +# cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + - name: Prepare iOS auth key + run: 'echo "$API_KEY" > AuthKey.p8' + shell: bash + env: + API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }} + - name: Install Dependencies + run: flutter pub get + - name: Check app and set version + run: fastlane versioning + - name: Build ipa + run: fastlane build + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: Release ${{ env.FLAVOR }} + path: ${{ env.IOS_BUILD_PATH }} + retention-days: 1 +# - 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