Github:使用 Bash 上传发布资产
Github: Upload release assets with Bash
我想通过GithubAPI了解发布资产上传。
除此之外
Github reference,
我还没有找到任何最近的例子。
我创建了以下 Bash 脚本:
#!/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
当然 perstok
、owner
和 repo
变量导出个人访问令牌、所有者姓名和回购名称,theAsset
是要上传的资产文件名.
这是上传发布资产的正确方法吗?
我需要添加一个 Accept
header 吗?我找到了一些
的例子
-H "Accept: application/vnd.github.manifold-preview"
但我觉得它们已经过时了。
如果是 Windows 个可执行文件,是否有特定的媒体 (mime) 类型?
你还有一个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_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。
我找到了官方answer:
during the preview period, you needed to provide a custom media type in the Accept
header:
application/vnd.github.manifold-preview+json
Now that the preview period has ended, you no longer need to pass this custom media type.
无论如何,虽然不是必需的,但建议使用以下 Accept
header:
application/vnd.github.v3+json
以这种方式请求 API 的特定版本,而不是当前版本,并且应用程序将继续工作以防将来发生重大更改。
我想通过GithubAPI了解发布资产上传。 除此之外 Github reference, 我还没有找到任何最近的例子。
我创建了以下 Bash 脚本:
#!/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
当然 perstok
、owner
和 repo
变量导出个人访问令牌、所有者姓名和回购名称,theAsset
是要上传的资产文件名.
这是上传发布资产的正确方法吗?
我需要添加一个 Accept
header 吗?我找到了一些
-H "Accept: application/vnd.github.manifold-preview"
但我觉得它们已经过时了。
如果是 Windows 个可执行文件,是否有特定的媒体 (mime) 类型?
你还有一个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_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。
我找到了官方answer:
during the preview period, you needed to provide a custom media type in the
Accept
header:
application/vnd.github.manifold-preview+json
Now that the preview period has ended, you no longer need to pass this custom media type.
无论如何,虽然不是必需的,但建议使用以下 Accept
header:
application/vnd.github.v3+json
以这种方式请求 API 的特定版本,而不是当前版本,并且应用程序将继续工作以防将来发生重大更改。