From 497ab9520543e345ffa1f5f648b2b2371a672715 Mon Sep 17 00:00:00 2001 From: "nik.volkov" Date: Wed, 30 Nov 2022 01:15:37 +0200 Subject: [PATCH] :sparkles: add an option to upload cache only for the default branch --- action.yaml | 4 ++++ common/qodana.ts | 1 + scan/__tests__/main.test.ts | 1 + scan/dist/index.js | 20 ++++++++++++++++++-- scan/src/main.ts | 11 ++++++----- scan/src/utils.ts | 24 ++++++++++++++++++++++++ vsts/QodanaScan/index.js | 1 + vsts/src/utils.ts | 1 + 8 files changed, 56 insertions(+), 7 deletions(-) diff --git a/action.yaml b/action.yaml index f7ad98bb..2621a335 100644 --- a/action.yaml +++ b/action.yaml @@ -25,6 +25,10 @@ inputs: description: 'Pass additional cache hash extension' required: false default: "${{ github.sha }}" + cache-default-branch-only: + description: 'Upload cache for default branch only' + required: false + default: "false" upload-result: description: 'Upload Qodana results as an artifact to the job' required: false diff --git a/common/qodana.ts b/common/qodana.ts index cd299fb1..d739e3e1 100644 --- a/common/qodana.ts +++ b/common/qodana.ts @@ -30,6 +30,7 @@ export interface Inputs { resultsDir: string cacheDir: string additionalCacheHash: string + cacheDefaultBranchOnly: boolean uploadResult: boolean artifactName: string useCaches: boolean diff --git a/scan/__tests__/main.test.ts b/scan/__tests__/main.test.ts index 53b8422f..fe5ce937 100644 --- a/scan/__tests__/main.test.ts +++ b/scan/__tests__/main.test.ts @@ -53,6 +53,7 @@ function inputsDefaultFixture(): Inputs { resultsDir: '${{ runner.temp }}/qodana-results', cacheDir: '${{ runner.temp }}/qodana-caches', additionalCacheHash: '', + cacheDefaultBranchOnly: false, uploadResult: true, artifactName: 'Qodana report', useCaches: true, diff --git a/scan/dist/index.js b/scan/dist/index.js index e70c287c..1a1896aa 100644 --- a/scan/dist/index.js +++ b/scan/dist/index.js @@ -72345,7 +72345,7 @@ var require_utils7 = __commonJS({ return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.isServer = exports2.restoreCaches = exports2.uploadCaches = exports2.uploadReport = exports2.prepareAgent = exports2.qodana = exports2.getInputs = void 0; + exports2.isNeedToUploadCache = exports2.isServer = exports2.restoreCaches = exports2.uploadCaches = exports2.uploadReport = exports2.prepareAgent = exports2.qodana = exports2.getInputs = void 0; var artifact = __importStar2(require_artifact_client2()); var cache = __importStar2(require_cache()); var core2 = __importStar2(require_core()); @@ -72361,6 +72361,7 @@ var require_utils7 = __commonJS({ resultsDir: core2.getInput("results-dir"), cacheDir: core2.getInput("cache-dir"), additionalCacheHash: core2.getInput("additional-cache-hash"), + cacheDefaultBranchOnly: core2.getBooleanInput("cache-default-branch-only"), uploadResult: core2.getBooleanInput("upload-result"), artifactName: core2.getInput("artifact-name"), useCaches: core2.getBooleanInput("use-caches"), @@ -72485,6 +72486,20 @@ var require_utils7 = __commonJS({ } __name(isServer, "isServer"); exports2.isServer = isServer; + function isNeedToUploadCache(useCaches, cacheDefaultBranchOnly) { + var _a; + if (!useCaches && cacheDefaultBranchOnly) { + core2.warning('Turn on "use-cache" option to use "cache-default-branch-only"'); + } + if (useCaches && cacheDefaultBranchOnly) { + const currentBranch = github.context.payload.ref; + const defaultBranch = (_a = github.context.payload.repository) === null || _a === void 0 ? void 0 : _a.default_branch; + return currentBranch === defaultBranch; + } + return useCaches; + } + __name(isNeedToUploadCache, "isNeedToUploadCache"); + exports2.isNeedToUploadCache = isNeedToUploadCache; } }); @@ -72784,9 +72799,10 @@ function main() { (0, utils_1.restoreCaches)(inputs.cacheDir, inputs.additionalCacheHash, inputs.useCaches) ]); const exitCode = yield (0, utils_1.qodana)(); + const canUploadCache = (0, utils_1.isNeedToUploadCache)(inputs.useCaches, inputs.cacheDefaultBranchOnly) && (0, qodana_1.isExecutionSuccessful)(exitCode); yield Promise.all([ (0, utils_1.uploadReport)(inputs.resultsDir, inputs.artifactName, inputs.uploadResult), - (0, utils_1.uploadCaches)(inputs.cacheDir, inputs.additionalCacheHash, inputs.useCaches && (0, qodana_1.isExecutionSuccessful)(exitCode)), + (0, utils_1.uploadCaches)(inputs.cacheDir, inputs.additionalCacheHash, canUploadCache), (0, output_1.publishOutput)(exitCode === qodana_1.QodanaExitCode.FailThreshold, `${inputs.resultsDir}/${qodana_1.QODANA_SARIF_NAME}`, `${inputs.resultsDir}/${qodana_1.QODANA_SHORT_SARIF_NAME}`, (0, qodana_1.isExecutionSuccessful)(exitCode), inputs.useAnnotations) ]); if (!(0, qodana_1.isExecutionSuccessful)(exitCode)) { diff --git a/scan/src/main.ts b/scan/src/main.ts index 4668e391..99f26d5a 100644 --- a/scan/src/main.ts +++ b/scan/src/main.ts @@ -9,6 +9,7 @@ import { } from '../../common/qodana' import { getInputs, + isNeedToUploadCache, prepareAgent, qodana, restoreCaches, @@ -51,13 +52,13 @@ async function main(): Promise { ) ]) const exitCode = await qodana() + const canUploadCache = + isNeedToUploadCache(inputs.useCaches, inputs.cacheDefaultBranchOnly) && + isExecutionSuccessful(exitCode) + await Promise.all([ uploadReport(inputs.resultsDir, inputs.artifactName, inputs.uploadResult), - uploadCaches( - inputs.cacheDir, - inputs.additionalCacheHash, - inputs.useCaches && isExecutionSuccessful(exitCode) - ), + uploadCaches(inputs.cacheDir, inputs.additionalCacheHash, canUploadCache), publishOutput( exitCode === QodanaExitCode.FailThreshold, `${inputs.resultsDir}/${QODANA_SARIF_NAME}`, diff --git a/scan/src/utils.ts b/scan/src/utils.ts index 6a9b84c9..94f3779d 100644 --- a/scan/src/utils.ts +++ b/scan/src/utils.ts @@ -28,6 +28,7 @@ export function getInputs(): Inputs { resultsDir: core.getInput('results-dir'), cacheDir: core.getInput('cache-dir'), additionalCacheHash: core.getInput('additional-cache-hash'), + cacheDefaultBranchOnly: core.getBooleanInput('cache-default-branch-only'), uploadResult: core.getBooleanInput('upload-result'), artifactName: core.getInput('artifact-name'), useCaches: core.getBooleanInput('use-caches'), @@ -204,3 +205,26 @@ export function isServer(): boolean { ) return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM' } + +/** + * Check if need to upload the cache. + */ +export function isNeedToUploadCache( + useCaches: boolean, + cacheDefaultBranchOnly: boolean +): boolean { + if (!useCaches && cacheDefaultBranchOnly) { + core.warning( + 'Turn on "use-cache" option to use "cache-default-branch-only"' + ) + } + + if (useCaches && cacheDefaultBranchOnly) { + const currentBranch = github.context.payload.ref + const defaultBranch = github.context.payload.repository?.default_branch + + return currentBranch === defaultBranch + } + + return useCaches +} diff --git a/vsts/QodanaScan/index.js b/vsts/QodanaScan/index.js index 130b3cde..c16c4e25 100644 --- a/vsts/QodanaScan/index.js +++ b/vsts/QodanaScan/index.js @@ -4367,6 +4367,7 @@ var require_utils2 = __commonJS({ additionalCacheHash: "", useAnnotations: false, useCaches: false, + cacheDefaultBranchOnly: false, prMode: false }; } diff --git a/vsts/src/utils.ts b/vsts/src/utils.ts index 95e28cda..73245fb0 100644 --- a/vsts/src/utils.ts +++ b/vsts/src/utils.ts @@ -34,6 +34,7 @@ export function getInputs(): Inputs { additionalCacheHash: '', useAnnotations: false, useCaches: false, + cacheDefaultBranchOnly: false, prMode: false } }