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

View File

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

View File

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