【GitHub API】Java17でGitHubのRelease作ってみた
投稿 2023年1月28日
最終更新 2023年2月26日
専門用語多め
JavaでGitHub API
GitHub APIをJavaで実行します。
バージョンはJava17です。
今回はGitHub Releaseを作成します。
curlなどでやっている記事はいくつかありますが、
Javaでやっている記事が見当たらなかったので、やってみました。
前提
GitHub APIの実行環境は、整っている前提で話を進めます。
※curlなどでGitHub APIをたたける前提
もしまだ環境が整っていない方は、整えてからご覧ください。
コード
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
public class GitHubAPI {
public static void main(String[] args) {
// アクセストークン
String token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// GitHubのユーザ名
String owner = "ink-0x20";
// リポジトリ名(プロジェクト名)
String repository = "ink-commons";
// タグ名
String tagName = "v1.0.0";
// 対象ブランチ名
String commitish = "main";
// 本文
String msg = "## 変更点\\nJavaで作成";
// リクエスト用に成形
String apiUrl = "https://api.github.com/repos/" + owner + "/" + repository + "/releases";
StringBuilder content = new StringBuilder();
content.append("{");
content.append("\"name\":\"").append(tagName).append("\",");
content.append("\"tag_name\":\"").append(tagName).append("\",");
content.append("\"target_commitish\":\"").append(commitish).append("\",");
content.append("\"body\":\"").append(msg).append("\"");
content.append("}");
// リクエスト作成
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(apiUrl))
.header("Accept", "application/vnd.github+json")
.header("Authorization", "Bearer " + token)
.header("X-GitHub-Api-Version", "2022-11-28")
.method("POST", BodyPublishers.ofString(content.toString()))
.build();
// リクエスト送信しレスポンス取得
String response = HttpClient.newHttpClient()
.send(request, BodyHandlers.ofString())
.body();
System.out.println(response);
}
}
curl
curl --request POST \
--url https://api.github.com/repos/OWNER/REPO/releases \
--header 'Accept: application/vnd.github+json' \
--header 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'X-GitHub-Api-Version: 2022-11-28' \
--data '{"name":"v1.0.0","tag_name":"v1.0.0","target_commitish":"main","body":"## 変更点\nJavaで作成"}'
レスポンス
一部ダミーにしてますが、参考までに。
{
"url": "https://api.github.com/repos/ink-0x20/ink-commons/releases/00000000",
"html_url": "https://github.com/ink-0x20/ink-commons/releases/tag/v1.0.0",
"assets_url": "https://api.github.com/repos/ink-0x20/ink-commons/releases/00000000/assets",
"upload_url": "https://uploads.github.com/repos/ink-0x20/ink-commons/releases/00000000/assets{?name,label}",
"tarball_url": "https://api.github.com/repos/ink-0x20/ink-commons/tarball/v1.0.0",
"zipball_url": "https://api.github.com/repos/ink-0x20/ink-commons/zipball/v1.0.0",
"id": 123456,
"node_id": "xxxxxxxxxx",
"tag_name": "v1.0.0",
"target_commitish": "main",
"name": "v1.0.0",
"body": "Description",
"draft": false,
"prerelease": false,
"created_at": "2023-02-05T04:50:21Z",
"published_at": "2023-02-25T05:52:38Z",
"author": {
"login": "ink-0x20",
"id": 999,
"node_id": "xxxxxxxxxx",
"avatar_url": "https: //avatars.githubusercontent.com/u/xxxxxxxx",
"gravatar_id": "",
"url": "https://api.github.com/users/ink-0x20",
"html_url": "https://github.com/ink-0x20",
"followers_url": "https: //api.github.com/users/ink-0x20/followers",
"following_url": "https: //api.github.com/users/ink-0x20/following{/other_user}",
"gists_url": "https: //api.github.com/users/ink-0x20/gists{/gist_id}",
"starred_url": "https: //api.github.com/users/ink-0x20/starred{/owner}{/repo}",
"subscriptions_url": "https: //api.github.com/users/ink-0x20/subscriptions",
"organizations_url": "https: //api.github.com/users/ink-0x20/orgs",
"repos_url": "https: //api.github.com/users/ink-0x20/repos",
"events_url": "https: //api.github.com/users/ink-0x20/events{/privacy}",
"received_events_url": "https: //api.github.com/users/ink-0x20/received_events",
"type": "User",
"site_admin": false
},
"assets": []
}
リンク
GitHubにもメソッド版を上げています。
そちらも参考にどうぞ。
まとめ
PHPやcurlは検索すれば出てくるとは思いますが、Javaが思ったより出てこなかったので書いてみました。
どうすれば出来るかを考えるのは楽しいです!
仕組みさえわかれば、どうにかなるもんですね。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。