diff --git a/README.md b/README.md index e89250977d..e32a5c0172 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,23 @@ with: # ... ``` +### `cache-invalidation-interval` + +(optional) + +Periodically invalidate the cache every `cache-invalidation-interval` days to ensure that outdated data is removed and fresh data is loaded. + +The default value is `7`. + +```yml +uses: golangci/golangci-lint-action@v5 +with: + cache-invalidation-interval: 15 + # ... +``` + +If set the number is `<= 0`, the cache will be always invalidate (Not recommended). + ### `annotations` (optional) diff --git a/action.yml b/action.yml index 2318f3473b..bb4a50870e 100644 --- a/action.yml +++ b/action.yml @@ -44,6 +44,10 @@ inputs: description: "golangci-lint command line arguments" default: "" required: false + cache-invalidation-interval: + description: "Periodically invalidate a cache because a new code being added. (number of days)" + default: '7' + required: false runs: using: "node20" main: "dist/run/index.js" diff --git a/dist/post_run/index.js b/dist/post_run/index.js index 257c21b5c5..06050ea1f0 100644 --- a/dist/post_run/index.js +++ b/dist/post_run/index.js @@ -88815,15 +88815,18 @@ const getLintCacheDir = () => { }; const getIntervalKey = (invalidationIntervalDays) => { const now = new Date(); + if (invalidationIntervalDays <= 0) { + return `${now.getTime()}`; + } const secondsSinceEpoch = now.getTime() / 1000; const intervalNumber = Math.floor(secondsSinceEpoch / (invalidationIntervalDays * 86400)); return intervalNumber.toString(); }; async function buildCacheKeys() { const keys = []; + const invalidationIntervalDays = parseInt(core.getInput(`cache-invalidation-interval`, { required: true }).trim()); // Periodically invalidate a cache because a new code being added. - // TODO: configure it via inputs. - let cacheKey = `golangci-lint.cache-${getIntervalKey(7)}-`; + let cacheKey = `golangci-lint.cache-${getIntervalKey(invalidationIntervalDays)}-`; keys.push(cacheKey); // Get working directory from input const workingDirectory = core.getInput(`working-directory`); diff --git a/dist/run/index.js b/dist/run/index.js index 111a65705c..b361fc4f25 100644 --- a/dist/run/index.js +++ b/dist/run/index.js @@ -88815,15 +88815,18 @@ const getLintCacheDir = () => { }; const getIntervalKey = (invalidationIntervalDays) => { const now = new Date(); + if (invalidationIntervalDays <= 0) { + return `${now.getTime()}`; + } const secondsSinceEpoch = now.getTime() / 1000; const intervalNumber = Math.floor(secondsSinceEpoch / (invalidationIntervalDays * 86400)); return intervalNumber.toString(); }; async function buildCacheKeys() { const keys = []; + const invalidationIntervalDays = parseInt(core.getInput(`cache-invalidation-interval`, { required: true }).trim()); // Periodically invalidate a cache because a new code being added. - // TODO: configure it via inputs. - let cacheKey = `golangci-lint.cache-${getIntervalKey(7)}-`; + let cacheKey = `golangci-lint.cache-${getIntervalKey(invalidationIntervalDays)}-`; keys.push(cacheKey); // Get working directory from input const workingDirectory = core.getInput(`working-directory`); diff --git a/src/cache.ts b/src/cache.ts index 5c73169753..75fda9f9a4 100644 --- a/src/cache.ts +++ b/src/cache.ts @@ -25,6 +25,11 @@ const getLintCacheDir = (): string => { const getIntervalKey = (invalidationIntervalDays: number): string => { const now = new Date() + + if (invalidationIntervalDays <= 0) { + return `${now.getTime()}` + } + const secondsSinceEpoch = now.getTime() / 1000 const intervalNumber = Math.floor(secondsSinceEpoch / (invalidationIntervalDays * 86400)) return intervalNumber.toString() @@ -32,21 +37,28 @@ const getIntervalKey = (invalidationIntervalDays: number): string => { async function buildCacheKeys(): Promise { const keys = [] + + const invalidationIntervalDays = parseInt(core.getInput(`cache-invalidation-interval`, { required: true }).trim()) + // Periodically invalidate a cache because a new code being added. - // TODO: configure it via inputs. - let cacheKey = `golangci-lint.cache-${getIntervalKey(7)}-` + let cacheKey = `golangci-lint.cache-${getIntervalKey(invalidationIntervalDays)}-` keys.push(cacheKey) + // Get working directory from input const workingDirectory = core.getInput(`working-directory`) + // create path to go.mod prepending the workingDirectory if it exists const goModPath = path.join(workingDirectory, `go.mod`) + core.info(`Checking for go.mod: ${goModPath}`) + if (await pathExists(goModPath)) { // Add checksum to key to invalidate a cache when dependencies change. cacheKey += await checksumFile(`sha1`, goModPath) } else { cacheKey += `nogomod` } + keys.push(cacheKey) return keys