依存関係バージョンのアップグレード
Renovate
私たちは、renovate botを使用して、この設定に基づき、依存関係を更新するためのPRを自動的に作成しています。
依存関係ダッシュボード
Renovateは、ツールの状態を理解するために使用できる依存関係ダッシュボードissueを管理するように設定されています。
- renovateがアクションを実行するために承認が必要な依存関係の更新 (例: メジャーバンプであるため)
- renovateが作業中の依存関係の更新 (保留中)
- 現在オープンで、レビューとマージを待っている依存関係の更新
- renovateは非同期ツールであるため、このリストはPRをマージした後、少し遅れることに注意してください。
- 無視された依存関係の更新
このissueのチェックボックスをオンにすると、renovateが依存関係のアクションを実行します。
- 「承認待ち」リストのチェックボックスをオンにすると、承認され、renovateがPRを作成します。
- 「ステータスチェック待ち」リストのチェックボックスをオンにすると、renovateは内部ステータスチェックが完了する前にPRを作成します。
- 「オープン」リストのチェックボックスをオンにすると、renovateはPRをリベース(手動変更がない場合)または再作成(手動変更がある場合)します。
- 「無視またはブロック」リストのチェックボックスをオンにすると、renovateはPRを再作成します。
Renovate PRのマージ
ブランチ保護が有効になっているため、Renovateは依存関係PRを自動的にマージしません。 Renovate PRは、人間のPRと同じワークフローを経る必要があります。つまり、すべてのPRは、マージされる前に、ステータスチェックに合格した状態で承認される必要があります。
Renovateは、main
との競合がある場合、PRを自動的に更新します。 また、PRの説明のチェックボックスをオンにするか、依存関係ダッシュボードの該当するチェックボックスをオンにすることで、PRを強制的にリベースすることもできます。
Github UIの「ブランチの更新」ボタンをクリックすることは避けてください。これは人間のコミットを作成し、renovateがブランチを「ダーティ」として扱う原因となり、自動的に更新されなくなります。すぐにPRを手動でマージする予定がある場合にのみクリックしてください。
手動による依存関係の更新
renovateの多くのPRに頼るのではなく、1つのコミットで依存関係を手動で更新することが望ましい場合があります。そのためには、次の手順に従ってください。
git checkout main && git pull
yarn install
yarn update-interactive
- これは、依存関係を更新するためのyarnのプロンプトを開始します。*
が付いた依存関係の行は無視してください。これらは意図的にそのように設定されています。- TypeScriptに設定されている複雑な範囲 (例:
>=4.7.4 <5.5.0
) のような依存関係の範囲を変更しないでください。 - 準備ができたら、
enter
キーを押すと、yarnが変更を行い、インストールを再実行します。
- PRを作成する前に、関連するすべてのチェックをローカルで実行して、エラーに対処できるようにします。
yarn build
yarn typecheck
yarn lint
yarn test
yarn integration-test
- 新しいブランチを作成し (一意にするために
update-deps-20231201
のような名前が良いです)、PRを作成してマージします。
Babel
公開されているパッケージは、@babel/*
パッケージをdevDependenciesとしてのみ依存しています。通常、これらの依存関係は以下でアップグレードできます。
yarn add -D @babel/code-frame @babel/core @babel/eslint-parser @babel/parser @babel/types
npx nx run ast-spec:test -u
packages/ast-spec/
の下にあるfixtureは、Babelと私たちの(TSESTree)パーサーの両方でファイルがどのように解析されるかを記述しています。
ESLint
typescript-eslintリポジトリには、eslint
パッケージの4種類のバージョン範囲が含まれています。
- 統合テスト: サポートされているESLintの最低バージョンに固定されています。
*
peerDependency
バージョンを持つパッケージ: これらは明示的なpeerDependency
バージョンにフォールバックします。- 明示的な
peerDependency
バージョンを持つパッケージ: サポートされているESLintのメジャーバージョンの全範囲 - ルート
package.json
のdevDependency
: 比較的最近のリリースで、リポジトリ開発にのみ使用されます。
古いESLintバージョンの削除によってブロックされている新しい作業領域 (新しいESLint APIの廃止など) が見つかった場合は、古いESLintバージョンのサポートの削除にある正規表現によって検出される *TODO* コメントを追加してください。
新しいESLintバージョンのサポートの追加
- ルート
package.json
devDependency
を最新のESLintにアップグレードします。 - 明示的な
peerDependency
バージョンに新しいメジャーバージョンを追加します。 - 同様にアップグレードする新しいバージョンがあるかどうか、
eslint-visitor-keys
を確認してください。 - ユーザー > 依存関係バージョン > ESLintを更新します。
古いESLintバージョンのサポートの削除
- 統合テストを次に低いサポートされているメジャーバージョン (
*.0.0
) に上げます。 - 明示的な
peerDependency
バージョンを持つパッケージから古いメジャーバージョンを削除します。 - 現在サポートされていないESLintのバージョンに言及しているソースコードコメント (
CHANGELOG.md
ファイルを除く) を検索します。- たとえば、v5のサポートを削除するには、次のような検索を実行します。
/eslint.*5/i
/todo.*eslint.*5/i
/todo.*eslint/i
- たとえば、v5のサポートを削除するには、次のような検索を実行します。
- ユーザー > 依存関係バージョン > ESLintを更新します。
参考として、chore: drop support for ESLint v6を参照してください。
Node
typescript-eslintリポジトリには、Nodeの3種類のバージョン範囲が含まれています。
.github/workflows/ci.yml
のPRIMARY_NODE_VERSION
: サポートされている最高のNodeバージョンに設定されています。node-version
: CIでの単体テスト用に、サポートされている[最低、最高]
バージョンのタプルに設定されています。- すべての
package.json
のengines
フィールド: サポートされているすべてのNode範囲を明示的にリストしています。
新しいNodeバージョンのサポートを追加したり、古いNodeバージョンのサポートを削除したりする場合は、それに応じてこれらの数値を変更してください。
参考として、feat: drop support for node v12 と chore: test node v14 on ci.yml を参照してください。
TypeScript
新しいTypeScriptバージョンのサポート追加
私たちは通常、新しいTypeScriptバージョンのサポートプロセスを、そのバージョンの最初のベータリリースが公開された直後に開始します。
-
TypeScript X.Y Support のようなタイトルで、
accepting prs
、AST
、dependencies
、New TypeScript Version
ラベル、および以下の内容を含むissueを作成してピン留めします。-
Microsoftのissueトラッカーにある *TypeScript X.Y Iteration Plan* issueへのリンク
-
以下のテキスト
This issue is just to track all of the new features and their implementation state in this project.
As with all releases, we will not necessarily support all features until closer to the full release when everything the features are stabilised.
_Please be patient._ ❤️ -
イテレーションプランで呼び出された、私たちに影響を与える新しいTypeScript機能ごとに、
🔲
で始まる見出し -
🔲
lib.d.ts
Updates というタイトルの見出しと、scope-manager
内の型を再生成する必要があります という内容 -
私たちに影響を与えないと思われるその他の変更のリストを含む、Other changes with no impact to us というタイトルの見出し
-
-
この段階では、必要な機能を実装するPRを送信したりレビューしたりしても問題ありませんが、新しいTypeScriptバージョンのRCがリリースされるまでマージは待ちます。
- PRが作成されるたびに、対応する見出しに
(#1234)
を追加し、見出しの絵文字を 🔲 から 🏗 に変更します。 - Babelでまだサポートされていない構文をサポートする方法については、
expectBabelToNotSupport
を検索してください。
- PRが作成されるたびに、対応する見出しに
-
TypeScript RCバージョンがリリースされたら、PRのマージを開始します。
- PRがマージされるたびに、対応する見出しの絵文字を 🏗 から ✅ に変更します。
-
feat: update TypeScript to X.Y-rc
のようなタイトルと以下の変更を含むPRを作成します。- ルートの
package.json
で、typescript
のdevDependency
に|| X.Y.1-rc2
を追加します。 - パーサーの
getLib
で、switch (target)
とその前のコメントを必要に応じて更新します(#6782 を参照)。 SUPPORTED_TYPESCRIPT_VERSIONS
定数の<
バージョンをTypeScriptの次のバージョンに変更します。SUPPORTED_PRERELEASE_RANGES
定数を['X.Y.1-rc']
と等しくなるように変更します。patches/typescript*
の名前を変更し、新しいTypeScriptバージョンに更新します。yarn generate-lib
を実行してscope-manager
を更新します。
- ルートの
-
RC更新PRに必要なすべてのPRがマージされたら、RC更新PRをマージします。
-
TypeScriptが安定版のX.Yバージョンをリリースしたら、
chore: bump TypeScript from X.YRC to X.Y
のようなタイトルと以下の変更を含むPRを作成してマージします。- ルートの
package.json
で、typescript
のdependency
から|| X.Y.1-rc2
を削除し、その<
バージョンをTypeScriptの次のバージョンに上げます。 - ルートの
package.json
で、typescript
のresolutions
をX.Y.3
に変更します。 patches/typescript*
の名前を変更し、新しいTypeScriptバージョンに更新します。- RCバージョンと安定版の間のTypeScriptの変更によって必要になったその他の変更
- ルートの
-
このドキュメントページを更新して、新しいissueとPRを指すようにするPRを送信します。
- また、異なるプロセスを使用する場合は、これらの手順を更新してください。
参考として参照してください(ただし、これらはここで説明されている正確なプロセスに従っていません)。
- TypeScript 4.7 サポート
- TypeScript 4.8 サポート
- feat: TypeScript 4.8 のサポート
- feat: TypeScript 4.9 のサポート
- chore: TSを4.9RCから4.9に上げる
古いTypeScriptバージョンのサポートの削除
単一のPRで、破壊的変更として古いTypeScriptバージョンのサポートを削除できます。
- ルートの
package.json
のdevDependency
を更新します。 warnAboutTSVersion.ts
のSUPPORTED_TYPESCRIPT_VERSIONS
定数を更新します。version-check.ts
のversions
定数を更新します。- ユーザー > 依存関係のバージョン > TypeScript を更新します。
packages/website/src/components/OptionsSelector.tsx
のMIN_TS_VERSION_SEMVER
を更新します。- 現在サポートされていないTypeScriptのバージョンに言及しているソースコードのコメント (
CHANGELOG.md
ファイルを除く) を検索します。- たとえば、v4.3のサポートを削除するには、検索に以下を含めることができます。
4.3
/is.*4.*3/i
/semver.*4.*3/i
/semver.satisfies/
/todo.*ts/i
/todo.*typescript/i
- たとえば、v4.3のサポートを削除するには、検索に以下を含めることができます。