Compare commits
10 Commits
0a2cc6f296
...
new/versio
Author | SHA1 | Date | |
---|---|---|---|
73b20fd5e1 | |||
24b6739aa5 | |||
55cb2b2be5 | |||
d45fdbf3ca | |||
fb7e640162 | |||
2785d64c02 | |||
09214e49b9 | |||
67be40ad0d | |||
8febe20c2a | |||
86ce64c8d1 |
@@ -1,13 +1,10 @@
|
|||||||
name: "test"
|
name: "test"
|
||||||
run-name: "test"
|
run-name: "test"
|
||||||
on:
|
on: push
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: [smoketest]
|
runs-on: action
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -19,9 +16,8 @@ jobs:
|
|||||||
- name: "run go install script"
|
- name: "run go install script"
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
GO_INSTALL_COMMANDS: github.com/jake-young-dev/kelp@v0.0.9
|
GO_INSTALL_COMMANDS: code.jakeyoungdev.com/jake/mctl@v0.3.4
|
||||||
GO_INSTALL_ARCH: amd64
|
GO_INSTALL_ARCH: amd64
|
||||||
GO_INSTALL_PURGE: no
|
|
||||||
run: |
|
run: |
|
||||||
chmod +x install.sh
|
chmod +x install.sh
|
||||||
./install.sh
|
./install.sh
|
||||||
@@ -32,4 +28,19 @@ jobs:
|
|||||||
|
|
||||||
- name: "check go installed command"
|
- name: "check go installed command"
|
||||||
shell: bash
|
shell: bash
|
||||||
run: kelp -v | grep "kelp version v0.0.9"
|
run: mctl -v | grep "mctl version v0.3.4"
|
||||||
|
|
||||||
|
- name: "remove go"
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
GO_INSTALL_COMMANDS: code.jakeyoungdev.com/jake/mctl@v0.3.4
|
||||||
|
GO_INSTALL_PURGE: yes
|
||||||
|
GO_INSTALL_VERSION: 1.23.2
|
||||||
|
GO_INSTALL_ARCH: amd64
|
||||||
|
run: |
|
||||||
|
rm go.mod
|
||||||
|
./install.sh
|
||||||
|
|
||||||
|
- name: "check go version"
|
||||||
|
shell: bash
|
||||||
|
run: go version | grep "go version go1.23.2 linux/amd64"
|
12
README.md
12
README.md
@@ -1,4 +1,5 @@
|
|||||||
# install-go
|
# install-go
|
||||||
|
 <br />
