2016-11-22 7 views
2

Github APIを通じてリリースアセットをアップロードする方法について知りたいと思います。 これ以外には Github reference、 最近の例は見つかりませんでした。Github:Bashでリリースアセットをアップロードする

私は、次のbashスクリプト作成:もちろんperstok

#!/bin/sh 

## Make a draft release json with a markdown body 
release='"tag_name": "v1.0.0", "target_commitish": "master", "name": "myapp", ' 
body="This is an automatic release\\n====\\n\\nDetails follows" 
body=\"$body\" 
body='"body": '$body', ' 
release=$release$body 
release=$release'"draft": true, "prerelease": false' 
release='{'$release'}' 
url="https://api.github.com/repos/$owner/$repo/releases" 
succ=$(curl -H "Authorization: token $perstok" --data $release $url) 

## In case of success, we upload a file 
upload=$(echo $succ | grep upload_url) 
if [[ $? -eq 0 ]]; then 
    echo Release created. 
else 
    echo Error creating release! 
    return 
fi 

# $upload is like: 
# "upload_url": "https://uploads.github.com/repos/:owner/:repo/releases/:ID/assets{?name,label}", 
upload=$(echo $upload | cut -d "\"" -f4 | cut -d "{" -f1) 
upload="$upload?name=$theAsset" 
succ=$(curl -H "Authorization: token $perstok" \ 
    -H "Content-Type: $(file -b --mime-type $theAsset)" \ 
    --data-binary @$theAsset $upload) 

download=$(echo $succ | egrep -o "browser_download_url.+?") 
if [[ $? -eq 0 ]]; then 
    echo $download | cut -d: -f2,3 | cut -d\" -f2 
else 
    echo Upload error! 
fi 

を、ownerrepo変数は、所有者の名前とレポ名とtheAssetをアップロードする資産のファイル名で、個人的なアクセストークンをエクスポートします。

これはリリースアセットをアップロードする適切な方法ですか?

Acceptヘッダーを追加する必要がありますか?私はいくつかの例を見つけました

-H "Accept: application/vnd.github.manifold-preview" 

しかし、彼らは私に古くなっているようです。

Windows実行ファイルの場合、特定のメディア(MIME)タイプがありますか?

答えて

1

私は公式answerが見つかりました:

プレビュー期間中に、あなたはAcceptヘッダにカスタムメディアタイプを提供するために必要:
application/vnd.github.manifold-preview+json
今すぐプレビュー期間はもはや、あなたを終了したことこのカスタムメディアタイプを渡す必要があります。とにかく

、必須ではないが、以下Acceptヘッダを使用することが推奨される:その代わり現在の、及びアプリケーション、APIの特定のバージョンが要求される。このように

application/vnd.github.v3+json 

を将来の急激な変化の場合にも有効です。

+0

ニースのキャッチは、私の答えよりも正確です。 +1 – VonC

1

あなたは別のexample which does not use Accept header in this gistを持っている:

# Construct url 
GH_ASSET="https://uploads.github.com/repos/$owner/$repo/releases/$id/assets?name=$(basename $filename)" 

curl "$GITHUB_OAUTH_BASIC" --data-binary @"$filename" -H "Authorization: token $github_api_token" -H "Content-Type: application/octet-stream" $GH_ASSET 

GITHUB_OAUTH_BASIC being

${GITHUB_OAUTH_TOKEN:?must be set to a github access token that can add assets to $repo} \ 
${GITHUB_OAUTH_BASIC:=$(printf %s:x-oauth-basic $GITHUB_OAUTH_TOKEN)} 

Content-Type: application/octet-streamはそのMIMEを気にすることなく、任意のファイルをサポートするのに十分な普遍的でなければなりません。

関連する問題