Skip to content

[cocoapods] Proxy CocoaPods CDN source metadata#3726

Open
sjchmiela wants to merge 1 commit into
mainfrom
stanley/inspect-cocoapods-proxying
Open

[cocoapods] Proxy CocoaPods CDN source metadata#3726
sjchmiela wants to merge 1 commit into
mainfrom
stanley/inspect-cocoapods-proxying

Conversation

@sjchmiela
Copy link
Copy Markdown
Contributor

@sjchmiela sjchmiela commented May 13, 2026

Summary

Adds CocoaPods podspec metadata proxying to expo-cocoapods-proxy via CocoaPods supported :source_provider plugin hook.

When EAS_BUILD_COCOAPODS_CACHE_URL is set, the plugin now registers a proxied CDN source backed by the existing trunk repo directory, then registers canonical TrunkSource as fallback. The proxied source rewrites CocoaPods CDN metadata requests to ${EAS_BUILD_COCOAPODS_CACHE_URL}/cdn.cocoapods.org/ without creating or warming a separate second CDN repo.

Why

The existing proxy behavior covered pod source downloads through Pod::Downloader::Http and Pod::Downloader::Git, but CocoaPods CDN podspec metadata is resolved through Pod::CDNSource, bypassing those downloaders. That allowed podspec metadata requests to go directly to CocoaPods/GitHub and hit rate limits.

Behavior

  • Podfiles without explicit source entries use the plugin-provided proxied source first.
  • Cache misses can reuse the already-prewarmed local trunk repo directory.
  • If the EAS CocoaPods cache source fails while resolving metadata, CocoaPods falls back to canonical trunk.
  • Existing HTTP and Git downloader proxy behavior is unchanged.

Validation

Based on turtle-v2, iOS worker images use Ruby 3.2 and CocoaPods 1.13.0, 1.14.3, 1.15.2, or 1.16.2.

  • Ruby 3.2.11 + CocoaPods 1.13.0 + ActiveSupport 6.1.7.6: 24 examples, 0 failures
  • Ruby 3.2.11 + CocoaPods 1.14.3: 24 examples, 0 failures
  • Ruby 3.2.11 + CocoaPods 1.15.2: 24 examples, 0 failures
  • Ruby 3.2.11 + CocoaPods 1.16.2: 24 examples, 0 failures
  • Ruby 3.3.9 + CocoaPods 1.13.0, 1.14.3, 1.15.2, 1.16.2: 24 examples, 0 failures for each version
  • Ruby 3.3.9 + CocoaPods 1.12.0: 24 examples, 0 failures
  • rubocop --disable-pending-cops on the modified Ruby files: no offenses
  • git diff --check: clean

@codecov
Copy link
Copy Markdown

codecov Bot commented May 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 56.64%. Comparing base (64874f7) to head (32715f4).
⚠️ Report is 26 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3726      +/-   ##
==========================================
+ Coverage   56.51%   56.64%   +0.14%     
==========================================
  Files         887      892       +5     
  Lines       38416    38541     +125     
  Branches     8007     8024      +17     
==========================================
+ Hits        21707    21828     +121     
- Misses      16611    16615       +4     
  Partials       98       98              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sjchmiela sjchmiela added the no changelog PR that doesn't require a changelog entry label May 13, 2026
@sjchmiela sjchmiela force-pushed the stanley/inspect-cocoapods-proxying branch from a3207d2 to 32715f4 Compare May 13, 2026 12:13
@github-actions
Copy link
Copy Markdown

⏩ The changelog entry check has been skipped since the "no changelog" label is present.

@sjchmiela sjchmiela marked this pull request as ready for review May 13, 2026 12:26
@sjchmiela sjchmiela requested a review from szdziedzic May 13, 2026 12:26
@github-actions
Copy link
Copy Markdown

Subscribed to pull request

File Patterns Mentions
**/* @douglowder

Generated by CodeMention

@sjchmiela sjchmiela changed the title [codex] Proxy CocoaPods CDN source metadata [cocoapods] Proxy CocoaPods CDN source metadata May 13, 2026
@szdziedzic szdziedzic requested a review from Copilot May 14, 2026 12:20
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds CocoaPods CDN metadata proxying to expo-cocoapods-proxy by registering a proxied CDN source via CocoaPods’ :source_provider hook, enabling podspec metadata requests to go through EAS_BUILD_COCOAPODS_CACHE_URL (with trunk as a fallback) to reduce direct hits to CocoaPods/GitHub.

Changes:

  • Introduces a FallbackableCDNSource and SourceProvider hook to add a proxied CDN source (and then canonical trunk) when EAS_BUILD_COCOAPODS_CACHE_URL is set.
  • Registers the plugin as a default CocoaPods plugin so the hook runs even without explicit Podfile plugin configuration.
  • Adds unit + integration specs that exercise proxied CDN usage and fallback behavior during pod install.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
packages/expo-cocoapods-proxy/lib/expo_cocoapods_proxy/proxy.rb Adds :source_provider hook integration, proxied CDN source + fallback behavior, and default plugin registration.
packages/expo-cocoapods-proxy/spec/expo_cocoapods_proxy/proxy_spec.rb Adds tests for source registration and end-to-end pod install behavior with proxy and fallback scenarios.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +44 to +47
def proxy
value = ENV['EAS_BUILD_COCOAPODS_CACHE_URL']
value unless value.nil? || value.empty?
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no changelog PR that doesn't require a changelog entry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants