OSSコントリビューション@開発手法¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. OSSコントリビューションのコツ¶
Issueから見つける¶
OSSによっては、help wanted
やgood 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