Skip to content

feat(cli): add event release mode to the hermes commands - #87660

Merged
trunk-io[bot] merged 3 commits into
masterfrom
ab/feat/hermes-event-release-mode
Aug 26, 2026
Merged

feat(cli): add event release mode to the hermes commands#87660
trunk-io[bot] merged 3 commits into
masterfrom
ab/feat/hermes-event-release-mode

Conversation

@ablaszkiewicz

@ablaszkiewicz ablaszkiewicz commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Changes

Tests

I ran tests covering all use cases. Usual scenario is:

  • upload source maps,
  • do some changes and upload source maps again,
  • don't do any changes but change a release and try uploading again

Tested that on:

  • legacy android+ios,
  • new release mode android+ios.

ios (legacy)

First run

posthog-cli, React Native source maps
WARN posthog_cli::api::releases: release com.posthog.example.rnexpo.suite@1.0.0+1 not found
INFO posthog_cli::api::releases: Release com.posthog.example.rnexpo.suite@1.0.0+1 created successfully! 01a03411-3f61-0000-a66f-34456962a6e5
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Intermediates.noindex/ETlegacy.build/Release-iphonesimulator/ETlegacy.build/DerivedSources/main.jsbundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Intermediates.noindex/ETlegacy.build/Release-iphonesimulator/ETlegacy.build/DerivedSources
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.suite@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
posthog-cli, dSYMs (414 unreadable-source warnings elided)
INFO posthog_cli::dsym::upload: Found 1 dSYM bundle(s)
INFO posthog_cli::dsym::upload: Extracted plist info from ETlegacy.app.dSYM: PlistInfo { bundle_identifier: Some("com.apple.xcode.dsym.com.posthog.example.rnexpo.suite"), short_version: Some("1.0.0"), bundle_version: Some("1"), development_region: Some("English") }
INFO posthog_cli::dsym::upload: Release name: com.posthog.example.rnexpo.suite
INFO posthog_cli::dsym::upload: Release version: 1.0.0
INFO posthog_cli::dsym::upload: Build: 1
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.suite@1.0.0+1
INFO posthog_cli::dsym::upload: Processing dSYM: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Products/Release-iphonesimulator/ETlegacy.app.dSYM
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Products/Release-iphonesimulator/ETlegacy.app.dSYM/Contents/Resources/DWARF/ETlegacy, thinning to x86_64 slice (47583644 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETlegacy (x86_64 arch): 47583644 bytes → 24058338 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885828 bytes total)
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Products/Release-iphonesimulator/ETlegacy.app.dSYM/Contents/Resources/DWARF/ETlegacy, thinning to arm64 slice (47583644 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETlegacy (arm64 arch): 47583644 bytes → 23525212 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885828 bytes total)
INFO posthog_cli::dsym::upload:   UUIDs: 17772DE6-2915-3ED0-8889-976B9B3B5A82, 4D412748-1886-32E4-B5A0-03F4A4192D2F (2)
INFO posthog_cli::dsym::upload:   Total size: 16667663 bytes
INFO posthog_cli::dsym::upload: Uploading 2 dSYM(s)...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 2 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 2 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 2 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
INFO posthog_cli::dsym::upload: dSYM upload complete

JavaScript exception:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Native crash:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Second run (with changes)

