メインコンテンツにスキップ

依存関係バージョンのアップグレード

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つのコミットで依存関係を手動で更新することが望ましい場合があります。そのためには、次の手順に従ってください。

  1. git checkout main && git pull
  2. yarn install
  3. yarn update-interactive - これは、依存関係を更新するためのyarnのプロンプトを開始します。
    1. *が付いた依存関係の行は無視してください。これらは意図的にそのように設定されています。
    2. TypeScriptに設定されている複雑な範囲 (例: >=4.7.4 <5.5.0) のような依存関係の範囲を変更しないでください。
    3. 準備ができたら、enterキーを押すと、yarnが変更を行い、インストールを再実行します。
  4. PRを作成する前に、関連するすべてのチェックをローカルで実行して、エラーに対処できるようにします。
    1. yarn build
    2. yarn typecheck
    3. yarn lint
    4. yarn test
    5. yarn integration-test
  5. 新しいブランチを作成し (一意にするためにupdate-deps-20231201のような名前が良いです)、PRを作成してマージします。

Babel

公開されているパッケージは、@babel/*パッケージをdevDependenciesとしてのみ依存しています。通常、これらの依存関係は以下でアップグレードできます。

  1. yarn add -D @babel/code-frame @babel/core @babel/eslint-parser @babel/parser @babel/types
  2. npx nx run ast-spec:test -u

packages/ast-spec/の下にあるfixtureは、Babelと私たちの(TSESTree)パーサーの両方でファイルがどのように解析されるかを記述しています。

ESLint

typescript-eslintリポジトリには、eslintパッケージの4種類のバージョン範囲が含まれています。

  • 統合テスト: サポートされているESLintの最低バージョンに固定されています。
  • * peerDependencyバージョンを持つパッケージ: これらは明示的なpeerDependencyバージョンにフォールバックします。
  • 明示的なpeerDependencyバージョンを持つパッケージ: サポートされているESLintのメジャーバージョンの全範囲
  • ルートpackage.jsondevDependency: 比較的最近のリリースで、リポジトリ開発にのみ使用されます。
ヒント

古いESLintバージョンの削除によってブロックされている新しい作業領域 (新しいESLint APIの廃止など) が見つかった場合は、古いESLintバージョンのサポートの削除にある正規表現によって検出される *TODO* コメントを追加してください。

新しいESLintバージョンのサポートの追加

  1. ルートpackage.json devDependencyを最新のESLintにアップグレードします。
  2. 明示的なpeerDependencyバージョンに新しいメジャーバージョンを追加します。
  3. 同様にアップグレードする新しいバージョンがあるかどうか、eslint-visitor-keysを確認してください。
  4. ユーザー > 依存関係バージョン > ESLintを更新します。

古いESLintバージョンのサポートの削除

  1. 統合テストを次に低いサポートされているメジャーバージョン (*.0.0) に上げます。
  2. 明示的なpeerDependencyバージョンを持つパッケージから古いメジャーバージョンを削除します。
  3. 現在サポートされていないESLintのバージョンに言及しているソースコードコメント (CHANGELOG.mdファイルを除く) を検索します。
    • たとえば、v5のサポートを削除するには、次のような検索を実行します。
      • /eslint.*5/i
      • /todo.*eslint.*5/i
      • /todo.*eslint/i
  4. ユーザー > 依存関係バージョン > ESLintを更新します。

参考として、chore: drop support for ESLint v6を参照してください。

Node

typescript-eslintリポジトリには、Nodeの3種類のバージョン範囲が含まれています。

  • .github/workflows/ci.ymlPRIMARY_NODE_VERSION: サポートされている最高のNodeバージョンに設定されています。
  • node-version: CIでの単体テスト用に、サポートされている[最低、最高]バージョンのタプルに設定されています。
  • すべてのpackage.jsonenginesフィールド: サポートされているすべてのNode範囲を明示的にリストしています。

新しいNodeバージョンのサポートを追加したり、古いNodeバージョンのサポートを削除したりする場合は、それに応じてこれらの数値を変更してください。

参考として、feat: drop support for node v12chore: test node v14 on ci.yml を参照してください。

TypeScript

新しいTypeScriptバージョンのサポート追加

私たちは通常、新しいTypeScriptバージョンのサポートプロセスを、そのバージョンの最初のベータリリースが公開された直後に開始します。

  1. TypeScript X.Y Support のようなタイトルで、accepting prsASTdependenciesNew TypeScript Versionラベル、および以下の内容を含むissueを作成してピン留めします。

    1. Microsoftのissueトラッカーにある *TypeScript X.Y Iteration Plan* issueへのリンク

    2. 以下のテキスト

      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._ ❤️
    3. イテレーションプランで呼び出された、私たちに影響を与える新しいTypeScript機能ごとに、🔲 で始まる見出し

    4. 🔲 lib.d.ts Updates というタイトルの見出しと、scope-manager 内の型を再生成する必要があります という内容

    5. 私たちに影響を与えないと思われるその他の変更のリストを含む、Other changes with no impact to us というタイトルの見出し

  2. この段階では、必要な機能を実装するPRを送信したりレビューしたりしても問題ありませんが、新しいTypeScriptバージョンのRCがリリースされるまでマージは待ちます。

    • PRが作成されるたびに、対応する見出しに (#1234) を追加し、見出しの絵文字を 🔲 から 🏗 に変更します。
    • Babelでまだサポートされていない構文をサポートする方法については、expectBabelToNotSupport を検索してください。
  3. TypeScript RCバージョンがリリースされたら、PRのマージを開始します。

    • PRがマージされるたびに、対応する見出しの絵文字を 🏗 から ✅ に変更します。
  4. feat: update TypeScript to X.Y-rc のようなタイトルと以下の変更を含むPRを作成します。

    • ルートの package.json で、typescriptdevDependency|| 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 を更新します。
  5. RC更新PRに必要なすべてのPRがマージされたら、RC更新PRをマージします。

  6. TypeScriptが安定版のX.Yバージョンをリリースしたら、chore: bump TypeScript from X.YRC to X.Y のようなタイトルと以下の変更を含むPRを作成してマージします。

    • ルートの package.json で、typescriptdependency から || X.Y.1-rc2 を削除し、その < バージョンをTypeScriptの次のバージョンに上げます。
    • ルートの package.json で、typescriptresolutionsX.Y.3 に変更します。
    • patches/typescript* の名前を変更し、新しいTypeScriptバージョンに更新します。
    • RCバージョンと安定版の間のTypeScriptの変更によって必要になったその他の変更
  7. このドキュメントページを更新して、新しいissueとPRを指すようにするPRを送信します。

    • また、異なるプロセスを使用する場合は、これらの手順を更新してください。

参考として参照してください(ただし、これらはここで説明されている正確なプロセスに従っていません)。

古いTypeScriptバージョンのサポートの削除

単一のPRで、破壊的変更として古いTypeScriptバージョンのサポートを削除できます。

  1. ルートの package.jsondevDependency を更新します。
  2. warnAboutTSVersion.tsSUPPORTED_TYPESCRIPT_VERSIONS 定数を更新します。
  3. version-check.tsversions 定数を更新します。
  4. ユーザー > 依存関係のバージョン > TypeScript を更新します。
  5. packages/website/src/components/OptionsSelector.tsxMIN_TS_VERSION_SEMVER を更新します。
  6. 現在サポートされていないTypeScriptのバージョンに言及しているソースコードのコメント (CHANGELOG.md ファイルを除く) を検索します。
    • たとえば、v4.3のサポートを削除するには、検索に以下を含めることができます。
      • 4.3
      • /is.*4.*3/i
      • /semver.*4.*3/i
      • /semver.satisfies/
      • /todo.*ts/i
      • /todo.*typescript/i

feat: bump minimum supported TS version to 4.2.4 を参照してください。