Skip to content

Commit 904a154

Browse files
authored
Merge pull request Expensify#77823 from Expensify/yuwen-validatePRNumbers
Make sure we verify that input is a PR number in testBuild.yml rather than a URL
2 parents f463690 + 5f2e9e5 commit 904a154

1 file changed

Lines changed: 53 additions & 26 deletions

File tree

.github/workflows/testBuild.yml

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ on:
44
workflow_dispatch:
55
inputs:
66
# If not specified, only build iOS and Android apps from the main branch of Expensify/App
7-
APP_PULL_REQUEST_NUMBER:
8-
description: Expensify/App PR number for correct placement of apps. Default to main.
7+
APP_PULL_REQUEST_URL:
8+
description: The Expensify/App pull request URL (e.g., https://github.com/Expensify/App/pull/12345). Defaults to main.
99
required: false
1010
default: ''
11-
# Pull Request number from Mobile-Expensify repo for correct placement of OD app. It will take precedence over MOBILE-EXPENSIFY from App's PR description if both are specified. If nothing is specified defaults to Mobile-Expensify's main
12-
MOBILE_EXPENSIFY_PULL_REQUEST_NUMBER:
13-
description: Expensify/Mobile-Expensify PR number. Defaults to main. Overrides MOBILE-EXPENSIFY set in App's PR description.
11+
# Pull Request URL from Mobile-Expensify repo for correct placement of OD app. It will take precedence over MOBILE-EXPENSIFY from App's PR description if both are specified. If nothing is specified defaults to Mobile-Expensify's main
12+
MOBILE_EXPENSIFY_PULL_REQUEST_URL:
13+
description: The Expensify/Mobile-Expensify pull request URL. Defaults to main. Overrides MOBILE-EXPENSIFY set in App's PR description.
1414
required: false
1515
default: ''
1616
REVIEWED_CODE:
@@ -35,15 +35,13 @@ on:
3535
type: boolean
3636
default: true
3737

38-
env:
39-
# This variable is needed for fastlane to construct correct path
40-
PULL_REQUEST_NUMBER: ${{ inputs.APP_PULL_REQUEST_NUMBER || github.event.number }}
41-
4238
jobs:
4339
prep:
4440
runs-on: ubuntu-latest
4541
outputs:
4642
APP_REF: ${{ steps.getHeadRef.outputs.REF || 'main' }}
43+
APP_PR_NUMBER: ${{ steps.extractAppPRNumber.outputs.PR_NUMBER }}
44+
MOBILE_PR_NUMBER: ${{ steps.extractMobilePRNumber.outputs.PR_NUMBER }}
4745
steps:
4846
- name: Checkout
4947
# v4
@@ -61,15 +59,37 @@ jobs:
6159
echo "::error::🕵️‍♀️ Please carefully review the pull request before running a test build to ensure it does not contain any malicious code"
6260
exit 1
6361
62+
- name: Extract App PR number from URL
63+
id: extractAppPRNumber
64+
if: ${{ inputs.APP_PULL_REQUEST_URL != '' }}
65+
run: |
66+
PR_NUMBER=$(echo '${{ inputs.APP_PULL_REQUEST_URL }}' | sed -E 's|.*/pull/([0-9]+).*|\1|')
67+
if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then
68+
echo "::error::❌ Could not extract PR number from URL. Please provide a valid GitHub PR URL (e.g., https://github.com/Expensify/App/pull/12345)"
69+
exit 1
70+
fi
71+
echo "PR_NUMBER=$PR_NUMBER" >> "$GITHUB_OUTPUT"
72+
73+
- name: Extract Mobile-Expensify PR number from URL
74+
id: extractMobilePRNumber
75+
if: ${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_URL != '' }}
76+
run: |
77+
PR_NUMBER=$(echo '${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_URL }}' | sed -E 's|.*/pull/([0-9]+).*|\1|')
78+
if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then
79+
echo "::error::❌ Could not extract PR number from URL. Please provide a valid GitHub PR URL (e.g., https://github.com/Expensify/Mobile-Expensify/pull/12345)"
80+
exit 1
81+
fi
82+
echo "PR_NUMBER=$PR_NUMBER" >> "$GITHUB_OUTPUT"
83+
6484
- name: Check if App pull request number is correct
6585
if: ${{ github.event_name == 'workflow_dispatch' }}
6686
id: getHeadRef
6787
run: |
6888
set -e
69-
if [ -z "${{ inputs.APP_PULL_REQUEST_NUMBER }}" ]; then
89+
if [ -z "${{ steps.extractAppPRNumber.outputs.PR_NUMBER }}" ]; then
7090
echo "REF=" >> "$GITHUB_OUTPUT"
7191
else
72-
echo "REF=$(gh pr view ${{ inputs.APP_PULL_REQUEST_NUMBER }} --json headRefOid --jq '.headRefOid')" >> "$GITHUB_OUTPUT"
92+
echo "REF=$(gh pr view ${{ steps.extractAppPRNumber.outputs.PR_NUMBER }} --json headRefOid --jq '.headRefOid')" >> "$GITHUB_OUTPUT"
7393
fi
7494
env:
7595
GITHUB_TOKEN: ${{ github.token }}
@@ -88,14 +108,14 @@ jobs:
88108
github-token: ${{ github.token }}
89109
result-encoding: string
90110
script: |
91-
if ('${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_NUMBER}}') return '${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_NUMBER}}';
111+
if ('${{ needs.prep.outputs.MOBILE_PR_NUMBER }}') return '${{ needs.prep.outputs.MOBILE_PR_NUMBER }}';
92112
93-
if (!'${{ inputs.APP_PULL_REQUEST_NUMBER }}') return '';
113+
if (!'${{ needs.prep.outputs.APP_PR_NUMBER }}') return '';
94114
95115
const pullRequest = await github.rest.pulls.get({
96116
owner: context.repo.owner,
97117
repo: context.repo.repo,
98-
pull_number: '${{ inputs.APP_PULL_REQUEST_NUMBER }}',
118+
pull_number: '${{ needs.prep.outputs.APP_PR_NUMBER }}',
99119
});
100120
101121
const body = pullRequest.data.body;
@@ -106,7 +126,7 @@ jobs:
106126
107127
getMobileExpensifyRef:
108128
runs-on: ubuntu-latest
109-
needs: [getMobileExpensifyPR]
129+
needs: [prep, getMobileExpensifyPR]
110130
outputs:
111131
MOBILE_EXPENSIFY_REF: ${{ steps.getHeadRef.outputs.REF || 'main' }}
112132
steps:
@@ -118,11 +138,11 @@ jobs:
118138
id: getHeadRef
119139
run: |
120140
set -e
121-
if [[ -z "${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_NUMBER }}" && -z "${{ needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }}" ]]; then
141+
if [[ -z "${{ needs.prep.outputs.MOBILE_PR_NUMBER }}" && -z "${{ needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }}" ]]; then
122142
echo "REF=" >> "$GITHUB_OUTPUT"
123143
else
124-
echo "PR=${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_NUMBER || needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }}" >> "$GITHUB_OUTPUT"
125-
echo "REF=$(gh pr view ${{ inputs.MOBILE_EXPENSIFY_PULL_REQUEST_NUMBER || needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }} -R Expensify/Mobile-Expensify --json headRefOid --jq '.headRefOid')" >> "$GITHUB_OUTPUT"
144+
echo "PR=${{ needs.prep.outputs.MOBILE_PR_NUMBER || needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }}" >> "$GITHUB_OUTPUT"
145+
echo "REF=$(gh pr view ${{ needs.prep.outputs.MOBILE_PR_NUMBER || needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }} -R Expensify/Mobile-Expensify --json headRefOid --jq '.headRefOid')" >> "$GITHUB_OUTPUT"
126146
fi
127147
env:
128148
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
@@ -133,7 +153,7 @@ jobs:
133153
needs: [prep, getMobileExpensifyPR, getMobileExpensifyRef]
134154
steps:
135155
- name: Add build start comment to Expensify/App PR
136-
if: ${{ inputs.APP_PULL_REQUEST_NUMBER != ''}}
156+
if: ${{ needs.prep.outputs.APP_PR_NUMBER != '' }}
137157
# v7
138158
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea
139159
with:
@@ -143,7 +163,7 @@ jobs:
143163
github.rest.issues.createComment({
144164
owner: context.repo.owner,
145165
repo: context.repo.repo,
146-
issue_number: ${{ inputs.APP_PULL_REQUEST_NUMBER }},
166+
issue_number: ${{ needs.prep.outputs.APP_PR_NUMBER }},
147167
body: `🚧 @${{ github.actor }} has triggered a test Expensify/App build. You can view the [workflow run here](${workflowURL}).`
148168
});
149169
@@ -164,9 +184,11 @@ jobs:
164184
165185
desktop:
166186
name: Build and deploy Desktop for testing
167-
if: ${{ inputs.DESKTOP && inputs.APP_PULL_REQUEST_NUMBER }}
187+
if: ${{ inputs.DESKTOP && needs.prep.outputs.APP_PR_NUMBER }}
168188
needs: [prep]
169189
runs-on: macos-14-large
190+
env:
191+
PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }}
170192
steps:
171193
- name: Checkout
172194
# v4
@@ -231,9 +253,11 @@ jobs:
231253

