gobinaries

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 15, 2020 License: MIT Imports: 3 Imported by: 0

README

Go Binaries

Go Binaries is an on-demand binary server, allowing non-Go users to quickly install tools written in Go without installing go itself, and removing the burden of cross-compiling and uploading dozens of binaries for every command-line you write.

On-demand Go binary example

Usage

Install PKG with optional semver VERSION.

curl -sf https://gobinaries.com/<PKG>[@VERSION] | sh

Install PKG with optional semver VERSION to the given directory PREFIX. By default /usr/local/bin is used.

curl -sf https://gobinaries.com/<PKG>[@VERSION] | PREFIX=/tmp sh

The github.com path prefix is optional.

Examples

Install the hey HTTP benchmarking tool:

curl -sf https://gobinaries.com/rakyll/hey | sh

Install the wuzz HTTP client:

curl -sf https://gobinaries.com/asciimoo/wuzz | sh

Install the latest version of staticgen:

curl -sf https://gobinaries.com/tj/staticgen/cmd/staticgen | sh

Install the latest 1.x major version of staticgen:

curl -sf https://gobinaries.com/tj/staticgen/cmd/staticgen@1.x | sh

Install the v1.0.0 version of triage:

curl -sf https://gobinaries.com/tj/triage/cmd/triage@1.0.0 | sh

Semver support

The following semver patterns are supported:

  • Exact version: v1.2.3, 1.2.3
  • Wildcards: v1.x, v1.2.x, 1.x, 1.2.x
  • Wildcards (implicit): v1, v1.2, 1.2
  • Leading v is optional, regardless of the Git tag

How does it work?

Take for example you want to install @rakyll's fantastic HTTP benchmarking tool hey, to install the latest release you would run:

curl -sf https://gobinaries.com/rakyll/hey | sh

This request fetches the latest tag from GitHub and responds with a shell script which performs a second request, populated with the resolved version and architecture as shown here:

https://gobinaries.com/binary/github.com/rakyll/hey?os=darwin&arch=amd64&version=v0.1.3

The response of this request is a Golang binary compiled for the requested os, architecture, and package version. The result is cached in a CDN for subsequent requests.

Limitations

  • The Go package must compile in under 100 seconds (CDN limitation)
  • The Go package must have at least one Git tag

FAQ

What's wrong with go-get? Using go-get for installation is fine if you're a Go user, however, if you're creating programs which are designed to be used by a wider audience it's unlikely they will have Go installed.
Which version of Go is used? Currently Go 1.13.x via the official golang:1.13 Docker image.

GoDoc

Sponsors

Sponsors

This project is sponsored by CTO.ai, making it easy for development teams to create and share workflow automations without leaving the command line.

And my GitHub sponsors:

Documentation

Overview

Package gobinaries provides an HTTP server for on-demand Go binaries.

Index

Constants

This section is empty.

Variables

View Source
var ErrNoVersionMatch = errors.New("no matching version")

ErrNoVersionMatch is returned by Resolver.Resolve() when no tag matches the requested version.

View Source
var ErrNoVersions = errors.New("no versions defined")

ErrNoVersions is returned by Resolver.Resolve() when no versions are defined.

View Source
var ErrObjectNotFound = errors.New("no cloud storage object")

ErrObjectNotFound is returned by Storage.Get() when no object is found for the specified key.

Functions

This section is empty.

Types

type Binary

type Binary struct {
	// Path is the command path such as "github.com/tj/staticgen/cmd/staticgen".
	Path string

	// Module path such as "github.com/tj/staticgen".
	Module string

	// Version is the version of the package.
	Version string

	// OS is the the target operating system.
	OS string

	// Arch is the target architecture.
	Arch string
}

Binary represents the details of a package binary.

type Resolver

type Resolver interface {
	Resolve(owner, repo, version string) (string, error)
}

Resolver is the interface used to resolver package versions.

type Storage

type Storage interface {
	Create(context.Context, io.Reader, Binary) error
	Get(context.Context, Binary) (io.ReadCloser, error)
}

Storage is the interface used for storing compiled Go binaries.

Directories

Path Synopsis
Package build provides Go package building.
Package build provides Go package building.
cmd
Package resolver provides a GitHub bins.Resolver implementation for resolving GitHub project tags.
Package resolver provides a GitHub bins.Resolver implementation for resolving GitHub project tags.
Package server provides an HTTP server for on-demand Go binaries.
Package server provides an HTTP server for on-demand Go binaries.
Package storage provides object storage for Go binaries.
Package storage provides object storage for Go binaries.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL