Update repo checkout (#37) #37
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: IR Engine Native App Deployment | |
permissions: | |
id-token: write | |
contents: write | |
deployments: write | |
on: | |
workflow_dispatch: | |
inputs: | |
overwrite_screenshots: | |
description: 'Overwrite existing screenshots with output of test run' | |
default: false | |
required: false | |
type: boolean | |
push: | |
branches: | |
- dev | |
jobs: | |
build_ios_app: | |
runs-on: macos-latest | |
steps: | |
- name: check Xcode version | |
run: /usr/bin/xcodebuild -version | |
- name: checkout repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
- name: Install the Apple certificate and provisioning profile | |
env: | |
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} | |
P12_PASSWORD: ${{ secrets.P12_PASSWORD }} | |
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} | |
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 | |
./scripts/decrypt-provisioning-profile.sh | |
cat $HOME/secrets/irengine-profile-base64.txt | 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 list-keychain -d user -s $KEYCHAIN_PATH | |
# apply provisioning profile | |
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles | |
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles | |
- name: Checkout test project repo | |
uses: actions/checkout@v4 | |
with: | |
repository: hmallen99/irpro-mariale | |
token: ${{ secrets.MARIALE_ACCESS_TOKEN }} | |
path: packages/projects/projects/theinfinitereality/irpro-mariale | |
- name: build javascript bundle | |
run: | | |
npm install | |
cd packages/clientNative | |
npm run build:ios:release | |
- uses: actions/cache/restore@v4 | |
id: cache-xcarchive | |
with: | |
path: ./packages/clientNative/clientNative.xcarchive | |
key: ${{ runner.os }}-${{ hashFiles('**/Podfile.lock') }} | |
- name: build archive | |
if: steps.cache-xcarchive.outputs.cache-hit != 'true' | |
run: | | |
cd packages/clientNative | |
pod install --project-directory=ios | |
xcodebuild -scheme "clientNative" \ | |
-archivePath "clientNative.xcarchive" \ | |
-workspace ios/clientNative.xcworkspace \ | |
-configuration Release \ | |
-sdk iphoneos \ | |
-destination generic/platform=iOS \ | |
-allowProvisioningUpdates \ | |
DEVELOPMENT_TEAM=${{ secrets.DEVELOPMENT_TEAM_ID }} \ | |
clean archive | |
- uses: actions/cache/save@v4 | |
with: | |
path: ./packages/clientNative/clientNative.xcarchive | |
key: ${{ steps.cache-xcarchive.outputs.cache-primary-key }} | |
- name: export ipa | |
run: | | |
cd packages/clientNative | |
ls | |
xcodebuild -exportArchive -archivePath clientNative.xcarchive -exportOptionsPlist clientNative.xcarchive/Info.plist -exportPath ${{ runner.temp }}/build | |
- name: Upload application | |
uses: actions/upload-artifact@v4 | |
with: | |
name: IREngineApp | |
path: ${{ runner.temp }}/build/clientNative.ipa | |
retention-days: 1 | |
- name: Upload source maps | |
uses: actions/upload-artifact@v4 | |
with: | |
name: IREngineBundle | |
path: packages/clientNative/main.jsbundle.map | |
retention-days: 30 | |
screenshot_test: | |
runs-on: ubuntu-latest | |
needs: build_ios_app | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- name: Use Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
- name: Install dependencies | |
run: npm install | |
- uses: actions/cache/restore@v4 | |
id: cache-screenshots | |
with: | |
path: packages/screenshot-testing/expectedScreenshots | |
key: ${{ runner.os }}-expected-screenshots-${{ hashFiles('packages/screenshot-testing/**/*.png') }} | |
restore-keys: | | |
${{ runner.os }}-expected-screenshots-${{ hashFiles('packages/screenshot-testing/**/*.png') }} | |
${{ runner.os }}-expected-screenshots | |
- name: Create Appium Test Zip | |
run: npm run bundle -w screenshot-testing | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ secrets.DEVICE_FARM_IAM_ARN }} | |
aws-region: us-west-2 | |
- name: Download IPA | |
uses: actions/download-artifact@v4 | |
with: | |
name: IREngineApp | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Screenshot Test | |
id: run-benchmark | |
uses: aws-actions/[email protected] | |
with: | |
run-settings-json: | | |
{ | |
"name": "GitHubAction-${{ github.workflow }}_${{ github.run_id }}_${{ github.run_attempt }}", | |
"projectArn": "TestApp", | |
"appArn": "clientNative.ipa", | |
"devicePoolArn": "SmallDevicePool", | |
"executionConfiguration": { | |
"jobTimeoutMinutes": 40 | |
}, | |
"test": { | |
"type": "APPIUM_NODE", | |
"testPackageArn": "packages/screenshot-testing/MyTests.zip", | |
"testSpecArn": "packages/screenshot-testing/testSpec.yaml" | |
} | |
} | |
artifact-types: ALL | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ScreenshotTestOutputFiles | |
path: ${{ steps.run-benchmark.outputs.artifact-folder }} | |
- name: Install ImageMagick | |
run: | | |
sudo apt-get install imagemagick | |
- name: Extract screenshots from artifacts | |
run: | | |
./scripts/unzipArchive.sh ${{ steps.run-benchmark.outputs.artifact-folder }} packages/screenshot-testing/screenshots | |
- name: Compare Screenshots | |
run: npm run screenshot-test -w screenshot-testing | |
- uses: actions/cache/save@v4 | |
if: failure() && inputs.overwrite_screenshots | |
with: | |
path: packages/screenshot-testing/screenshots | |
key: ${{ runner.os }}-expected-screenshots-${{ hashFiles('packages/screenshot-testing/**/*.png') }} |