diff --git a/src/run.test.ts b/src/run.test.ts index 5836f3d..f4b2f0c 100644 --- a/src/run.test.ts +++ b/src/run.test.ts @@ -21,11 +21,13 @@ describe('run.ts', () => { }) test('getHelmDownloadURL() - return the URL to download helm for Linux', () => { + const downloadBaseURL = 'https://test.tld' + jest.spyOn(os, 'type').mockReturnValue('Linux') jest.spyOn(os, 'arch').mockReturnValueOnce('unknown') - const helmLinuxUrl = 'https://get.helm.sh/helm-v3.8.0-linux-amd64.zip' + const helmLinuxUrl = 'https://test.tld/helm-v3.8.0-linux-amd64.zip' - expect(run.getHelmDownloadURL('v3.8.0')).toBe(helmLinuxUrl) + expect(run.getHelmDownloadURL(downloadBaseURL, 'v3.8.0')).toBe(helmLinuxUrl) expect(os.type).toBeCalled() expect(os.arch).toBeCalled() @@ -33,19 +35,21 @@ describe('run.ts', () => { jest.spyOn(os, 'type').mockReturnValue('Linux') jest.spyOn(os, 'arch').mockReturnValueOnce('arm64') const helmLinuxArm64Url = - 'https://get.helm.sh/helm-v3.8.0-linux-arm64.zip' + 'https://test.tld/helm-v3.8.0-linux-arm64.zip' - expect(run.getHelmDownloadURL('v3.8.0')).toBe(helmLinuxArm64Url) + expect(run.getHelmDownloadURL(downloadBaseURL, 'v3.8.0')).toBe(helmLinuxArm64Url) expect(os.type).toBeCalled() expect(os.arch).toBeCalled() }) test('getHelmDownloadURL() - return the URL to download helm for Darwin', () => { + const downloadBaseURL = 'https://test.tld' + jest.spyOn(os, 'type').mockReturnValue('Darwin') jest.spyOn(os, 'arch').mockReturnValueOnce('unknown') - const helmDarwinUrl = 'https://get.helm.sh/helm-v3.8.0-darwin-amd64.zip' + const helmDarwinUrl = 'https://test.tld/helm-v3.8.0-darwin-amd64.zip' - expect(run.getHelmDownloadURL('v3.8.0')).toBe(helmDarwinUrl) + expect(run.getHelmDownloadURL(downloadBaseURL, 'v3.8.0')).toBe(helmDarwinUrl) expect(os.type).toBeCalled() expect(os.arch).toBeCalled() @@ -53,9 +57,9 @@ describe('run.ts', () => { jest.spyOn(os, 'type').mockReturnValue('Darwin') jest.spyOn(os, 'arch').mockReturnValueOnce('arm64') const helmDarwinArm64Url = - 'https://get.helm.sh/helm-v3.8.0-darwin-arm64.zip' + 'https://test.tld/helm-v3.8.0-darwin-arm64.zip' - expect(run.getHelmDownloadURL('v3.8.0')).toBe(helmDarwinArm64Url) + expect(run.getHelmDownloadURL(downloadBaseURL, 'v3.8.0')).toBe(helmDarwinArm64Url) expect(os.type).toBeCalled() expect(os.arch).toBeCalled() }) @@ -65,10 +69,12 @@ describe('run.ts', () => { }) test('getHelmDownloadURL() - return the URL to download helm for Windows', () => { + const downloadBaseURL = 'https://test.tld' + jest.spyOn(os, 'type').mockReturnValue('Windows_NT') - const helmWindowsUrl = 'https://get.helm.sh/helm-v3.8.0-windows-amd64.zip' - expect(run.getHelmDownloadURL('v3.8.0')).toBe(helmWindowsUrl) + const helmWindowsUrl = 'https://test.tld/helm-v3.8.0-windows-amd64.zip' + expect(run.getHelmDownloadURL(downloadBaseURL, 'v3.8.0')).toBe(helmWindowsUrl) expect(os.type).toBeCalled() }) @@ -193,12 +199,14 @@ describe('run.ts', () => { return {isDirectory: () => isDirectory} as fs.Stats }) - expect(await run.downloadHelm('v4.0.0')).toBe( + const baseURL = 'https://test.tld' + + expect(await run.downloadHelm(baseURL, 'v4.0.0')).toBe( path.join('pathToCachedDir', 'helm.exe') ) expect(toolCache.find).toBeCalledWith('helm', 'v4.0.0') expect(toolCache.downloadTool).toBeCalledWith( - 'https://get.helm.sh/helm-v4.0.0-windows-amd64.zip' + 'https://test.tld/helm-v4.0.0-windows-amd64.zip' ) expect(fs.chmodSync).toBeCalledWith('pathToTool', '777') expect(toolCache.extractZip).toBeCalledWith('pathToTool') @@ -215,12 +223,14 @@ describe('run.ts', () => { }) jest.spyOn(os, 'type').mockReturnValue('Windows_NT') - await expect(run.downloadHelm('v3.2.1')).rejects.toThrow( - 'Failed to download Helm from location https://get.helm.sh/helm-v3.2.1-windows-amd64.zip' + const baseURL = 'https://test.tld' + + await expect(run.downloadHelm(baseURL, 'v3.2.1')).rejects.toThrow( + 'Failed to download Helm from location https://test.tld/helm-v3.2.1-windows-amd64.zip' ) expect(toolCache.find).toBeCalledWith('helm', 'v3.2.1') expect(toolCache.downloadTool).toBeCalledWith( - 'https://get.helm.sh/helm-v3.2.1-windows-amd64.zip' + 'https://test.tld/helm-v3.2.1-windows-amd64.zip' ) }) @@ -228,7 +238,9 @@ describe('run.ts', () => { jest.spyOn(toolCache, 'find').mockReturnValue('pathToCachedDir') jest.spyOn(fs, 'chmodSync').mockImplementation(() => {}) - expect(await run.downloadHelm('v3.2.1')).toBe( + const baseURL = 'https://test.tld' + + expect(await run.downloadHelm(baseURL, 'v3.2.1')).toBe( path.join('pathToCachedDir', 'helm.exe') ) expect(toolCache.find).toBeCalledWith('helm', 'v3.2.1') @@ -254,12 +266,14 @@ describe('run.ts', () => { return {isDirectory: () => isDirectory} as fs.Stats }) - await expect(run.downloadHelm('v3.2.1')).rejects.toThrow( + const baseURL = 'https://test.tld' + + await expect(run.downloadHelm(baseURL, 'v3.2.1')).rejects.toThrow( 'Helm executable not found in path pathToCachedDir' ) expect(toolCache.find).toBeCalledWith('helm', 'v3.2.1') expect(toolCache.downloadTool).toBeCalledWith( - 'https://get.helm.sh/helm-v3.2.1-windows-amd64.zip' + 'https://test.tld/helm-v3.2.1-windows-amd64.zip' ) expect(fs.chmodSync).toBeCalledWith('pathToTool', '777') expect(toolCache.extractZip).toBeCalledWith('pathToTool') diff --git a/src/run.ts b/src/run.ts index f4c5cbb..9b4524b 100644 --- a/src/run.ts +++ b/src/run.ts @@ -26,8 +26,10 @@ export async function run() { version = await getLatestHelmVersion() } + const downloadBaseURL = core.getInput('downloadBaseURL', {required: false}) + core.startGroup(`Downloading ${version}`) - const cachedPath = await downloadHelm(version) + const cachedPath = await downloadHelm(downloadBaseURL, version) core.endGroup() try { @@ -105,54 +107,54 @@ const LINUX = 'Linux' const MAC_OS = 'Darwin' const WINDOWS = 'Windows_NT' const ARM64 = 'arm64' -export function getHelmDownloadURL(version: string): string { +export function getHelmDownloadURL(baseURL: string, version: string): string { const arch = os.arch() const operatingSystem = os.type() switch (true) { case operatingSystem == LINUX && arch == ARM64: return util.format( - 'https://get.helm.sh/helm-%s-linux-arm64.zip', + `${baseURL}/helm-%s-linux-arm64.zip`, version ) case operatingSystem == LINUX: return util.format( - 'https://get.helm.sh/helm-%s-linux-amd64.zip', + `${baseURL}/helm-%s-linux-amd64.zip`, version ) case operatingSystem == MAC_OS && arch == ARM64: return util.format( - 'https://get.helm.sh/helm-%s-darwin-arm64.zip', + `${baseURL}/helm-%s-darwin-arm64.zip`, version ) case operatingSystem == MAC_OS: return util.format( - 'https://get.helm.sh/helm-%s-darwin-amd64.zip', + `${baseURL}/helm-%s-darwin-amd64.zip`, version ) case operatingSystem == WINDOWS: default: return util.format( - 'https://get.helm.sh/helm-%s-windows-amd64.zip', + `${baseURL}/helm-%s-windows-amd64.zip`, version ) } } -export async function downloadHelm(version: string): Promise { +export async function downloadHelm(baseURL: string, version: string): Promise { let cachedToolpath = toolCache.find(helmToolName, version) if (!cachedToolpath) { let helmDownloadPath try { helmDownloadPath = await toolCache.downloadTool( - getHelmDownloadURL(version) + getHelmDownloadURL(baseURL, version) ) } catch (exception) { throw new Error( `Failed to download Helm from location ${getHelmDownloadURL( - version + baseURL, version )}` ) }