From 4a4352b33067e47da692b40ea6e19467075219ac Mon Sep 17 00:00:00 2001 From: Nick <50747025+mcdonnnj@users.noreply.github.com> Date: Fri, 8 Apr 2022 12:23:10 -0400 Subject: [PATCH] Add 'go-version' Output (#85) * Add go-version to action outputs This provides the semver version of Go that has been installed. This is useful if only a major or minor version has been provided as the input go-version value. * Convert version extraction to a function Simplify how the version is extracted and add a simple test at the same time. Co-authored-by: Peter Mescalchin Co-authored-by: Brian Cristante <33549821+brcrista@users.noreply.github.com> Co-authored-by: Peter Mescalchin Co-authored-by: Brian Cristante <33549821+brcrista@users.noreply.github.com> --- __tests__/setup-go.test.ts | 5 +++++ action.yml | 5 ++++- dist/index.js | 11 ++++++++++- src/main.ts | 10 ++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts index bb85dee..8c5033b 100644 --- a/__tests__/setup-go.test.ts +++ b/__tests__/setup-go.test.ts @@ -105,6 +105,11 @@ describe('setup-go', () => { jest.restoreAllMocks(); }, 100000); + it('can extract the major.minor.patch version from a given Go version string', async () => { + const goVersionOutput = 'go version go1.16.6 darwin/amd64'; + expect(main.parseGoVersion(goVersionOutput)).toBe('1.16.6'); + }); + it('can find 1.9.7 from manifest on osx', async () => { os.platform = 'darwin'; os.arch = 'x64'; diff --git a/action.yml b/action.yml index 8bbaebe..ab0fdca 100644 --- a/action.yml +++ b/action.yml @@ -1,7 +1,7 @@ name: 'Setup Go environment' description: 'Setup a Go environment and add it to the PATH' author: 'GitHub' -inputs: +inputs: go-version: description: 'The Go version to download (if necessary) and use. Supports semver spec and ranges.' check-latest: @@ -10,6 +10,9 @@ inputs: token: description: Used to pull node distributions from go-versions. Since there's a default, this is typically not supplied by the user. default: ${{ github.token }} +outputs: + go-version: + description: 'The installed Go version. Useful when given a version range as input.' runs: using: 'node16' main: 'dist/index.js' diff --git a/dist/index.js b/dist/index.js index 48ceb03..74206fb 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2058,7 +2058,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.addBinToPath = exports.run = void 0; +exports.parseGoVersion = exports.addBinToPath = exports.run = void 0; const core = __importStar(__webpack_require__(470)); const io = __importStar(__webpack_require__(1)); const installer = __importStar(__webpack_require__(749)); @@ -2100,6 +2100,7 @@ function run() { let goPath = yield io.which('go'); let goVersion = (child_process_1.default.execSync(`${goPath} version`) || '').toString(); core.info(goVersion); + core.setOutput('go-version', parseGoVersion(goVersion)); core.startGroup('go env'); let goEnv = (child_process_1.default.execSync(`${goPath} env`) || '').toString(); core.info(goEnv); @@ -2145,6 +2146,14 @@ function isGhes() { const ghUrl = new url_1.URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; } +function parseGoVersion(versionString) { + // get the installed version as an Action output + // based on go/src/cmd/go/internal/version/version.go: + // fmt.Printf("go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH) + // expecting go for runtime.Version() + return versionString.split(' ')[2].slice('go'.length); +} +exports.parseGoVersion = parseGoVersion; //# sourceMappingURL=main.js.map /***/ }), diff --git a/src/main.ts b/src/main.ts index 34784c4..a5caf9b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -48,6 +48,8 @@ export async function run() { let goVersion = (cp.execSync(`${goPath} version`) || '').toString(); core.info(goVersion); + core.setOutput('go-version', parseGoVersion(goVersion)); + core.startGroup('go env'); let goEnv = (cp.execSync(`${goPath} env`) || '').toString(); core.info(goEnv); @@ -94,3 +96,11 @@ function isGhes(): boolean { ); return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; } + +export function parseGoVersion(versionString: string): string { + // get the installed version as an Action output + // based on go/src/cmd/go/internal/version/version.go: + // fmt.Printf("go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH) + // expecting go for runtime.Version() + return versionString.split(' ')[2].slice('go'.length); +}