継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

TypeScript で GitHub GraphQL API を叩いてみた

タダです.

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を使っています.クエリで使っているパラメータはドキュメントを参照して設定しています.

github.com

コード抜粋

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 に利用できたら良いかもしれません.

参考記事

maku.blog