From 9474567f40cdb8632feadc0bb21f893c7ec2b896 Mon Sep 17 00:00:00 2001 From: Kishen Viswanathan Date: Fri, 22 Nov 2024 18:18:36 +0530 Subject: [PATCH] Enable setting up of go on ppc64/ppc64le systems --- __tests__/setup-go.test.ts | 16 ++++++++++++++++ dist/setup/index.js | 16 ++++++++++++---- src/system.ts | 15 +++++++++++---- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts index 70f2166eb..ece0f6ede 100644 --- a/__tests__/setup-go.test.ts +++ b/__tests__/setup-go.test.ts @@ -7,6 +7,7 @@ import osm, {type} from 'os'; import path from 'path'; import * as main from '../src/main'; import * as im from '../src/installer'; +import {getArch} from '../src/system'; import goJsonData from './data/golang-dl.json'; import matchers from '../matchers.json'; @@ -31,6 +32,7 @@ describe('setup-go', () => { let getSpy: jest.SpyInstance; let platSpy: jest.SpyInstance; let archSpy: jest.SpyInstance; + let endianSpy: jest.SpyInstance; let joinSpy: jest.SpyInstance; let dlSpy: jest.SpyInstance; let extractTarSpy: jest.SpyInstance; @@ -69,6 +71,8 @@ describe('setup-go', () => { archSpy = jest.spyOn(osm, 'arch'); archSpy.mockImplementation(() => os['arch']); execSpy = jest.spyOn(cp, 'execSync'); + endianSpy = jest.spyOn(osm, 'endianness'); + endianSpy.mockImplementation(() => os['endianness']); // switch path join behaviour based on set os.platform joinSpy = jest.spyOn(path, 'join'); @@ -965,5 +969,17 @@ use . ); } ); + + it('should return ppc64 when architecture is ppc64 and system is Big Endian', () => { + endianSpy.mockReturnValue('BE'); + const result = getArch('ppc64'); + expect(result).toBe('ppc64'); + }); + + it('should return ppc64le when architecture is ppc64 and system is Little Endian', () => { + endianSpy.mockReturnValue('LE'); + const result = getArch('ppc64'); + expect(result).toBe('ppc64le'); + }); }); }); diff --git a/dist/setup/index.js b/dist/setup/index.js index f21396aa6..4beceaae1 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -88815,15 +88815,23 @@ function getPlatform() { exports.getPlatform = getPlatform; function getArch(arch) { // 'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', and 'x64'. - // wants amd64, 386, arm64, armv61, ppc641e, s390x + // wants amd64, 386, arm64, armv6l, ppc64le, s390x // currently not supported by runner but future proofed mapping switch (arch) { case 'x64': arch = 'amd64'; break; - // case 'ppc': - // arch = 'ppc64'; - // break; + // In case of ppc64, further distinction is needed to determine the endianness + // of the host as it can either be ppc64(Big Endian) or ppc64le (Little Endian) to download + // the correct bundle. + case 'ppc64': + if (os_1.default.endianness() === 'LE') { + arch = 'ppc64le'; + } + else { + arch = 'ppc64'; + } + break; case 'x32': arch = '386'; break; diff --git a/src/system.ts b/src/system.ts index e54146da0..4984e97c7 100644 --- a/src/system.ts +++ b/src/system.ts @@ -18,15 +18,22 @@ export function getPlatform(): string { export function getArch(arch: string): string { // 'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', and 'x64'. - // wants amd64, 386, arm64, armv61, ppc641e, s390x + // wants amd64, 386, arm64, armv6l, ppc64le, s390x // currently not supported by runner but future proofed mapping switch (arch) { case 'x64': arch = 'amd64'; break; - // case 'ppc': - // arch = 'ppc64'; - // break; + // In case of ppc64, further distinction is needed to determine the endianness + // of the host as it can either be ppc64(Big Endian) or ppc64le (Little Endian) to download + // the correct bundle. + case 'ppc64': + if (os.endianness() === 'LE') { + arch = 'ppc64le'; + } else { + arch = 'ppc64'; + } + break; case 'x32': arch = '386'; break;