diff --git a/.github/workflows/ios_xctest.yml b/.github/workflows/ios_xctest.yml new file mode 100644 --- /dev/null +++ b/.github/workflows/ios_xctest.yml @@ -0,0 +1,73 @@ +name: iOS XCTests + +on: + push: + branches: [master] + paths-ignore: + - 'landing/**' + - 'web/**' + - 'docs/**' + - 'keyserver/**' + +jobs: + build: + name: Run iOS XCTests + runs-on: macos-12 + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - 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 --output $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $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 list-keychain -d user -s $KEYCHAIN_PATH + + # apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + + - name: npm install -g yarn + run: npm install -g yarn + + - name: yarn --frozen-lockfile + run: yarn --frozen-lockfile + + - name: Save auth_key to file + working-directory: ./native/ios + env: + AUTH_KEY: ${{secrets.AUTH_KEY}} + run: echo "$AUTH_KEY" > AUTH_KEY.p8 + + - name: Run XCTests + working-directory: ./native/ios + env: + AUTH_KEY_ID: ${{secrets.AUTH_KEY_ID}} + AUTH_KEY_ISSUER_ID: ${{secrets.AUTH_KEY_ISSUER_ID}} + run: xcodebuild ENABLE_TESTABILITY=YES test -workspace Comm.xcworkspace -scheme Comm -destination name="iPhone 13 Pro" -configuration Release -authenticationKeyIssuerID "$AUTH_KEY_ISSUER_ID" -authenticationKeyID "$AUTH_KEY_ID" -authenticationKeyPath $PWD/AUTH_KEY.p8 + + - name: Clean up keychain and provisioning profile + if: ${{ always() }} + run: | + rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision + security delete-keychain $RUNNER_TEMP/app-signing.keychain-db