Keep a changelog on main and the store copy in fastlane - #133
Merged
Conversation
The changelog records what changed, which is a property of the commits, so it belongs beside them: an entry goes in under Unreleased in the pull request that causes it, reviewed with its own diff. Cutting a release renames that heading and adds the compare link. Nothing in the build reads the file, so project.pbxproj keeps its 0.0.0 and the version still comes from the tag. The "What's New" text is a different thing in a different register, written for users of the app rather than for this repository, so it moves out to one file per marketing version under fastlane/metadata/en-US/changelogs/, mirroring OpenDocument.droid. The mirror is not exact, and the README there says why. On droid, supply reads that directory and Play keeps every version's notes; on iOS, deliver reads a single release_notes.txt per locale and App Store Connect keeps only the notes for the submission in flight. So here the directory is the history the store does not keep, and the notes are pasted in by hand at submission time, which leaves promoting a build the deliberate step it already was. skip_metadata stays true and no upload path changes. Named by marketing version rather than build number: the build number is a live query of what TestFlight already has, so it is not known until a release run starts and cannot name a file committed ahead of it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SUuHL6wPM5TpDsrFxW9fH9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a changelog, and puts the two kinds of release text where each one belongs.
Why not a release branch
The tempting shape is a long-lived branch holding versioned notes, since main
deliberately knows nothing about versions —
project.pbxprojholds0.0.0andthe version reaches the build from the tag. But a changelog records what
changed, which is a property of the commits, so separating it costs more than
it saves:
release.ymlsays it outright:the tag reaches xcodebuild as
MARKETING_VERSION, "so a release needs nocommit". A release branch makes every release a commit again.
git show 1.36:CHANGELOG.mdwould fail and "what shipped in 1.36" would stopbeing answerable from
1.36.git loginstead of writtenwith the change. That is the process that produced the empty
1.17releasebody.
CHANGELOG.mdfrom the default branch, so on a side branchcontributors would not find it.
Keep a Changelog already solves the version-awareness part with
Unreleased:entries land under that heading in the pull request that causes them, and
cutting a release renames the heading and adds the compare link. Main knows
versions historically, never as a build input.
What moved
CHANGELOG.mdcovers 1.35 through 1.37 and keeps only the developer-facingrecord. The App Store "What's New" copy that was appended to it moves to
fastlane/metadata/en-US/changelogs/<version>.txt, one file per marketingversion, mirroring OpenDocument.droid.
The mirror is not exact, and the README in that directory says why. On droid,
supplyreads the directory and Play retains every version's notes asuser-visible history. On iOS,
deliverreads a singlerelease_notes.txtperlocale and App Store Connect keeps only the notes for the submission in flight.
So here the directory is the history the store does not keep, and the notes are
pasted in by hand at submission — which leaves promoting a build the deliberate
step it already is.
Files are named by marketing version rather than build number because the build
number is a live query of what TestFlight already has: it is not known until a
release run starts, so it cannot name a file committed ahead of it.
Risk
None to the release path. No tracked file changes —
Fastfile,release.ymland
project.pbxprojare untouched,skip_metadatastaystrue, and nothingnew can reach App Store Connect. Everything here is additive.
Left alone deliberately:
fastlane/metadata/en-US/release_notes.txtstillreads "Add search functionality for ODF documents", which is years stale. It is
inert while
skip_metadataistrue, but it is the filedeliverwould readfirst if that ever flips. Syncing or deleting it touches a tracked 10-locale
metadata set, so it seemed worth deciding separately.
🤖 Generated with Claude Code