diff --git a/.github/scripts/restore_from_base64.sh b/.github/scripts/restore_from_base64.sh new file mode 100644 index 0000000..bd3daa5 --- /dev/null +++ b/.github/scripts/restore_from_base64.sh @@ -0,0 +1,14 @@ +content="$1" +filename="$2" + +if [[ ! -n "$content" ]]; then + echo "Provide file content" + exit 1 +fi + +if [[ ! -n "$filename" ]]; then + echo "Provide a path to an output file" + exit 1 +fi + +echo -n "$content" | base64 --decode --output "$filename" diff --git a/.github/workflows/build_ipa.yml b/.github/workflows/build_ipa.yml new file mode 100644 index 0000000..d477bd8 --- /dev/null +++ b/.github/workflows/build_ipa.yml @@ -0,0 +1,71 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Build Prod .ipa + +on: + workflow_dispatch: + +jobs: + build: + name: Build .ipa + runs-on: macos-11 + timeout-minutes: 15 + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Connect private iap package + uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.M3_LIGHTMETER_IAP_KEY }} + + - uses: actions/setup-java@v2 + with: + distribution: "zulu" + java-version: "11" + + - name: Install Apple Certificate + uses: apple-actions/import-codesign-certs@v1 + with: + p12-file-base64: ${{ secrets.CERT_P12 }} + p12-password: ${{ secrets.CERT_P12_PASSWORD }} + - name: Install the provisioning profile + run: | + bash .github/scripts/restore_from_base64.sh "${{ secrets.PROVISION_PROD }}" "provision_prod.mobileprovision" + mkdir -p ~/Library/MobileDevice/profiles + cp app_store_api_key.p8 ~/Library/MobileDevice/profiles + - name: Restore AppStore Certificate + run: | + bash .github/scripts/restore_from_base64.sh "${{ secrets.CERT_P8 }}" "app_store_api_key.p8" + mkdir -p ~/Library/MobileDevice/certificates + cp app_store_api_key.p8 ~/Library/MobileDevice/certificates + + - name: Restore firebase_options.dart + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.FIREBASE_OPTIONS }}" "lib/firebase_options.dart" + + - name: Install Flutter + uses: subosito/flutter-action@v2 + with: + channel: "stable" + flutter-version: '3.10.0' + + - name: Prepare flutter project + run: | + flutter --version + flutter pub get + flutter pub run intl_utils:generate + + - name: Build .ipa + env: + FLAVOR: ${{ github.event.inputs.flavor }} + run: flutter build ipa --release --flavor $FLAVOR -t lib/main_$FLAVOR.dart + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: m3_lightmeter_${{ github.event.inputs.flavor }}_ipa + path: build/ios/ipa/lightmeter.ipa