mirror of
				https://github.com/actions/cache.git
				synced 2025-11-04 13:29:10 +08:00 
			
		
		
		
	Adds socket timeout and validate file size
This commit is contained in:
		@@ -7,6 +7,8 @@ import {
 | 
			
		||||
    IRequestOptions,
 | 
			
		||||
    ITypedResponse
 | 
			
		||||
} from "@actions/http-client/interfaces";
 | 
			
		||||
 | 
			
		||||
import { SocketTimeout } from "./constants";
 | 
			
		||||
import {
 | 
			
		||||
    ArtifactCacheEntry,
 | 
			
		||||
    CommitCacheRequest,
 | 
			
		||||
@@ -123,7 +125,33 @@ export async function downloadCache(
 | 
			
		||||
    const stream = fs.createWriteStream(archivePath);
 | 
			
		||||
    const httpClient = new HttpClient("actions/cache");
 | 
			
		||||
    const downloadResponse = await httpClient.get(archiveLocation);
 | 
			
		||||
 | 
			
		||||
    // Abort download if no traffic received over the socket.
 | 
			
		||||
    downloadResponse.message.socket.setTimeout(SocketTimeout, () => {
 | 
			
		||||
        downloadResponse.message.destroy();
 | 
			
		||||
        core.debug(
 | 
			
		||||
            `Aborting download, socket timed out after ${SocketTimeout} ms`
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await pipeResponseToStream(downloadResponse, stream);
 | 
			
		||||
 | 
			
		||||
    // Validate download size.
 | 
			
		||||
    var contentLengthHeader =
 | 
			
		||||
        downloadResponse.message.headers["content-length"];
 | 
			
		||||
 | 
			
		||||
    if (contentLengthHeader) {
 | 
			
		||||
        const expectedLength = parseInt(contentLengthHeader);
 | 
			
		||||
        const actualLength = utils.getArchiveFileSize(archivePath);
 | 
			
		||||
 | 
			
		||||
        if (actualLength != expectedLength) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
                `Incomplete download. Expected file size: ${expectedLength}, actual file size: ${actualLength}`
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        core.debug("Unable to validate download, no Content-Length header");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Reserve Cache
 | 
			
		||||
 
 | 
			
		||||
@@ -18,3 +18,5 @@ export enum Events {
 | 
			
		||||
    Push = "push",
 | 
			
		||||
    PullRequest = "pull_request"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const SocketTimeout = 5000;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user