posthog-cli, React Native source maps
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.suite@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Intermediates.noindex/ETlegacy.build/Release-iphonesimulator/ETlegacy.build/DerivedSources/main.jsbundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Intermediates.noindex/ETlegacy.build/Release-iphonesimulator/ETlegacy.build/DerivedSources
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.suite@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
posthog-cli, dSYMs (414 unreadable-source warnings elided)
INFO posthog_cli::dsym::upload: Found 1 dSYM bundle(s)
INFO posthog_cli::dsym::upload: Extracted plist info from ETlegacy.app.dSYM: PlistInfo { bundle_identifier: Some("com.apple.xcode.dsym.com.posthog.example.rnexpo.suite"), short_version: Some("1.0.0"), bundle_version: Some("1"), development_region: Some("English") }
INFO posthog_cli::dsym::upload: Release name: com.posthog.example.rnexpo.suite
INFO posthog_cli::dsym::upload: Release version: 1.0.0
INFO posthog_cli::dsym::upload: Build: 1
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.suite@1.0.0+1
INFO posthog_cli::dsym::upload: Processing dSYM: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Products/Release-iphonesimulator/ETlegacy.app.dSYM
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Products/Release-iphonesimulator/ETlegacy.app.dSYM/Contents/Resources/DWARF/ETlegacy, thinning to x86_64 slice (47583644 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETlegacy (x86_64 arch): 47583644 bytes → 24058338 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885828 bytes total)
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Products/Release-iphonesimulator/ETlegacy.app.dSYM/Contents/Resources/DWARF/ETlegacy, thinning to arm64 slice (47583644 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETlegacy (arm64 arch): 47583644 bytes → 23525212 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885828 bytes total)
INFO posthog_cli::dsym::upload:   UUIDs: 17772DE6-2915-3ED0-8889-976B9B3B5A82, 4D412748-1886-32E4-B5A0-03F4A4192D2F (2)
INFO posthog_cli::dsym::upload:   Total size: 16667663 bytes
INFO posthog_cli::dsym::upload: Uploading 2 dSYM(s)...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 2 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (2 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 2 skipped (2 already present, 0 too large)
INFO posthog_cli::dsym::upload: dSYM upload complete
Issue with readable stack trace Release is associated App the SDK reported
stack release app

Third run (no change, new release)

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETlegacy-gwnvtpkazkctgtggrpvtxgwxxzop/Build/Intermediates.noindex/ETlegacy.build/Release-iphonesimulator/ETlegacy.build/DerivedSources
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.suite@1.0.0+2
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
WARN posthog_cli::api::symbol_sets: Operation failed: HTTP 400 "{\"type\":\"validation_error\",\"code\":\"release_id_mismatch\",\"detail\":\"Symbol set ebf9e75c-c10f-4670-85c6-b001a9c03560 already has a release ID\",\"attr\":null}"      [repeated 3x]
WARN posthog_cli::api::symbol_sets: Release ID mismatch detected. Retrying upload without release IDs...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
WARN posthog_cli::api::symbol_sets: Operation failed: HTTP 400 "{\"type\":\"validation_error\",\"code\":\"content_hash_mismatch\",\"detail\":\"Symbol set ebf9e75c-c10f-4670-85c6-b001a9c03560 already exists with different content.\",\"attr\":null}"      [repeated 3x]
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
Oops! Content mismatch: use --skip-on-conflict or --force

The build fails here, so the app is never installed and never reports anything. That is why this run
has no screenshots.

ios (new release mode)

First run

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Intermediates.noindex/ETreleaseless.build/Release-iphonesimulator/ETreleaseless.build/DerivedSources/main.jsbundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Intermediates.noindex/ETreleaseless.build/Release-iphonesimulator/ETreleaseless.build/DerivedSources
WARN posthog_cli::api::releases: release com.posthog.example.rnexpo.releaseless.suite@1.0.0+1 not found
INFO posthog_cli::api::releases: Release com.posthog.example.rnexpo.releaseless.suite@1.0.0+1 created successfully! 01a0341c-eb5d-0000-c723-67fbe7ae2683
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
posthog-cli, dSYMs (414 unreadable-source warnings elided)
INFO posthog_cli::dsym::upload: Found 1 dSYM bundle(s)
INFO posthog_cli::dsym::upload: Extracted plist info from ETreleaseless.app.dSYM: PlistInfo { bundle_identifier: Some("com.apple.xcode.dsym.com.posthog.example.rnexpo.releaseless.suite"), short_version: Some("1.0.0"), bundle_version: Some("1"), development_region: Some("English") }
INFO posthog_cli::dsym::upload: Release name: com.posthog.example.rnexpo.releaseless.suite
INFO posthog_cli::dsym::upload: Release version: 1.0.0
INFO posthog_cli::dsym::upload: Build: 1
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.suite@1.0.0+1
INFO posthog_cli::dsym::upload: Processing dSYM: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM/Contents/Resources/DWARF/ETreleaseless, thinning to x86_64 slice (47586606 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETreleaseless (x86_64 arch): 47586606 bytes → 24059816 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885947 bytes total)
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM/Contents/Resources/DWARF/ETreleaseless, thinning to arm64 slice (47586606 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETreleaseless (arm64 arch): 47586606 bytes → 23526702 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885947 bytes total)
INFO posthog_cli::dsym::upload:   UUIDs: 3EECA8C2-5736-33C5-A696-EF38EE7376A9, 0EE98187-4D6E-3689-BEB5-162C5E38D9DC (2)
INFO posthog_cli::dsym::upload:   Total size: 16678049 bytes
INFO posthog_cli::dsym::upload: Uploading 2 dSYM(s)...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 2 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 2 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 2 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
INFO posthog_cli::dsym::upload: dSYM upload complete

JavaScript exception:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Native crash:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Second run (with changes)

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Intermediates.noindex/ETreleaseless.build/Release-iphonesimulator/ETreleaseless.build/DerivedSources/main.jsbundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Intermediates.noindex/ETreleaseless.build/Release-iphonesimulator/ETreleaseless.build/DerivedSources
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.suite@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
posthog-cli, dSYMs (414 unreadable-source warnings elided)
INFO posthog_cli::dsym::upload: Found 1 dSYM bundle(s)
INFO posthog_cli::dsym::upload: Extracted plist info from ETreleaseless.app.dSYM: PlistInfo { bundle_identifier: Some("com.apple.xcode.dsym.com.posthog.example.rnexpo.releaseless.suite"), short_version: Some("1.0.0"), bundle_version: Some("1"), development_region: Some("English") }
INFO posthog_cli::dsym::upload: Release name: com.posthog.example.rnexpo.releaseless.suite
INFO posthog_cli::dsym::upload: Release version: 1.0.0
INFO posthog_cli::dsym::upload: Build: 1
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.suite@1.0.0+1
INFO posthog_cli::dsym::upload: Processing dSYM: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM/Contents/Resources/DWARF/ETreleaseless, thinning to x86_64 slice (47586606 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETreleaseless (x86_64 arch): 47586606 bytes → 24059816 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885947 bytes total)
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM/Contents/Resources/DWARF/ETreleaseless, thinning to arm64 slice (47586606 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETreleaseless (arm64 arch): 47586606 bytes → 23526702 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885947 bytes total)
INFO posthog_cli::dsym::upload:   UUIDs: 3EECA8C2-5736-33C5-A696-EF38EE7376A9, 0EE98187-4D6E-3689-BEB5-162C5E38D9DC (2)
INFO posthog_cli::dsym::upload:   Total size: 16678049 bytes
INFO posthog_cli::dsym::upload: Uploading 2 dSYM(s)...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 2 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (2 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 2 skipped (2 already present, 0 too large)
INFO posthog_cli::dsym::upload: dSYM upload complete
Issue with readable stack trace Release is associated App the SDK reported
stack release app

Third run (no change, new release)

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Intermediates.noindex/ETreleaseless.build/Release-iphonesimulator/ETreleaseless.build/DerivedSources/main.jsbundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Intermediates.noindex/ETreleaseless.build/Release-iphonesimulator/ETreleaseless.build/DerivedSources
WARN posthog_cli::api::releases: release com.posthog.example.rnexpo.releaseless.suite@1.0.0+2 not found
INFO posthog_cli::api::releases: Release com.posthog.example.rnexpo.releaseless.suite@1.0.0+2 created successfully! 01a03421-6a18-0000-b17f-3cad38628d93
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (1 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 1 skipped (1 already present, 0 too large)
posthog-cli, dSYMs (414 unreadable-source warnings elided)
INFO posthog_cli::dsym::upload: Found 1 dSYM bundle(s)
INFO posthog_cli::dsym::upload: Extracted plist info from ETreleaseless.app.dSYM: PlistInfo { bundle_identifier: Some("com.apple.xcode.dsym.com.posthog.example.rnexpo.releaseless.suite"), short_version: Some("1.0.0"), bundle_version: Some("2"), development_region: Some("English") }
INFO posthog_cli::dsym::upload: Release name: com.posthog.example.rnexpo.releaseless.suite
INFO posthog_cli::dsym::upload: Release version: 1.0.0
INFO posthog_cli::dsym::upload: Build: 2
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.suite@1.0.0+2
INFO posthog_cli::dsym::upload: Processing dSYM: /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM/Contents/Resources/DWARF/ETreleaseless, thinning to x86_64 slice (47586606 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETreleaseless (x86_64 arch): 47586606 bytes → 24059816 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885947 bytes total)
INFO posthog_cli::dsym: [lipo] fat binary detected at /Users/ablaszkiewicz/Library/Developer/Xcode/DerivedData/ETreleaseless-frchsbzvmfcvfmacuegvicvyrcsd/Build/Products/Release-iphonesimulator/ETreleaseless.app.dSYM/Contents/Resources/DWARF/ETreleaseless, thinning to arm64 slice (47586606 bytes total)
INFO posthog_cli::dsym: [lipo] thinned ETreleaseless (arm64 arch): 47586606 bytes → 23526702 bytes
INFO posthog_cli::dsym: Found 921 source paths in DWARF (921 after filtering)
INFO posthog_cli::dsym::source_bundle: Collected 714 source files (4885947 bytes total)
INFO posthog_cli::dsym::upload:   UUIDs: 3EECA8C2-5736-33C5-A696-EF38EE7376A9, 0EE98187-4D6E-3689-BEB5-162C5E38D9DC (2)
INFO posthog_cli::dsym::upload:   Total size: 16678049 bytes
INFO posthog_cli::dsym::upload: Uploading 2 dSYM(s)...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 2 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (2 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 2 skipped (2 already present, 0 too large)
INFO posthog_cli::dsym::upload: dSYM upload complete

JavaScript exception:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Native crash:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

android (legacy)

First run

posthog-cli, React Native source maps
WARN posthog_cli::api::releases: release com.posthog.example.rnexpo.droidbot@1.0.0+1 not found
INFO posthog_cli::api::releases: Release com.posthog.example.rnexpo.droidbot@1.0.0+1 created successfully! 01a0347e-ffed-0000-0c99-285c400eed63
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.droidbot@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
posthog-cli, R8 mapping
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.droidbot@1.0.0+1
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)

JavaScript exception:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Native crash:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Second run (with changes)

posthog-cli, React Native source maps
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.droidbot@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.droidbot@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (1 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 1 skipped (1 already present, 0 too large)
Issue with readable stack trace Release is associated App the SDK reported
stack release app

Third run (no change, new release)

posthog-cli, React Native source maps
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.droidbot@1.0.0+2
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.droidbot@1.0.0+2
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
WARN posthog_cli::api::symbol_sets: Operation failed: HTTP 400 "{\"type\":\"validation_error\",\"code\":\"release_id_mismatch\",\"detail\":\"Symbol set 94baff3d-1412-45dc-911a-f1d05a5c6026 already has a release ID\",\"attr\":null}"      [repeated 3x]
WARN posthog_cli::api::symbol_sets: Release ID mismatch detected. Retrying upload without release IDs...
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
WARN posthog_cli::api::symbol_sets: Operation failed: HTTP 400 "{\"type\":\"validation_error\",\"code\":\"content_hash_mismatch\",\"detail\":\"Symbol set 94baff3d-1412-45dc-911a-f1d05a5c6026 already exists with different content.\",\"attr\":null}"      [repeated 3x]
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
Oops! Content mismatch: use --skip-on-conflict or --force

The build fails here, so the app is never installed and never reports anything. That is why this run
has no screenshots.

android (new release mode)

First run

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release
WARN posthog_cli::api::releases: release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+1 not found
INFO posthog_cli::api::releases: Release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+1 created successfully! 01a03484-b746-0000-9695-77f0744a83d0
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
posthog-cli, R8 mapping
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+1
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)

JavaScript exception:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Native crash:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Second run (with changes)

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+1
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 1 upload keys (0 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 1 chunk(s) uploaded, 0 skipped (0 already present, 0 too large)
Issue with readable stack trace Release is associated App the SDK reported
stack release app

Third run (no change, new release)

posthog-cli, React Native source maps
INFO posthog_cli::sourcemaps::hermes::clone: Successfully cloned metadata to /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release/index.android.bundle.map
INFO posthog_cli::sourcemaps::hermes::clone: Finished cloning metadata
INFO posthog_cli::sourcemaps::hermes::upload: Processing directory: /Users/ablaszkiewicz/Documents/repos/error-tracking-examples/react-native-expo/android/app/build/generated/sourcemaps/react/release
WARN posthog_cli::api::releases: release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+2 not found
INFO posthog_cli::api::releases: Release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+2 created successfully! 01a03488-2b77-0000-0c73-9191298d227a
INFO posthog_cli::sourcemaps::hermes::upload: Found 1 maps to upload
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (1 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 1 skipped (1 already present, 0 too large)
posthog-cli, R8 mapping
INFO posthog_cli::api::releases: found release com.posthog.example.rnexpo.releaseless.droidbot@1.0.0+2
INFO posthog_cli::api::symbol_sets: Starting upload of batch 0, 1 symbol sets
INFO posthog_cli::api::symbol_sets: Server returned 0 upload keys (1 skipped as already present)
INFO posthog_cli::api::symbol_sets: Upload summary: 0 chunk(s) uploaded, 1 skipped (1 already present, 0 too large)

JavaScript exception:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

Native crash:

Issue with readable stack trace Release is associated App the SDK reported
stack release app

@trunk-io

trunk-io Bot commented Aug 24, 2026

Copy link
Copy Markdown

😎 Merged successfully - details.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 CI report

Trunk lane — non-backend lane

This PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes.

ablaszkiewicz and others added 2 commits August 24, 2026 15:25
A Hermes chunk id is derived from bundle content, so two releases that ship
the same JavaScript land on one symbol set. In symbol-set mode the release
lives on that symbol set, so the second release either collides or reports the
first one's release.

`--release-mode event` on `hermes clone` and `hermes upload` leaves the maps
release-independent. The release row is still created, so the server can
resolve an event's $app_namespace / $app_version / $app_build onto it, the way
it already does for iOS dSYMs and Android mappings. Nothing has to be injected
into the app in exchange.

`hermes inject` no longer rejects event mode. It injects content-addressed
chunk ids and embeds no release id, because a Hermes bytecode bundle has
nothing that reads the global back out.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The comment claimed that skipping the conflict would keep the old release
bound and make exceptions report it. That is wrong. A symbol set's release
lives in posthog_errortrackingsymbolset.release_id, which cymbal joins on, and
event mode sends no release id, so the server never touches that column.
Neither force nor skip changes the binding.

The real reason is narrower. A hermes chunk id comes from the bundle content
and the release id sits inside the uploaded map, so the build that changes
release mode sends the same id with different bytes and the server refuses it.
Overwriting is what lets that build pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ablaszkiewicz
ablaszkiewicz force-pushed the ab/feat/hermes-event-release-mode branch from cda3fa3 to 125b6df Compare August 24, 2026 13:48
@posthog

posthog Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

🦔 ReviewHog reviewed this pull request

Nothing worth raising this time, so here's a calming picture instead:

A happy dog on a sunny path

@ablaszkiewicz
ablaszkiewicz marked this pull request as ready for review August 24, 2026 18:32
Copilot AI lite review requested due to automatic review settings August 24, 2026 18:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested review from a team, cat-ph and hpouillot August 24, 2026 18:33
@greptile-apps

greptile-apps Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
### Issue 1
cli/src/sourcemaps/hermes/upload.rs:67-68
**Build coordinate escapes validation**

When event mode receives an explicit release name and version but no `--build`, this condition emits no warning and creates a bare-version release that does not match mobile events carrying `$app_build`, causing those exceptions to report no release.

```suggestion
    if *release_mode == ReleaseMode::Event
        && (release.name.is_none() || release.version.is_none() || release.build.is_none())
    {
```

### Issue 2
cli/src/sourcemaps/hermes/clone.rs:27-40
**Hermes workflow documentation is missing**

The CLI now exposes event release mode across Hermes clone, upload, and inject, but the PR adds only a release changeset rather than durable setup and migration documentation under `docs/`, leaving users without guidance for coordinating the mode and mobile release coordinates.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "chore(cli): correct why hermes event mod..." | Re-trigger Greptile

Comment thread cli/src/sourcemaps/hermes/upload.rs Outdated
Comment thread cli/src/sourcemaps/hermes/clone.rs
The server packs the build number into the version it keys a release on, so a
release created without --build matches no event carrying $app_build, and the
exception reports no release. The warning already named --build; the condition
did not check it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ablaszkiewicz added a commit to PostHog/posthog-js that referenced this pull request Aug 26, 2026
An older posthog-cli rejects --release-mode with a bare argument-parser
error. posthog-xcode.sh and posthog.gradle now read the CLI version first
and name the upgrade. The floor is a placeholder until
PostHog/posthog#87660 releases, and until then event mode fails with a
message that says so. POSTHOG_SKIP_CLI_VERSION_CHECK=1 allows a CLI built
from source.

Also guards --posthog-release-mode against a missing value, corrects the
documented floors (posthog-cli 0.13.0 for the Android mapping upload,
posthog-ios 3.69.1 for dSYMs), and adds a test that holds the release
mode lists in posthog-xcode.sh, posthog.gradle and the dSYM phase to
POSTHOG_RELEASE_MODES.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ablaszkiewicz added a commit to PostHog/posthog-js that referenced this pull request Aug 26, 2026
An older posthog-cli rejects --release-mode with a bare argument-parser
error. posthog-xcode.sh and posthog.gradle now read the CLI version first
and name the upgrade. The floor is a placeholder until
PostHog/posthog#87660 releases, and until then event mode fails with a
message that says so. POSTHOG_SKIP_CLI_VERSION_CHECK=1 allows a CLI built
from source.

Also guards --posthog-release-mode against a missing value, corrects the
documented floors (posthog-cli 0.13.0 for the Android mapping upload,
posthog-ios 3.69.1 for dSYMs), and adds a test that holds the release
mode lists in posthog-xcode.sh, posthog.gradle and the dSYM phase to
POSTHOG_RELEASE_MODES.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@trunk-io
trunk-io Bot merged commit db85d26 into master Aug 26, 2026
236 checks passed
@trunk-io
trunk-io Bot deleted the ab/feat/hermes-event-release-mode branch August 26, 2026 16:11
@deployment-status-posthog

deployment-status-posthog Bot commented Aug 26, 2026

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-08-26 17:25 UTC Run
prod-us ✅ Deployed 2026-08-26 17:41 UTC Run
prod-eu ✅ Deployed 2026-08-26 18:13 UTC Run

ablaszkiewicz added a commit to PostHog/posthog-js that referenced this pull request Aug 27, 2026
posthog-cli 0.16.0 (PostHog/posthog#87660) carries --release-mode on the
hermes commands, so the placeholder floor that refused event mode outright
becomes a real version check in posthog-xcode.sh and posthog.gradle. The
changeset and the expo plugin docs name the minimum, and the wrapper tests
drop the floor substitution now that the shipped floor is real. A new test
holds the two floors to the same version.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

5 participants