Skip to content

chore: deprecate POSTHOG_NO_RELEASE_BIND in the dsym upload - #791

Merged
ablaszkiewicz merged 3 commits into
mainfrom
chore/remove-no-release-bind
Sep 2, 2026
Merged

chore: deprecate POSTHOG_NO_RELEASE_BIND in the dsym upload#791
ablaszkiewicz merged 3 commits into
mainfrom
chore/remove-no-release-bind

Conversation

@ablaszkiewicz

@ablaszkiewicz ablaszkiewicz commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Related PRs

Event mode is live today, and it is opt-in. These PRs settle where it stays and where it goes.

Deprecating the mobile knobs. The symbol id on these paths is already a content hash, so two releases collide only when they ship a byte-identical artifact. An ordinary release that changes code gets its own symbol set and never collides. The dSYM path also lost release attribution for embedded targets, because one upload covers every target while it creates one release. Review asked for deprecation instead of removal, so every knob stays accepted as a warned no-op.

Making it the default.

React Native. Scopes the mode to the Hermes upload and defaults it to event. That is the one path where two releases really do ship the same artifact.

Problem

  • Event mode helps only when two releases ship a byte-identical binary. The symbol id is the Mach-O LC_UUID.
  • The unbound path also lost release attribution for embedded targets.
  • The upload covers every extension dSYM, but it creates one release, from PRODUCT_BUNDLE_IDENTIFIER.
  • An extension reports its own bundle identifier as $app_namespace, so its crashes matched no release.
  • A silent removal would leave an opted-in user with no signal that their dSYMs bind again.

Changes

  • A build that sets POSTHOG_NO_RELEASE_BIND sees a build-log warning naming the deprecation and the fix. The script ignores the variable and uploads symbol sets bound to the release it creates.
  • dsym upload no longer receives --no-release-bind.
  • The script header documents the variable as deprecated instead of dropping it.
  • The posthog-cli floor returns to 0.7.7, or 0.7.12 with POSTHOG_SKIP_ON_CONFLICT.

How did you test this code?

  • bash build-tools/upload-symbols.test.sh passes.
  • A new case sets the variable and asserts the warning prints, the upload succeeds, and --no-release-bind is not forwarded. It catches the flag forwarding coming back, which would fail the Xcode phase against a CLI that removes the flag for real.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Written with Claude Code (Opus 5); the warning added with Claude Code (Fable 5) per the review comment. Skills invoked: /writing-pr-descriptions, /writing-tests.

This replaces #789. That PR also carried a fix for a zero-padded CFBundleVersion, which follows in a separate PR. PostHog/posthog#92401 keeps dsym upload --no-release-bind parseable as a hidden no-op, which covers a build that upgrades the CLI before this pod.

The script uploads symbol sets bound to the release it creates.

The symbol id is the Mach-O LC_UUID, so two releases collide only when
they ship a byte-identical binary. The unbound path also lost release
attribution for embedded targets, because the upload covers every
extension dSYM while it creates one release.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jg6r6rFUBnowrXssZyU7yR
@posthog

posthog Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🦔 PostHog Review reviewed this pull request

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

A panda relaxing and waving

@greptile-apps

greptile-apps Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "chore: remove POSTHOG_NO_RELEASE_BIND fr..." | Re-trigger Greptile

@marandaneto

Copy link
Copy Markdown
Member

print a deprecate/no-op warning if POSTHOG_NO_RELEASE_BIND is set so people know about this after upgrading

Comment thread .changeset/remove-dsym-no-release-bind.md Outdated
Review asked for a deprecation warning so people learn about the
removal after upgrading, instead of the variable going silent. The
script keeps ignoring it and uploads dSYMs bound to the release.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0177eam86deHk8HZYMKcJtbD
@ablaszkiewicz ablaszkiewicz changed the title chore: remove POSTHOG_NO_RELEASE_BIND from the dsym upload chore: deprecate POSTHOG_NO_RELEASE_BIND in the dsym upload Sep 1, 2026
The pod's API is untouched and the default path behaves identically.
Only opt-in users of the experimental variable see the warning and the
bound upload, which review judged patch-sized.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0177eam86deHk8HZYMKcJtbD
@ablaszkiewicz

Copy link
Copy Markdown
Contributor Author

@marandaneto deprecated it instead of getting rid of it as you suggested

@ablaszkiewicz
ablaszkiewicz merged commit af21b99 into main Sep 2, 2026
46 checks passed
@ablaszkiewicz
ablaszkiewicz deleted the chore/remove-no-release-bind branch September 2, 2026 08:00
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.

3 participants