👻
github apiを使ってrelease作成とunitypackageアップロード
経緯
unityのexport unitypackageでできたファイルを自動でgithubに上げたいなと思い
とりあえずテストで作ったunitypackageファイルをアップロードできるところをやり始めた感じです。
下準備
今回private リポジトリでの作業も考えているのでtokenの作成をしておきます。
Personal Tokenの作成
画像 | 手順 |
---|---|
githubの右上のprofileからsettings | |
左側のメニューからdeveloper settings | |
personal access tokenを選ぶ | |
generate new tokenを選ぶ | |
権限の指定ですが今回はrepo packagesの2つでいいですね(workflowのgithub actionは使わないのでなしでOK) |
※作成すると文字列が出てきますが、二度と表示されないので必ずメモ帳等で保存します。
シェルの記述
releaseの作成
まずはreleaseを作るところから
アップロードするファイルはreleaseを作ってから上げる必要があります。
既にあればlatest release api等で取得するのが良いかと
test.sh
token="ここには上で取得した文字列を"
tag="v0.0.1"
repository_path="オーナー名/リポジトリ名"
response=$(curl -X POST -H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token $token" https://api.github.com/repos/$repository_path/releases \
-d "{\"tag_name\":\"$tag\"}")
create release apiについてはこちら
latest release apiについてはこちら
タグ名でreleaseを持ってくる場合はこちら
ファイルのアップロード
作成またはlatest等の次はファイルのアップロードです。
上のレスポンスにidがあるのでそれを使います。これでどのreleaseに対してファイルを上げるかを決定します。
test.sh
release_id=$(echo $response | jq '.id')
file_path="./test.unitypackage"
response=$(curl -X POST -H "Content-Type: $(file -b --mime-type $file_path)"\
-H "Authorization: token $token" --data-binary @$file_path \
"https://uploads.github.com/repos/$repository_path/releases/$release_id/assets?name=$(basename $file_path)")
補足
・ファイル名のままファイルを上げるにはnameにファイル名を渡す
・注意したいのはurlの形式、先程までapi.github.comだったところがuploads.githubになっている点。基本は下のapiを参考にしているがurlは違う
・--data-binaryで@$になってる点。@を外すとちゃんとデータがアップロードできないので注意
upload release asset
既にデータやreleaseがあった場合はupdate等のapiで書き換える必要がありますが
ひとまずアップロードできたらという感じで
Discussion