mirror of https://github.com/actions/toolkit
161 lines
4.0 KiB
TypeScript
161 lines
4.0 KiB
TypeScript
import * as core from '@actions/core'
|
|
|
|
/**
|
|
* Options to control cache upload
|
|
*/
|
|
export interface UploadOptions {
|
|
/**
|
|
* Number of parallel cache upload
|
|
*
|
|
* @default 4
|
|
*/
|
|
uploadConcurrency?: number
|
|
/**
|
|
* Maximum chunk size in bytes for cache upload
|
|
*
|
|
* @default 32MB
|
|
*/
|
|
uploadChunkSize?: number
|
|
}
|
|
|
|
/**
|
|
* Options to control cache download
|
|
*/
|
|
export interface DownloadOptions {
|
|
/**
|
|
* Indicates whether to use the Azure Blob SDK to download caches
|
|
* that are stored on Azure Blob Storage to improve reliability and
|
|
* performance
|
|
*
|
|
* @default true
|
|
*/
|
|
useAzureSdk?: boolean
|
|
|
|
/**
|
|
* Number of parallel downloads (this option only applies when using
|
|
* the Azure SDK)
|
|
*
|
|
* @default 8
|
|
*/
|
|
downloadConcurrency?: number
|
|
|
|
/**
|
|
* Indicates whether to use Actions HttpClient with concurrency
|
|
* for Azure Blob Storage
|
|
*/
|
|
concurrentBlobDownloads?: boolean
|
|
|
|
/**
|
|
* Maximum time for each download request, in milliseconds (this
|
|
* option only applies when using the Azure SDK)
|
|
*
|
|
* @default 30000
|
|
*/
|
|
timeoutInMs?: number
|
|
|
|
/**
|
|
* Time after which a segment download should be aborted if stuck
|
|
*
|
|
* @default 3600000
|
|
*/
|
|
segmentTimeoutInMs?: number
|
|
|
|
/**
|
|
* Weather to skip downloading the cache entry.
|
|
* If lookupOnly is set to true, the restore function will only check if
|
|
* a matching cache entry exists and return the cache key if it does.
|
|
*
|
|
* @default false
|
|
*/
|
|
lookupOnly?: boolean
|
|
}
|
|
|
|
/**
|
|
* Returns a copy of the upload options with defaults filled in.
|
|
*
|
|
* @param copy the original upload options
|
|
*/
|
|
export function getUploadOptions(copy?: UploadOptions): UploadOptions {
|
|
const result: UploadOptions = {
|
|
uploadConcurrency: 4,
|
|
uploadChunkSize: 32 * 1024 * 1024
|
|
}
|
|
|
|
if (copy) {
|
|
if (typeof copy.uploadConcurrency === 'number') {
|
|
result.uploadConcurrency = copy.uploadConcurrency
|
|
}
|
|
|
|
if (typeof copy.uploadChunkSize === 'number') {
|
|
result.uploadChunkSize = copy.uploadChunkSize
|
|
}
|
|
}
|
|
|
|
core.debug(`Upload concurrency: ${result.uploadConcurrency}`)
|
|
core.debug(`Upload chunk size: ${result.uploadChunkSize}`)
|
|
|
|
return result
|
|
}
|
|
|
|
/**
|
|
* Returns a copy of the download options with defaults filled in.
|
|
*
|
|
* @param copy the original download options
|
|
*/
|
|
export function getDownloadOptions(copy?: DownloadOptions): DownloadOptions {
|
|
const result: DownloadOptions = {
|
|
useAzureSdk: false,
|
|
concurrentBlobDownloads: true,
|
|
downloadConcurrency: 8,
|
|
timeoutInMs: 30000,
|
|
segmentTimeoutInMs: 600000,
|
|
lookupOnly: false
|
|
}
|
|
|
|
if (copy) {
|
|
if (typeof copy.useAzureSdk === 'boolean') {
|
|
result.useAzureSdk = copy.useAzureSdk
|
|
}
|
|
|
|
if (typeof copy.concurrentBlobDownloads === 'boolean') {
|
|
result.concurrentBlobDownloads = copy.concurrentBlobDownloads
|
|
}
|
|
|
|
if (typeof copy.downloadConcurrency === 'number') {
|
|
result.downloadConcurrency = copy.downloadConcurrency
|
|
}
|
|
|
|
if (typeof copy.timeoutInMs === 'number') {
|
|
result.timeoutInMs = copy.timeoutInMs
|
|
}
|
|
|
|
if (typeof copy.segmentTimeoutInMs === 'number') {
|
|
result.segmentTimeoutInMs = copy.segmentTimeoutInMs
|
|
}
|
|
|
|
if (typeof copy.lookupOnly === 'boolean') {
|
|
result.lookupOnly = copy.lookupOnly
|
|
}
|
|
}
|
|
const segmentDownloadTimeoutMins =
|
|
process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS']
|
|
|
|
if (
|
|
segmentDownloadTimeoutMins &&
|
|
!isNaN(Number(segmentDownloadTimeoutMins)) &&
|
|
isFinite(Number(segmentDownloadTimeoutMins))
|
|
) {
|
|
result.segmentTimeoutInMs = Number(segmentDownloadTimeoutMins) * 60 * 1000
|
|
}
|
|
core.debug(`Use Azure SDK: ${result.useAzureSdk}`)
|
|
core.debug(`Download concurrency: ${result.downloadConcurrency}`)
|
|
core.debug(`Request timeout (ms): ${result.timeoutInMs}`)
|
|
core.debug(
|
|
`Cache segment download timeout mins env var: ${process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS']}`
|
|
)
|
|
core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`)
|
|
core.debug(`Lookup only: ${result.lookupOnly}`)
|
|
|
|
return result
|
|
}
|