GitHub网站有一个功能特性,允许您将代码库的特定快照标记为软件发布版本。示例URL:https://github.com/github/orchestrator/releases
是否有一种方法可以通过命令行进行此操作,而不必登录并使用界面?我知道这个功能不是git的一部分,但我希望有一些其他人使用的API或解决方案可以使这个过程自动化。
GitHub网站有一个功能特性,允许您将代码库的特定快照标记为软件发布版本。示例URL:https://github.com/github/orchestrator/releases
是否有一种方法可以通过命令行进行此操作,而不必登录并使用界面?我知道这个功能不是git的一部分,但我希望有一些其他人使用的API或解决方案可以使这个过程自动化。
这里有许多项目提供此功能,下面的顺序仅为了索引而排序:
甚至可以直接使用 curl
进行操作:
OWNER=
REPOSITORY=
ACCESS_TOKEN=
VERSION=
curl --data '{"tag_name": "v$VERSION",
"target_commitish": "master",
"name": "v$VERSION",
"body": "Release of version $VERSION",
"draft": false,
"prerelease": false}' \
https://api.github.com/repos/$OWNER/$REPOSITORY/releases?access_token=$ACCESS_TOKEN
来自Barry Kooij的通过命令行创建Github发布。
如果您想在StackOverflow上获得完整的答案:在Github上发布构建工件。
hub
代替,因为该工具也是用Go编写的,但由GitHub官方维护:https://dev59.com/fmEi5IYBdhLWcg3wfsfI#52353299 - Ciro Santilli OurBigBook.com您可以使用Github CLI完成此操作
gh release create <tagname> --target <branchname>
如果出现400错误,请检查分支名称是否有错别字
POST /repos/:owner/:repo/releases
例如,这个由Mathias Lafeldt (mlafeldt
)编写的ruby脚本 "create-release.rb
":
require "net/https"
require "json"
gh_token = ENV.fetch("GITHUB_TOKEN")
gh_user = ARGV.fetch(0)
gh_repo = ARGV.fetch(1)
release_name = ARGV.fetch(2)
release_desc = ARGV[3]
uri = URI("https://api.github.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new("/repos/#{gh_user}/#{gh_repo}/releases")
request["Accept"] = "application/vnd.github.manifold-preview"
request["Authorization"] = "token #{gh_token}"
request.body = {
"tag_name" => release_name,
"target_commitish" => "master",
"name" => release_name,
"body" => release_desc,
"draft" => false,
"prerelease" => false,
}.to_json
response = http.request(request)
abort response.body unless response.is_a?(Net::HTTPSuccess)
release = JSON.parse(response.body)
puts release
hub
官方基于 Go 的 GitHub CLI 工具
从19.04开始,添加了一个Ubuntu软件包:https://packages.ubuntu.com/search?keywords=hub | https://github.com/github/hub/issues/718
sudo apt install hub
hub
:go get github.com/github/hub
hub
,从您的仓库内部开始:hub release create -a prebuilt.zip -m 'release title' tag-name
这个操作:
tag-name
prebuilt.zip
作为附件上传您还可以使用GITHUB_TOKEN
环境变量提供现有的API令牌。
有关其他release
操作,请参见:
hub release --help
在 hub
de684cb613c47572cc9ec90d4fd73eef80aef09c 上进行了测试。
Python示例,不需要任何依赖项
如果您和我一样不想安装另一种语言:
您可以使用GitHub CLI来完成此操作
要从带注释的git标签创建发布,请先在本地使用git创建一个标签,将标签推送到GitHub,然后运行此命令。
gh release create <tag> [<files>...] --target <branchname>
选项
-d, --draft 将发布保存为草稿而不是发布它
-n, --notes string 发布说明
-F, --notes-file file 从文件中读取发布说明
-p, --prerelease 将发布标记为预发布
, --target branch 目标分支或完整提交SHA(默认值: 主分支)
-t, --title string 发布标题
$version = 'v1.0.0'
$data='{"tag_name": "${version}", "target_commitish": "master", "name": "${version}", "body": "Release of version ${version}", "draft": false, "prerelease": false}'
curl -X POST -H "Authorization: token $(git_token)" -d $ExecutionContext.InvokeCommand.ExpandString($data) https://api.github.com/repos/$OWNER/$REPOSITORY/releases
我正在使用Azure DevOps中的Powershell。git_token
是我构建管道中定义的一个变量。希望能帮助到其他人。
可以使用简单的curl命令来完成:
curl -X POST -u YOURGITUSERNAME:YOURTOKEN --data '{"tag_name": "YOURTAGNAME","target_commitish": "YOURREPO","name": "YOURTAGNAME","body": "YOUR TAG DESCRIPTION","draft": false,"prerelease": false}' https://api.github.com/repos/YOURGITSITE/YOURREPO/releases
gh release create
命令时,请确保使用新的 --verify-tag
选项,该选项需要 gh
2.21.0 (2022年12月) 或更高版本,并且需要从 PR 6632 中修复 issue 6566。
运行
gh release create <tag> --verify-tag
命令时,我们会通过 GitHub API 在存储库标签中查询,如果未找到标签,则会终止命令。
错误信息:
tag %s doesn't exist in the repo %s, aborting due to --verify-tag flag
git tag -a -m 'your comment' v2.5.0
git push origin v2.5.0