basyura's blog

あしたになったらほんきだす。

GitLab に初コントリビュートをキメた

GitLab Advent Calendar 2016 - Qiita の 21日目の前エントリ。

GitLab に Merge Request が取り込まれたので初コントリビュートをキメることができた。

  • CE/EE: Fix display hook error message (!7775)

これは Merge Request 取り込み時にサーバサイドの update hook がエラーを返すと応答がなくなる(ように見える)不具合の修正。

背景

仕事プロジェクトで GitLab を社内に設置。コミットログのルール強制やおかしなコミットが入り込まないための判定に update hook を使用。

通常、手元のターミナルから push した際に hook で蹴られると内容がターミナルに表示される。ところが Web 上の Merge Request から Accept Merge でマージした時に update hook で蹴られるとハングしたようになってしまう。

実際にはサーバから失敗した旨の応答が返ってきているのだけどメッセージの表示で失敗する。javascript で UI の書き換えができていないのでエラーメッセージが表示されずグルグル回るインジケータが表示されたままになる。これが処理中のままに見えてしまう。

調査

社内では Merge Request の運用が本格的に始まっていなかったので "そのうち直るだろう” と思っていたのだけどそうでもなかった。自分で直せるか分からないけど見始めてみる。

CentOS 上に yum でインストールしている資源にデバッグログを入れてみるもよく分からない。サーバ側から応答がちゃんと返っていないからだろうと調べていたけど返っているようにみえる。やっぱりよく分からんわと issue を徘徊したところ発見。

コメントを見ると

  • javascript でエラーが出ている
  • 発生箇所が書いてある

そこまで分かればなので、修正することができた。

ついでなので "こうすれば直ると思うよ” と issue にコメントをしてみる。結果的に直し方はちょっと違っていたのだけど、 ここまで書いていれば誰かが反応して一瞬で直るだろうと思っていた。仕事プロジェクトの方では同じ修正を入れたので運用は解決。

MR 登録

1 週間ほど経過を見守っていたのだけど反応が無い。修正が軽微とはいえ困る人は多そうなのに。週末に時間が取れ、ちょうど良いので Merge Request を作ってみることにした。まずは環境づくりから。

mac で環境を作る。

若干ハマったけどドキュメントを読めていないだけだった。コマンド一発で GitLab がローカルで立ち上がり、ユーザー登録からリポジトリの登録、コミットして push までできると感動した。後は Merge Request を作るだけ。

Merge Request を作る際の説明部分にテンプレートが埋め込まれているので、それに沿って記載すれば良い。軽い気持ちであったというか、なんとなく採用されずに他の人が直しちゃいそうだし直し方が間違ってる可能性もありそうなのでテストやライセンスの記述はすっ飛ばして登録した。

この時に issue にコメントした内容ではない正しい直し方に気がついたので改めた。

MR レビュー

数日後に反応がある。まずは、直し方についての指摘。直し方は正しかったがバグ修正に加えて表示方法を変えていることに関してだった。

単純にバグを直すだけだと update hook の結果が h4 タグで表示されてしまう。自分のプロジェクトでもそうだけど、hook が返すメッセージが 1 行で済むケースはあまりなさそう。しかも、ターミナル等で表示することを想定すると html であるはずがなく複数行に渡るプレーンテキストになるだろうと。それで h4 を pre に変えてコミットした。

やり取りの結果、バグと機能修正を分けようということになり、それはそうだと納得してバグ修正のみを適用。表示方法の改善については別の issue が登録された。

a test please.

javascript のテストを書いたことが無いので自信が無かったのだけど、GitLab の中の人がテストについて教えてくれるので頑張ってみる。Google 先生に聞きながら斜め読みしつつ他のテストを参考してみた結果なんとか書けた。

ブラウザを起動してテストを実行していたのだけど terminal から実行できると教えてもらえた。こっちの方が楽だ。

Can you also add a changelog?

GitLab の中の人に changelog の作り方を教えてもらう。CHANGELOG.md とは別に changelog 用のファイルを追加して終了。

テスト

GitLab の環境が非力なのか関係ないところでテストがコケまくる。容量不足的なエラーもちょいちょいでる。最初の push からテストは通っていないので関係無いところでコケてると思っていた。実際そういうところもあったのだけど push する前にした rebase が最新に対してじゃなかったのも一因だった。改めて rebase & push して何回かテストをリトライしたのち見事テスト通過。

LGTM

初めての LGTM をいただく! 無事 8.14.5 でリリースとなった。

まとめ

しょぼい修正ながら MR からリリースまでやった印象。

GitLab チーム優しい!

GitLab の中の人なら半日で MR 作成から修正完了まで終えていたに違いない。それを粘り強く付き合ってくれたので途中から申し訳ない気持ちになりつつも速く終わらせようという前向きな気持になれた。GitLab 社としての方針ではあるだろうけど、沢山ある MR に対して同様の対応を進めるというのはかなりの労力が必要になりそう。

GitHub に対抗できてプライベート環境にデプロイ可能なサービスとしてはありがたいことこの上ない。今後も GitLab をウォッチしつつ可能なら MR を再度キメたい。何事もそうかもしれないが仕事に直接絡むような当事者の位置になると愛着がでるし調べてみようという気になる。

GitLab 便利!