diff --git a/__tests__/installer.test.ts b/__tests__/installer.test.ts index 33b8113..24785d6 100644 --- a/__tests__/installer.test.ts +++ b/__tests__/installer.test.ts @@ -24,6 +24,20 @@ const cleanup = async () => { beforeAll(cleanup, 100000); afterAll(cleanup, 100000); +let bootstrapCgo: string = ''; +let bootstrapGo: string = ''; +beforeAll(async () => { + bootstrapGo = await io.which('go', false); + if (!bootstrapGo) { + return; + } + bootstrapCgo = await executil.goEnv('CGO_ENABLED', bootstrapGo); + // Override the value for acquireGo, because running getGo tests + // exports different GOROOT each time. + const bootstrapGoroot = await executil.goEnv('GOROOT', bootstrapGo); + process.env['GOROOT_BOOTSTRAP'] = bootstrapGoroot +}) + const describeTable = describe.each([ ['tip', '+60f14fd', 'go1.13beta1', '0.0.0-devel.60f14fddfee107dedd76c0be6b422a3d8ccc841a'], ['tip', '+a5bfd9d', 'go1.14beta1', '0.0.0-devel.a5bfd9da1d1b24f326399b6b75558ded14514f23'], @@ -39,7 +53,6 @@ describeTable('Go %s (%s)', (version: string, goVersion: string, gitRef: string, const goRoot = path.join(toolDir, cacheDir, normVersion, osarch); const goTool = path.join(goRoot, 'bin', goExe); - let cgo: string = ''; if (!gotip) { beforeAll(() => { nock('https://golang.org') @@ -51,15 +64,11 @@ describeTable('Go %s (%s)', (version: string, goVersion: string, gitRef: string, nock.cleanAll(); nock.enableNetConnect(); }); - } else { - beforeAll(async () => { - cgo = await executil.goEnv('CGO_ENABLED'); - }); } const timeout = gotip ? 300000 : 100000; test('installation', async () => { - const promise = installer.getGo(version, gitRef); + const promise = installer.getGo(version, gitRef, bootstrapGo); await expect(promise).resolves.toBeUndefined(); }, timeout); @@ -95,7 +104,7 @@ describeTable('Go %s (%s)', (version: string, goVersion: string, gitRef: string, } test('CGO_ENABLED check', async () => { const promise = executil.goEnv('CGO_ENABLED', goTool); - await expect(promise).resolves.toBe(cgo); + await expect(promise).resolves.toBe(bootstrapCgo); }); }); diff --git a/src/installer.ts b/src/installer.ts index ce4d1bd..5758db8 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -112,8 +112,9 @@ async function acquireGo(version: string, gotipRef: string, bootstrapGo: string) // The make.bat script on Windows is not smart enough // to figure out the path to bootstrap Go toolchain. - // Make script will show descriptive error message even - // if we don’t find Go installation on the host. + // We have to spoonfeed it with GOROOT_BOOTSTRAP value. + // At least make script will show descriptive error message + // even if we don’t find Go installation on the host. let bootstrap: string = ''; if (bootstrapGo) { bootstrap = await executil.goEnv('GOROOT', bootstrapGo);