tjinjin's blog

インフラ要素多めの個人メモ

GitHubのmilestone作成時のパラメータ型ではまった

About

拙作のギッハブのmilestoneを管理するツールでバグがあり、その中の話です。ちょいネタです。

ツール

github.com

ツールはこれです。少しずつ育てていっております。好き勝手弄れるものがあると遊べてよいですね。

はまったこと

普通に使っていたのですが、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)

GitHubAPIドキュメントを見ると形式が指定されていました。

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は固定のようです。

これ以上調査はしていないです。

まとめ

よくわかってないのでもうちょっとちゃんと理解したい気分です。ちゃんとドキュメントを読んでいれば気づけた気もするのでそういう意味ではいい経験になりました。