mirror of
				https://github.com/actions/cache.git
				synced 2025-11-04 15:48:39 +08:00 
			
		
		
		
	Merge pull request #894 from actions/kotewar/update-toolkit-version
Fix for the download stuck problem
This commit is contained in:
		
						commit
						a7c34adf76
					
				
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/@actions/cache.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/@actions/cache.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -17,6 +17,7 @@ See ["Caching dependencies to speed up workflows"](https://help.github.com/githu
 | 
			
		|||
* Fixed tar creation error while trying to create tar with path as `~/` home folder on `ubuntu-latest`.
 | 
			
		||||
* Fixed zstd failing on amazon linux 2.0 runners
 | 
			
		||||
* Fixed cache not working with github workspace directory or current directory
 | 
			
		||||
* Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads.
 | 
			
		||||
 | 
			
		||||
Refer [here](https://github.com/actions/cache/blob/v2/README.md) for previous versions
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,3 +22,6 @@
 | 
			
		|||
### 3.0.6
 | 
			
		||||
- Fixed [#809](https://github.com/actions/cache/issues/809) - zstd -d: no such file or directory error
 | 
			
		||||
- Fixed [#833](https://github.com/actions/cache/issues/833) - cache doesn't work with github workspace directory
 | 
			
		||||
 | 
			
		||||
### 3.0.7
 | 
			
		||||
- Fixed [#810](https://github.com/actions/cache/issues/810) - download stuck issue. A new timeout is introduced in the download process to abort the download if it gets stuck and doesn't finish within an hour.
 | 
			
		||||
							
								
								
									
										33
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -5473,6 +5473,7 @@ const util = __importStar(__webpack_require__(669));
 | 
			
		|||
const utils = __importStar(__webpack_require__(15));
 | 
			
		||||
const constants_1 = __webpack_require__(931);
 | 
			
		||||
const requestUtils_1 = __webpack_require__(899);
 | 
			
		||||
const abort_controller_1 = __webpack_require__(106);
 | 
			
		||||
/**
 | 
			
		||||
 * Pipes the body of a HTTP response to a stream
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -5656,15 +5657,24 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
 | 
			
		|||
            const fd = fs.openSync(archivePath, 'w');
 | 
			
		||||
            try {
 | 
			
		||||
                downloadProgress.startDisplayTimer();
 | 
			
		||||
                const controller = new abort_controller_1.AbortController();
 | 
			
		||||
                const abortSignal = controller.signal;
 | 
			
		||||
                while (!downloadProgress.isDone()) {
 | 
			
		||||
                    const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
 | 
			
		||||
                    const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
 | 
			
		||||
                    downloadProgress.nextSegment(segmentSize);
 | 
			
		||||
                    const result = yield client.downloadToBuffer(segmentStart, segmentSize, {
 | 
			
		||||
                    const result = yield promiseWithTimeout(options.segmentTimeoutInMs || 3600000, client.downloadToBuffer(segmentStart, segmentSize, {
 | 
			
		||||
                        abortSignal,
 | 
			
		||||
                        concurrency: options.downloadConcurrency,
 | 
			
		||||
                        onProgress: downloadProgress.onProgress()
 | 
			
		||||
                    });
 | 
			
		||||
                    fs.writeFileSync(fd, result);
 | 
			
		||||
                    }));
 | 
			
		||||
                    if (result === 'timeout') {
 | 
			
		||||
                        controller.abort();
 | 
			
		||||
                        throw new Error('Aborting cache download as the download time exceeded the timeout.');
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (Buffer.isBuffer(result)) {
 | 
			
		||||
                        fs.writeFileSync(fd, result);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            finally {
 | 
			
		||||
| 
						 | 
				
			
			@ -5675,6 +5685,16 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
 | 
			
		|||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
 | 
			
		||||
const promiseWithTimeout = (timeoutMs, promise) => __awaiter(void 0, void 0, void 0, function* () {
 | 
			
		||||
    let timeoutHandle;
 | 
			
		||||
    const timeoutPromise = new Promise(resolve => {
 | 
			
		||||
        timeoutHandle = setTimeout(() => resolve('timeout'), timeoutMs);
 | 
			
		||||
    });
 | 
			
		||||
    return Promise.race([promise, timeoutPromise]).then(result => {
 | 
			
		||||
        clearTimeout(timeoutHandle);
 | 
			
		||||
        return result;
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
//# sourceMappingURL=downloadUtils.js.map
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
| 
						 | 
				
			
			@ -40795,7 +40815,8 @@ function getDownloadOptions(copy) {
 | 
			
		|||
    const result = {
 | 
			
		||||
        useAzureSdk: true,
 | 
			
		||||
        downloadConcurrency: 8,
 | 
			
		||||
        timeoutInMs: 30000
 | 
			
		||||
        timeoutInMs: 30000,
 | 
			
		||||
        segmentTimeoutInMs: 3600000
 | 
			
		||||
    };
 | 
			
		||||
    if (copy) {
 | 
			
		||||
        if (typeof copy.useAzureSdk === 'boolean') {
 | 
			
		||||
| 
						 | 
				
			
			@ -40807,10 +40828,14 @@ function getDownloadOptions(copy) {
 | 
			
		|||
        if (typeof copy.timeoutInMs === 'number') {
 | 
			
		||||
            result.timeoutInMs = copy.timeoutInMs;
 | 
			
		||||
        }
 | 
			
		||||
        if (typeof copy.segmentTimeoutInMs === 'number') {
 | 
			
		||||
            result.segmentTimeoutInMs = copy.segmentTimeoutInMs;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
 | 
			
		||||
    core.debug(`Download concurrency: ${result.downloadConcurrency}`);
 | 
			
		||||
    core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
 | 
			
		||||
    core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`);
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
exports.getDownloadOptions = getDownloadOptions;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -5473,6 +5473,7 @@ const util = __importStar(__webpack_require__(669));
 | 
			
		|||
const utils = __importStar(__webpack_require__(15));
 | 
			
		||||
const constants_1 = __webpack_require__(931);
 | 
			
		||||
const requestUtils_1 = __webpack_require__(899);
 | 
			
		||||
const abort_controller_1 = __webpack_require__(106);
 | 
			
		||||
/**
 | 
			
		||||
 * Pipes the body of a HTTP response to a stream
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -5656,15 +5657,24 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
 | 
			
		|||
            const fd = fs.openSync(archivePath, 'w');
 | 
			
		||||
            try {
 | 
			
		||||
                downloadProgress.startDisplayTimer();
 | 
			
		||||
                const controller = new abort_controller_1.AbortController();
 | 
			
		||||
                const abortSignal = controller.signal;
 | 
			
		||||
                while (!downloadProgress.isDone()) {
 | 
			
		||||
                    const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
 | 
			
		||||
                    const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
 | 
			
		||||
                    downloadProgress.nextSegment(segmentSize);
 | 
			
		||||
                    const result = yield client.downloadToBuffer(segmentStart, segmentSize, {
 | 
			
		||||
                    const result = yield promiseWithTimeout(options.segmentTimeoutInMs || 3600000, client.downloadToBuffer(segmentStart, segmentSize, {
 | 
			
		||||
                        abortSignal,
 | 
			
		||||
                        concurrency: options.downloadConcurrency,
 | 
			
		||||
                        onProgress: downloadProgress.onProgress()
 | 
			
		||||
                    });
 | 
			
		||||
                    fs.writeFileSync(fd, result);
 | 
			
		||||
                    }));
 | 
			
		||||
                    if (result === 'timeout') {
 | 
			
		||||
                        controller.abort();
 | 
			
		||||
                        throw new Error('Aborting cache download as the download time exceeded the timeout.');
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (Buffer.isBuffer(result)) {
 | 
			
		||||
                        fs.writeFileSync(fd, result);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            finally {
 | 
			
		||||
| 
						 | 
				
			
			@ -5675,6 +5685,16 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
 | 
			
		|||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
 | 
			
		||||
const promiseWithTimeout = (timeoutMs, promise) => __awaiter(void 0, void 0, void 0, function* () {
 | 
			
		||||
    let timeoutHandle;
 | 
			
		||||
    const timeoutPromise = new Promise(resolve => {
 | 
			
		||||
        timeoutHandle = setTimeout(() => resolve('timeout'), timeoutMs);
 | 
			
		||||
    });
 | 
			
		||||
    return Promise.race([promise, timeoutPromise]).then(result => {
 | 
			
		||||
        clearTimeout(timeoutHandle);
 | 
			
		||||
        return result;
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
//# sourceMappingURL=downloadUtils.js.map
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
| 
						 | 
				
			
			@ -40795,7 +40815,8 @@ function getDownloadOptions(copy) {
 | 
			
		|||
    const result = {
 | 
			
		||||
        useAzureSdk: true,
 | 
			
		||||
        downloadConcurrency: 8,
 | 
			
		||||
        timeoutInMs: 30000
 | 
			
		||||
        timeoutInMs: 30000,
 | 
			
		||||
        segmentTimeoutInMs: 3600000
 | 
			
		||||
    };
 | 
			
		||||
    if (copy) {
 | 
			
		||||
        if (typeof copy.useAzureSdk === 'boolean') {
 | 
			
		||||
| 
						 | 
				
			
			@ -40807,10 +40828,14 @@ function getDownloadOptions(copy) {
 | 
			
		|||
        if (typeof copy.timeoutInMs === 'number') {
 | 
			
		||||
            result.timeoutInMs = copy.timeoutInMs;
 | 
			
		||||
        }
 | 
			
		||||
        if (typeof copy.segmentTimeoutInMs === 'number') {
 | 
			
		||||
            result.segmentTimeoutInMs = copy.segmentTimeoutInMs;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
 | 
			
		||||
    core.debug(`Download concurrency: ${result.downloadConcurrency}`);
 | 
			
		||||
    core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
 | 
			
		||||
    core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`);
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
exports.getDownloadOptions = getDownloadOptions;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -1,15 +1,15 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "cache",
 | 
			
		||||
  "version": "3.0.6",
 | 
			
		||||
  "version": "3.0.7",
 | 
			
		||||
  "lockfileVersion": 2,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "cache",
 | 
			
		||||
      "version": "3.0.6",
 | 
			
		||||
      "version": "3.0.7",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@actions/cache": "^3.0.1",
 | 
			
		||||
        "@actions/cache": "^3.0.3",
 | 
			
		||||
        "@actions/core": "^1.7.0",
 | 
			
		||||
        "@actions/exec": "^1.1.1",
 | 
			
		||||
        "@actions/io": "^1.1.2"
 | 
			
		||||
| 
						 | 
				
			
			@ -36,9 +36,9 @@
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@actions/cache": {
 | 
			
		||||
      "version": "3.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-z4cbwCuzyZHQ3Y3AyQEFb+WQneC1wcOWfjrKxhulGkbXBLiMH/Uga2hknNEgOY16XaDZ7hArYaY3nUxE7IzqLQ==",
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-kn0pZRQNFRg1IQnW/N7uTNbbLqYalvQW2bmrznn3C34LMY/rSuEmH6Uo69HDh335Q0vKs9kg/jsIarzUBKzEXg==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@actions/core": "^1.2.6",
 | 
			
		||||
        "@actions/exec": "^1.0.1",
 | 
			
		||||
| 
						 | 
				
			
			@ -9533,9 +9533,9 @@
 | 
			
		|||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@actions/cache": {
 | 
			
		||||
      "version": "3.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-z4cbwCuzyZHQ3Y3AyQEFb+WQneC1wcOWfjrKxhulGkbXBLiMH/Uga2hknNEgOY16XaDZ7hArYaY3nUxE7IzqLQ==",
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-kn0pZRQNFRg1IQnW/N7uTNbbLqYalvQW2bmrznn3C34LMY/rSuEmH6Uo69HDh335Q0vKs9kg/jsIarzUBKzEXg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@actions/core": "^1.2.6",
 | 
			
		||||
        "@actions/exec": "^1.0.1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "cache",
 | 
			
		||||
  "version": "3.0.6",
 | 
			
		||||
  "version": "3.0.7",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "description": "Cache dependencies and build outputs",
 | 
			
		||||
  "main": "dist/restore/index.js",
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
  "author": "GitHub",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@actions/cache": "^3.0.1",
 | 
			
		||||
    "@actions/cache": "^3.0.3",
 | 
			
		||||
    "@actions/core": "^1.7.0",
 | 
			
		||||
    "@actions/exec": "^1.1.1",
 | 
			
		||||
    "@actions/io": "^1.1.2"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user