Skip to content

Conversation

@LukasMod
Copy link
Contributor

Background:

The GitHub Provider action uses a file from the directory without a specific name. When we use S3 provider Rock uploads only the file with the name we specify.

You can see it here (the current working solution with the GitHub provider):
https://github.com/Expensify/App/actions/runs/19446647058
The build starts with the fingerprint: a9d8bff32a07ce665ed3fe689a25d7fbe753ec64.
After the build, there's a log entry:

Saved build cache to .rock/cache/remote-build/rock-ios-simulator-Debug-b2de983e99c6e15fbda4e89128f62249c0d62555

Which means fingerprint was updated after pod install.
But the final uploaded file name is: rock-ios-simulator-Debug-a9d8bff32a07ce665ed3fe689a25d7fbe753ec64
So even though the artifact was uploaded and saved to the cache (runner) with the correct name, GitHub still uploads the file using the primary fingerprint.

With the S3 provider this causes a mismatch when we do npx rock remote-cache upload --name, where we search for the specific file to upload and its not there.

Without this artifactName update after pod install, we don't have a match after first local build (as artifactName is calculated without pods), but in the same time it works for CI builds from the start.

So:

  • first build local -> calculate fingerprint: A, pods installed, building, saved as A
  • second build -> calculate fingerprint: B, cache miss (pods included) -> fallback to local building again, saved as B
  • next build local -> cached build B
  • more pods changes -> more issues locally if pods are not installed before run (not sure if it's a big issue if installing pods is part of build flow but still)

Solution:

I think we could solve this by changing condition to:
if (didInstallPods && args.local) {}
so there would be:

  • first build local (with flag) -> calculate fingerprint: A, pods installed, calculate fingerprint: B building, saved as B
  • second build -> pods already installed, calculate fingerprint: B, cached build B
  • more pods changes -> no issues, one single local build
  • remote cache works for clean /ios (builds that would use cache don't need to waste time for pod install), to use it locally user has to remove local pods or fingerprint will be wrong

@vercel
Copy link

vercel bot commented Dec 17, 2025

@LukasMod is attempting to deploy a commit to the Callstack Team on Vercel.

A member of the Team first needs to authorize it.

@thymikee thymikee changed the title Fix/ios fingerprint update fix: ios fingerprint update after pod install only for local builds Dec 17, 2025
@thymikee thymikee merged commit 6b020d5 into callstackincubator:main Dec 17, 2025
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants