デプロイメントとプロジェクト管理タスクを簡略化するために、それぞれ semver バージョンを持つ複数のパッケージを含むmonorepoを維持しています。明確にするために、1つの場所から管理される複数のリポジトリを意味するのではなく、共通のツールチェーンで複数のパッケージを追跡する単一のGitリポジトリを意味します。これは、これが私のチームによって維持されている唯一のリポジトリであることを意味するものではないことに注意してください。私は特定の配信パイプラインで問題の1つを管理するだけです。
パッケージ内のメジャーバージョンのバンプは、monorepo自体のメジャーバージョンのバンプを正当化しない可能性があるため、monorepo自体をsemverでバージョン管理することは困難です。他のパッケージではまだ使用されていない新しい設計システムを使用しているという理由で、GUIをv2.9.3
からv3.0.0
に移行します。以下の理由により、これは間違いなくmonorepoの重大な変更ではありません。
Monorepoとパッケージのバージョン変更の関係は、非常に具体的または脆弱な想定を客観的に取らない限り、一般に自動化が困難です。
モノレポに独自のバージョンと関連するタグがない場合、会社全体で使用するgit describe
出力が混乱するため、2つのバージョンのバンプが同時に発生する必要があると想定しています。
私の立場でどんな戦略を適用しますか?
他のユーザーから読んだことを踏まえて、いくつかの詳細を明らかにしましょう。社内で改訂を管理するための戦術がいくつかあると想定します。 semverのmonorepoがありますが、gitサブモジュールを使用する別のリポジトリと、クロススタック展開ツールを使用する別のリポジトリがあります。私の立場を考えると、残念ながら現在のところ、1つのオプションで正規化する提案は実行不可能であると想定する必要があります。リポジトリを分割または結合することは、波及効果を伴う重大な変更です。これは、リポジトリでsemverの使用に質問を限定している理由を理解するのに役立ちます。これは、最もコストのかからない変更です。
おそらく、より管理しやすいソリューションは変更ログです。
とにかくパブリッシングコンポーネントの場合、変更ログがあるはずです。チェックインのコメントについて話しているのではありません。ソフトウェアの重要な変更を記述したバージョン管理されたファイルについて話している。
ファイルを先頭に追加するだけにします。アスタリスクなどの記号を使用して大きな変更を追加し、プラス記号を使用して小さな変更を追加します。リストは、ハイフンの改ページで終了します。例: "-----"
「----」までのリリースジョブでログを検査してください。検出した内容と以前のバージョン番号に基づいて、新しいサーバーを生成します。大きな変更がログにある場合の大きなバンプ。マイナーバージョンがログにある場合はマイナーバンプ、それ以外の場合はパッチ番号をバンプします。リリースが開発中の場合は、増分ビルド番号を追加します(必要に応じて、その後にコミット番号を付けます)。リリースが完全なリリースの場合、ジョブは最終バージョン番号を変更ログに挿入し、新しい空のセクションを付加します。
リリースジョブは、チームの機能に応じて、自動(テスト後)または手動で実行できます。
誤って編集された変更ログが原因でリリースジョブが失敗した場合の追加ポイント。
リポジトリにはバージョンがありません。リポジトリ内のソフトウェアにはバージョンがあります。
通常は、そのコミットのソフトウェアのバージョンでコミットにタグを付けることができます
ただし、リポジトリに複数のバージョン管理されたコンポーネントがある場合、単一のバージョン番号に複数のバージョンを反映することはできません。
コンポーネントがリポジトリの外で使用されていない場合、コンポーネントは独立したバージョンを実際には必要としません。メインアプリケーションをバージョン管理して、それを「レポバージョン」として使用できます。
単独で公開されている個別のライブラリがある場合は、それを独自のリポジトリに移動し、メインアプリや他のコンポーネントとは異なる独自の番号でバージョン管理を開始します。
これにより、各リポジトリ内のソフトウェアの単一のバージョン化されたビットと一致するリポジトリバージョンを使用できます。
また、ライブラリを完成させ、変更されていないバイナリを使用することもできます。心配するバグの原因が1つ少なくなります。