ビルドしたモジュールを GitHub の Release に登録し、次に登録したモジュールを取得してみます。
なお本記事は GitHub Enterprise Server 3.3 で確認しています。
(ドキュメントへのリンクはgithub.com向けのAPIへのリンクとしていますので、GHESのドキュメントを確認する場合はサイト内で切り替えてご覧くださいね)
assetのアップロード
asset をアップロードするには、まず Get a release by tag name API を使って、モジュールを登録したい既存タグの Release の情報を取得します。
#!/bin/bash
github_token="YOUR_TOKEN"
tag_name="v1.2"
github_releases_url="https://YOUR_GHES_HOST/api/v3/repos/OWNER/REPO/releases"
asset_file="hoge.tar.gz"
# tagのrelease情報を取得
get_tags_url="${github_releases_url}/tags/${tag_name}"
response=`curl -L -X GET $get_tags_url -H "Authorization: Bearer ${github_token}" \
-H 'Accept: application/vnd.github+json'`
この API のレスポンスの中に upload_url というフィールドがあります。
asset をアップロードするにはこのURLを使用します。
upload_url は YOUR_GHES_URL/api/uploads/repos/OWNER/REPO/releases/RELEASE_ID/assets{?name,label}
のような文字列のため、整形しています。
また Content-Type もアップロードするモジュールの形式に合わせて指定しましょう。
#!/bin/bash
# レスポンスから、当該tagのReleaseへのアップロード用URLを整形
upload_url=`echo "${response}" | jq '. | .upload_url' | tr -d '"'`
upload_url="${upload_url%%\{*}?name=${asset_file}"
echo $upload_url
# assetをアップロード
curl -L -X POST ${upload_url} -H "Authorization: Bearer ${github_token}" \
-H 'Accept: application/vnd.github+json' \
-H 'Content-Type: application/gzip' \
--data-binary ${asset_file}
なお GitHub Actions を使う場合は、この処理と同等の upload-release-asset というアクションモジュールがあります。GHES でも標準装備されているアクションです。便利ですね。
assetのダウンロード
Releaseのasset(Releaseに対してアップロードされた配布物)を取得するには、Get a release asset APIを使います。
ドキュメントによると、Accept ヘッダには application/octet-stream を指定する必要があるので注意です。
#!/bin/bash
# tagのrelease情報を取得
get_tags_url="${github_releases_url}/tags/${tag_name}"
response=`curl -L -X GET ${get_tags_url} -H "Authorization: Bearer ${github_token}" \
-H 'Accept: application/vnd.github+json'`
asset_id_list=`cat ${response} | jq ".assets[].id"`
# assetのダウンロード
for asset_id in ${asset_id_list}
do
$asset_url=${github_releases_url}/assets/${asset_id}
curl -L -X GET ${asset_url} -H "Authorization: Bearer ${github_token}" \
-H 'Accept: application/octet-stream'`
done
このAPIを使うには、取得したい asset がある asset_id をあらかじめ取得しておく必要があります。
asset_id は ダウンロード時と同様の Get a release by tag name API あるいは Get the latest release API で取得できます。ここで取得した asset_id を、Get a release asset API で指定しています。
ダウンロードの GitHub Action モジュールは、今時点では本家のものはないようです。
Marketplaceで検索すると、以下のようなモジュールがいくつかヒットします。
参考)APIの動作確認にはPostmanが便利
GitHub REST API に限りませんが、REST API の動作確認には Postman というフリーソフトがおすすめです。
自分で curl コマンドを書こうとして都度都度オプション文字を調べたり、スクリプトの書き損じを直したりして、時間を浪費せずにすみます。
こちらのツールの使い方は、別記事で書けたらと思います。
しかも動作確認を終えたら、さまざまなプログラミング言語でコードを生成してくれますよ。
わたしは bash だけでなく PowerShell でも試すことが多いのでとても助かっています。
GitHubにはREST APIだけでなくCLIツールもある
最後に、REST API に抵抗がある場合、GitHub にはコマンドもあります。
REST API 同様、まず Private Access Token での認証コマンドを通してから、利用します。
最新版のコマンドのマニュアルを確認したら、Release に関するサブコマンドもありますね。
CLI もどんどん便利になっていますね。