Version Compatibility Testing #29
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: iOS | |
on: pull_request | |
jobs: | |
build-and-upload-to-appetize: | |
runs-on: macos-latest | |
timeout-minutes: 30 | |
name: Build and upload app to Appetize 🚀 | |
steps: | |
- name: Cancel previous jobs | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Git Checkout | |
uses: actions/checkout@v3 | |
- name: Select Xcode Version | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: latest-stable | |
- name: Install SSH key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.SSH_KEY }} | |
name: id_rsa_github_actions | |
known_hosts: unnecessary | |
- uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_KEY }} | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "2.6" | |
bundler-cache: true | |
- uses: actions/setup-ruby@v1 | |
with: | |
ruby-version: '2.6' | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: 'yarn' | |
- name: Add slack message builder | |
run: | | |
yarn add slack-message-builder | |
- name: Get npm cache directory | |
id: npm-cache-dir | |
run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT} | |
- name: Cache npm dependencies | |
uses: actions/cache@v3 | |
id: npm-cache | |
with: | |
path: ${{ steps.npm-cache-dir.outputs.dir }} | |
key: ${{ runner.os }}-node-${{ hashFiles('*/package-lock.json', '*/*/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Set legacy-peer-deps for npm config | |
run: | | |
npm config set legacy-peer-deps true | |
- name: Cache pods | |
uses: actions/cache@v3 | |
with: | |
path: | | |
ios/Pods | |
~/Library/Caches/CocoaPods | |
~/.cocoapods | |
key: ${{ runner.os }}-pods-${{ hashFiles('*/Podfile.lock', '*/*/Podfile.lock') }} | |
restore-keys: | | |
${{ runner.os }}-pods- | |
- name: Install packages | |
run: | | |
yarn | |
- name: Create main.jsbundle | |
run: | | |
yarn --cwd example build:ios | |
- name: Distribute the React Native iOS app on Appetize 🚀 | |
run: | | |
bundle exec fastlane ios appetize_build_and_upload | |
env: | |
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
MATCH_GIT_PRIVATE_KEY: ${{ secrets.SSH_KEY }} | |
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }} | |
FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }} | |
MATCH_KEYCHAIN_NAME: ${{ secrets.MATCH_KEYCHAIN_NAME }} | |
MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }} | |
APPETIZE_API_TOKEN: ${{ secrets.APPETIZE_API_TOKEN }} | |
SOURCE_BRANCH: ${{ github.head_ref }} | |
PR_NUMBER: ${{ github.event.pull_request.number }} | |
- uses: peter-evans/find-comment@v2 | |
if: ${{ success() }} | |
id: find_comment | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
body-includes: Appetize iOS link | |
- uses: peter-evans/create-or-update-comment@v2 | |
if: ${{ success() }} | |
with: | |
body: | | |
Appetize iOS link: ${{ env.APPETIZE_APP_URL }} | |
edit-mode: replace | |
comment-id: ${{ steps.find_comment.outputs.comment-id }} | |
issue-number: ${{ github.event.pull_request.number }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create Slack Success Summary Report | |
if: ${{ success() && github.event.pull_request.base.ref == 'master' }} | |
run: | | |
node report-scripts/appetize-success-report-script.js createAppetizeSummaryReport ${{ github.head_ref || github.ref_name }} 'RN iOS' | |
- name: Slack Success Notification | |
if: ${{ success() && github.event.pull_request.base.ref == 'master' }} | |
uses: slackapi/[email protected] | |
with: | |
channel-id: ${{ secrets.SLACK_MOBILE_SDK_CHANNEL }} | |
payload-file-path: '/var/tmp/appetize-success-link-summary.json' | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
- name: Create Slack Failure Summary Report | |
if: ${{ failure() && github.event.pull_request.base.ref == 'master' }} | |
run: | | |
node report-scripts/appetize-failure-report-script.js createAppetizeSummaryReport ${{ github.head_ref || github.ref_name }} 'RN iOS' | |
- name: Slack Notification | |
if: ${{ failure() && github.event.pull_request.base.ref == 'master' }} | |
uses: slackapi/[email protected] | |
with: | |
channel-id: ${{ secrets.SLACK_MOBILE_SDK_CHANNEL }} | |
payload-file-path: '/var/tmp/appetize-failure-link-summary.json' | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
- name: Save Simulator app | |
uses: actions/upload-artifact@v3 | |
id: save_simulator_app_id_step | |
with: | |
name: PrimerSDK_Debug_Build | |
path: /var/tmp/PrimerSDK_Debug_Build.zip | |
if-no-files-found: error | |
build-and-upload-to-browserstack: | |
runs-on: macos-latest | |
timeout-minutes: 30 | |
name: Build and upload app to BrowserStack 🚀 | |
steps: | |
- name: Cancel previous jobs | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Git Checkout | |
uses: actions/checkout@v3 | |
- name: Select Xcode Version | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: latest-stable | |
- name: Install SSH key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.SSH_KEY }} | |
name: id_rsa_github_actions | |
known_hosts: unnecessary | |
- uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_KEY }} | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "2.6" | |
bundler-cache: true | |
- uses: actions/setup-ruby@v1 | |
with: | |
ruby-version: '2.6' | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: 'yarn' | |
- name: Add slack message builder | |
run: | | |
yarn add slack-message-builder | |
- name: Get npm cache directory | |
id: npm-cache-dir | |
run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT} | |
- name: Cache npm dependencies | |
uses: actions/cache@v3 | |
id: npm-cache | |
with: | |
path: ${{ steps.npm-cache-dir.outputs.dir }} | |
key: ${{ runner.os }}-node-${{ hashFiles('*/package-lock.json', '*/*/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Set legacy-peer-deps for npm config | |
run: | | |
npm config set legacy-peer-deps true | |
- name: Cache pods | |
uses: actions/cache@v3 | |
with: | |
path: | | |
ios/Pods | |
~/Library/Caches/CocoaPods | |
~/.cocoapods | |
key: ${{ runner.os }}-pods-${{ hashFiles('*/Podfile.lock', '*/*/Podfile.lock') }} | |
restore-keys: | | |
${{ runner.os }}-pods- | |
- name: Install packages | |
run: | | |
yarn | |
- name: Create main.jsbundle | |
run: | | |
yarn --cwd example build:ios | |
- name: Distribute the React Native iOS app on Appetize 🚀 | |
run: | | |
bundle exec fastlane ios qa_release | |
env: | |
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
MATCH_GIT_PRIVATE_KEY: ${{ secrets.SSH_KEY }} | |
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }} | |
FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }} | |
MATCH_KEYCHAIN_NAME: ${{ secrets.MATCH_KEYCHAIN_NAME }} | |
MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }} | |
APPETIZE_API_TOKEN: ${{ secrets.APPETIZE_API_TOKEN }} | |
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} | |
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} | |
SOURCE_BRANCH: ${{ github.head_ref }} | |
PR_NUMBER: ${{ github.event.pull_request.number }} | |
- name: Save build log | |
uses: actions/upload-artifact@v3 | |
id: fastlane_build_log | |
if: ${{ failure() }} | |
with: | |
name: fastlane_build.log | |
path: /Users/runner/Library/Logs/gym/example_0_70_6-example_0_70_6.log | |
- name: Save Browserstack ID | |
uses: actions/upload-artifact@v3 | |
id: save_browserstack_id_step | |
with: | |
name: browserstack_id | |
path: /var/tmp/browserstack_id.txt | |
if-no-files-found: error | |
test-via-browserstack: | |
if: false # Re-enable when we have tests set up | |
runs-on: ubuntu-latest | |
needs: build-and-upload-to-browserstack | |
name: Browserstack test | |
steps: | |
- name: Clone and launch Browserstack tests via Appium 🧪 | |
run: | | |
git clone -b develop https://project_41483872_bot:[email protected]/primer-io/dx/mobile-appium-tests.git . | |
env: | |
GITLAB_TEMP_PATH: ${{ secrets.GITLAB_APPIUM_PULL_KEY }} | |
- name: Retrieve Browserstack ID | |
uses: actions/download-artifact@v3 | |
with: | |
name: browserstack_id | |
path: /var/tmp | |
- name: Setup node | |
uses: actions/setup-node@v1 | |
with: | |
node-version: 18 | |
- name: npm Install | |
run: npm install | |
- name: Run Appium Test | |
env: | |
BROWSERSTACK_USERNAME: ${{secrets.BROWSERSTACK_USERNAME}} | |
BROWSERSTACK_ACCESS_KEY: ${{secrets.BROWSERSTACK_ACCESS_KEY}} | |
run: | | |
export BROWSERSTACK_APP_ID=$(cat /var/tmp/browserstack_id.txt) | |
npx wdio config/wdio.rn.ios.bs.conf.js | |
- name: Create Slack Failed Summary Report | |
if: ${{ failure() && github.event.pull_request.base.ref == 'master' }} | |
run: | | |
node report-script/slack-failed-report-script.js createSlackFailedSummaryReport ${{ steps.slack.outputs.thread_ts }} | |
env: | |
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} | |
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} | |
- name: Post detailed summary to Slack channel thread | |
if: ${{ failure() && github.event.pull_request.base.ref == 'master' }} | |
id: slack_thread | |
uses: slackapi/[email protected] | |
with: | |
channel-id: ${{ secrets.SLACK_MOBILE_SDK_CHANNEL }} | |
payload-file-path: '/var/tmp/slack_failed_summary.json' | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
- name: Create and post Github summary | |
if: ${{ success() || failure() }} | |
run: | | |
node report-script/github-tests-summary-script.js createGithubSummaryReport | |
ios-test-rn-version-compatibility: | |
name: Test react-native version compatibility | |
needs: build-and-upload-to-browserstack | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
version: ["0.70.8", "0.72.3"] | |
steps: | |
- name: Cancel previous jobs | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Git Checkout | |
uses: actions/checkout@v3 | |
- name: Retrieve Browserstack ID | |
uses: actions/download-artifact@v3 | |
with: | |
name: browserstack_id | |
path: /var/tmp | |
- name: Select Xcode Version | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: latest-stable | |
- name: Install SSH key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.SSH_KEY }} | |
name: id_rsa_github_actions | |
known_hosts: unnecessary | |
- uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_KEY }} | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "2.6" | |
bundler-cache: true | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: 'yarn' | |
- name: Add slack message builder | |
run: | | |
yarn add slack-message-builder | |
- name: Get npm cache directory | |
id: npm-cache-dir | |
run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT} | |
- name: Cache npm dependencies | |
uses: actions/cache@v3 | |
id: npm-cache | |
with: | |
path: ${{ steps.npm-cache-dir.outputs.dir }} | |
key: ${{ runner.os }}-node-${{ hashFiles('*/package-lock.json', '*/*/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Set legacy-peer-deps for npm config | |
run: | | |
npm config set legacy-peer-deps true | |
- name: Create test app | |
run: | | |
npx react-native init testapp --version ${{matrix.version}} | |
- name: Install Primer SDK | |
run: | | |
yarn --cwd testapp add @primer-io/react-native | |
- name: CocoaPods Install | |
run: | | |
cd testapp/ios ; npx pod-install ; cd .. | |
- name: Move Testing Template Files | |
run: | | |
cp -r compat-testing/* testapp/ | |
- name: Install Appium Packages | |
working-directory: ./testapp | |
run: | | |
yarn add --dev \ | |
appium appium-xcuitest-driver \ | |
appium-uiautomator2-driver \ | |
mocha-tags \ | |
@wdio/appium-service \ | |
@wdio/browserstack-service \ | |
@wdio/cli \ | |
@wdio/local-runner \ | |
@wdio/mocha-framework \ | |
@wdio/spec-reporter \ | |
wdio-json-reporter \ | |
@babel/cli \ | |
@babel/preset-env \ | |
@babel/register \ | |
typescript \ | |
ts-node | |
- name: Run iOS bundler and build | |
working-directory: ./testapp | |
run: | | |
npx react-native run-ios | |
- name: Start Appium Server | |
working-directory: ./testapp | |
run: | | |
nohup npx appium & | |
- name: Run Compatibility Tests | |
working-directory: ./testapp | |
env: | |
BROWSERSTACK_USERNAME: ${{secrets.BROWSERSTACK_USERNAME}} | |
BROWSERSTACK_ACCESS_KEY: ${{secrets.BROWSERSTACK_ACCESS_KEY}} | |
run: | | |
export BROWSERSTACK_APP_ID=$(cat /var/tmp/browserstack_id.txt) | |
npx wdio test-config/wdio.ios.conf.js | |
- name: Create Slack Report | |
if: ${{ (success() || failure()) && github.event.pull_request.base.ref == 'master' }} | |
run: | | |
node report-scripts/test-report-script.js createSlackReport iOS | |
- name: Post summary message to a Slack channel | |
if: ${{ (success() || failure()) && github.event.pull_request.base.ref == 'master' }} | |
id: slack | |
uses: slackapi/[email protected] | |
with: | |
channel-id: ${{ secrets.SLACK_MOBILE_SDK_CHANNEL }} | |
payload-file-path: '/var/tmp/slack-minimal_summary.json' | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} |