GitHub Appsの作り方

47
GitHub Appsの作り方 @zaru

Transcript of GitHub Appsの作り方

GitHub Appsの作り方@zaru

@zaru

@zaru

CI作ってます

2017.07private beta

GitHub Appsとは

GitHub Appsとは…

- 従来のOAuth Appsはユーザに対してインストール

- ユーザが削除されたりリポジトリへの権限を失うと消える

- アクセストークンはユーザが取り消さない限り永久有効

- GitHub Appsはリポジトリに対してインストール

- 正確にはリポジトリのオーナー(OrganizationやUser)に

インストールして、配下のリポジトリに付与するようなイメージ

- アクセストークンの有効期限は1時間

- GitHub AppsのOAuthも可能

- こちらはユーザ情報を取得するために使う(限定的)

- マーケットプレイスに出せる

人に依存しないサービス連携!

マーケットプレイス

マーケットプレイス

- GitHub上でアプリをインストール・決済できる

- 提供者は売上の25%をGitHubに献上

- 決済の仕組みを作らなくて済むので楽?

- でもAPIのコールバックとかで、ある程度開発は必要

- 登録する条件

- 250人以上にインストール済み<厳しい

- セキュリティ審査や申請ドキュメントなど結構たいへんそう…

- アクセスログとか保持する基盤とか全部そろえて説明できる資料とか

パーミッション

パーミッション

- 人がリポジトリに対してできる操作、だいたいできる

- 適切なパーミッションを…

- パーミッションを変更したら

インストール済みユーザの承認が必要

アクセストークン

アクセストークン

- JWTのトークンを生成

- bearerトークンとして渡すとアクセストークンゲット

OctokitGitHub 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

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build

Container Builder

Container Registry

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build ⑥push

Container Builder

Container Registry

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build ⑥push

⑦deploy

Container Builder

Container Registry

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build ⑥push

⑦deploy

⑧pull

Container Builder

Container Registry

Container Engine

Benchmarkcontainer

Appcontainer

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build ⑥push

⑦deploy

⑧pull

⑨create

Container Builder

Container Registry

Container Engine

Benchmarkcontainer

Appcontainer

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build ⑥push

⑦deploy

⑧pull

⑨create

⑩benchmark

Container Builder

Container Registry

Container Engine

Benchmarkcontainer

Appcontainer

Appcontainer

①プルリク

②WebHook

③ビルドリクエスト

④clone

⑤build ⑥push

⑦deploy

⑧pull

⑨create

⑩benchmark

⑪report

I'm hiring!

以上!