ヘッダー画像

【GitHub API】GitHubのReleaseにファイルをアップロードしてみた

投稿 2023年2月26日 最終更新 2023年2月26日 専門用語多め

JavaでGitHub API

GitHub APIをJavaで実行します。

バージョンはJava17です。

今回はGitHub Releaseにファイルをアップロードしてみます。

前提

GitHub APIの実行環境は、整っている前提で話を進めます。
※curlなどでGitHub APIをたたける前提

もしまだ環境が整っていない方は、整えてからご覧ください。

リリースID

以下のコードに出てくる「リリースID」というのは、
GitHub Releaseを特定するIDのことです。

GitHub Release作成時のAPIレスポンスや、
ReleaseIDを取得するAPIなどで取得することができます。

以下の記事でRelease作成時のレスポンス内容を紹介しています。

レスポンス内の「id」がReleaseIDです。

ReleaseIDが取得出来たら以下のように、ファイルをアップロードしてみましょう。

コード

Java

import java.io.File;
import java.io.IOException;
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.BodyHandlers;

public class GitHubAPI {
  public static void main(String[] args) {
    // アクセストークン
    String token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    // GitHubのユーザ名
    String owner = "ink-0x20";
    // リポジトリ名(プロジェクト名)
    String repository = "ink-commons";
    // リリースID
    String releaseId = "0000000000";
    // アップロードするファイルパス
    File target = new File("./test.jar");
    try (FileInputStream data = new FileInputStream(target)) {
      // ファイルをすべて読み込み
      byte[] d = data.readAllBytes();
      // URL作成
      StringBuilder apiUrl = new StringBuilder()
          .append("https://uploads.github.com/repos/")
          .append(owner)
          .append("/")
          .append(repository)
          .append("/releases/")
          .append(releaseId)
          .append("/assets?name=")
          .append(target.getName());
      // リクエスト作成
      HttpRequest request = HttpRequest.newBuilder()
          .uri(URI.create(apiUrl.toString()))
          .header("Accept", "application/vnd.github+json")
          .header("Authorization", "Bearer " + token)
          .header("X-GitHub-Api-Version", "2022-11-28")
          .header("Content-Type", "multipart/form-data")
          .method("POST", BodyPublishers.ofByteArray(d))
          .build();
      // リクエスト送信しレスポンス取得
      String response = HttpClient.newHttpClient()
          .send(request, BodyHandlers.ofString())
          .body();
      System.out.println(response);
    } catch (IOException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

curl

curl --request POST \
  --url https://uploads.github.com/repos/OWNER/REPO/releases/RELEASE_ID/assets?name=test.jar
  --header 'Accept: application/vnd.github+json' \
  --header 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  --header 'X-GitHub-Api-Version: 2022-11-28' \
  --header 'Content-Type: application/octet-stream' \
  --data-binary "@test.jar"

GitHubにもメソッド版を上げています。

そちらも参考にどうぞ。

まとめ

PHPやcurlは検索すれば出てくるとは思いますが、Javaが思ったより出てこなかったので書いてみました。

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

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

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

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

コメント

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