import os from 'os' // Used for controlling the highWaterMark value of the zip that is being streamed // The same value is used as the chunk size that is use during upload to blob storage export function getUploadChunkSize(): number { return 8 * 1024 * 1024 // 8 MB Chunks } export function getRuntimeToken(): string { const token = process.env['ACTIONS_RUNTIME_TOKEN'] if (!token) { throw new Error('Unable to get the ACTIONS_RUNTIME_TOKEN env variable') } return token } export function getResultsServiceUrl(): string { const resultsUrl = process.env['ACTIONS_RESULTS_URL'] if (!resultsUrl) { throw new Error('Unable to get the ACTIONS_RESULTS_URL env variable') } return new URL(resultsUrl).origin } export function isGhes(): boolean { const ghUrl = new URL( process.env['GITHUB_SERVER_URL'] || 'https://github.com' ) let githubHosts = [ 'GITHUB.COM', 'GITHUB.GHE.COM', 'GITHUB.GHE.LOCALHOST' ]; const hostname = ghUrl.hostname.trimEnd().toUpperCase() return !githubHosts.includes(hostname) } export function getGitHubWorkspaceDir(): string { const ghWorkspaceDir = process.env['GITHUB_WORKSPACE'] if (!ghWorkspaceDir) { throw new Error('Unable to get the GITHUB_WORKSPACE env variable') } return ghWorkspaceDir } // Mimics behavior of azcopy: https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-optimize // If your machine has fewer than 5 CPUs, then the value of this variable is set to 32. // Otherwise, the default value is equal to 16 multiplied by the number of CPUs. The maximum value of this variable is 300. export function getConcurrency(): number { const numCPUs = os.cpus().length if (numCPUs <= 4) { return 32 } const concurrency = 16 * numCPUs return concurrency > 300 ? 300 : concurrency }