NEW: プロジェクトの最新情報はTwitterMastodonで入手してください。

cert-managerへのサードパーティコードの寄贈

cert-managerプロジェクトは外部からの貢献を歓迎しており、数百人の異なるコントリビューターからの数千のコミットによって大きな恩恵を受けています。ほとんどのコードは通常、メインのcert-managerリポジトリ、またはウェブサイトなどの関連リポジトリのいずれかに対するプルリクエストを通じてコミットされます。

ただし、一部の貢献はそのようなワークフローにはあまり適していません。それは、その機能が特定の既存のcert-managerリポジトリに属さず、cert-managerプロジェクトに関連している可能性が最も高いからです。

このドキュメントは、cert-managerプロジェクトへのコードの寄贈に対処し、cert-managerメンテナーとユーザーの両方がテストして今後信頼できる持続可能な貢献のためのフレームワークを提供することを目的としています。

このドキュメントの要件は、CoreDNS、Envoy、Kubernetes、containerdで行われていることに一部基づいています。

要件

  1. コードは、すべての依存関係を含めて適切にライセンスされている必要があります
    cert-managerが使用しているため、Apache 2.0を推奨しますが、ライセンスはOSI承認済みである必要があります。
  2. コードはCNCF標準およびデューデリジェンス要件に準拠している必要があります
    これを細かく調べる必要はありません。ここでの意図は、コードの寄贈がCNCFプロジェクトとしてのcert-managerの進捗に悪影響を及ぼさないようにすることです。CNCFデューデリジェンステンプレートを参照してください
  3. 既存のメンテナーによるスポンサーが必要です
    cert-managerへの既存の定期的な貢献者は、サードパーティのコード寄贈の採用をスポンサーする必要があります。これにより、コードを寄贈する当事者に対して単一の連絡窓口が確保されます。
  4. cert-manager適合性テストに合格する必要があります
    これはすべての寄贈に適用されるわけではありませんが、適合性テストが存在する場合、寄贈されたコードはそれらに合格する必要があります。例:外部イシューの場合
  5. 受け入れ後少なくとも3か月間、プロジェクトに関する質問の連絡窓口を提供する必要があります。寄贈を受け入れた後、頻繁に連絡する必要があるとは考えていませんが、必要に応じて連絡できる人がいることは重要です。
  6. 寄贈は定義された拡張タイプであるか、メインのリポジトリに属さない理由を正当化する必要があります
    例:ACME DNSソルバー、カスタムイシュー、またはACME HTTPソルバー
  7. コードは、cert-manager自体と同等の品質レベルである必要があります。これは、たとえば、cert-managerで使用されているものと同様の静的分析ツールをコードベースで実行することで強制できます。
  8. コードには、単体テストとエンドツーエンドテストの両方を含む、自明ではないテストスイートが必要です。これらのテストは、リポジトリに対してPRが発行された後、全体として実行できる必要があります。100%のコードカバレッジは必要ありませんが、重要な機能のテストが必要です。
  9. プロジェクトは、cert-managerのセキュリティポリシーを採用し、たとえばistio-csr SECURITY.mdのように、そのポリシーへのリンクを返す必要があります。
  10. すべてのコミットについてDCO署名またはカバレッジが必要です。すべてのコードが合法的に寄贈できるように、すべてのコミットにはDCO署名があるか、寄贈前に各コントリビューターによって肯定的な確認がなされている必要があります。下記参照。

優先事項

これらの項目は絶対に必要ではありませんが、コードの寄贈を受け入れる場合は間違いなく役立ちます。

  • Goで記述する必要があります
    コードをGoで記述する必要はありませんが、Goで記述されている方がはるかに望ましいです。cert-manager自体がGoで記述されているため、Goでのコード寄贈により、Goコードに関する既存の経験とツールを使用できます。

DCO署名

寄贈者がコードを寄贈する許可を持っていることを保証する方法として、寄贈時にDCO署名または同等のものを設置する必要があります。

cert-managerのDCO署名プロセスが適切です。既存のコントリビューターは、以前のコードがそのコミット時点で署名されたと見なされるべきであるというメモ付きの空の署名済みのものを作成することで、このプロセスをブートストラップできます。

git commit --allow-empty --signoff --message="bootstrapping DCO signoff for past commits"

寄贈後

寄贈されたリポジトリのコードファイルは、関連するcert-managerボイラープレートを含むように更新する必要があります。