232254
web:
233255
name: Build and deploy Web
234-
if: ${{ inputs.WEB && inputs.APP_PULL_REQUEST_NUMBER }}
256+
if: ${{ inputs.WEB && needs.prep.outputs.APP_PR_NUMBER }}
235257
needs: [prep]
236258
runs-on: ubuntu-latest-xl
259+
env:
260+
PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }}
237261
steps:
238262
- name: Checkout
239263
# v4
@@ -271,6 +295,8 @@ jobs:
271295
if: ${{ inputs.ANDROID }}
272296
needs: [prep, getMobileExpensifyPR, getMobileExpensifyRef]
273297
runs-on: ubuntu-latest-xl
298+
env:
299+
PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }}
274300
outputs:
275301
S3_APK_PATH: ${{ steps.exportAndroidS3Path.outputs.S3_APK_PATH }}
276302
steps:
@@ -393,6 +419,7 @@ jobs:
393419
needs: [prep, getMobileExpensifyPR, getMobileExpensifyRef]
394420
env:
395421
DEVELOPER_DIR: /Applications/Xcode_26.0.app/Contents/Developer
422+
PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }}
396423
runs-on: macos-15-xlarge
397424
outputs:
398425
IOS_PATH: ${{ steps.export-ios-path.outputs.IOS_PATH }}
@@ -519,21 +546,21 @@ jobs:
519546
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e
520547

