diff --git a/.github/workflows/build-example-ios-for-pr.yml b/.github/workflows/build-example-ios-for-pr.yml new file mode 100644 index 00000000..df71a3b0 --- /dev/null +++ b/.github/workflows/build-example-ios-for-pr.yml @@ -0,0 +1,132 @@ +name: "build-example-ios-for-pr" + +on: + issue_comment: + types: [created] + +jobs: + build: + name: Build Example App for Specific PR + runs-on: macos-14 + + # Only run if its a PR and the comment contains: + # "run-workflow:build-example-ios-for-pr" + if: github.event.issue.pull_request && contains(github.event.comment.body, 'run-workflow:build-example-ios-for-pr') + + steps: + - name: Cancel previous runs + uses: styfle/cancel-workflow-action@0.9.1 + + - name: Get branch of PR + uses: xt0rted/pull-request-comment-branch@v1 + id: comment-branch + + - name: Checkout PR branch ${{ steps.comment-branch.outputs.head_ref }} + uses: actions/checkout@v3 + with: + ref: ${{ steps.comment-branch.outputs.head_ref }} + + - name: Add workflow link as comment on PR + uses: actions/github-script@v6 + if: always() + with: + script: | + const name = '${{ github.workflow }}'; + const url = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'; + const body = `Run GH Workflow: ${name}`; + + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: body + }) + + # Start build... + + - name: Show self-hosted machine infomation + run: uname -a + + - name: Check Xcode version + run: /usr/bin/xcodebuild -version + + - name: Checkout repo from main branch + uses: actions/checkout@v4 + + - name: Install 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 + + - uses: actions/setup-node@v4 + with: + node-version: 'v18.12.1' + cache: 'yarn' + + - name: Initialize library + run: | + yarn install + cd example + yarn install + + - name: Build JS + run: yarn run bob build + + - name: 1/4 - Run `pod-install` (fabric, static library) + run: yarn pod-install:new-static + + - name: 1/4 - Build example (fabric, static library) + run: yarn run build:ios + + - name: Clear/reset example pods + run: yarn run nuke:example-pods + + - name: 2/4 - Run `pod-install` (fabric, dynamic frameworks) + run: yarn pod-install:new-dynamic + + - name: 2/4 - Build example (fabric, dynamic frameworks) + run: yarn run build:ios + + - name: Clear/reset example pods + run: yarn run nuke:example-pods + + - name: 3/4 - Run `pod-install` (paper, static library) + run: yarn pod-install:old-static + + - name: 3/4 - Build example (paper, static library) + run: yarn run build:ios + + - name: Clear/reset example pods + run: yarn run nuke:example-pods + + - name: 4/4 - Run `pod-install` (paper, dynamic frameworks) + run: yarn pod-install:old-dynamic + + - name: 4/4 - Build example (paper, dynamic frameworks) + run: yarn run build:ios +