2014年2月10日月曜日

COVERALLSのバッジがGithub上で更新されない問題

dmm4sというライブラリを作ってる。

ライブラリ自体は、DMM APIを叩いて結果のXMLをScalaのcase classにマッピングしているだけの多愛のない物だ。

このライブラリを作ったテーマは、「ライブラリとしてちゃんと作る」ということ。
Maven Centralリポジトリへの登録であるとか、CIを構築するとか、テストを書く、とか。そういう「OSSとしてちゃんと作る」という事を自分のテーマとしてやってみた。

そういうテーマを課して作ってみたので、GithubのREADMEにその証としてTravis CIとCOVERALLSのバッジを貼ってみた。

しかしこのせいでドハマりすることになる。

まずはこちらのスクリーンショットを見ていただこう。










これはdmm4sの0.1-SNAPSHOTをリリースした時のREADMEのスクリーンショットである。COVERALLSのバッジの色が赤いのが御覧いただけると思う。このバッジが示すカバレッジは71%。COVERALLS的にはテスト足りてないんじゃないの? と警告されているわけである。

しかし、実際にはこの時、COVERALLS上でのカバレッジは96%であった。お疑いのようならこちらのサイトへおもむき、「0.1-SNAPSHOTリリース」とコメントのついた履歴をご覧頂きたい。

カバレッジ71%というのは、dmm4sにCOVERALLSをはじめて導入した際のカバレッジである。つまり、GithubのREADMEとCOVERALLSとが連動していないのである。

しばらく待っていればそのうち連動されるだろう、と思いつつ数日を過ごすも一向に変わらない。READMEを更新してみたり、バッジを一旦削除してみたりしても変わらない。

行き詰まった僕は、COVERALLSにissueを投げてみた。

https://github.com/lemurheavy/coveralls-public/issues/209

結果、中の人からは「youのバッジは最新になってるYO!」とのこと。どうやらこちらの意図がうまく伝わらなかったのだろうか。
issueのコメントには「Please re-open the issue if you see it happen again.」と書いてあるのだが、re-openのボタンがどこにも見当たらない。

オレのアカウントにre-openできる権限ねーじゃねーか!!!!

ふと思い立ち、ChromeでREADMEに貼ってあるバッジ部分のコードを読んでみる。

するとこのバッジ、HTML上はgithubのキャッシュを参照しているようだ。

僕がREADMEに貼っている実際のリンクは次のコードである。

https://coveralls.io/repos/daiksy/dmm4s/badge.png?

このリンクが変われば、キャッシュも更新されるだろう、と思い、"https"を"http"に変えてコミットしてみた。そうすると…。












更新されたああああああ!!

しかし、次にカバレッジが変わった場合にはもう一度"https"にしたらなおるんだろうか…。

2014年2月8日土曜日

sbt 0.13.1でMaven Centralリポジトリに登録する方法

今日の第3回 Scala関西ビギナーズに間に合わせようと、先週から毎日少しずつコードを書き進めて、dmm4sというライブラリを作った。

SNAPSHOT版とはいえなんとか勉強会当日にリリースが間に合い、そこそこの笑いを取ることができた。

sbt はご存知の通り、ver間の互換性に難があり、sbt 0.13.1でのライブラリ開発はちょくちょく詰まりポイントがあった。Travis CI, Coverallsの利用など、多くはsbtのverによる依存関係の問題で、基本的には各pluginやライブラリの最新版を使うことで解決することができた。

Maven Centralリポジトリへの登録も、基本的にはsbtのドキュメントの通りで問題なかったのだが、ちょくちょく苦労したポイントがあったのでまとめておこうと思う。

環境は
sbt version: 0.13.1
scala version: 2.10.3
Mac OS X 10.9.1

1. Sonatype OSSRHでJIRA登録

まずはSonatype JIRAにユーザ登録し、ログイン。その後画面の左上あたりにある"create issue"をクリックし、必要事項を記入する。

Issue Type: "New Project"を選択
Summary: プロジェクトの概要
Group Id: build.sbtなどに設定している、organizationの値
Project Url: プロジェクトのサイトURL(githubのURLで良い)
SCM Url: githubのURL

ちなみにdmm4sのチケットはこちら

しばらく(1日くらい?)待っていると、中の人が設定終わったよ、という返信をくれる。
僕は深夜にJIRA登録したのだが、登録後10分くらいで返信が来てビビったw

2. PGPキーの作成

gpg --gen-key
コマンドでPGPキーを作る。gpgが入って無ければ、
brew install gpg
でインストールできる。

gpg --lisy-key
で作成されたキーを確認し、
gpg --keyserver http://pool.sks-keyservers.net --send-keys {キーID}
でkeyserverに公開鍵を登録する。

3. sbtのセッティングとpublish

http://www.scala-sbt.org/0.13.1/docs/Community/Using-Sonatype.html

上記のドキュメントに従い、sbtに各種設定を追記する。
基本的にはここに書かれているコードをコピペしつつ、sonatypeのパスワードとか、自分のプロジェクトのURLなどを書き換えればいいのだが、publish時にPGPキーの署名をする部分でうまくいかなかった。

sbt 0.13 でPGPキーの署名をしつつpublishするには、SBT PGP Pluginをインストールし、sbtで
publishSigned
のコマンドを実行する。

上記のsbtドキュメントにもSBT PGP Pluginへのリンクが貼ってあり、ここに"~/.sbt/plugins/gpg.sbt"ファイルを作成して、"addSbtPlugin("com.typesafe.sbt" % "sbt-pgp" % "0.8.1")”と書け、とある。

僕もそれに従ったのだが、sbtで"publishSigned"のコマンドを認識してくれない。

これは、ファイルの作成場所が間違っており、正しくは"~/.sbt/0.13/plugins/gpg.sbt"が正しい。

4.リリースの処理を実行

https://oss.sonatype.org/index.htmlにアクセスし、sonatype JIRAと同じアカウント、パスワードでログインする。

左側の一覧から"Staging Repositories"をクリックすると、一覧が表示され、自分のプロジェクト選択。"close"を実行する。ここで成功したら"release"を実行。

あとはJIRAに、リリースした旨をコメントすれば、中の人がCentralリポジトリに同期させてくれる。

とまぁ、こんな感じ。