From 4d604c6cce10b8483c4a143854ba9a34b6f501c9 Mon Sep 17 00:00:00 2001 From: Dave Hadka Date: Tue, 29 Sep 2020 09:58:32 -0500 Subject: [PATCH] No-op on GHES --- __tests__/restore.test.ts | 24 ++++++++++++++++++++++++ __tests__/save.test.ts | 18 ++++++++++++++++++ src/restore.ts | 6 ++++++ src/save.ts | 5 +++++ src/utils/actionUtils.ts | 7 +++++++ 5 files changed, 60 insertions(+) diff --git a/__tests__/restore.test.ts b/__tests__/restore.test.ts index 8495021..cef03a5 100644 --- a/__tests__/restore.test.ts +++ b/__tests__/restore.test.ts @@ -53,6 +53,30 @@ test("restore with invalid event outputs warning", async () => { expect(failedMock).toHaveBeenCalledTimes(0); }); +test("restore on GHES should no-op", async () => { + try { + process.env["GITHUB_SERVER_URL"] = "http://example.com"; + + const infoMock = jest.spyOn(core, "info"); + const restoreCacheMock = jest.spyOn(cache, "restoreCache"); + const setCacheHitOutputMock = jest.spyOn( + actionUtils, + "setCacheHitOutput" + ); + + await run(); + + expect(restoreCacheMock).toHaveBeenCalledTimes(0); + expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); + expect(setCacheHitOutputMock).toHaveBeenCalledWith(false); + expect(infoMock).toHaveBeenCalledWith( + "Cache action is not supported on GHES" + ); + } finally { + process.env["GITHUB_SERVER_URL"] = undefined; + } +}); + test("restore with no path should fail", async () => { const failedMock = jest.spyOn(core, "setFailed"); const restoreCacheMock = jest.spyOn(cache, "restoreCache"); diff --git a/__tests__/save.test.ts b/__tests__/save.test.ts index 943a2bd..6086cf3 100644 --- a/__tests__/save.test.ts +++ b/__tests__/save.test.ts @@ -91,6 +91,24 @@ test("save with no primary key in state outputs warning", async () => { expect(failedMock).toHaveBeenCalledTimes(0); }); +test("save on GHES should no-op", async () => { + try { + process.env["GITHUB_SERVER_URL"] = "http://example.com"; + + const infoMock = jest.spyOn(core, "info"); + const saveCacheMock = jest.spyOn(cache, "saveCache"); + + await run(); + + expect(saveCacheMock).toHaveBeenCalledTimes(0); + expect(infoMock).toHaveBeenCalledWith( + "Cache action is not supported on GHES" + ); + } finally { + process.env["GITHUB_SERVER_URL"] = undefined; + } +}); + test("save with exact match returns early", async () => { const infoMock = jest.spyOn(core, "info"); const failedMock = jest.spyOn(core, "setFailed"); diff --git a/src/restore.ts b/src/restore.ts index b1f8cca..015089e 100644 --- a/src/restore.ts +++ b/src/restore.ts @@ -6,6 +6,12 @@ import * as utils from "./utils/actionUtils"; async function run(): Promise { try { + if (utils.isGhes()) { + core.info("Cache action is not supported on GHES"); + utils.setCacheHitOutput(false); + return; + } + // Validate inputs, this can cause task failure if (!utils.isValidEvent()) { utils.logWarning( diff --git a/src/save.ts b/src/save.ts index 80b656c..beab623 100644 --- a/src/save.ts +++ b/src/save.ts @@ -6,6 +6,11 @@ import * as utils from "./utils/actionUtils"; async function run(): Promise { try { + if (utils.isGhes()) { + core.info("Cache action is not supported on GHES"); + return; + } + if (!utils.isValidEvent()) { utils.logWarning( `Event Validation Error: The event type ${ diff --git a/src/utils/actionUtils.ts b/src/utils/actionUtils.ts index 26bb8c1..017d357 100644 --- a/src/utils/actionUtils.ts +++ b/src/utils/actionUtils.ts @@ -2,6 +2,13 @@ import * as core from "@actions/core"; import { Outputs, RefKey, State } from "../constants"; +export function isGhes(): boolean { + const ghUrl = new URL( + process.env["GITHUB_SERVER_URL"] || "https://github.com" + ); + return ghUrl.hostname.toUpperCase() !== "GITHUB.COM"; +} + export function isExactKeyMatch(key: string, cacheKey?: string): boolean { return !!( cacheKey &&