0
Octokitで扱うAPIのレスポンスの型定義
2024-01-15

Octokitを使ってGitHubのAPIを叩いてデータを取得する

TypeScriptで開発してたのでしっかり型付けを行いたい

octokit/types.ts: Shared TypeScript definitions for Octokit projects

これ参照するのがよい?

npm i -D @octokit/types

README読んだがoctokitを変数化してoctokitに生えているメソッドから返ってくる型を特定する方法だった

できれば変数から型情報を抜き出すのはやりたくないので少し調べた

使い方のバリエーションとしてほかにもありそうかなということで、GitHub検索で探したら参考になりそうなコードが出てきた

参考

import type { Octokit } from "@octokit/rest";とあるようにOctokitの型情報が存在するようなのでそこからたどって行けそう

結局下記のような感じでデータの取得方法と対応した型定義の呼び出し方で定義できた

  • 一部抜粋
export type Octokit = ReturnType<typeof getOctokit>
export type Jobs = GetResponseDataTypeFromEndpointMethod<
  Octokit['rest']['actions']['listJobsForWorkflowRun']
>['jobs']
export type Annotations = GetResponseDataTypeFromEndpointMethod<
  Octokit['rest']['checks']['listAnnotations']
>

export async function getFailedJobs(
  octokit: Octokit,
  runId: number
): Promise<Jobs> {
  const { data } = await octokit.rest.actions.listJobsForWorkflowRun({
    owner: context.repo.owner,
    repo: context.repo.repo,
    run_id: runId
  })

  const completedJobs = data.jobs.filter(j => j.status === 'completed')
  const failedJobs = completedJobs.filter(j => j.conclusion === 'failure')

  return failedJobs || []
}

export async function getJobAnnotations(
  octokit: Octokit,
  jobId: number
): Promise<Annotations> {
  const { data } = await octokit.rest.checks.listAnnotations({
    owner: context.repo.owner,
    repo: context.repo.repo,
    check_run_id: jobId
  })

  return data
}

GetResponseDataTypeFromEndpointMethodが便利

0

Profile

swfz
swfz
日々学んだことを残していく
Today I Learned
コード片置き場

Account

RSS

Powered by Pixela
© 2024. swfz