GitHubのGraphQL APIを利用して、Issuesの作成とコメント追加をしてみました。
おすすめの方
- GitHub GraphQL APIについて知りたい方
- GitHub GraphQL APIでIssuesを作成したい方
- GitHub GraphQL APIでIssuesにコメントを追加したい方
- GitHub GraphQL APIで変数を使いたい方
Issues作成時にラベルを付与する場合は、事前にラベルを作成しておき、ラベルIDを取得する
Issueの作成と同時にラベルを付与する場合は、ラベルIDを指定します。 ラベルIDを取得する方法は、次の記事を参考にしてください。
本記事では、3つあるラベルのうち、1つのラベルを付与してみます。
GitHub GraphQL API でIssuesを作成するスクリプト
リポジトリIDを取得して、Issuesを作成し、IssueIdを取得します。 そのIssueIdを利用して、コメントを追加しています。
app.py
import requests
import json
ENDPOINT = "https://api.github.com/graphql"
GITHUB_TOKEN = "aaa"
GITHUB_REPOSITORY_OWNER = "xxx"
GITHUB_REPOSITORY_NAME = "yyy"
# 作成と同時にラベルを付与する場合は、ラベルIDを指定する
LABELS = [
"LA_kwDOLfC6C88AAAABkSNoSg", # aaa
]
def main():
# リポジトリIDを取得する
repository_id = get_repository_id(GITHUB_REPOSITORY_OWNER, GITHUB_REPOSITORY_NAME)
# Issueを作成する
issue_id = create_issue(
repository_id,
title="GitHub GraphQL API Test Issue",
body="# Memo\n\nThis is a test issue created by GitHub GraphQL API.",
labels=LABELS,
)
# Issueにコメントを追加する
add_comment(issue_id, "This is a test comment.\n\n**Hello, world!**")
def get_repository_id(
repository_owner,
repository_name,
):
query = """
query getProjectLabels($repositoryOwner:String!, $repositoryName:String!) {
repository(owner: $repositoryOwner, name: $repositoryName) {
id
}
}
"""
variables = {
"repositoryOwner": repository_owner,
"repositoryName": repository_name,
}
resp = requests.post(
ENDPOINT,
headers=get_headers(),
data=json.dumps({"query": query, "variables": variables}),
)
body = resp.json()
return body["data"]["repository"]["id"]
def create_issue(repository_id, title, body, labels=[]):
mutation = """
mutation CreateIssue($repositoryId: ID!, $title: String!, $body: String, $labelIds: [ID!]) {
createIssue(input: {repositoryId: $repositoryId, title: $title, body: $body, labelIds: $labelIds}) {
issue {
id
number
title
bodyText
}
}
}
"""
variables = {
"repositoryId": repository_id,
"title": title,
"body": body,
"labelIds": labels,
}
resp = requests.post(
ENDPOINT,
headers=get_headers(),
data=json.dumps({"query": mutation, "variables": variables}),
)
body = resp.json()
return body["data"]["createIssue"]["issue"]["id"]
def add_comment(issue_id, body):
mutation = """
mutation AddComment($issueId: ID!, $body: String!) {
addComment(input: {subjectId: $issueId, body: $body}) {
commentEdge {
node {
id
body
}
}
}
}"""
variables = {
"issueId": issue_id,
"body": body,
}
resp = requests.post(
ENDPOINT,
headers=get_headers(),
data=json.dumps({"query": mutation, "variables": variables}),
)
body = resp.json()
def get_headers():
return {
"Authorization": f"bearer {GITHUB_TOKEN}",
}
if __name__ == "__main__":
main()
スクリプトを実行する
python create_issue.py
Issuesを作成できた
バッチリです。