GitHubのmilestone作成時のパラメータ型ではまった
About
拙作のギッハブのmilestoneを管理するツールでバグがあり、その中の話です。ちょいネタです。
ツール
ツールはこれです。少しずつ育てていっております。好き勝手弄れるものがあると遊べてよいですね。
はまったこと
普通に使っていたのですが、due_onが1日前で作成されていることに気づきました。。。
原因
パラメータをDate型で渡していた
create_milestoneにはdue_onを渡すことができますが、ここでDate型を渡していました。
Module: Octokit::Client::Milestones —
> require 'octokit' > client = Octokit::Client.new(access_token: ENV['GITHUB_ACCESS_TOKEN']) > aaa = Date.today > p aaa #<Date: 2018-01-23 ((2458142j,0s,0n),+0s,2299161j)> > client.create_milestone("tjinjin/codebuild-sandbox", 'test', state: "open", due_on: aaa) ... :due_on=>2018-01-22 08:00:00 UTC
Time型を渡してみた
次にDocument通りにTime型を渡してみます。
> client.create_milestone("tjinjin/codebuild-sandbox", 'test', state: "open", due_on: aaa.to_time) ... :due_on=>2018-01-22 08:00:00 UTC
ムムッ
パラメータを確認してみると、
> aaa.to_time => 2018-01-23 00:00:00 +0900
なので、仮にUTC変換されても2018-01-22 21:00:00 UTC
ではないのでは?という気分になり始めます。(ここから長考した)
Time型(iso8601)
GitHubのAPIドキュメントを見ると形式が指定されていました。
Issue Milestones | GitHub Developer Guide
なので、その形式で渡してみます。
> client.create_milestone("tjinjin/codebuild-sandbox", 'test', state: "open", due_on: aaa.to_time.iso8601) ... :due_on=>2018-01-23 08:00:00 UTC
ということで形式を変えたらうまくいきました。
ちなみにWebからmilestoneを作成すると 2018-01-24 08:00:00 UTC
のようになってたので08:00:00は固定のようです。
これ以上調査はしていないです。
まとめ
よくわかってないのでもうちょっとちゃんと理解したい気分です。ちゃんとドキュメントを読んでいれば気づけた気もするのでそういう意味ではいい経験になりました。