From 700bc1415ba44a7c58a403e2677be1d7a587333b Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:23:40 -0700 Subject: [PATCH 1/8] [expo-cocoapods-proxy] Bump bundler to fix compatibility with RubyGems 4 --- packages/expo-cocoapods-proxy/Gemfile.lock | 4 ++-- packages/expo-cocoapods-proxy/expo-cocoapods-proxy.gemspec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/expo-cocoapods-proxy/Gemfile.lock b/packages/expo-cocoapods-proxy/Gemfile.lock index 99b83005c5..b59ab3bc8a 100644 --- a/packages/expo-cocoapods-proxy/Gemfile.lock +++ b/packages/expo-cocoapods-proxy/Gemfile.lock @@ -131,7 +131,7 @@ PLATFORMS ruby DEPENDENCIES - bundler (~> 1.17) + bundler (>= 2.4) cocoapods (~> 1.12) expo-cocoapods-proxy! rake (~> 10.0) @@ -139,4 +139,4 @@ DEPENDENCIES rubocop (~> 1.48) BUNDLED WITH - 2.1.4 + 4.0.13 diff --git a/packages/expo-cocoapods-proxy/expo-cocoapods-proxy.gemspec b/packages/expo-cocoapods-proxy/expo-cocoapods-proxy.gemspec index f351796e7f..39e5b987c4 100644 --- a/packages/expo-cocoapods-proxy/expo-cocoapods-proxy.gemspec +++ b/packages/expo-cocoapods-proxy/expo-cocoapods-proxy.gemspec @@ -32,7 +32,7 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ['lib'] - spec.add_development_dependency 'bundler', '~> 1.17' + spec.add_development_dependency 'bundler', '>= 2.4' spec.add_development_dependency 'rake', '~> 10.0' spec.add_development_dependency 'rspec', '~> 3.0' end From 72f56057f1f8c1f579df82b6c99059c4b47858e2 Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:28:20 -0700 Subject: [PATCH 2/8] update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a9410b85d..a695366585 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ This is the log of notable changes to EAS CLI and related packages. ### ๐Ÿ› Bug fixes +- [expo-cocoapods-proxy] Fix iOS worker tarball build failing on macOS Tahoe due to bundler incompatibility with RubyGems 4. ([#3824](https://github.com/expo/eas-cli/pull/3824) by [@gwdp](https://github.com/gwdp)) + ### ๐Ÿงน Chores ## [20.1.0](https://github.com/expo/eas-cli/releases/tag/v20.1.0) - 2026-06-05 From 25b449057c15b5d29b72080d60980ab7c841fce5 Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:34:20 -0700 Subject: [PATCH 3/8] Add manual worker build workflow --- .github/workflows/trigger-worker-build.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/workflows/trigger-worker-build.yml diff --git a/.github/workflows/trigger-worker-build.yml b/.github/workflows/trigger-worker-build.yml new file mode 100644 index 0000000000..b0bb59ddc4 --- /dev/null +++ b/.github/workflows/trigger-worker-build.yml @@ -0,0 +1,11 @@ +name: Manually trigger a worker build + +on: + workflow_dispatch: + +jobs: + worker-build: + uses: ./.github/workflows/build-and-deploy-worker.yml + secrets: inherit + with: + environment: '' From b15398ad1bda72020b9c8207ef08863171a655f4 Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:37:54 -0700 Subject: [PATCH 4/8] Add manual worker build workflow --- .github/workflows/trigger-worker-build.yml | 74 ++++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/.github/workflows/trigger-worker-build.yml b/.github/workflows/trigger-worker-build.yml index b0bb59ddc4..5a37d2c862 100644 --- a/.github/workflows/trigger-worker-build.yml +++ b/.github/workflows/trigger-worker-build.yml @@ -5,7 +5,73 @@ on: jobs: worker-build: - uses: ./.github/workflows/build-and-deploy-worker.yml - secrets: inherit - with: - environment: '' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 + + - uses: ./.github/actions/setup-mise + + - name: Start EAS worker build + id: eas_workflow + working-directory: packages/worker + env: + EXPO_TOKEN: ${{ secrets.EXPO_DEV_EXPO_GITHUB_ROBOT_ACCESS_TOKEN }} + run: | + set -euo pipefail + + WORKFLOW_OUTPUT=$(npx -y eas-cli@latest workflow:run build-worker.yml \ + --ref ${{ github.sha }} \ + --input upload_artifact=false \ + --non-interactive \ + --no-wait \ + --json) + + WORKFLOW_RUN_ID=$(echo "$WORKFLOW_OUTPUT" | jq -r '.id') + if [ -z "$WORKFLOW_RUN_ID" ] || [ "$WORKFLOW_RUN_ID" = "null" ]; then + echo "Error: Could not determine workflow run ID" + echo "$WORKFLOW_OUTPUT" | jq . + exit 1 + fi + + echo "workflow_run_id=$WORKFLOW_RUN_ID" >> "$GITHUB_OUTPUT" + + - name: Wait for EAS worker build + working-directory: packages/worker + env: + EXPO_TOKEN: ${{ secrets.EXPO_DEV_EXPO_GITHUB_ROBOT_ACCESS_TOKEN }} + run: | + set -euo pipefail + + WORKFLOW_RUN_ID="${{ steps.eas_workflow.outputs.workflow_run_id }}" + + while true; do + VIEW_OUTPUT=$(npx -y eas-cli@latest workflow:view "$WORKFLOW_RUN_ID" \ + --non-interactive \ + --json) + STATUS=$(echo "$VIEW_OUTPUT" | jq -r '.status') + + case "$STATUS" in + SUCCESS) break ;; + FAILURE|CANCELED|ACTION_REQUIRED) + echo "EAS workflow $STATUS" + echo "$VIEW_OUTPUT" | jq . + exit 1 + ;; + NEW|IN_PROGRESS) sleep 7 ;; + *) + echo "Unexpected status: $STATUS" + exit 1 + ;; + esac + done + + - name: Cancel EAS workflow on GitHub cancellation + if: cancelled() + working-directory: packages/worker + env: + EXPO_TOKEN: ${{ secrets.EXPO_DEV_EXPO_GITHUB_ROBOT_ACCESS_TOKEN }} + run: | + WORKFLOW_RUN_ID="${{ steps.eas_workflow.outputs.workflow_run_id }}" + if [ -n "$WORKFLOW_RUN_ID" ]; then + npx -y eas-cli@latest workflow:cancel "$WORKFLOW_RUN_ID" --non-interactive + fi From 6afffc7e58ad30f2403323f7a64b84e3b5352220 Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:38:39 -0700 Subject: [PATCH 5/8] tmp: trigger worker build on branch push --- .github/workflows/trigger-worker-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/trigger-worker-build.yml b/.github/workflows/trigger-worker-build.yml index 5a37d2c862..cf9f828216 100644 --- a/.github/workflows/trigger-worker-build.yml +++ b/.github/workflows/trigger-worker-build.yml @@ -2,6 +2,8 @@ name: Manually trigger a worker build on: workflow_dispatch: + push: + branches: [gwdp/fix-cocoapods-proxy-bundler] jobs: worker-build: From 4e6f43f3f4671e9528e49a09fa9c1c82dab7849e Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:41:11 -0700 Subject: [PATCH 6/8] Trigger worker build on PRs touching worker or cocoapods-proxy --- .github/workflows/trigger-worker-build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/trigger-worker-build.yml b/.github/workflows/trigger-worker-build.yml index cf9f828216..30b447003c 100644 --- a/.github/workflows/trigger-worker-build.yml +++ b/.github/workflows/trigger-worker-build.yml @@ -2,8 +2,12 @@ name: Manually trigger a worker build on: workflow_dispatch: - push: - branches: [gwdp/fix-cocoapods-proxy-bundler] + pull_request: + types: [opened, synchronize] + branches: [main] + paths: + - "packages/worker/**" + - "packages/expo-cocoapods-proxy/**" jobs: worker-build: From fa22f949683f146a1b366d9f8cff30f2dadfe8bb Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Fri, 5 Jun 2026 15:49:42 -0700 Subject: [PATCH 7/8] Print job statuses on EAS workflow success --- .github/workflows/trigger-worker-build.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/trigger-worker-build.yml b/.github/workflows/trigger-worker-build.yml index 30b447003c..163daf78fc 100644 --- a/.github/workflows/trigger-worker-build.yml +++ b/.github/workflows/trigger-worker-build.yml @@ -57,7 +57,11 @@ jobs: STATUS=$(echo "$VIEW_OUTPUT" | jq -r '.status') case "$STATUS" in - SUCCESS) break ;; + SUCCESS) + echo "EAS workflow succeeded." + echo "$VIEW_OUTPUT" | jq -r '.jobs[] | " \(.name): \(.status)"' + break + ;; FAILURE|CANCELED|ACTION_REQUIRED) echo "EAS workflow $STATUS" echo "$VIEW_OUTPUT" | jq . From 99e5fa42d4b8fa4a927e07a824e4a8a7591ecd63 Mon Sep 17 00:00:00 2001 From: Gabe Debes Date: Mon, 8 Jun 2026 08:33:21 -0700 Subject: [PATCH 8/8] Remove manual worker build workflow --- .github/workflows/trigger-worker-build.yml | 87 ---------------------- 1 file changed, 87 deletions(-) delete mode 100644 .github/workflows/trigger-worker-build.yml diff --git a/.github/workflows/trigger-worker-build.yml b/.github/workflows/trigger-worker-build.yml deleted file mode 100644 index 163daf78fc..0000000000 --- a/.github/workflows/trigger-worker-build.yml +++ /dev/null @@ -1,87 +0,0 @@ -name: Manually trigger a worker build - -on: - workflow_dispatch: - pull_request: - types: [opened, synchronize] - branches: [main] - paths: - - "packages/worker/**" - - "packages/expo-cocoapods-proxy/**" - -jobs: - worker-build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 - - - uses: ./.github/actions/setup-mise - - - name: Start EAS worker build - id: eas_workflow - working-directory: packages/worker - env: - EXPO_TOKEN: ${{ secrets.EXPO_DEV_EXPO_GITHUB_ROBOT_ACCESS_TOKEN }} - run: | - set -euo pipefail - - WORKFLOW_OUTPUT=$(npx -y eas-cli@latest workflow:run build-worker.yml \ - --ref ${{ github.sha }} \ - --input upload_artifact=false \ - --non-interactive \ - --no-wait \ - --json) - - WORKFLOW_RUN_ID=$(echo "$WORKFLOW_OUTPUT" | jq -r '.id') - if [ -z "$WORKFLOW_RUN_ID" ] || [ "$WORKFLOW_RUN_ID" = "null" ]; then - echo "Error: Could not determine workflow run ID" - echo "$WORKFLOW_OUTPUT" | jq . - exit 1 - fi - - echo "workflow_run_id=$WORKFLOW_RUN_ID" >> "$GITHUB_OUTPUT" - - - name: Wait for EAS worker build - working-directory: packages/worker - env: - EXPO_TOKEN: ${{ secrets.EXPO_DEV_EXPO_GITHUB_ROBOT_ACCESS_TOKEN }} - run: | - set -euo pipefail - - WORKFLOW_RUN_ID="${{ steps.eas_workflow.outputs.workflow_run_id }}" - - while true; do - VIEW_OUTPUT=$(npx -y eas-cli@latest workflow:view "$WORKFLOW_RUN_ID" \ - --non-interactive \ - --json) - STATUS=$(echo "$VIEW_OUTPUT" | jq -r '.status') - - case "$STATUS" in - SUCCESS) - echo "EAS workflow succeeded." - echo "$VIEW_OUTPUT" | jq -r '.jobs[] | " \(.name): \(.status)"' - break - ;; - FAILURE|CANCELED|ACTION_REQUIRED) - echo "EAS workflow $STATUS" - echo "$VIEW_OUTPUT" | jq . - exit 1 - ;; - NEW|IN_PROGRESS) sleep 7 ;; - *) - echo "Unexpected status: $STATUS" - exit 1 - ;; - esac - done - - - name: Cancel EAS workflow on GitHub cancellation - if: cancelled() - working-directory: packages/worker - env: - EXPO_TOKEN: ${{ secrets.EXPO_DEV_EXPO_GITHUB_ROBOT_ACCESS_TOKEN }} - run: | - WORKFLOW_RUN_ID="${{ steps.eas_workflow.outputs.workflow_run_id }}" - if [ -n "$WORKFLOW_RUN_ID" ]; then - npx -y eas-cli@latest workflow:cancel "$WORKFLOW_RUN_ID" --non-interactive - fi