貢献していただきありがとうございます!
オープンソースにおいては、様々な種類の貢献があり、そのすべてが価値があります。貢献を準備する上で役立ついくつかのガイドラインを以下に示します。
コードベースに貢献する前に、リポジトリをフォークする必要があります。これは、どのような種類の貢献を行うかによって少し異なります。
react-router
のコードに触れるものは、dev
ブランチから分岐して、dev
ブランチにマージする必要があります。main
ブランチから分岐して、main
ブランチにマージできます。以下の手順で、このリポジトリへの変更を貢献するための準備が整います。
# in a terminal, cd to parent directory where you want your clone to be, then
git clone https://github.com/<your_github_username>/react-router.git
cd react-router
# if you are making *any* code changes, make sure to checkout the dev branch
git checkout dev
npm
を使用してインストールすると、不要なpackage-lock.json
ファイルが生成されます。Issueテンプレートに従い、コード例を用いて再現方法を明確に示してください。最も良いのは、失敗するテストを含むプルリクエストです。次に良いのは、バグを説明するCodeSandboxまたはリポジトリへのリンクです。
サンプルは、mainブランチに直接追加できます。mainのローカルクローンからブランチを作成します。完了したら、プルリクエストを作成し、サンプルを概説してください。
React Routerでやりたいことを示す、思慮深いコメントといくつかのサンプルコードを提供してください。変更または追加する必要があるものについて結論を出す前に、現在のAPIによってどのように制限されているかを示すことができれば、議論が円滑になります。
経験上、小さなAPIの方が通常は優れていることがわかっているので、現在のAPIに明らかな制限がない限り、新しいものを追加することには少し躊躇するかもしれません。とはいえ、これまで考慮していなかったケースについて、常に喜んでお聞きしたいと思っていますので、遠慮しないでください!:)
バグを修正する必要があり、誰も修正していない場合は、自分で修正してプルリクエストを作成するのが最善です。オープンソースコードは私たち全員のものであり、それを前進させるのは私たち全員の責任です。
プルリクエストは、マージするために2人以上の共同作業者の承認のみが必要です。PR作成者が共同作業者の場合、1つとしてカウントされます。
dev
ブランチにする必要があります。「変更を比較」見出しの下にあるドロップダウンを使用して、PRを作成するときにGitHubでベースを設定します:
バグを修正または機能を追加するすべてのコミットには、テストが必要です。
<blink>
テストなしでコードをマージしないでください!</blink>
APIを変更または追加するすべてのコミットは、関連するすべてのサンプルとドキュメントも更新するプルリクエストで行う必要があります。
React Routerは、複数のパッケージのコードをホストするためにモノレポを使用しています。これらのパッケージはpackages
ディレクトリにあります。
依存関係のインストールとさまざまなスクリプトの実行を管理するために、pnpmワークスペースを使用しています。すべてをインストールするには、pnpmがインストールされていることを確認してから、リポジトリのルートからpnpm install
を実行します。
ルートディレクトリからpnpm build
を呼び出すと、ビルドが実行され、数秒しかかかりません。個々のパッケージは相互に依存しているため、すべてのパッケージを一緒にビルドすることが重要です。
テストを実行する前に、ビルドを実行する必要があります。ビルド後、ルートディレクトリからpnpm test
を実行すると、すべてのパッケージのテストが実行されます。特定のパッケージのテストを実行する場合は、pnpm test --projects packages/<package-name>
を使用します。
# Test all packages
pnpm test
# Test only react-router-dom
pnpm test --projects packages/react-router-dom
このリポジトリは、異なる目的のために個別のブランチを保持しています。それらは次のようになります。
- main > the most recent release and current docs
- dev > code under active development between stable releases
- v5 > the most recent code for a specific major release
さまざまな機能や実験のために他のブランチが存在する可能性がありますが、すべての重要な処理はこれらのブランチから行われます。
新しいリリースを作成する時期が来たら、リリースの種類に応じて、ブランチ戦略に基づくプロセスに従います。
react-router@next
リリースdev
ブランチの現在の状態から実験的なリリースを作成します。それらは@next
タグを使用してインストールできます。
pnpm add react-router-dom@next
# or
npm install react-router-dom@next
これらのリリースは、PRがdev
ブランチにマージされると自動化されます。
# Start from the dev branch.
git checkout dev
# Merge the main branch into dev to ensure that any hotfixes and
# docs updates are available in the release.
git merge main
# Create a new release branch from dev.
git checkout -b release/v6.1.0
# Create a new tag and update version references throughout the
# codebase.
pnpm run version [nextVersion]
# Push the release branch along with the new release tag.
git push origin release/v6.1.0 --follow-tags
# Wait for GitHub actions to run all tests. If the tests pass, the
# release is ready to go! Merge the release branch into main and dev.
git checkout main
git merge release/v6.1.0
git checkout dev
git merge release/v6.1.0
# The release branch can now be deleted.
git branch -D release/v6.1.0
git push origin --delete release/v6.1.0
# Now go to GitHub and create the release from the new tag. Let
# GitHub Actions take care of the rest!
重要なバグをすぐに修正する必要がある場合があります。バグが最新リリースに影響する場合は、main
(またはバグが存在する関連するメジャーリリースブランチ)から直接新しいバージョンを作成できます。
# From the main branch, make sure to run the build and all tests
# before creating a new release.
pnpm install && pnpm build && pnpm test
# Assuming the tests pass, create the release tag and update
# version references throughout the codebase.
pnpm run version [nextVersion]
# Push changes along with the new release tag.
git push origin main --follow-tags
# In GitHub, create the release from the new tag and it will be
# published via GitHub actions
# When the hot-fix is done, merge the changes into dev and clean
# up conflicts as needed.
git checkout dev
git merge main
git push origin dev