diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts index 3d3e150..d81a2aa 100644 --- a/__tests__/setup-go.test.ts +++ b/__tests__/setup-go.test.ts @@ -1,13 +1,12 @@ -import * as tc from '@actions/tool-cache'; import * as core from '@actions/core'; -import fs = require('fs'); +import * as io from '@actions/io'; +import * as tc from '@actions/tool-cache'; +import fs from 'fs'; +import cp from 'child_process'; import osm = require('os'); -import path = require('path'); -import {run} from '../src/main'; -import * as httpm from '@actions/http-client'; +import path from 'path'; +import * as main from '../src/main'; import * as im from '../src/installer'; -import * as sys from '../src/system'; -import {ITypedResponse} from '@actions/http-client/interfaces'; let goJsonData = require('./data/golang-dl.json'); @@ -25,6 +24,11 @@ describe('setup-go', () => { let dlSpy: jest.SpyInstance; let exSpy: jest.SpyInstance; let cacheSpy: jest.SpyInstance; + let dbgSpy: jest.SpyInstance; + let whichSpy: jest.SpyInstance; + let existsSpy: jest.SpyInstance; + let mkdirpSpy: jest.SpyInstance; + let execSpy: jest.SpyInstance; beforeEach(() => { // @actions/core @@ -32,12 +36,13 @@ describe('setup-go', () => { inSpy = jest.spyOn(core, 'getInput'); inSpy.mockImplementation(name => inputs[name]); - // node 'os' + // node os = {}; platSpy = jest.spyOn(osm, 'platform'); platSpy.mockImplementation(() => os['platform']); archSpy = jest.spyOn(osm, 'arch'); archSpy.mockImplementation(() => os['arch']); + execSpy = jest.spyOn(cp, 'execSync'); // @actions/tool-cache findSpy = jest.spyOn(tc, 'find'); @@ -46,9 +51,15 @@ describe('setup-go', () => { cacheSpy = jest.spyOn(tc, 'cacheDir'); getSpy = jest.spyOn(im, 'getVersions'); + // io + whichSpy = jest.spyOn(io, 'which'); + existsSpy = jest.spyOn(fs, 'existsSync'); + mkdirpSpy = jest.spyOn(io, 'mkdirP'); + // writes cnSpy = jest.spyOn(process.stdout, 'write'); logSpy = jest.spyOn(console, 'log'); + dbgSpy = jest.spyOn(main, '_debug'); getSpy.mockImplementation(() => goJsonData); cnSpy.mockImplementation(line => { // uncomment to debug @@ -58,11 +69,16 @@ describe('setup-go', () => { // uncomment to debug // process.stderr.write('log:' + line + '\n'); }); + dbgSpy.mockImplementation(msg => { + // uncomment to see debug output + // process.stderr.write(msg + '\n'); + }); }); afterEach(() => { jest.resetAllMocks(); jest.clearAllMocks(); + //jest.restoreAllMocks(); }); afterAll(async () => {}, 100000); @@ -164,7 +180,7 @@ describe('setup-go', () => { let toolPath = path.normalize('/cache/go/1.13.0/x64'); findSpy.mockImplementation(() => toolPath); - await run(); + await main.run(); expect(logSpy).toHaveBeenCalledWith(`Setup go stable version spec 1.13.0`); }); @@ -176,7 +192,7 @@ describe('setup-go', () => { let toolPath = path.normalize('/cache/go/1.13.0/x64'); findSpy.mockImplementation(() => toolPath); - await run(); + await main.run(); expect(logSpy).toHaveBeenCalledWith(`Setup go stable version spec 1.13.0`); }); @@ -186,7 +202,7 @@ describe('setup-go', () => { let toolPath = path.normalize('/cache/go/1.13.0/x64'); findSpy.mockImplementation(() => toolPath); - await run(); + await main.run(); let expPath = path.join(toolPath, 'bin'); }); @@ -195,7 +211,7 @@ describe('setup-go', () => { inputs['go-version'] = '1.13.0'; let toolPath = path.normalize('/cache/go/1.13.0/x64'); findSpy.mockImplementation(() => toolPath); - await run(); + await main.run(); let expPath = path.join(toolPath, 'bin'); expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`); @@ -208,7 +224,7 @@ describe('setup-go', () => { findSpy.mockImplementation(() => { throw new Error(errMsg); }); - await run(); + await main.run(); expect(cnSpy).toHaveBeenCalledWith('::error::' + errMsg + osm.EOL); }); @@ -223,7 +239,7 @@ describe('setup-go', () => { let toolPath = path.normalize('/cache/go/1.13.0/x64'); exSpy.mockImplementation(() => '/some/other/temp/path'); cacheSpy.mockImplementation(() => toolPath); - await run(); + await main.run(); let expPath = path.join(toolPath, 'bin'); @@ -239,7 +255,7 @@ describe('setup-go', () => { inputs['go-version'] = '9.99.9'; findSpy.mockImplementation(() => ''); - await run(); + await main.run(); expect(cnSpy).toHaveBeenCalledWith( `::error::Could not find a version that satisfied version spec: 9.99.9${osm.EOL}` @@ -257,7 +273,7 @@ describe('setup-go', () => { dlSpy.mockImplementation(() => { throw new Error(errMsg); }); - await run(); + await main.run(); expect(cnSpy).toHaveBeenCalledWith( `::error::Failed to download version 1.13.1: Error: ${errMsg}${osm.EOL}` @@ -273,13 +289,39 @@ describe('setup-go', () => { findSpy.mockImplementation(() => ''); getSpy.mockImplementation(() => null); - await run(); + await main.run(); expect(cnSpy).toHaveBeenCalledWith( `::error::Failed to download version 1.13.1: Error: golang download url did not return results${osm.EOL}` ); }); + it('does not add BIN if go is not in path', async () => { + whichSpy.mockImplementation(async () => { + return ''; + }); + let added = await main.addBinToPath(); + expect(added).toBeFalsy(); + }); + + it('adds bin if dir not exists', async () => { + whichSpy.mockImplementation(async () => { + return '/usr/local/go/bin/go'; + }); + + execSpy.mockImplementation(() => { + return '/Users/testuser/go'; + }); + + mkdirpSpy.mockImplementation(async () => {}); + existsSpy.mockImplementation(path => { + return false; + }); + + let added = await main.addBinToPath(); + expect(added).toBeTruthy; + }); + // 1.13.1 => 1.13.1 // 1.13 => 1.13.0 // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1 diff --git a/dist/index.js b/dist/index.js index a3c5e3e..7b347bd 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1274,14 +1274,17 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(__webpack_require__(470)); const io = __importStar(__webpack_require__(1)); const tc = __importStar(__webpack_require__(533)); const installer = __importStar(__webpack_require__(749)); -const path = __importStar(__webpack_require__(622)); -const cp = __importStar(__webpack_require__(129)); -const fs = __importStar(__webpack_require__(747)); +const path_1 = __importDefault(__webpack_require__(622)); +const child_process_1 = __importDefault(__webpack_require__(129)); +const fs_1 = __importDefault(__webpack_require__(747)); function run() { return __awaiter(this, void 0, void 0, function* () { try { @@ -1303,7 +1306,7 @@ function run() { } if (installDir) { core.exportVariable('GOROOT', installDir); - core.addPath(path.join(installDir, 'bin')); + core.addPath(path_1.default.join(installDir, 'bin')); console.log('Added go to the path'); let added = addBinToPath(); core.debug(`add bin ${added}`); @@ -1313,7 +1316,7 @@ function run() { } } // add problem matchers - const matchersPath = path.join(__dirname, '..', 'matchers.json'); + const matchersPath = path_1.default.join(__dirname, '..', 'matchers.json'); console.log(`##[add-matcher]${matchersPath}`); } catch (error) { @@ -1326,23 +1329,23 @@ function addBinToPath() { return __awaiter(this, void 0, void 0, function* () { let added = false; let g = yield io.which('go'); - core.debug(`which go :${g}:`); + _debug(`which go :${g}:`); if (!g) { - core.debug('go not in the path'); + _debug('go not in the path'); return added; } - let buf = cp.execSync('go env GOPATH'); + let buf = child_process_1.default.execSync('go env GOPATH'); if (buf) { let gp = buf.toString().trim(); - core.debug(`go env GOPATH :${gp}:`); - if (!fs.existsSync(gp)) { + _debug(`go env GOPATH :${gp}:`); + if (!fs_1.default.existsSync(gp)) { // some of the hosted images have go install but not profile dir - core.debug(`creating ${gp}`); + _debug(`creating ${gp}`); io.mkdirP(gp); } - let bp = path.join(gp, 'bin'); - if (!fs.existsSync(bp)) { - core.debug(`creating ${bp}`); + let bp = path_1.default.join(gp, 'bin'); + if (!fs_1.default.existsSync(bp)) { + _debug(`creating ${bp}`); io.mkdirP(bp); } core.addPath(bp); @@ -1351,6 +1354,11 @@ function addBinToPath() { return added; }); } +exports.addBinToPath = addBinToPath; +function _debug(message) { + core.debug(message); +} +exports._debug = _debug; /***/ }), diff --git a/src/main.ts b/src/main.ts index 46f9019..9948f98 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,9 +2,9 @@ import * as core from '@actions/core'; import * as io from '@actions/io'; import * as tc from '@actions/tool-cache'; import * as installer from './installer'; -import * as path from 'path'; -import * as cp from 'child_process'; -import * as fs from 'fs'; +import path from 'path'; +import cp from 'child_process'; +import fs from 'fs'; export async function run() { try { @@ -55,28 +55,28 @@ export async function run() { } } -async function addBinToPath(): Promise { +export async function addBinToPath(): Promise { let added = false; let g = await io.which('go'); - core.debug(`which go :${g}:`); + _debug(`which go :${g}:`); if (!g) { - core.debug('go not in the path'); + _debug('go not in the path'); return added; } let buf = cp.execSync('go env GOPATH'); if (buf) { let gp = buf.toString().trim(); - core.debug(`go env GOPATH :${gp}:`); + _debug(`go env GOPATH :${gp}:`); if (!fs.existsSync(gp)) { // some of the hosted images have go install but not profile dir - core.debug(`creating ${gp}`); + _debug(`creating ${gp}`); io.mkdirP(gp); } let bp = path.join(gp, 'bin'); if (!fs.existsSync(bp)) { - core.debug(`creating ${bp}`); + _debug(`creating ${bp}`); io.mkdirP(bp); } @@ -85,3 +85,7 @@ async function addBinToPath(): Promise { } return added; } + +export function _debug(message: string) { + core.debug(message); +}