Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to release a build artifact asset on GitHub with a script?

Tags:

github

I am trying to figure out a one-command process for generating a build on GitHub.

What I anticipate doing is running some sort of command- make release, say, and the make release script builds up the release artifact and then uploads it to GitHub in some fashion.

However, I'm fairly confused about how to actually get a release artifact on GitHub. Source code is awesome, but not everyone wants to do their own builds. :-)

like image 240
Paul Nathan Avatar asked Mar 05 '11 22:03

Paul Nathan


People also ask

How do I remove an artifact from GitHub?

Under your repository name, click Actions. In the left sidebar, click the workflow you want to see. From the list of workflow runs, click the name of the run to see the workflow run summary. Under Artifacts, click next to the artifact you want to remove.


1 Answers

Update September 2013, you can automate a release (API in preview mode)

Update January 2014, there's an unofficial command-line app, called github-release by Nicolas Hillegeer (aktau), for creating releases and uploading (binary) artifacts.
It uses the new github releases API mentioned above. Look at the Makefile of the project to see how to automate it more still.

Example:

# create a formal release $ github-release release \     --user aktau \     --repo gofinance \     --tag v0.1.0 \     --name "the wolf of source street" \     --description "Not a movie, contrary to popular opinion. Still, my first release!" \     --pre-release 

This API is a little different due to the binary assets. We use the Accept header for content negotation when requesting a release asset.
Pass a standard API media type to get the API representation:

$ curl -i -H "Authorization: token TOKEN" \      -H "Accept: application/vnd.github.manifold-preview" \      "https://uploads.github.com/repos/hubot/singularity/releases/assets/123"  HTTP/1.1 200 OK  {   "id": 123, ... } 

Pass “application/octet-stream” to download the binary content.

$ curl -i -H "Authorization: token TOKEN" \      -H "Accept: application/octet-stream" \      "https://uploads.github.com/repos/hubot/singularity/releases/assets/123"  HTTP/1.1 302 Found 

Uploads are handled by a single request to a companion “uploads.github.com” service.

$ curl -H "Authorization: token TOKEN" \      -H "Accept: application/vnd.github.manifold-preview" \      -H "Content-Type: application/zip" \      --data-binary @build/mac/package.zip \      "https://uploads.github.com/repos/hubot/singularity/releases/123/assets?name=1.0.0-mac.zip" 

Update 2d July 2013, you now can define a release.

release

  • Releases are accompanied by release notes and links to download the software or source code.
  • Following the conventions of many Git projects, releases are tied to Git tags. You can use an existing tag, or let releases create the tag when it's published.
  • You can also attach binary assets (such as compiled executables, minified scripts, documentation) to a release. Once published, the release details and assets are available to anyone that can view the repository.

This is what replaces the old binary upload service, which was removed in December 2012!


the make release script builds up the release artifact and then uploads it to github in some fashion.

That would mean adding it ("it" being the delivery made of one or several files, generally including binaries) to a regular local repo, and then pushing that repo to its matching GitHub repo.

That being said, the reason GitHub isn't mention in any "release" task is because Git is a source control management system, and is ill-suited for binaries.

It can have those files (binaries) of course, but isn't made to have them regularly, because of the bloated size of the repo after a while: each cloning would take longer and longer.
See What are the Git limits, and also "git - should source files and repository be on the same machine ?".

like image 186
VonC Avatar answered Sep 19 '22 20:09

VonC