E2E Performance Tests #25
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: E2E Performance Tests | |
on: | |
workflow_call: | |
inputs: | |
PR_NUMBER: | |
description: A PR number to run performance tests against. If the PR is already merged, the merge commit will be used. If not, the PR will be merged locally before running the performance tests. | |
type: string | |
required: true | |
workflow_dispatch: | |
inputs: | |
PR_NUMBER: | |
description: A PR number to run performance tests against. If the PR is already merged, the merge commit will be used. If not, the PR will be merged locally before running the performance tests. | |
type: string | |
required: true | |
jobs: | |
buildDelta: | |
runs-on: ubuntu-latest | |
name: Build apk from delta ref | |
outputs: | |
DELTA_REF: ${{ steps.getDeltaRef.outputs.DELTA_REF }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Get pull request details | |
id: getPullRequestDetails | |
uses: margelo/expensify-app-fork/.github/actions/javascript/getPullRequestDetails@main | |
with: | |
GITHUB_TOKEN: ${{ github.token }} | |
PULL_REQUEST_NUMBER: ${{ inputs.PR_NUMBER }} | |
USER: margelo | |
- name: Merged PR - Get merge commit sha for the pull request | |
if: ${{ fromJSON(steps.getPullRequestDetails.outputs.IS_MERGED) }} | |
id: getMergeCommitShaIfMergedPR | |
run: | | |
MERGE_COMMIT_SHA=${{ steps.getPullRequestDetails.outputs.MERGE_COMMIT_SHA }} | |
git fetch origin "$MERGE_COMMIT_SHA" --no-tags --depth=1 | |
echo "MERGE_COMMIT_SHA=$MERGE_COMMIT_SHA" >> "$GITHUB_OUTPUT" | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Unmerged PR - Fetch head ref of unmerged PR | |
if: ${{ !fromJSON(steps.getPullRequestDetails.outputs.IS_MERGED) }} | |
run: | | |
git fetch origin ${{ steps.getPullRequestDetails.outputs.HEAD_COMMIT_SHA }} --no-tags --depth=1 | |
- name: Unmerged PR - Set dummy git credentials before merging | |
if: ${{ !fromJSON(steps.getPullRequestDetails.outputs.IS_MERGED) }} | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "Test" | |
- name: Unmerged PR - Merge pull request locally and get merge commit sha | |
if: ${{ !fromJSON(steps.getPullRequestDetails.outputs.IS_MERGED) }} | |
id: getMergeCommitShaIfUnmergedPR | |
run: | | |
git merge --no-commit ${{ steps.getPullRequestDetails.outputs.HEAD_COMMIT_SHA }} | |
git checkout ${{ steps.getPullRequestDetails.outputs.HEAD_COMMIT_SHA }} | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Determine "delta ref" | |
id: getDeltaRef | |
run: echo "DELTA_REF=${{ steps.getMergeCommitShaIfMergedPR.outputs.MERGE_COMMIT_SHA || steps.getMergeCommitShaIfUnmergedPR.outputs.MERGE_COMMIT_SHA }}" >> "$GITHUB_OUTPUT" | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Checkout "delta ref" | |
run: git checkout ${{ steps.getDeltaRef.outputs.DELTA_REF }} | |
- name: Configure MapBox SDK | |
run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }} | |
- name: Build APK | |
uses: margelo/expensify-app-fork/.github/actions/composite/buildAndroidAPK@main | |
with: | |
ARTIFACT_NAME: delta-apk-${{ steps.getDeltaRef.outputs.DELTA_REF }} | |
runTestsInAWS: | |
runs-on: ubuntu-latest | |
needs: [buildDelta] | |
name: Run E2E tests in AWS device farm | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Make zip directory for everything to send to AWS Device Farm | |
run: mkdir zip | |
- name: Download delta APK | |
uses: actions/download-artifact@e9ef242655d12993efdcda9058dee2db83a2cb9b | |
id: downloadDeltaAPK | |
with: | |
name: delta-apk-${{ needs.buildDelta.outputs.DELTA_REF }} | |
path: zip | |
- name: Rename delta APK | |
run: mv "${{steps.downloadDeltaAPK.outputs.download-path}}/app-e2eRelease.apk" "${{steps.downloadDeltaAPK.outputs.download-path}}/app-e2eRelease-compare.apk" | |
- name: Copy Delta APK as compare for testing | |
run: mv "${{steps.downloadDeltaAPK.outputs.download-path}}/app-e2eRelease-compare.apk" "${{steps.downloadDeltaAPK.outputs.download-path}}/app-e2eRelease-baseline.apk" | |
- name: Copy e2e code into zip folder | |
run: cp -r tests/e2e zip | |
- name: Zip everything in the zip directory up | |
run: zip -qr App.zip ./zip | |
- name: Configure AWS Credentials | |
uses: margelo/expensify-app-fork/.github/actions/composite/configureAwsCredentials@main | |
with: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_REGION: us-west-2 | |
- name: Schedule AWS Device Farm test run | |
uses: realm/aws-devicefarm/test-application@7b9a91236c456c97e28d384c9e476035d5ea686b | |
with: | |
name: App E2E Performance Regression Tests | |
project_arn: ${{ secrets.AWS_PROJECT_ARN }} | |
device_pool_arn: ${{ secrets.AWS_DEVICE_POOL_ARN }} | |
app_file: zip/app-e2eRelease-baseline.apk | |
app_type: ANDROID_APP | |
test_type: APPIUM_NODE | |
test_package_file: App.zip | |
test_package_type: APPIUM_NODE_TEST_PACKAGE | |
test_spec_file: tests/e2e/TestSpec.yml | |
test_spec_type: APPIUM_NODE_TEST_SPEC | |
remote_src: false | |
file_artifacts: Customer Artifacts.zip | |
cleanup: true | |
- name: Unzip AWS Device Farm results | |
if: ${{ always() }} | |
run: unzip "Customer Artifacts.zip" | |
- name: Print AWS Device Farm run results | |
if: ${{ always() }} | |
run: cat "./Host_Machine_Files/\$WORKING_DIRECTORY/output.md" | |
- name: Print AWS Device Farm verbose run results | |
if: ${{ always() && runner.debug != null && fromJSON(runner.debug) }} | |
run: cat "./Host_Machine_Files/\$WORKING_DIRECTORY/debug.log" | |
- name: Check if test failed, if so post the results and add the DeployBlocker label | |
if: ${{ github.event_name == 'workflow_call' }} | |
run: | | |
if grep -q '🔴' ./Host_Machine_Files/\$WORKING_DIRECTORY/output.md; then | |
gh pr edit ${{ inputs.PR_NUMBER }} --add-label DeployBlockerCash | |
gh pr comment ${{ inputs.PR_NUMBER }} -F ./Host_Machine_Files/\$WORKING_DIRECTORY/output.md | |
gh pr comment ${{ inputs.PR_NUMBER }} -b "@Expensify/mobile-deployers 📣 Please look into this performance regression as it's a deploy blocker." | |
else | |
echo '✅ no performance regression detected' | |
fi | |
env: | |
GITHUB_TOKEN: ${{ github.token }} |