mirror of
https://github.com/gradle/gradle-build-action.git
synced 2024-12-26 03:26:18 +08:00
Normalize paths to Gradle User Home when calculating cache keys
Fixes #77
This commit is contained in:
parent
cc5cdb7fe0
commit
5a5a5b4387
@ -11,5 +11,11 @@ describe('cacheUtils-utils', () => {
|
|||||||
const hash = cacheUtils.hashStrings(['foo', 'bar', 'baz'])
|
const hash = cacheUtils.hashStrings(['foo', 'bar', 'baz'])
|
||||||
expect(hash).toBe('6df23dc03f9b54cc38a0fc1483df6e21')
|
expect(hash).toBe('6df23dc03f9b54cc38a0fc1483df6e21')
|
||||||
})
|
})
|
||||||
|
it('normalized filenames', async () => {
|
||||||
|
const fileNames = ['/foo/bar/baz.zip', '../boo.html']
|
||||||
|
const posixHash = cacheUtils.hashFileNames(fileNames)
|
||||||
|
const windowsHash = cacheUtils.hashFileNames(fileNames)
|
||||||
|
expect(posixHash).toBe(windowsHash)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -5,7 +5,7 @@ import * as core from '@actions/core'
|
|||||||
import * as glob from '@actions/glob'
|
import * as glob from '@actions/glob'
|
||||||
import * as exec from '@actions/exec'
|
import * as exec from '@actions/exec'
|
||||||
|
|
||||||
import {AbstractCache, hashStrings} from './cache-utils'
|
import {AbstractCache, hashFileNames} from './cache-utils'
|
||||||
|
|
||||||
// Which paths under Gradle User Home should be cached
|
// Which paths under Gradle User Home should be cached
|
||||||
const CACHE_PATH = ['caches', 'notifications']
|
const CACHE_PATH = ['caches', 'notifications']
|
||||||
@ -149,10 +149,7 @@ export class GradleUserHomeCache extends AbstractCache {
|
|||||||
const previouslyRestoredKey = fs.existsSync(cacheMetaFile)
|
const previouslyRestoredKey = fs.existsSync(cacheMetaFile)
|
||||||
? fs.readFileSync(cacheMetaFile, 'utf-8').trim()
|
? fs.readFileSync(cacheMetaFile, 'utf-8').trim()
|
||||||
: ''
|
: ''
|
||||||
const cacheKey = this.createCacheKey(
|
const cacheKey = this.createCacheKey(bundle, commonArtifactFiles)
|
||||||
bundle,
|
|
||||||
hashStrings(commonArtifactFiles)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (previouslyRestoredKey === cacheKey) {
|
if (previouslyRestoredKey === cacheKey) {
|
||||||
this.debug(
|
this.debug(
|
||||||
@ -171,8 +168,13 @@ export class GradleUserHomeCache extends AbstractCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createCacheKey(bundle: string, key: string): string {
|
protected createCacheKey(bundle: string, files: string[]): string {
|
||||||
const cacheKeyPrefix = process.env['CACHE_KEY_PREFIX'] || ''
|
const cacheKeyPrefix = process.env['CACHE_KEY_PREFIX'] || ''
|
||||||
|
const relativeFiles = files.map(x =>
|
||||||
|
path.relative(this.gradleUserHome, x)
|
||||||
|
)
|
||||||
|
const key = hashFileNames(relativeFiles)
|
||||||
|
|
||||||
return `${cacheKeyPrefix}${bundle}-${key}`
|
return `${cacheKeyPrefix}${bundle}-${key}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ import * as core from '@actions/core'
|
|||||||
import * as cache from '@actions/cache'
|
import * as cache from '@actions/cache'
|
||||||
import * as github from '@actions/github'
|
import * as github from '@actions/github'
|
||||||
import * as crypto from 'crypto'
|
import * as crypto from 'crypto'
|
||||||
|
import * as path from 'path'
|
||||||
|
|
||||||
export function isCacheDisabled(): boolean {
|
export function isCacheDisabled(): boolean {
|
||||||
return core.getBooleanInput('cache-disabled')
|
return core.getBooleanInput('cache-disabled')
|
||||||
@ -53,6 +54,12 @@ export function hashStrings(values: string[]): string {
|
|||||||
return hash.digest('hex')
|
return hash.digest('hex')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function hashFileNames(fileNames: string[]): string {
|
||||||
|
return hashStrings(
|
||||||
|
fileNames.map(x => x.replace(new RegExp(`\\${path.sep}`, 'g'), '/'))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
class CacheKey {
|
class CacheKey {
|
||||||
key: string
|
key: string
|
||||||
restoreKeys: string[]
|
restoreKeys: string[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user