12 Commits

Author SHA1 Message Date
2ddfd41587 Merge pull request 'new/version-input' (#3) from new/version-input into main
All checks were successful
tests / test-gomod (push) Successful in 23s
tests / test-versioninput (push) Successful in 26s
Reviewed-on: #3
2026-05-27 18:55:05 +00:00
c1d74565a3 adjusting defaults for version input
All checks were successful
tests / test-gomod (push) Successful in 24s
tests / test-versioninput (push) Successful in 29s
2026-05-27 14:51:09 -04:00
d0bce850e0 update readme
All checks were successful
tests / test-gomod (push) Successful in 22s
tests / test-versioninput (push) Successful in 28s
2026-05-27 14:45:39 -04:00
f452a8f09b [ci] finishing new test
All checks were successful
tests / test-gomod (push) Successful in 25s
tests / test-versioninput (push) Successful in 30s
- properly checking go command version on second test
2026-05-27 14:42:51 -04:00
32294399f7 script update
All checks were successful
tests / test-gomod (push) Successful in 24s
tests / test-versioninput (push) Successful in 28s
- comments
- better logging
- proper exiting on error
- cleaning up old code
2026-05-27 14:41:22 -04:00
b4cb46f3a6 fixing improper version passed from input
All checks were successful
tests / test-gomod (push) Successful in 25s
tests / test-versioninput (push) Successful in 30s
2026-05-27 14:31:23 -04:00
b25fd78dd5 breaking tests apart
Some checks failed
tests / test-versioninput (push) Failing after 4s
tests / test-gomod (push) Successful in 17s
2026-05-27 14:28:28 -04:00
229b3116e4 [ci] moving to newer runner
Some checks failed
test / test (push) Failing after 38s
2026-05-27 14:24:58 -04:00
632f667417 adjusting for version input
Some checks failed
test / test (push) Has been cancelled
2026-05-27 14:24:24 -04:00
73b20fd5e1 adjusting version fix
Some checks failed
test / test (push) Failing after 18s
2025-05-22 21:55:30 -04:00
24b6739aa5 adding arch, defaults dont apply to tests
Some checks failed
test / test (push) Failing after 18s
2025-05-22 21:50:54 -04:00
55cb2b2be5 adding version input, adjusting tests
Some checks failed
test / test (push) Failing after 3s
2025-05-22 21:49:48 -04:00
4 changed files with 84 additions and 43 deletions

View File

@@ -1,10 +1,10 @@
name: "test"
run-name: "test"
name: "tests"
run-name: "tests"
on: push
jobs:
test:
runs-on: action
test-gomod:
runs-on: wind
steps:
- uses: actions/checkout@v4
@@ -29,3 +29,25 @@ jobs:
- name: "check go installed command"
shell: bash
run: mctl -v | grep "mctl version v0.3.4"
test-versioninput:
runs-on: wind
steps:
- uses: actions/checkout@v4
- name: "install go with version input"
shell: bash
env:
GO_INSTALL_COMMANDS: code.jakeyoungdev.com/jake/mctl@v0.3.4
GO_INSTALL_VERSION: 1.23.2
GO_INSTALL_ARCH: amd64
run: |
chmod +x install.sh
./install.sh
- name: "check go version"
shell: bash
run: go version | grep "go version go1.23.2 linux/amd64"
- name: "check go installed command"
shell: bash
run: mctl -v | grep "mctl version v0.3.4"

View File

@@ -4,25 +4,26 @@ An extremely simple github action to install golang and golang commands (using "
## Usage
Use a tagged release to avoid unexpected changes that may come to the master branch
Use a tagged release to avoid unexpected changes that may come to the main branch
```yaml
name: "install go"
uses: https://code.jakeyoungdev.com/actions/install-go@master
uses: https://code.jakeyoungdev.com/actions/install-go@main
with:
commands: |
code.jakeyoungdev.com/jake/mctl@v0.3.3
```
#### 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 either determined by the version input, or the version found in a go.mod file if the input is not set. 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
Some inputs are available to customize the installation
|Input|Required|Values|Default|Description|
|---|---|---|---|---|
|arch|no|any arch for Go|amd64|system architecture for golang
|purge|no|yes/no|no|remove any golang files found on system before install
|arch|no|any arch for Go|amd64|system architecture for go
|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'
|version|no|any go version|version in go.mod file|the go version to install
## 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.

View File

@@ -13,6 +13,9 @@ inputs:
description: "Optional, any commands to be installed with 'go install', must include version"
required: false
default: "."
version:
description: "Optional, the Go version to install if no go.mod file is present"
required: false
runs:
using: composite
steps:
@@ -23,3 +26,4 @@ runs:
GO_INSTALL_COMMANDS: ${{ inputs.commands }}
GO_INSTALL_ARCH: ${{ inputs.arch }}
GO_INSTALL_PURGE: ${{ inputs.purge }}
GO_INSTALL_VERSION: ${{ inputs.version }}

View File

@@ -1,15 +1,17 @@
#!/bin/bash
#installs any commands set in the command input value
##
# installs commands using "go install" if any are set in the commands input
##
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 |
# "." is used as a default, meaning no commands were added
if [[ "$GO_INSTALL_COMMANDS" != "." ]]; then
#splitting into an array 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}"
echo "Installed ${i}"
else
echo "FATAL: Unable to install ${i} with go"
exit 1
@@ -18,41 +20,52 @@ function installCommands {
fi
}
#start script
echo "Starting Golang install"
##
# fix version ensures we have a patch level version on our go version string from the go.mod file
##
function fixVersion {
DL_VSPL=( $DL_VERSION_RAW )
DL_VERSION="${DL_VSPL[1]}"
# -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
#validate version and architecture
echo "Parsing go version"
#looking for go version in go.mod file, only checking up to minor version ignoring patch value to allow for stable versions
# -P uses perl syntax
DL_VERSION_RAW="$(grep "^go [0-9]+.[0-9]+" go.mod -P)"
if [[ -z "$DL_VERSION_RAW" ]]; then
echo "FATAL: Unable to pull version from go.mod"
exit 1
#check install version field first
if [[ -z "$GO_INSTALL_VERSION" ]]; then
echo "No version input found, checking go.mod files"
# -P uses perl syntax
DL_VERSION_RAW="$(grep "^go [0-9]+.[0-9]+" go.mod -P)"
if [[ -z "$DL_VERSION_RAW" ]]; then
echo "FATAL: No Go version found, set version input if no go.mod file is present"
exit 1
else
fixVersion
fi
else
echo "Version input found"
DL_VERSION=$GO_INSTALL_VERSION
fi
echo "Found go version: ${DL_VERSION_RAW}"
echo "Found go version: ${DL_VERSION}"
DL_ARCH=$GO_INSTALL_ARCH
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
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
# -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 if go isn't installed
GO_CHECK=$(command -v go)
if [[ "$GO_CHECK" ]]; then
#if the version of go matches the requested version, skip
GVC=$(go version)
if [[ "$GVC" == "go version go${DL_VERSION} linux/${DL_ARCH}" ]]; then
echo "Go ${DL_VERSION} already installed, skipping!"
echo "Go ${DL_VERSION} already installed, skipping go setup"
installCommands
exit 0
fi
@@ -67,11 +80,11 @@ if [[ "$GO_CHECK" ]]; then
fi
fi
echo "Ready for install"
echo "Ready to install"
echo "Downloading go files for ${DL_VERSION}/${DL_ARCH}"
PATH_FOR_FILES=/usr/local/go
PATH_FOR_TAR=/usr/local
#creating our files with proper file perms
sudo mkdir -v -m 0777 -p "$PATH_FOR_FILES"
#wget
@@ -84,12 +97,13 @@ sudo mkdir -v -m 0777 -p "$PATH_FOR_FILES"
# - extract from pipe as a file
# -C change to GOPATH directory
if sudo wget -qO- "https://golang.org/dl/go${DL_VERSION}.linux-${DL_ARCH}.tar.gz" | sudo tar -zxf - -C "$PATH_FOR_TAR"; then
echo "Files downloaded"
echo "Files downloaded successfully"
else
echo "FATAL: Unable to download and extract files"
exit 1
fi
echo "Setting path for go command"
echo "Adding go to path"
export PATH=$PATH:$PATH_FOR_FILES/bin
echo "$PATH_FOR_FILES/bin" >> "$GITHUB_PATH" #set action path too