如何通过命令行在 GitHub 上发布版本?

Posted

技术标签:

【中文标题】如何通过命令行在 GitHub 上发布版本?【英文标题】:How to release versions on GitHub through the command line? 【发布时间】:2014-02-08 11:24:34 【问题描述】:

GitHub 在其网站上有一个feature,允许您将存储库的特定快照标记为软件的发布版本。示例网址:https://github.com/github/orchestrator/releases

有没有一种方法可以从命令行执行此操作,而无需登录并使用界面?我意识到该功能不是 git 的一部分,但我希望其他人可以使用某种 api 或解决方案来使流程自动化。

【问题讨论】:

我发现这些天更简单的选择是使用hub How to release a build artifact on GitHub with a script?的可能重复 【参考方案1】:

有很多项目提供这个——下面的顺序只是为了索引东西——:

    cheton 在 Node (JS) 中的 github-release-cli c4milo 在 Go 中的 github-release(旨在简单) aktau 在 Go 中的 github-release

您甚至可以直接使用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 的 Create Github releases via command line。

如果您想在 *** 上获得完整的答案:Releasing a build artifact on Github。

【讨论】:

我建议用户使用hub,因为该工具也在Go中,但由GitHub官方维护:***.com/a/52353299/895245【参考方案2】:

您可以使用GitHub V3 API 的"Create release" API。

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

【讨论】:

这里有一个python版本也可以上传文件:***.com/questions/38153418/…【参考方案3】:

hub 官方基于 Go 的 GitHub CLI 工具

https://github.com/github/hub

自 19.04 起添加的 Ubuntu 软件包:https://packages.ubuntu.com/search?keywords=hub | https://github.com/github/hub/issues/718

sudo apt install hub

否则,对于较旧的 Ubuntu,请先安装 Go。在 Ubuntu 上:https://askubuntu.com/questions/959932/installation-instructions-for-golang-1-9-into-ubuntu-16-04/1075726#1075726

然后安装hub:

go get github.com/github/hub

一旦安装了hub,从你的repo内部:

hub release create -a prebuilt.zip -m 'release title' tag-name

这个:

第一次提示输入密码,然后在本地自动创建并存储 API 令牌 在名为tag-name 的遥控器上创建一个非注释标签 创建与该标签关联的版本 以附件形式上传prebuilt.zip

您还可以为现有的 API 令牌提供 GITHUB_TOKEN 环境变量。

对于其他release 操作,请参阅:

hub release --help

hub de684cb613c47572cc9ec90d4fd73eef80aef09c 上测试。

没有任何依赖关系的 Python 示例

如果你和我一样不想安装另一种语言:

Can someone give a python requests example of uploading a release asset in github?

【讨论】:

您可以从许多包管理器中获得预编译的集线器,无需安装 go :) 但是感谢您的帖子 @TheUnfunCat 嗨,感谢您联系我,19.04 提供了一个包,所以我更新了答案。尽管如此,当“每个语言包”管理器提供某些东西时,我倾向于使用那个;-)【参考方案4】:

可以使用 github cli 完成

gh release create <tagname> --target <branchname>

Github CLI

【讨论】:

【参考方案5】:

您可以使用 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 发布标题

【讨论】:

【参考方案6】:

假设您已经从 github repo (origin) 签出了正确的分支并且它与它同步,例如自动创建 2.5.0 版本,执行:

git tag -a -m 'your comment' v2.5.0
git push origin v2.5.0

【讨论】:

【参考方案7】:

这可以使用一个简单的 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

【讨论】:

【参考方案8】:
$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 是我的构建管道中定义的变量。 希望它可以帮助其他人。

【讨论】:

以上是关于如何通过命令行在 GitHub 上发布版本?的主要内容,如果未能解决你的问题,请参考以下文章

通过命令行在 Mac 上安装 Docker Toolbox

通过命令行在 Ubuntu(或 Linux)上安装 Anaconda

用命令行在本地创建一个库并上传到Github

如何通过命令行在本地更新存储库[复制]

如何通过命令行在 MSBuild 中指定 CodeAnalysisRuleset

如何通过命令行在服务器上运行php脚本