diff --git a/__tests__/cache-utils.test.ts b/__tests__/cache-utils.test.ts index 695c561cc..58e7ac626 100644 --- a/__tests__/cache-utils.test.ts +++ b/__tests__/cache-utils.test.ts @@ -3,6 +3,7 @@ import * as cache from '@actions/cache'; import * as core from '@actions/core'; import * as cacheUtils from '../src/cache-utils'; import {PackageManagerInfo} from '../src/package-managers'; +import * as utils from '../src/utils'; describe('getCommandOutput', () => { //Arrange @@ -209,3 +210,76 @@ describe('isCacheFeatureAvailable', () => { expect(warningSpy).toHaveBeenCalledWith(warningMessage); }); }); + +describe('Detect environment', () => { + it('"RUNNER_ENVIRONMENT" = "github-hosted" should be hosted environment', () => { + delete process.env['AGENT_ISSELFHOSTED']; + process.env['RUNNER_ENVIRONMENT'] = 'github-hosted'; + expect(utils.isSelfHosted()).toBeFalsy(); + }); + + it('"RUNNER_ENVIRONMENT" = "hosted" should be self-hosted environment', () => { + delete process.env['AGENT_ISSELFHOSTED']; + process.env['RUNNER_ENVIRONMENT'] = 'hosted'; + expect(utils.isSelfHosted()).toBeTruthy(); + }); + + it('"AGENT_ISSELFHOSTED" = "0" should be hosted environment', () => { + process.env['AGENT_ISSELFHOSTED'] = '0'; + delete process.env['RUNNER_ENVIRONMENT']; + expect(utils.isSelfHosted()).toBeFalsy(); + }); + + it('"AGENT_ISSELFHOSTED" = "0" should be self-hosted environment', () => { + process.env['AGENT_ISSELFHOSTED'] = '1'; + delete process.env['RUNNER_ENVIRONMENT']; + expect(utils.isSelfHosted()).toBeTruthy(); + }); + + it('unset "RUNNER_ENVIRONMENT" and "AGENT_ISSELFHOSTED" should be self-hosted environment', () => { + delete process.env['AGENT_ISSELFHOSTED']; + delete process.env['RUNNER_ENVIRONMENT']; + expect(utils.isSelfHosted()).toBeTruthy(); + }); +}); +describe('Default cache values', () => { + const inputSpy = jest.spyOn(utils, 'isSelfHosted'); + + beforeEach(() => { + delete process.env['INPUT_CACHE']; + }); + + it('default cache should be false in self-hosted environment', () => { + inputSpy.mockReturnValueOnce(true); + expect(cacheUtils.getCacheInput()).toBeFalsy(); + }); + + it('cache should be false if set to false in self-hosted environment', () => { + inputSpy.mockReturnValueOnce(true); + process.env['INPUT_CACHE'] = 'false'; + expect(cacheUtils.getCacheInput()).toBeFalsy(); + }); + + it('cache should be tue if set to true in self-hosted environment', () => { + inputSpy.mockReturnValueOnce(true); + process.env['INPUT_CACHE'] = 'true'; + expect(cacheUtils.getCacheInput()).toBeTruthy(); + }); + + it('default cache should be handled by action.yml default in hosted environment', () => { + inputSpy.mockReturnValueOnce(false); + expect(() => cacheUtils.getCacheInput()).toThrow(); + }); + + it('cache should be false if set to false in hosted environment', () => { + inputSpy.mockReturnValueOnce(false); + process.env['INPUT_CACHE'] = 'true'; + expect(cacheUtils.getCacheInput()).toBeTruthy(); + }); + + it('cache should be tue if set to true in hosted environment', () => { + inputSpy.mockReturnValueOnce(false); + process.env['INPUT_CACHE'] = 'false'; + expect(cacheUtils.getCacheInput()).toBeFalsy(); + }); +}); diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js index 19f39d251..78584ea60 100644 --- a/dist/cache-save/index.js +++ b/dist/cache-save/index.js @@ -58521,10 +58521,8 @@ function run() { } exports.run = run; const cachePackages = () => __awaiter(void 0, void 0, void 0, function* () { - const cacheInput = core.getBooleanInput('cache'); - if (!cacheInput) { + if (!cache_utils_1.getCacheInput()) return; - } const packageManager = 'default'; const state = core.getState(constants_1.State.CacheMatchedKey); const primaryKey = core.getState(constants_1.State.CachePrimaryKey); @@ -58595,11 +58593,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; +exports.getCacheInput = exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; const cache = __importStar(__nccwpck_require__(7799)); const core = __importStar(__nccwpck_require__(2186)); const exec = __importStar(__nccwpck_require__(1514)); const package_managers_1 = __nccwpck_require__(6663); +const utils_1 = __nccwpck_require__(1314); const getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () { let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, { ignoreReturnCode: true }); if (exitCode) { @@ -58654,6 +58653,13 @@ function isCacheFeatureAvailable() { return false; } exports.isCacheFeatureAvailable = isCacheFeatureAvailable; +const getCacheInput = () => { + // for self-hosted environment turn off cache by default + if (utils_1.isSelfHosted() && core.getInput('cache') === '') + return false; + return core.getBooleanInput('cache'); +}; +exports.getCacheInput = getCacheInput; /***/ }), @@ -58693,6 +58699,25 @@ exports.supportedPackageManagers = { }; +/***/ }), + +/***/ 1314: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.isSelfHosted = exports.StableReleaseAlias = void 0; +var StableReleaseAlias; +(function (StableReleaseAlias) { + StableReleaseAlias["Stable"] = "stable"; + StableReleaseAlias["OldStable"] = "oldstable"; +})(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {})); +const isSelfHosted = () => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && + process.env['AGENT_ISSELFHOSTED'] !== '0'; +exports.isSelfHosted = isSelfHosted; + + /***/ }), /***/ 2877: diff --git a/dist/setup/index.js b/dist/setup/index.js index b0a3f4e6b..3e993d28f 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -61265,11 +61265,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; +exports.getCacheInput = exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0; const cache = __importStar(__nccwpck_require__(7799)); const core = __importStar(__nccwpck_require__(2186)); const exec = __importStar(__nccwpck_require__(1514)); const package_managers_1 = __nccwpck_require__(6663); +const utils_1 = __nccwpck_require__(1314); const getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () { let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, { ignoreReturnCode: true }); if (exitCode) { @@ -61324,6 +61325,13 @@ function isCacheFeatureAvailable() { return false; } exports.isCacheFeatureAvailable = isCacheFeatureAvailable; +const getCacheInput = () => { + // for self-hosted environment turn off cache by default + if (utils_1.isSelfHosted() && core.getInput('cache') === '') + return false; + return core.getBooleanInput('cache'); +}; +exports.getCacheInput = getCacheInput; /***/ }), @@ -61495,8 +61503,7 @@ function cacheWindowsDir(extPath, tool, version, arch) { if (os_1.default.platform() !== 'win32') return false; // make sure the action runs in the hosted environment - if (process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && - process.env['AGENT_ISSELFHOSTED'] === '1') + if (utils_1.isSelfHosted()) return false; const defaultToolCacheRoot = process.env['RUNNER_TOOL_CACHE']; if (!defaultToolCacheRoot) @@ -61785,7 +61792,7 @@ function run() { // If not supplied then problem matchers will still be setup. Useful for self-hosted. // const versionSpec = resolveVersionInput(); - const cache = core.getBooleanInput('cache'); + const cache = cache_utils_1.getCacheInput(); core.info(`Setup go version spec ${versionSpec}`); let arch = core.getInput('architecture'); if (!arch) { @@ -61971,12 +61978,15 @@ exports.getArch = getArch; "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.StableReleaseAlias = void 0; +exports.isSelfHosted = exports.StableReleaseAlias = void 0; var StableReleaseAlias; (function (StableReleaseAlias) { StableReleaseAlias["Stable"] = "stable"; StableReleaseAlias["OldStable"] = "oldstable"; })(StableReleaseAlias = exports.StableReleaseAlias || (exports.StableReleaseAlias = {})); +const isSelfHosted = () => process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && + process.env['AGENT_ISSELFHOSTED'] !== '0'; +exports.isSelfHosted = isSelfHosted; /***/ }), diff --git a/docs/adrs/0000-caching-dependencies.md b/docs/adrs/0000-caching-dependencies.md index dc8d85837..f7aeab2bc 100644 --- a/docs/adrs/0000-caching-dependencies.md +++ b/docs/adrs/0000-caching-dependencies.md @@ -17,8 +17,8 @@ We don't pursue the goal to provide wide customization of caching in scope of `a # Decision - Add `cache` input parameter to `actions/setup-go`. For now, input will accept the following values: - - `true` - enable caching for go dependencies - - `false`- disable caching for go dependencies. This value will be set as default value + - `true` - enable caching for go dependencies. This value will be set as default value for hosted runners. + - `false`- disable caching for go dependencies. This value will be set as default value for self-hosted runners. - Cache feature will be disabled by default to make sure that we don't break existing customers. We will consider enabling cache by default in next major releases - Action will try to search a go.sum files in the repository and throw error in the scenario that it was not found - The hash of found file will be used as cache key (the same approach like [actions/cache](https://github.com/actions/cache/blob/main/examples.md#go---modules) recommends) diff --git a/src/cache-save.ts b/src/cache-save.ts index 584d0a697..a9d913938 100644 --- a/src/cache-save.ts +++ b/src/cache-save.ts @@ -2,7 +2,11 @@ import * as core from '@actions/core'; import * as cache from '@actions/cache'; import fs from 'fs'; import {State} from './constants'; -import {getCacheDirectoryPath, getPackageManagerInfo} from './cache-utils'; +import { + getCacheDirectoryPath, + getPackageManagerInfo, + getCacheInput +} from './cache-utils'; // Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to @@ -28,10 +32,7 @@ export async function run() { } const cachePackages = async () => { - const cacheInput = core.getBooleanInput('cache'); - if (!cacheInput) { - return; - } + if (!getCacheInput()) return; const packageManager = 'default'; diff --git a/src/cache-utils.ts b/src/cache-utils.ts index 545c97af1..460e1f5e6 100644 --- a/src/cache-utils.ts +++ b/src/cache-utils.ts @@ -2,6 +2,7 @@ import * as cache from '@actions/cache'; import * as core from '@actions/core'; import * as exec from '@actions/exec'; import {supportedPackageManagers, PackageManagerInfo} from './package-managers'; +import {isSelfHosted} from './utils'; export const getCommandOutput = async (toolCommand: string) => { let {stdout, stderr, exitCode} = await exec.getExecOutput( @@ -83,3 +84,9 @@ export function isCacheFeatureAvailable(): boolean { ); return false; } +export const getCacheInput = (): boolean => { + // for self-hosted environment turn off cache by default + if (isSelfHosted() && core.getInput('cache') === '') return false; + + return core.getBooleanInput('cache'); +}; diff --git a/src/installer.ts b/src/installer.ts index be90e101a..72b3bd53d 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -6,7 +6,7 @@ import * as httpm from '@actions/http-client'; import * as sys from './system'; import fs from 'fs'; import os from 'os'; -import {StableReleaseAlias} from './utils'; +import {isSelfHosted, StableReleaseAlias} from './utils'; type InstallationType = 'dist' | 'manifest'; @@ -175,11 +175,7 @@ async function cacheWindowsDir( if (os.platform() !== 'win32') return false; // make sure the action runs in the hosted environment - if ( - process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && - process.env['AGENT_ISSELFHOSTED'] === '1' - ) - return false; + if (isSelfHosted()) return false; const defaultToolCacheRoot = process.env['RUNNER_TOOL_CACHE']; if (!defaultToolCacheRoot) return false; diff --git a/src/main.ts b/src/main.ts index d3fb857df..f655d874e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,7 +4,7 @@ import * as installer from './installer'; import * as semver from 'semver'; import path from 'path'; import {restoreCache} from './cache-restore'; -import {isCacheFeatureAvailable} from './cache-utils'; +import {isCacheFeatureAvailable, getCacheInput} from './cache-utils'; import cp from 'child_process'; import fs from 'fs'; import os from 'os'; @@ -17,7 +17,7 @@ export async function run() { // const versionSpec = resolveVersionInput(); - const cache = core.getBooleanInput('cache'); + const cache = getCacheInput(); core.info(`Setup go version spec ${versionSpec}`); let arch = core.getInput('architecture'); diff --git a/src/utils.ts b/src/utils.ts index 79d03bcad..457ff139d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,3 +2,7 @@ export enum StableReleaseAlias { Stable = 'stable', OldStable = 'oldstable' } + +export const isSelfHosted = (): boolean => + process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' && + process.env['AGENT_ISSELFHOSTED'] !== '0';