コンテンツにスキップ

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