gobrew

package module
v1.10.8 Latest Latest
Warning

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

Go to latest
Published: Feb 13, 2024 License: MIT Imports: 19 Imported by: 0

README

gobrew

Go version manager, written in Go
Update and switch Go versions easily
Install Go on Linux or Mac (intel) or Mac with Apple chip (M1, M2 etc) or Windows

Quick Setup: One command to install Go and manage versions.

Hassle Free: Doesn't require root or sudo, or shell re-hash.

Platform: Supports (arm64, arch64, Mac, Mac M1, Ubuntu and Windows).

Flexible: Manage multiple Go versions including beta and rc.

Colorful: Colorful output.

Build Status

CI coverage build-time go-binary-size unit-test-run-time

go-mod-dependencies go-sec-issues

coverage build-time go-binary-size go-mod-dependencies go-sec-issues unit-test-run-time

Install or update

Step 1

Using curl (mac, linux) - recommended

curl -sLk https://raw.githubusercontent.com/kevincobain2000/gobrew/master/git.io.sh | sh

Using powershell (windows)

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/kevincobain2000/gobrew/master/git.io.ps1'))

Using go

go install github.com/kevincobain2000/gobrew/cmd/gobrew@latest
Step 2

Now add PATH setting your shell config file (.bashrc or .zshrc).

export PATH="$HOME/.gobrew/current/bin:$HOME/.gobrew/bin:$PATH"

All DONE!

Execute gobrew command from any dir.

gobrew
Quick Usage

Simply use command gobrew from any dir. It will auto detect if Go version is set, or not latest, or not same as go.mod file.

gobrew command

Full Usage

Smart and interactive command

gobrew

Will install and set Go

gobrew use 1.16

Will only install it

gobrew install 1.16
gobrew use 1.16

Uninstall a version

gobrew uninstall 1.16

List installed versions

╰─$ gobrew ls
1.15.1
1.16
1.16.3
1.17
1.17.1
1.17.2
1.17.3
1.17.4
1.17.5
1.17.6
1.17.7
1.17.8
1.18
1.18.1*
1.18beta1
1.18rc1

current: 1.18.1

List available versions

╰─$ gobrew ls-remote
[Info] Fetching remote versions
1	1.0.1  1.0.2  1.0.3

1.1	1.1.0  1.1.1  1.1.2  1.1rc2  1.1rc3

1.2	1.2.0  1.2.1  1.2.2  1.2rc2  1.2rc3  1.2rc4
	1.2rc5

1.3	1.3.0  1.3.1  1.3.2  1.3.3  1.3beta1  1.3beta2
	1.3rc1  1.3rc2

1.4	1.4.0  1.4.1  1.4.2  1.4.3  1.4beta1  1.4rc1
	1.4rc2

1.5	1.5.0  1.5.1  1.5.2  1.5.3  1.5.4  1.5beta1
	1.5beta2  1.5beta3  1.5rc1

1.6	1.6.0  1.6.1  1.6.2  1.6.3  1.6.4  1.6beta1
	1.6beta2  1.6rc1  1.6rc2

1.7	1.7.0  1.7.1  1.7.2  1.7.3  1.7.4
	1.7.5  1.7.6  1.7beta1  1.7beta2  1.7rc1  1.7rc2  1.7rc3
	1.7rc4  1.7rc5  1.7rc6

1.8	1.8.0  1.8.1  1.8.2  1.8.3  1.8.4
	1.8.5  1.8.6  1.8.7  1.8.5rc4  1.8.5rc5  1.8beta1  1.8beta2
	1.8rc1  1.8rc2  1.8rc3

1.9	1.9.0  1.9.1  1.9.2  1.9.3  1.9.4
	1.9.5  1.9.6  1.9.7  1.9beta1  1.9beta2  1.9rc1  1.9rc2


1.10	1.10.0  1.10.1  1.10.2  1.10.3  1.10.4
	1.10.5  1.10.6  1.10.7  1.10.8  1.10beta1  1.10beta2  1.10rc1
	1.10rc2

1.11	1.11.0  1.11.1  1.11.2  1.11.3  1.11.4
	1.11.5  1.11.6  1.11.7  1.11.8  1.11.9  1.11.10
	1.11.11  1.11.12  1.11.13  1.11beta1  1.11beta2  1.11beta3  1.11rc1
	1.11rc2

1.12	1.12.0  1.12.1  1.12.2  1.12.3  1.12.4
	1.12.5  1.12.6  1.12.7  1.12.8  1.12.9  1.12.10
	1.12.11  1.12.12  1.12.13  1.12.14  1.12.15  1.12.16
	1.12.17  1.12beta1  1.12beta2  1.12rc1

