google / apt-golang-s3

An s3 transport method for the apt package management system
Apache License 2.0
44 stars 13 forks source link

Releases with CI-built binaries #10

Open eriksw opened 4 years ago

eriksw commented 4 years ago

It'd be really nice if this repo included releases with usable binaries.

Would there be any interest in a PR to set up a Github Actions workflow that uses goreleaser to build and publish release artifacts when a semver tag is pushed?

I would propose configuring it to publish a "plain" binary as well as a deb, targeting at least amd64 to start. (The configuration to add other targets is trivial.)

adamvduke commented 4 years ago

In general I would be in favor of this if it provides value. I'm not very familiar with goreleaser. Are there other examples of google projects on github that I can reference to get familiar with the tool?

eriksw commented 4 years ago

I'm not familiar with the project in particular, but searching just within Google projects on Github, https://github.com/google/go-containerregistry is using goreleaser. (Looks like that project is still using Travis for some stuff instead of going all-in on GitHub actions, however.)

Goreleaser is a replacement for makefile+docker building that provides a standard solution for: • Building artifacts (optionally in a matrix of different architectures, operating systems, go versions, etc...) • Uploading the artifacts as a github release • Uploading a sibling artifact with the sha256's of the other artifacts • Automatically collecting commit subjects to give the release notes

It's preferable to use it from within GitHub actions because GitHub takes care of providing a GITHUB_TOKEN environment secret that goreleaser (or whatever else) can use to upload the release artifacts that grants access only to the repository the action is run in.

The upside of artifacts in general would be that it becomes possible for me (and countless other users) to have our startup scripts/packer scripts/etc include just a couple lines to install a ready-to-use artifact that's hosted by GitHub, instead of having to either maintain our own CI building this or script in a "go install" on systems that have no business having a go installation.