タダです.
GitHub GraphQL API を叩く機会が初めてあったのでこの記事に備忘録としてまとめていきます.
前準備
事前準備として GitHub アクセストークンを発行します.権限として下記のものをつけます.
- repo
- admin:org read
- admin:repo_hook read
- user
- admin:gpg_key read
https://docs.github.com/ja/graphql/guides/forming-calls-with-graphql
試したコード
dependabot アラートにあるものをリストするようなコードを書いてみました.ライブラリとして @octokit/graphql
を使っています.クエリで使っているパラメータはドキュメントを参照して設定しています.
コード抜粋
const QUERY = ` query getVulnerabilityAlerts($org: String!, $repo: String!) { repository (name: $repo, owner: $org){ vulnerabilityAlerts(last: 100, states: OPEN) { nodes { createdAt vulnerableRequirements securityVulnerability { package { name ecosystem } advisory { ghsaId publishedAt } severity package { ecosystem name } updatedAt vulnerableVersionRange } } } } } `; async function main() { try { const result:any = await graphql(QUERY, {org: `${process.env.org}`, repo: `${process.env.repo}`}); const detailResult = result['repository']['vulnerabilityAlerts']['nodes'] console.log(detailResult) } catch (err) { console.error(err); } }
下記の FastAPI
のセキュリティアラートをリストした場合の出力例です.
出力例
[ { createdAt: '2022-01-29T08:39:43Z', vulnerableRequirements: '= 0.65.1', securityVulnerability: { package: [Object], advisory: [Object], severity: 'HIGH', updatedAt: '2021-06-09T13:34:55Z', vulnerableVersionRange: '< 0.65.2' } } ]
まとめ
簡単に TypeScript で GitHub GraphQL API を叩いてみたのでまとめました.これを dependabot の運用でアラートが滞留しているリポジトリや新規のアラートを気づけてない場合にコードを上げるたび都度通知するような GitHub Actions に利用できたら良いかもしれません.