1.13	1.13.0  1.13.1  1.13.2  1.13.3  1.13.4
	1.13.5  1.13.6  1.13.7  1.13.8  1.13.9  1.13.10
	1.13.11  1.13.12  1.13.13  1.13.14  1.13.15  1.13beta1  1.13rc1
	1.13rc2

1.14	1.14.0  1.14.1  1.14.2  1.14.3  1.14.4
	1.14.5  1.14.6  1.14.7  1.14.8  1.14.9  1.14.10
	1.14.11  1.14.12  1.14.13  1.14.14  1.14.15  1.14beta1  1.14rc1


1.15	1.15.0  1.15.1  1.15.2  1.15.3  1.15.4
	1.15.5  1.15.6  1.15.7  1.15.8  1.15.9  1.15.10
	1.15.11  1.15.12  1.15.13  1.15.14  1.15.15  1.15beta1  1.15rc1
	1.15rc2

1.16	1.16.0  1.16.1  1.16.2  1.16.3  1.16.4
	1.16.5  1.16.6  1.16.7  1.16.8  1.16.9  1.16.10
	1.16.11  1.16.12  1.16.13  1.16.14  1.16.15  1.16beta1  1.16rc1


1.17	1.17.0  1.17.1  1.17.2  1.17.3  1.17.4
	1.17.5  1.17.6  1.17.7  1.17.8  1.17.9  1.17.10
	1.17.11  1.17.12  1.17beta1  1.17rc1  1.17rc2

1.18	1.18.0  1.18.1  1.18.2  1.18.3  1.18.4  1.18beta1
	1.18beta2  1.18rc1

1.19	1.19beta1  1.19rc1  1.19rc2

All commands

╰─$ gobrew help

gobrew 1.6.3

Usage:

    gobrew use <version>           Install and set <version>
    gobrew ls                      Alias for list
    gobrew ls-remote               List remote versions (including rc|beta versions)

    gobrew install <version>       Only install <version> (binary from official or GOBREW_REGISTRY env)
    gobrew uninstall <version>     Uninstall <version>
    gobrew list                    List installed versions
    gobrew self-update             Self update this tool
    gobrew prune                   Uninstall all go versions except current version
    gobrew version                 Show gobrew version
    gobrew help                    Show this message

Examples:
    gobrew use 1.16                # use go version 1.16
    gobrew use 1.16.1              # use go version 1.16.1
    gobrew use 1.16rc1             # use go version 1.16rc1

    gobrew use 1.16@latest         # use go version latest of 1.16

    gobrew use 1.16@dev-latest     # use go version latest of 1.16, including rc and beta
                                   # Note: rc and beta become no longer latest upon major release

    gobrew use latest              # use go version latest available

    gobrew use dev-latest          # use go version latest avalable, including rc and beta

Installation Path:
    # Add gobrew to your ~/.bashrc or ~/.zshrc
    export PATH="$HOME/.gobrew/current/bin:$HOME/.gobrew/bin:$PATH"
    export GOROOT="$HOME/.gobrew/current/go"

Uninstall gobrew

rm -rf $HOME/.gobrew

Use it in Github Actions

For more details: https://github.com/kevincobain2000/action-gobrew

on: [push]
name: CI
jobs:
  test:
    strategy:
      matrix:
        go-version: [1.13, 1.18, 1.18@latest, 1.19beta1, 1.19@dev-latest, latest, dev-latest, mod]
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - uses: kevincobain2000/action-gobrew@v2
        with:
          version: ${{ matrix.go-version }}

      - name: Go
        run: go version

Using Bash completions

curl https://raw.githubusercontent.com/kevincobain2000/gobrew/master/completions/bash/gobrew-completion > /usr/local/etc/bash_completion.d/gobrew

# or
curl https://raw.githubusercontent.com/kevincobain2000/gobrew/master/completions/bash/gobrew-completion >> ~/.zshrc

# or
curl https://raw.githubusercontent.com/kevincobain2000/gobrew/master/completions/bash/gobrew-completion >> ~/.bashrc

Customization

By default, gobrew is installed in $HOME as $HOME/.gobrew.

You can change this by setting the GOBREW_ROOT environment variable.

# optionally set
echo "export GOBREW_ROOT=/usr/local/share" >> ~/.bashrc
# optionally set
echo "export GOBREW_ROOT=/usr/local/share" >> ~/.zshrc


#then
curl -sLk https://raw.githubusercontent.com/kevincobain2000/gobrew/master/git.io.sh | sh

Set GOROOT and GOPATH in your shell config file (.bashrc or .zshrc).

# optionally set
export GOROOT="$HOME/.gobrew/current/go"
# optionally set
export GOPATH="$HOME/.gobrew/current/go"

