1
0
Fork 0

Add cross os opt-in functionality for cache on windows

pull/1291/head
Sampark Sharma 2022-12-29 11:17:28 +00:00 committed by GitHub
parent 2867e318d4
commit ec3a87298b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 10 deletions

View File

@ -61,6 +61,7 @@ export function isFeatureAvailable(): boolean {
* @param paths a list of file paths to restore from the cache
* @param primaryKey an explicit key for restoring the cache
* @param restoreKeys an optional ordered list of keys to use for restoring the cache if no cache hit occurred for key
* @param crossOsEnabled an optional boolean enabled to restore on windows any cache created on any platform
* @param downloadOptions cache download options
* @returns string returns the key for the cache hit, otherwise returns undefined
*/
@ -68,6 +69,7 @@ export async function restoreCache(
paths: string[],
primaryKey: string,
restoreKeys?: string[],
crossOsEnabled = false,
options?: DownloadOptions
): Promise<string | undefined> {
checkPaths(paths)
@ -93,7 +95,8 @@ export async function restoreCache(
try {
// path are needed to compute version
cacheEntry = await cacheHttpClient.getCacheEntry(keys, paths, {
compressionMethod
compressionMethod,
crossOsEnabled
})
if (!cacheEntry?.archiveLocation) {
// This is to support the old cache entry created by gzip on windows.
@ -171,12 +174,14 @@ export async function restoreCache(
*
* @param paths a list of file paths to be cached
* @param key an explicit key for restoring the cache
* @param crossOsEnabled an optional boolean enabled to save cache on windows which could be restored on any platform
* @param options cache upload options
* @returns number returns cacheId if the cache was saved successfully and throws an error if save fails
*/
export async function saveCache(
paths: string[],
key: string,
crossOsEnabled = false,
options?: UploadOptions
): Promise<number> {
checkPaths(paths)
@ -227,6 +232,7 @@ export async function saveCache(
paths,
{
compressionMethod,
crossOsEnabled,
cacheSize: archiveFileSize
}
)

View File

@ -73,13 +73,18 @@ function createHttpClient(): HttpClient {
export function getCacheVersion(
paths: string[],
compressionMethod?: CompressionMethod
compressionMethod?: CompressionMethod,
crossOsEnabled = false
): string {
const components = paths.concat(
const components = paths
.concat(
!compressionMethod || compressionMethod === CompressionMethod.Gzip
? []
: [compressionMethod]
)
.concat(
process.platform !== 'win32' || crossOsEnabled ? [] : ['windows-only']
) // Only check for windows platforms if crossOsEnabled is false
// Add salt to cache version to support breaking changes in cache entry
components.push(versionSalt)
@ -96,7 +101,11 @@ export async function getCacheEntry(
options?: InternalCacheOptions
): Promise<ArtifactCacheEntry | null> {
const httpClient = createHttpClient()
const version = getCacheVersion(paths, options?.compressionMethod)
const version = getCacheVersion(
paths,
options?.compressionMethod,
options?.crossOsEnabled
)
const resource = `cache?keys=${encodeURIComponent(
keys.join(',')
)}&version=${version}`
@ -181,7 +190,11 @@ export async function reserveCache(
options?: InternalCacheOptions
): Promise<ITypedResponseWithError<ReserveCacheResponse>> {
const httpClient = createHttpClient()
const version = getCacheVersion(paths, options?.compressionMethod)
const version = getCacheVersion(
paths,
options?.compressionMethod,
options?.crossOsEnabled
)
const reserveCacheRequest: ReserveCacheRequest = {
key,

View File

@ -34,8 +34,9 @@ export interface ReserveCacheResponse {
}
export interface InternalCacheOptions {
compressionMethod?: CompressionMethod
cacheSize?: number
compressionMethod?: CompressionMethod
crossOsEnabled?: boolean
}
export interface ArchiveTool {