Code Monkey home page Code Monkey logo

godownloader's Introduction

GoReleaser Logo

GoDownloader

Download Go binaries as fast and easily as possible.

Software License Travis Go Report Card Go Doc Powered By: GoReleaser


This is the inverse of goreleaser. The goreleaser YAML file is read and creates a custom shell script that can download the right package and the right version for the existing machine.

If you use goreleaser already, this will create scripts suitable for "curl bash" style downloads.

This is also useful in CI/CD systems such as travis-ci.org.

  • Much faster then 'go get' (sometimes up to 100x)
  • Make sure your local environment (macOS) and the CI environment (Linux) are using the exact same versions of your go binaries.

CI/CD Example

Let's say you are using hugo, the static website generator, with travis-ci.

Your old .travis.yml file might have

install:
  - go get github.com/gohugoio/hugo

This can take up to 30 seconds!

Hugo doesn't have (yet) a godownloader.sh file. So we will make our own:

# create a godownloader script
godownloader --repo=gohugoio/hugo > ./godownloader-hugo.sh

and add godownloader-hugo.sh to your GitHub repo. Edit your .travis.yml as such

install:
  - ./godownloader-hugo.sh v0.37.1

Without a version number, GitHub is queried to get the latest version number.

install:
  - ./godownloader-hugo.sh

Typical download time is 0.3 seconds, or 100x improvement.

Your new hugo binary is in ./bin, so change your Makefie or scripts to use ./bin/hugo.

The default installation directory can be changed with the -b flag or the BINDIR environment variable.

Notes on Functionality

  • Only GitHub Releases are supported right now.
  • Checksums are checked.
  • Binares are installed using tar.gz or zip.
  • No OS-specific installs such as homebrew, deb, rpm. Everything is installed locally via a tar.gz or zip. Typically OS installs are done differently anyways (e.g. brew, apt-get, yum, etc).

Experimental support

Some people do not use Goreleaser (why!), so there is experimental support for the following alterative distributions.

"naked" releases on GitHub

A naked release is just the raw binary put on GitHub releases. Limited support can be done by

./goreleaser -source raw -repo [owner/repo] -exe [name] -nametpl [tpl]

Where exe is the final binary name, and tpl is the same type of name template that Goreleaser uses.

An example repo is at mvdan/sh. Note how the repo sh is different than the binary shfmt.

Equinox.io

Equinox.io is a really interesting platform. Take a look.

There is no API, so godownloader screen scrapes to figure out the latest release. Likewise, checksums are not verified.

./goreleaser -source equinoxio -repo [owner/repo]

While Equinox.io supports the concept of different release channels, only the stable channel is supported by godownloader.

Yes, it's true.

It's a go program that reads a YAML file that uses a template to make a posix shell script.

Other Resources and Inspiration

Other applications have written custom shell downloaders and installers:

golang/dep

The golang/dep package manager has a nice downloader, install.sh. Their trick to extract a version number from GitHub Releases is excellent:

$(echo "${LATEST_RELEASE}" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//' )

This is probably based on masterminds/glide and its installer at https://glide.sh/get

kubernetes/helm

kubernetes/helm is a "tool for managing Kubernetes charts. Charts are packages of pre-configured Kubernetes resources."

It has a get script. Of note is that it won't re-install if the desired version is already present.

chef

Chef has the one of the most complete installers at https://omnitruck.chef.io/install.sh. In particular it has support for

  • Support for solaris and aix, and some other less common platforms
  • python or perl as installers if curl or wget isn't present
  • http proxy support

Caddy

Caddy is "the HTTP/2 web server with automatic HTTPS" and a NGINX replacement. It has a clever installer at https://getcaddy.com. Of note is GPG signature verification.

godownloader's People

Contributors

caarlos0 avatar client9 avatar syntaqx avatar vorandrew avatar akupila avatar docwhat avatar eklitzke avatar fundor333 avatar jorinvo avatar kaihendry avatar mverteuil avatar mschneider82 avatar philippgille avatar ryanking avatar golangcidev avatar

Watchers

James Cloos avatar haya14busa avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.