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

时间:2014-01-19 08:15:43

标签: api version-control github automation release

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

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

7 个答案:

答案 0 :(得分:5)

有许多项目提供此服务:

您甚至可以直接使用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

来自https://www.barrykooij.com/create-github-releases-via-command-line/

如果您想在stackoverflow上获得完整功能的答案: Releasing a build artifact on github

答案 1 :(得分:3)

您可以使用"Create release" APIGitHub V3 API

POST /repos/:owner/:repo/releases

例如,请create-release.rb查看此ruby脚本“Mathias Lafeldt (mlafeldt)”:

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

答案 2 :(得分:2)

可以使用github cli来完成

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

Github CLI

答案 3 :(得分:1)

hub基于Go的官方GitHub CLI工具

https://github.com/github/hub

首先安装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

没有Ubuntu软件包:https://github.com/github/hub/issues/718

然后从您的存储库中

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?

答案 4 :(得分:0)

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

答案 5 :(得分:0)

假设您已从 github 存储库(来源)中检出正确的分支,并且与它同步,例如自动创建 2.5.0 版本,执行:

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

答案 6 :(得分:0)

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