521548
- name: Publish links to apps for download on Expensify/App PR
522-
if: ${{ inputs.APP_PULL_REQUEST_NUMBER || (!inputs.APP_PULL_REQUEST_NUMBER && !needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR) }}
549+
if: ${{ needs.prep.outputs.APP_PR_NUMBER || (!needs.prep.outputs.APP_PR_NUMBER && !needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR) }}
523550
uses: ./.github/actions/javascript/postTestBuildComment
524551
with:
525552
REPO: App
526-
APP_PR_NUMBER: ${{ inputs.APP_PULL_REQUEST_NUMBER }}
553+
APP_PR_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }}
527554
MOBILE_EXPENSIFY_PR_NUMBER: ${{ needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }}
528555
GITHUB_TOKEN: ${{ github.token }}
529556
ANDROID: ${{ needs.androidHybrid.result }}
530557
DESKTOP: ${{ needs.desktop.result }}
531558
IOS: ${{ needs.iosHybrid.result }}
532559
WEB: ${{ needs.web.result }}
533560
ANDROID_LINK: ${{ needs.androidHybrid.outputs.S3_APK_PATH }}
534-
DESKTOP_LINK: https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/${{ inputs.APP_PULL_REQUEST_NUMBER }}/NewExpensify.dmg
561+
DESKTOP_LINK: https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/${{ needs.prep.outputs.APP_PR_NUMBER }}/NewExpensify.dmg
535562
IOS_LINK: ${{ needs.iosHybrid.outputs.IOS_PATH }}
536-
WEB_LINK: https://${{ inputs.APP_PULL_REQUEST_NUMBER }}.pr-testing.expensify.com
563+
WEB_LINK: https://${{ needs.prep.outputs.APP_PR_NUMBER }}.pr-testing.expensify.com
537564

538565
- name: Publish links to apps for download on Expensify/Mobile-Expensify PR
539566
if: ${{ needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }}

0 commit comments

Comments
 (0)