この記事では、github-scriptを使ってissue作成を試してみます。
github-scriptとは?
github-scriptは、GitHub Actionsの一部として提供されるアクションで、JavaScriptまたはTypeScriptを使用してGitHub APIを簡単に操作できるツールです。これにより、複雑なAPIリクエストをシンプルなコードで実現できます。
主な特徴
GitHub APIを簡単に操作
github-scriptは、GitHub REST APIとGraphQL APIの両方にアクセスできる柔軟なツールです。例えば、リポジトリのissueやPull Requestを管理する処理を数行のスクリプトで実装できます。APIのドキュメントはこちらです。
issueを作成してみる
以下は、GitHub Actionsを使用して特定のリポジトリにissueを作成するworkflowです。
name: Create Issue
on:
workflow_dispatch:
jobs:
create_issue:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Create GitHub Issue
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: "自動生成されたIssue",
body: "このIssueはGitHub Actionsによって自動生成されました。",
labels: ['automated'],
assignees: ['user-name']
});
issueを作成させるために、premissionsでissues: write
を指定し、このジョブがリポジトリのissueを作成できる権限を付与しています。
また、github-scriptを用いて、issues.createを使ってIssueを作成しています。使用しているAPIのドキュメントはこちらです。
実行した結果はこんな感じになります。
issueの本文をカスタマイズする
issueを自動生成するユースケースとして、何かしらのテストを実行してエラーが検出された際が挙げられます。そのユースケースを想定したworkflowを作成してみます。
name: Create Issue
on:
workflow_dispatch:
jobs:
create_issue:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Generate and Save Error
id: error_step
run: |
echo "エラーのサンプル: $(date)" > error_log.txt
python3 -c "print(undefined_variable)" 2>> error_log.txt
continue-on-error: true
- name: Upload Error Log
if: steps.error_step.outcome == 'failure'
uses: actions/upload-artifact@v4
with:
name: error-logs
path: error_log.txt
- name: Create GitHub Issue
if: steps.error_step.outcome == 'failure'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const errorLog = fs.readFileSync('error_log.txt', 'utf8');
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: "エラーが検出されました",
body: `以下のエラーが検出されました:\n\`\`\`\n${errorLog}\n\`\`\``,
labels: ['automated', 'error'],
assignees: ['user-name']
});
エラーの内容を次のstepに受け渡すためにupload-artifactを使用しています。
実行した結果はこんな感じになります。
終わりに
github-scriptを使ってissueを作成を試してみました。workflowの実行結果によって、issueを作成できるのは便利でした。また、github-scriptはGitHub APIを操作できるので、あらゆる場面で使えそうですね。