GitHub Appsの作り方
@zaru
@zaru
@zaru
CI作ってます
2017.07
private beta
GitHub Appsとは
GitHub Appsとは…
- 従来のOAuth Appsはユーザに対してインストール
- ユーザが削除されたりリポジトリへの権限を失うと消える
- アクセストークンはユーザが取り消さない限り永久有効
- GitHub Appsはリポジトリに対してインストール
- 正確にはリポジトリのオーナー(OrganizationやUser)に
インストールして、配下のリポジトリに付与するようなイメージ
- アクセストークンの有効期限は1時間
- GitHub AppsのOAuthも可能
- こちらはユーザ情報を取得するために使う(限定的)
- マーケットプレイスに出せる
人に依存しない
サービス連携!
マーケットプレイス
マーケットプレイス
- GitHub上でアプリをインストール・決済できる
- 提供者は売上の25%をGitHubに献上
- 決済の仕組みを作らなくて済むので楽?
- でもAPIのコールバックとかで、ある程度開発は必要
- 登録する条件
- 250人以上にインストール済み<厳しい
- セキュリティ審査や申請ドキュメントなど結構たいへんそう…
- アクセスログとか保持する基盤とか全部そろえて説明できる資料とか
パーミッション
パーミッション
- 人がリポジトリに対してできる操作、だいたいできる
- 適切なパーミッションを…
- パーミッションを変更したら
インストール済みユーザの承認が必要
アクセストークン
アクセストークン
- JWTのトークンを生成
- bearerトークンとして渡すとアクセストークンゲット
Octokit
GitHub Apps対応
まだ中途半端
PRしよう
あれこれ
git clone する
コメントする
- AppのアクセストークンだとBotが、OAuthのアクセストークン
だとユーザの代理投稿みたいな感じ
取得できるユーザ情報API
- Get the authenticated user: GET /user
- Get the authenticated user's Marketplace purchases: GET /user/marketplace_purchases
- Get stubbed Marketplace purchase data: GET /user/marketplace_purchases/stubbed
- List installations for user: GET /user/installations
- List repositories accessible to the user for an installation: GET /user/installations/:installation_id/repositories
- Create an issue: POST /repos/:owner/:repo/issues
- List a repository's issue comments: GET /repos/:owner/:repo/issues/comments
- List a single issue's comments: GET /repos/:owner/:repo/issues/:id/comments
- Get a single issue comment: GET /repos/:owner/:repo/issues/comments/:id
- Create an issue comment: POST /repos/:owner/:repo/issues/:number/comments
- Set the milestone for an issue: PATCH /repos/:owner/:repo/issues/:number
- Add a label to an issue: POST /repos/:owner/:repo/issues/:number/labels
- List a repository's pull requests: GET /repos/:owner/:repo/pulls
- Create a deployment: POST /repos/:owner/:repo/deployments
- Create a deployment status: POST /repos/:owner/:repo/deployments/:id/statuses
Emailとれない
リポジトリ一覧とれない
インストール済みならとれる
WebHook
プルリク・コメント
などなど各種操作
WebHook
以上!
raysCIで例
①プルリク
①プルリク
②WebHook
Container
Builder
①プルリク
②WebHook
③ビルドリクエスト
Container
Builder
①プルリク
②WebHook
③ビルドリクエスト
④clone
Container
Builder
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build
Container
Builder
Container
Registry
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build ⑥push
Container
Builder
Container
Registry
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build ⑥push
⑦deploy
Container
Builder
Container
Registry
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build ⑥push
⑦deploy
⑧pull
Container
Builder
Container
Registry
Container
Engine
Benchmark
container
App
container
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build ⑥push
⑦deploy
⑧pull
⑨create
Container
Builder
Container
Registry
Container
Engine
Benchmark
container
App
container
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build ⑥push
⑦deploy
⑧pull
⑨create
⑩benchmark
Container
Builder
Container
Registry
Container
Engine
Benchmark
container
App
container
App
container
①プルリク
②WebHook
③ビルドリクエスト
④clone
⑤build ⑥push
⑦deploy
⑧pull
⑨create
⑩benchmark
⑪report
I'm hiring!
以上!

GitHub Appsの作り方