|
||||||
An extremely simple github action to install golang and golang commands (using "go install") on linux hosts. This provides the ability to install and setup golang without node/typescript which is required when using [actions/setup-go](https://github.com/actions/setup-go).
|
An extremely simple github action to install golang and golang commands (using "go install") on linux hosts. This provides the ability to install and setup golang without node/typescript which is required when using [actions/setup-go](https://github.com/actions/setup-go).
|
||||||
|
|
||||||
|
|
||||||
@@ -9,19 +10,20 @@ Use a tagged release to avoid unexpected changes that may come to the master bra
|
|||||||
uses: https://code.jakeyoungdev.com/actions/install-go@master
|
uses: https://code.jakeyoungdev.com/actions/install-go@master
|
||||||
with:
|
with:
|
||||||
commands: |
|
commands: |
|
||||||
github.com/jake-young-dev/kelp@v0.0.9
|
code.jakeyoungdev.com/jake/mctl@v0.3.3
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Go verions
|
#### Go verions
|
||||||
Go version is determined using the go.mod file in the root of working directory. Go files are pulled directly from the go download [site](https://go.dev/dl/) and all go commands are installed using 'go install' after setup. If a Go version is already present the 'purge' input must be set to 'yes' to avoid errors.
|
The Go version installed is determined by the version specified in the go.mod file. If not mod file is present the 'version' input is used. Go files are pulled directly from the Go download [site](https://go.dev/dl/) and all go commands are installed using 'go install' after setup. If a different version of Go is already installed the 'purge' input must be set to 'yes' to remove it and avoid errors.
|
||||||
|
|
||||||
#### Inputs
|
#### Inputs
|
||||||
Some inputs are available to customize the installation
|
Some inputs are available to customize the installation
|
||||||
|Input|Required|Values|Default|Description|
|
|Input|Required|Values|Default|Description|
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
|arch|no|any arch for Go|amd64|system architecture for golang
|
|arch|no|any arch for Go|amd64|system architecture for go
|
||||||
|purge|no|yes/no|no|remove any golang files found on system before install
|
|purge|no|yes/no|no|remove any go files found on system before install
|
||||||
|commands|no|any public go repositories|.|links to any commands to be installed using 'go install'
|
|commands|no|any public go repositories|.|links to any commands to be installed using 'go install'
|
||||||
|
|version|no|any go version|.|the go version to use if no mod file is present
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
This repo is a as brain-dead as I could make it and is intended to be as fast and low-level as possible. Please open an issue for any problems or suggestions.
|
This repo is a as brain-dead as I could make it and is intended to be as fast and low-level as possible. Please open an issue for any problems or suggestions.
|
3
TODO.txt
3
TODO.txt
@@ -1,3 +0,0 @@
|
|||||||
Comments are left in code using TODO# to track possible implementation location.
|
|
||||||
|
|
||||||
TODO1. check current installed version to see if it matches requested install version, only error if they don't match
|
|
@@ -3,7 +3,7 @@ description: "simple and fast install for golang and golang commands on linux wo
|
|||||||
inputs:
|
inputs:
|
||||||
arch:
|
arch:
|
||||||
description: "Optional, the linux architecture to use when downloading Go files (default: amd64)"
|
description: "Optional, the linux architecture to use when downloading Go files (default: amd64)"
|
||||||
required: true
|
required: false
|
||||||
default: "amd64"
|
default: "amd64"
|
||||||
purge:
|
purge:
|
||||||
description: "Optional, deletes any previously installed go versions (yes|no)"
|
description: "Optional, deletes any previously installed go versions (yes|no)"
|
||||||
@@ -13,6 +13,10 @@ inputs:
|
|||||||
description: "Optional, any commands to be installed with 'go install', must include version"
|
description: "Optional, any commands to be installed with 'go install', must include version"
|
||||||
required: false
|
required: false
|
||||||
default: "."
|
default: "."
|
||||||
|
version:
|
||||||
|
description: "Optional, the Go version to install if no go.mod file is present"
|
||||||
|
required: false
|
||||||
|
default: "."
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
@@ -23,3 +27,4 @@ runs:
|
|||||||
GO_INSTALL_COMMANDS: ${{ inputs.commands }}
|
GO_INSTALL_COMMANDS: ${{ inputs.commands }}
|
||||||
GO_INSTALL_ARCH: ${{ inputs.arch }}
|
GO_INSTALL_ARCH: ${{ inputs.arch }}
|
||||||
GO_INSTALL_PURGE: ${{ inputs.purge }}
|
GO_INSTALL_PURGE: ${{ inputs.purge }}
|
||||||
|
GO_INSTALL_VERSION: ${{ inputs.version }}
|
93
install.sh
93
install.sh
@@ -1,5 +1,37 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#installs any commands set in the command input value
|
||||||
|
function installCommands {
|
||||||
|
#if commands input is set pull the input and install them all using 'go install'
|
||||||
|
if [[ "$GO_INSTALL_COMMANDS" != "." ]]; then # "." is used as a default
|
||||||
|
#allows for multiple cmds using |
|
||||||
|
INPUT_ARR=( $GO_INSTALL_COMMANDS )
|
||||||
|
for i in "${INPUT_ARR[@]}"; do
|
||||||
|
echo "Installing go command from ${i}"
|
||||||
|
if go install ${i}; then
|
||||||
|
echo "Command setup for ${i}"
|
||||||
|
else
|
||||||
|
echo "FATAL: Unable to install ${i} with go"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixVersion {
|
||||||
|
DL_VSPL=( $DL_VERSION_RAW )
|
||||||
|
DL_VERSION="${DL_VSPL[1]}"
|
||||||
|
|
||||||
|
#ensure we have patch-level version, if not add 0 for stable releases
|
||||||
|
# -P uses perl syntax
|
||||||
|
DL_VERSION_PAD_CHECK="$(grep "^go [0-9]+.[0-9]+.[0-9]+" go.mod -P)"
|
||||||
|
if [[ -z "$DL_VERSION_PAD_CHECK" ]]; then
|
||||||
|
DL_VERSION="$DL_VERSION"".0"
|
||||||
|
echo "Fixing version number to ${DL_VERSION}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#start script
|
||||||
echo "Starting Golang install"
|
echo "Starting Golang install"
|
||||||
|
|
||||||
#validate version and architecture
|
#validate version and architecture
|
||||||
@@ -8,39 +40,53 @@ echo "Parsing go version"
|
|||||||
# -P uses perl syntax
|
# -P uses perl syntax
|
||||||
DL_VERSION_RAW="$(grep "^go [0-9]+.[0-9]+" go.mod -P)"
|
DL_VERSION_RAW="$(grep "^go [0-9]+.[0-9]+" go.mod -P)"
|
||||||
if [[ -z "$DL_VERSION_RAW" ]]; then
|
if [[ -z "$DL_VERSION_RAW" ]]; then
|
||||||
echo "FATAL: Unable to pull version from go.mod"
|
#no go.mod file found
|
||||||
|
DL_VERSION_RAW=$GO_INSTALL_VERSION
|
||||||
|
#no version input set either
|
||||||
|
if [[ "$DL_VERSION_RAW" == "." ]]; then
|
||||||
|
echo "FATAL: No Go version found, set version input if no go.mod file is present"
|
||||||
exit 1
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
fixVersion
|
||||||
fi
|
fi
|
||||||
echo "Found go version: ${DL_VERSION_RAW}"
|
echo "Found go version: ${DL_VERSION_RAW}"
|
||||||
|
|
||||||
DL_ARCH=$GO_INSTALL_ARCH
|
DL_ARCH=$GO_INSTALL_ARCH
|
||||||
DL_VSPL=( $DL_VERSION_RAW )
|
# DL_VSPL=( $DL_VERSION_RAW )
|
||||||
DL_VERSION="${DL_VSPL[1]}"
|
# DL_VERSION="${DL_VSPL[1]}"
|
||||||
|
|
||||||
#ensure we have patch-level version, if not add 0 for stable releases
|
# #ensure we have patch-level version, if not add 0 for stable releases
|
||||||
# -P uses perl syntax
|
# # -P uses perl syntax
|
||||||
DL_VERSION_PAD_CHECK="$(grep "^go [0-9]+.[0-9]+.[0-9]+" go.mod -P)"
|
# DL_VERSION_PAD_CHECK="$(grep "^go [0-9]+.[0-9]+.[0-9]+" go.mod -P)"
|
||||||
if [[ -z "$DL_VERSION_PAD_CHECK" ]]; then
|
# if [[ -z "$DL_VERSION_PAD_CHECK" ]]; then
|
||||||
DL_VERSION="$DL_VERSION"".0"
|
# DL_VERSION="$DL_VERSION"".0"
|
||||||
echo "Fixing version number to ${DL_VERSION}"
|
# echo "Fixing version number to ${DL_VERSION}"
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
echo "Checking if go is already installed"
|
echo "Checking if go is already installed"
|
||||||
#check if go is already present before starting install process and delete files if purge input is set
|
#check if go is already present before starting install process and delete files if purge input is set
|
||||||
# -v writes string that indicates command or command path to output, prevents command not found error
|
# -v writes string that indicates command or command path to output, prevents command not found error
|
||||||
GO_CHECK=$(command -v go)
|
GO_CHECK=$(command -v go)
|
||||||
if [[ "$GO_CHECK" ]]; then
|
if [[ "$GO_CHECK" ]]; then
|
||||||
#if purge flag is set remove old go files
|
#if the version of go matches the requested version, skip
|
||||||
if [[ "$GO_INSTALL_PURGE" == "yes" ]]; then
|
GVC=$(go version)
|
||||||
|
if [[ "$GVC" == "go version go${DL_VERSION} linux/${DL_ARCH}" ]]; then
|
||||||
|
echo "Go ${DL_VERSION} already installed, skipping!"
|
||||||
|
installCommands
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
#if the purge flag is not set and version does not match, exit
|
||||||
|
if [[ "$GO_INSTALL_PURGE" != "yes" ]]; then
|
||||||
|
echo "FATAL: The wrong version of Go is already installed, set purge to 'yes' if you wish to update installed version"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
echo "Removing old go versions"
|
echo "Removing old go versions"
|
||||||
sudo rm -r /usr/bin/go
|
sudo rm -r /usr/bin/go
|
||||||
sudo rm -r /usr/bin/gofmt
|
sudo rm -r /usr/bin/gofmt
|
||||||
else
|
|
||||||
#TODO1: if installed version matches requested version we can consider the job successful
|
|
||||||
echo "FATAL: Go is already installed, set purge to 'yes' if you wish to update installed version"
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Ready for install"
|
echo "Ready for install"
|
||||||
|
|
||||||
echo "Downloading go files for ${DL_VERSION}/${DL_ARCH}"
|
echo "Downloading go files for ${DL_VERSION}/${DL_ARCH}"
|
||||||
@@ -82,17 +128,4 @@ GP=$(go env GOPATH)/bin
|
|||||||
export PATH=$PATH:$GP
|
export PATH=$PATH:$GP
|
||||||
echo "$GP" >> "$GITHUB_PATH"
|
echo "$GP" >> "$GITHUB_PATH"
|
||||||
|
|
||||||
#if commands input is set pull the input and install them all using 'go install'
|
installCommands
|
||||||
if [[ "$GO_INSTALL_COMMANDS" != "." ]]; then # "." is used as a default
|
|
||||||
#allows for multiple cmds using |
|
|
||||||
INPUT_ARR=( $GO_INSTALL_COMMANDS )
|
|
||||||
for i in "${INPUT_ARR[@]}"; do
|
|
||||||
echo "Installing go command from ${i}"
|
|
||||||
if go install ${i}; then
|
|
||||||
echo "Command setup for ${i}"
|
|
||||||
else
|
|
||||||
echo "FATAL: Unable to install ${i} with go"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
Reference in New Issue
Block a user