Change Log

  • v1.2.0 - Added rc|beta versions, appended at the end of list
  • v1.4.1 - Go mod updated to 1.17
  • v1.5.0 - Mac M1 support
  • v1.5.1 - Oops
  • v1.5.5 - arm|M1|darwin support added
  • v1.5.6 - README updated
  • v1.5.7 - Exit code fixed
  • v1.5.8 - Show download progress and use Go's compression instead of tar command
  • v1.5.9 - oops
  • v1.6.0 - Added support for @latest and @dev-latest and progress bar for download
  • v1.6.1 - Bug on use
  • v1.6.2 - Using goreleaser #35 by @juev
  • v1.6.3 - Added latest and dev-latest
  • v1.6.4 - Github action publish
  • v1.6.7 - Fixes rate limit issue
  • v1.6.9 - Fixes #52, download error on status != 200
  • v1.7.4 - Added 2 new options gobrew version and gobrew prune
  • v1.7.5 - Fixes strange output on gobrew use latest
  • v1.7.7 - Windows support?
  • v1.7.8 - Windows support, self-update fixes
  • v1.7.9 - Windows fix ups and bash-completions
  • v1.8.0 - Windows support, including actions
  • v1.8.2 - Prune old go versions, bug fix and go.mod auto detection
  • v1.8.4 - Light background terminal support
  • v1.8.6 - Fixes where 1.20.0 was detected as 1.20
  • v1.9.0 - v1.8.6 ~ v1.9.0, updates colors packages, fixes UT issues for Github status codes
  • v1.9.1 - Minor logging fixes
  • v1.9.2 - Minor log message updated
  • v1.9.4 - gobrew interactive
  • v1.9.5 - bug
  • v1.9.8 - bug fix where 1.21 is not detected as 1.21.0
  • v1.10.0 - bug fixes for wrong gobrew version on windows
  • v1.10.6 - fix for powershell
  • v1.10.7 - fixes where dev-latest was not from rc or beta. go get -u deps updated and use go 1.22 in go.mod

Documentation

Index

Constants

View Source
const (
	DefaultRegistryPath string = "https://go.dev/dl/"
	DownloadURL         string = "https://github.com/kevincobain2000/gobrew/releases/latest/download/"
	TagsAPI                    = "https://raw.githubusercontent.com/kevincobain2000/gobrew/json/golang-tags.json"
	VersionsURL         string = "https://api.github.com/repos/kevincobain2000/gobrew/releases/latest"
)
View Source
const (
	NoneVersion = "None"
	ProgramName = "gobrew"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Command

type Command interface {
	ListVersions()
	ListRemoteVersions(bool) map[string][]string
	CurrentVersion() string
	Uninstall(version string)
	Install(version string) string
	Use(version string)
	Prune()
	Version(currentVersion string)
	Upgrade(currentVersion string)
	Interactive(ask bool)
}

Command ...

type Config added in v1.10.5

type Config struct {
	RootDir           string
	RegistryPathURL   string
	GobrewDownloadURL string
	GobrewTags        string
	GobrewVersionsURL string
}

type GoBrew

type GoBrew struct {
	Config
	// contains filtered or unexported fields
}

GoBrew struct

func NewGoBrew

func NewGoBrew(config Config) GoBrew

NewGoBrew instance

func (*GoBrew) CurrentVersion

func (gb *GoBrew) CurrentVersion() string

CurrentVersion get current version from symb link

func (*GoBrew) Install

func (gb *GoBrew) Install(version string) string

Install the given version of go

func (*GoBrew) Interactive added in v1.9.4

func (gb *GoBrew) Interactive(ask bool)

Interactive used by default

func (*GoBrew) ListRemoteVersions

func (gb *GoBrew) ListRemoteVersions(print bool) map[string][]string

ListRemoteVersions that are installed by dir ls

func (*GoBrew) ListVersions

func (gb *GoBrew) ListVersions()

ListVersions that are installed by dir ls highlight the version that is currently symbolic linked

func (*GoBrew) Prune added in v1.7.4

func (gb *GoBrew) Prune()

Prune removes all installed versions of go except current version

func (*GoBrew) Uninstall

func (gb *GoBrew) Uninstall(version string)

Uninstall the given version of go

func (*GoBrew) Upgrade added in v1.6.5

func (gb *GoBrew) Upgrade(currentVersion string)

Upgrade of GoBrew

func (*GoBrew) Use

func (gb *GoBrew) Use(version string)

Use a version

func (*GoBrew) Version added in v1.7.4

func (gb *GoBrew) Version(currentVersion string)

Version of GoBrew

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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