Skip to content

Commit d80271c

Browse files
committed
Merge branch 'main' of github.com:Expensify/App into onyx/session-3
2 parents 510290b + 1e9de2e commit d80271c

958 files changed

Lines changed: 50928 additions & 30942 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/agents/deploy-blocker-investigator.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ removeDeployBlockerLabel.sh "$ISSUE_URL" DeployBlocker # For Frontend bugs
129129

130130
Call scripts by name only (e.g., `removeDeployBlockerLabel.sh`), not with full paths.
131131

132+
### Step 8: Assign contributors
133+
134+
When a causing PR is identified with medium or high confidence, assign the PR author and all approving reviewers to the deploy blocker issue using `gh issue edit "$ISSUE_URL" --add-assignee`. Extract approving reviewers from `gh pr view <PR_NUMBER> --json reviews`.
135+
132136
---
133137

134138
## Decision Tree
@@ -182,6 +186,7 @@ Post ONE comment using this exact format:
182186
Brief explanation of why this recommendation (1-2 sentences).
183187

184188

189+
**Assigned**: @author (PR author), @reviewer (approving reviewer) — or omit if no causing PR identified
185190
**Labels**: [Describe any label changes made]
186191

187192
<details>

.claude/commands/investigate-deploy-blocker.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
allowed-tools: Bash(gh issue view:*),Bash(gh issue comment:*),Bash(gh issue list:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(gh pr diff:*),Bash(gh api:*),Bash(git log:*),Bash(git show:*),Bash(git blame:*),Bash(removeDeployBlockerLabel.sh:*),Glob,Grep,Read
2+
allowed-tools: Bash(gh issue view:*),Bash(gh issue comment:*),Bash(gh issue edit:*),Bash(gh issue list:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(gh pr diff:*),Bash(gh api:*),Bash(git log:*),Bash(git show:*),Bash(git blame:*),Bash(removeDeployBlockerLabel.sh:*),Glob,Grep,Read
33
description: Investigate a deploy blocker issue to find the causing PR and recommend resolution
44
---
55

.claude/scripts/createInlineComment.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,12 @@ readonly LINE_ARG="${3:-}"
4747
validate_rule "$BODY_ARG"
4848
echo "Comment approved: $COMMENT_STATUS_REASON"
4949

50-
readonly FOOTER=$'\n\n---\n\nPlease rate this suggestion with 👍 or 👎 to help us improve! Reactions are used to monitor reviewer efficiency.'
51-
readonly COMMENT_BODY="${BODY_ARG}${FOOTER}"
52-
5350
COMMIT_ID=$(gh api "/repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER" --jq '.head.sha')
5451
readonly COMMIT_ID
52+
readonly SHORT_SHA="${COMMIT_ID:0:7}"
53+
54+
readonly FOOTER=$'\n\n---\n\n'"Reviewed at: [${SHORT_SHA}](https://github.com/${GITHUB_REPOSITORY}/commit/${COMMIT_ID}) | Please rate this suggestion with 👍 or 👎 to help us improve! Reactions are used to monitor reviewer efficiency."
55+
readonly COMMENT_BODY="${BODY_ARG}${FOOTER}"
5556

5657
PAYLOAD=$(jq -n \
5758
--arg body "$COMMENT_BODY" \

.github/actions/composite/setupNode/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ runs:
4949

5050
- name: Install root project node packages
5151
if: steps.cache-node-modules.outputs.cache-hit != 'true' || (inputs.IS_HYBRID_BUILD == 'true' && steps.cache-old-dot-node-modules.outputs.cache-hit != 'true')
52-
uses: nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847
52+
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
5353
with:
5454
timeout_minutes: 30
5555
max_attempts: 3

.github/workflows/buildAndroid.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ jobs:
178178
sign: true
179179
re-sign: true
180180
ad-hoc: ${{ inputs.variant == 'Adhoc' }}
181+
# We don't need Rock to setup java, because we already ran the setup-java action above
182+
setup-java: false
181183
keystore-file: './upload-key.keystore'
182184
keystore-store-file: 'upload-key.keystore'
183185
keystore-store-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }}

.github/workflows/buildIOS.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ jobs:
126126
run: echo "IS_PODFILE_SAME_AS_MANIFEST=${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock') == hashFiles('Mobile-Expensify/iOS/Pods/Manifest.lock') }}" >> "$GITHUB_OUTPUT"
127127

128128
- name: Install cocoapods
129-
uses: nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847
129+
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
130130
if: steps.pods-cache.outputs.cache-hit != 'true' || steps.compare-podfile-and-manifest.outputs.IS_PODFILE_SAME_AS_MANIFEST != 'true' || steps.setup-node.outputs.cache-hit != 'true'
131131
with:
132132
timeout_minutes: 10

.github/workflows/cherryPick.yml

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,34 @@ concurrency:
3434
cancel-in-progress: false
3535

3636
jobs:
37+
validate:
38+
runs-on: blacksmith-2vcpu-ubuntu-2404
39+
steps:
40+
- name: Validate pull request URL
41+
if: ${{ inputs.PULL_REQUEST_URL != '' }}
42+
run: |
43+
REPO_FULL_NAME=$(echo '${{ inputs.PULL_REQUEST_URL }}' | sed -E 's|https?://github.com/([^/]+/[^/]+)/pull/.*|\1|')
44+
if [[ "$REPO_FULL_NAME" != ${{ github.repository }} ]] && [[ ! "$REPO_FULL_NAME" =~ Expensify/Mobile-Expensify* ]]; then
45+
echo "::error::❌ Cherry picks are only supported for the Expensify/App and Expensify/Mobile-Expensify repositories. Found: $REPO_FULL_NAME"
46+
exit 1
47+
fi
48+
49+
- name: Verify PR is merged
50+
if: ${{ inputs.PULL_REQUEST_URL != '' }}
51+
env:
52+
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
53+
run: |
54+
if gh pr view "${{ inputs.PULL_REQUEST_URL }}" --json mergedAt | jq --exit-status '.mergedAt'; then
55+
echo "PR is merged: ${{ inputs.PULL_REQUEST_URL }}"
56+
else
57+
echo "::error::❌ PR is not merged: ${{ inputs.PULL_REQUEST_URL }}"
58+
exit 1
59+
fi
60+
3761
createNewVersion:
3862
uses: ./.github/workflows/createNewVersion.yml
3963
secrets: inherit
64+
needs: [validate]
4065
with:
4166
# In order to submit a new build for production review, it must have a higher PATCH version than the previously-submitted build.
4267
# The typical case is that with each staging deploy, we bump the BUILD version, and with each prod deploy we bump the PATCH version.
@@ -59,14 +84,6 @@ jobs:
5984
echo "REPO_FULL_NAME=$(echo '${{ inputs.PULL_REQUEST_URL }}' | sed -E 's|https?://github.com/([^/]+/[^/]+)/pull/.*|\1|')" >> "$GITHUB_OUTPUT"
6085
echo "PR_NUMBER=$(echo '${{ inputs.PULL_REQUEST_URL }}' | sed -E 's|.*/pull/([0-9]+).*|\1|')" >> "$GITHUB_OUTPUT"
6186
62-
- name: Verify pull request URL
63-
if: ${{ inputs.PULL_REQUEST_URL != '' }}
64-
run: |
65-
if [[ "${{ steps.getPRInfo.outputs.REPO_FULL_NAME }}" != ${{ github.repository }} ]] && [[ ! "${{ steps.getPRInfo.outputs.REPO_FULL_NAME }}" =~ Expensify/Mobile-Expensify* ]]; then
66-
echo "::error::❌ Cherry picks are only supported for the Expensify/App and Expensify/Mobile-Expensify repositories. Found: ${{ steps.getPRInfo.outputs.REPO_FULL_NAME }}"
67-
exit 1
68-
fi
69-
7087
- name: Set conflict branch name
7188
if: ${{ inputs.PULL_REQUEST_URL != '' }}
7289
id: getBranchName

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666
# JS is better at handling JSON: https://stackoverflow.com/questions/72953526/github-actions-how-to-pass-tojson-result-to-shell-commands
6767
- name: Check if this deploy was triggered by a cherry-pick
6868
id: isCherryPick
69-
uses: actions/github-script@e7aeb8c663f696059ebb5f9ab1425ed2ef511bdb
69+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
7070
with:
7171
script: |
7272
const commitMessages = context.payload.commits.map((commit) => commit.message);

.github/workflows/deployBlockerInvestigation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,4 @@ jobs:
7777
github_token: ${{ secrets.OS_BOTIFY_TOKEN }}
7878
prompt: "/investigate-deploy-blocker ISSUE_URL: ${{ env.ISSUE_URL }}"
7979
claude_args: |
80-
--allowedTools "Task,Glob,Grep,Read,Bash(gh issue view:*),Bash(gh issue comment:*),Bash(gh issue list:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(gh pr diff:*),Bash(gh api:*),Bash(git log:*),Bash(git show:*),Bash(git blame:*),Bash(removeDeployBlockerLabel.sh:*)"
80+
--allowedTools "Task,Glob,Grep,Read,Bash(gh issue view:*),Bash(gh issue comment:*),Bash(gh issue edit:*),Bash(gh issue list:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(gh pr diff:*),Bash(gh api:*),Bash(git log:*),Bash(git show:*),Bash(git blame:*),Bash(removeDeployBlockerLabel.sh:*)"

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ source "https://rubygems.org"
44
ruby ">= 3.3.4"
55

66
gem "cocoapods", "= 1.16.2"
7-
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
7+
gem 'activesupport', '>= 7.2.3.1'
88
gem 'xcodeproj', '~> 1.27'
99
gem "fastlane", "~> 2", ">= 2.229.0"
1010
gem "xcpretty", "~> 0"

0 commit comments

Comments
 (0)