これは semver 自体の仕様(これは非常に明確です)ではなく、ライブラリを構築するときに開発パイプライン内で実装するための最良のアプローチです。
TL; DR:バージョンを設定し、アーティファクトをデプロイするのは誰/何ですか?いつですか?
内部のMavenベースのGitHubでホストされるJava libsは他の人たちにとって役立つ可能性があるため、一部をオープンソース化する予定です。
master
、および更新されるたびに直接master
に行くPRでテストを実行します。さて、バージョンを更新して成果物を配信するための最良のアプローチは何ですか?私はいくつか見ることができます:
「リリース駆動型」であること:GitHub UI(github.com/owner/repo/releases)を介してGitHubリリースが手動で作成されるたびに、別のパイプラインが開始され、作成されたタグを読み取ってフェッチし、mvn versions:set
を実行してからmvn deploy
(単純に入力)。その場合、実際にコミットされたPOMのバージョンを変更する必要はありません。 0-SNAPSHOT
に滞在できます。
「マージドリブン」であること:PRがmaster
にマージされるたびに、上記とほぼ同じパイプラインがトリガーしますが、POMのバージョンを使用します(またはデフォルトでパッチ番号を自動的にインクリメントするか、それに沿って何かを行います)行)。次に、対応するGitHubリリースを自動または手動で作成する必要があると思います。
完全に手動である:バージョン管理とリリースを何らかの方法で処理した後、一部の開発者は手動でmvn deploy
を実行する必要があります。
あなたのアプローチ。
人々はどうやってそこに進みますか?最善の方法はありますか?内部サービスとライブラリの場合、master
へのマージが成功すると、いくつかのバージョン番号がインクリメントされてデプロイメントがトリガーされますが、semverを厳密に追跡したい場合、これは適切なアプローチですか?
また、semverはバージョンに意味があるため、完全に自動化することはできないと思いますか?一部の人間は、今後のリリースがパッチか、マイナーかメジャーかをシステムに認識して伝える必要があると思いますか?
同様に留意すべき1つのケースは、変更(たとえば、セキュリティパッチ)を、まだ維持されている古いバージョンにバックポートする必要がある場合です。
私は opensource.stackexchange.com で最初にこの質問をしましたが、それは本当にOSSに関連しているのではなく、サーバーに関係していることに気付いたので、代わりにここで運を試しています。
オープンソース製品について話しているとき、バージョン管理とリリースのスケジュールはチームのポリシーに基づいています。私がいくつかのApache Software Foundationプロジェクトに参加していたとき、プロセスは次のようになりました:
注:これは、ユビキタスCI/CDパイプラインとパッケージマネージャーの時代の前でした。そのため、プロセスの多くは自動化されています。
ただし、私が現在見ているバリエーションは、リリースブランチに昇格するもの(プロジェクトマスターであるか、専用の名前付きブランチがチームのポリシーに基づいているか)の責任者がプロジェクト担当者であるということです。
厳格なルールはありませんが、オープンソースの大きなことはコミュニティの合意を得ることです。これは通常、Slack、Gitter、メーリングリスト、またはその他の非同期通信によって獲得されます。チームが方向性と一連の機能について合意すると、次のバージョン番号が決まります。
方向の大きな変更は通常、いつかメインブランチを追い抜くブランチで開発されました。このようにして、マイナーバージョンの更新とバグ修正の更新が、主要な変更の準備が整うまでメインブランチから配信されます。