コンテンツにスキップ

OSS コントリビューション@開発手法

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. OSS コントリビューションのコツ

Issue から見つける

OSS によっては、help wantedgood first issue といったラベルづけをしてくれている。

OSS コントリビューションに入門しやすくなっている。


ツール

OSS コントリビューションするためのツールに関するバグを修正する。


Deprecated

エディタで Warning がでる箇所を修正する。


02. Kubernetes

コントリビューションの流れ

1. 公式リポジトリからフォークリポジトリを作る

公式リポジトリのフォークリポジトリを作る。

2. 開発環境にフォークリポジトリをクローンする

開発環境にフォークリポジトリをクローンする。

$ git clone --depth 1 git@github.com:hiroki-it/kubernetes.git

3. ユーザー名とメールを登録する

$ git config --local user.name "hiroki-it"

$ git config --local user.email "hasegawafeedshop@gmail.com"

# 確認する
$ git config --local --list

4. 公式リポジトリを宛先リポジトリとして登録する

リモートリポジトリとしてのフォークリポジトリとは別に、公式リポジトリを宛先に登録する。

$ git remote add upstream https://github.com/kubernetes/kubernetes.git

# 確認する
$ git config --local --list

remote.upstream.url=https://github.com/kubernetes/kubernetes.git
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*

# 公式リポジトリにはプッシュしないようにする
$ git remote set-url --push upstream no_push

5. 公式リポジトリから差分を取り込む

公式リポジトリ基点ブランチからフォークリポジトリに差分を取り込む。

このとき、マージコミットを作らないようにする。

そのため、git rebase コマンドを使用する。

$ git fetch upstream

$ git checkout master

$ git rebase upstream/master

あるいは、GitHub の画面操作で Sync を実行し、ローカルの master ブランチを強制的に更新してもよい。

$ git reset --hard origin/master

6. 変更をコミットする

ブランチを作成し、変更をコミットする。

ブランチ名やコミットメッセージは、リポジトリやプロジェクトのルールに合わせて決める。

$ git checkout -b feature/add_foo

$ git commit

7. フォークリポジトリにコミットをプッシュする

自身のフォークリポジトリにコミットをプッシュする。

$ git push https://github.com/hiroki-it/kubernetes/kubernetes.git feature/add_foo

8. プルリクエストを作る

フォークリポジトリ上の作業ブランチから公式リポジトリに対してプルリクエストを作る。


CLA

プルリクエストをレビューしてもらうにあたり、コミッターとリポジトリの間でライセンス契約が必要である。

ライセンス契約後、プルリクエストで /easycla というコメントを送信する。


動作確認

開発環境で動作確認のために make コマンドを実行する。

$ make verify

$ make test

$ make test-integration


実際にやってみた

▼ Structured Logging & Contextual Logging 対応

https://github.com/kubernetes/kubernetes/pull/124905 で OSS コントリビュートしてみた。

ロギング処理で正しい処理を実装できているかを静的解析する。

(1)

インストールする。

$ go install sigs.k8s.io/logtools/logcheck@HEAD
(2)

構造化ロギングのチェックを実行する。

$ $GOPATH/bin/logcheck -check-structured ./...

kubernetes/staging/src/k8s.io/cluster-bootstrap/util/secrets/secrets.go:66:3: unstructured logging function "Infof" should not be used
(3)

コンテキストロギングのチェックを実行する。

$ $GOPATH/bin/logcheck -check-contextual ./...

kubernetes/staging/src/k8s.io/cluster-bootstrap/util/secrets/secrets.go:66:3: function "InfoS" should not be used, convert to contextual logging
kubernetes/staging/src/k8s.io/cluster-bootstrap/util/secrets/secrets.go:66:3: function "V" should not be used, convert to contextual logging