@rnx-kit/rn-changelog-generator
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
This tool is EXPERIMENTAL - USE WITH CAUTION
🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧🚧
This script used to live in
react-native-community/releases,
and has moved here as part of deprecating that repo.
Motivation
This script generates a markdown-formatted list of changes between two given
git references
(e.g. tags).
The script is a little more complex than one might expect for the following
reasons:
-
Attributing changes to the author’s github handle requires fetching the commit
metadata from the github API, rather than relying on a local clone of the
react-native repo.
-
Due to how react-native’s
release process
works, we want to be able to exclude previously cherry-picked commits from the
changelog entry of the next version.
However, with git
, cherry-picked commits will have different commit hashes
than their original counterparts – as they exist in the main
branch. Because
of this, the next version’s stable branch will include the same changes,
except using their original commit hash. This makes it impossible to exclude
these commits without further work.
For this reason, the script will parse the ‘referential revision’ – which is
added to each commit message by Facebook’s infrastructure – and use it to
resolve to the original commit in the main
branch. This resolved commit’s
hash is then used in the changelog entry, so the script can find and exclude
it from the next version’s entry.
This cannot be done via the github API and thus relies on a local clone of the
react-native repo.
You can read more of the old documentation about it
here.
Setup
If you don’t already have a checkout of the react-native repo in a nearby
folder:
git clone https://github.com/facebook/react-native.git
Ensure the repo is up-to-date:
pushd react-native
git checkout main
git pull
popd
Usage
Generate a changelog for react-native
commits between versions 0.65.0 and
0.66.0:
npx @rnx-kit/rn-changelog-generator --base v0.65.0 --compare v0.66.0 --repo ../../../react-native --changelog ../../../react-native/CHANGELOG.md
As explained above, you will need to have a local clone of react-native
, which
is referenced by the --repo
parameter.
[Optional] Get a Github 'personal acccess token'
This script uses the Github API to fetch commit metadata. This data is
accessable without authentication as its public.
You can optionally provide a GitHub personal access token for the --token
parameter which may be necessary in case Github API rate-limits your requests.
Instructions to create a GitHub ‘personal access token’:
- Visit the
token settings page.
- Generate a new token and only give it the
public_repo
scope. - Store this token somewhere secure for future usage.