Install any version of golang anywhere, even in a github action.
No need to wait for the last version of go to be integrated in
actions/setup-go
no need of any github action at all, even tip
is
available out of the box.
usage: install-go.pl [OPTIONS] VERSION [INSTALLATION_DIR]
-
VERSION
can be:- any version of go (1.9, 1.10.3);
- a version without patch version specified, meaning the last one (1.11.x, 1.16.x);
tip
, the latest HEAD.
-
INSTALLATION_DIR
the directory in which install thego/
directory. This directory must exist. It default to current directory. -
OPTIONS
can be:-e
,--dont-alter-github-env
: ignore GITHUB_ENV environment variable;-p
,--dont-alter-github-path
: ignore GITHUB_PATH environment variable.
By default, if GITHUB_ENV
environment variable exists AND references
a writable file, GOROOT
and GOPATH
affectations are written to
respectively reference INSTALL_DIR/go
and INSTALL_DIR/go/gopath
.
-e
or --dont-alter-github-env
option disables this behavior.
By default, if GITHUB_PATH
environment variable exists AND
references a writable file, INSTALL_DIR/go/bin
and
INSTALL_DIR/go/gopath/bin
(aka $GOPATH/bin
except if -e
or no
GITHUB_ENV
) are automatically appended to this file.
-p
(or --dont-alter-github-path
) option disables this behavior.
See Github Actions / Environment variables for details.
Tested on Linux (and Github unbuntu-latest), FreeBSD, Github macos-latest and windows-latest, for amd64 arch only.
jobs:
test:
strategy:
matrix:
go-version: [1.18.x, 1.19.x, 1.20.x, 1.21.x, 1.22.x, tip]
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Setup go
run: |
curl -sL https://raw.githubusercontent.com/maxatome/install-go/v3.6/install-go.pl |
perl - ${{ matrix.go-version }} $HOME/go
- name: Checkout code
uses: actions/checkout@v2
- name: Testing
continue-on-error: ${{ matrix.go-version == 'tip' }}
run: |
go version
go test ./... # or whatever you want with go executable
./install-go.pl 1.22.x
then
./go/bin/go version
./install-go.pl 1.9.2 ~/go192
then
~/go192/go/bin/go version
./install-go.pl tip ~/my/path
then
~/my/path/go/bin/go version
When tip
has to be compiled (because an already built instance could
not be retrieved), ~/my/path/go/bin/go
is the gotip
executable at
the end of installation, but tip
is also compiled and installed in
~/sdk/gotip/
.
install-go.pl
first checks if the requested version already exists
in its environment.
If yes, it symlinks this version in the INSTALLATION_DIR
directory.
If no, it downloads the binary version from golang.org, which is pretty fast.
For the tip
case, install-go.pl
tries to find the already built
instance on Google storage servers. If it fails to find it, it
downloads then compiles it. So be prepared to have a longer build due
to this compilation stage in such cases (it typically occurs during
the few minutes that follow a golang/go master commit).
See go-testdeep action, only on linux but with linter and coverage steps.