Skip to content

Commit

Permalink
feat: add option to control cache invalidation interval (#1031)
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez committed May 4, 2024
1 parent ecb3292 commit dbb7ebc
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 6 deletions.
17 changes: 17 additions & 0 deletions README.md
Expand Up @@ -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)
Expand Down
4 changes: 4 additions & 0 deletions action.yml
Expand Up @@ -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"
Expand Down
7 changes: 5 additions & 2 deletions dist/post_run/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions dist/run/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 14 additions & 2 deletions src/cache.ts
Expand Up @@ -25,28 +25,40 @@ 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()
}

async function buildCacheKeys(): Promise<string[]> {
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
Expand Down

0 comments on commit dbb7ebc

Please sign in to comment.