ヘッダー画像

【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が思ったより出てこなかったので書いてみました。

どうすれば出来るかを考えるのは楽しいです!

仕組みさえわかれば、どうにかなるもんですね。

以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント

この記事のコメントはありません。