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 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 zstd failing on amazon linux 2.0 runners
 | 
				
			||||||
* Fixed cache not working with github workspace directory or current directory
 | 
					* 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
 | 
					Refer [here](https://github.com/actions/cache/blob/v2/README.md) for previous versions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,4 +21,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 3.0.6
 | 
					### 3.0.6
 | 
				
			||||||
- Fixed [#809](https://github.com/actions/cache/issues/809) - zstd -d: no such file or directory error
 | 
					- 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
 | 
					- 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 utils = __importStar(__webpack_require__(15));
 | 
				
			||||||
const constants_1 = __webpack_require__(931);
 | 
					const constants_1 = __webpack_require__(931);
 | 
				
			||||||
const requestUtils_1 = __webpack_require__(899);
 | 
					const requestUtils_1 = __webpack_require__(899);
 | 
				
			||||||
 | 
					const abort_controller_1 = __webpack_require__(106);
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Pipes the body of a HTTP response to a stream
 | 
					 * 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');
 | 
					            const fd = fs.openSync(archivePath, 'w');
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                downloadProgress.startDisplayTimer();
 | 
					                downloadProgress.startDisplayTimer();
 | 
				
			||||||
 | 
					                const controller = new abort_controller_1.AbortController();
 | 
				
			||||||
 | 
					                const abortSignal = controller.signal;
 | 
				
			||||||
                while (!downloadProgress.isDone()) {
 | 
					                while (!downloadProgress.isDone()) {
 | 
				
			||||||
                    const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
 | 
					                    const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
 | 
				
			||||||
                    const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
 | 
					                    const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
 | 
				
			||||||
                    downloadProgress.nextSegment(segmentSize);
 | 
					                    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,
 | 
					                        concurrency: options.downloadConcurrency,
 | 
				
			||||||
                        onProgress: downloadProgress.onProgress()
 | 
					                        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 {
 | 
					            finally {
 | 
				
			||||||
| 
						 | 
					@ -5675,6 +5685,16 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
 | 
					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
 | 
					//# sourceMappingURL=downloadUtils.js.map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/***/ }),
 | 
					/***/ }),
 | 
				
			||||||
| 
						 | 
					@ -40795,7 +40815,8 @@ function getDownloadOptions(copy) {
 | 
				
			||||||
    const result = {
 | 
					    const result = {
 | 
				
			||||||
        useAzureSdk: true,
 | 
					        useAzureSdk: true,
 | 
				
			||||||
        downloadConcurrency: 8,
 | 
					        downloadConcurrency: 8,
 | 
				
			||||||
        timeoutInMs: 30000
 | 
					        timeoutInMs: 30000,
 | 
				
			||||||
 | 
					        segmentTimeoutInMs: 3600000
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    if (copy) {
 | 
					    if (copy) {
 | 
				
			||||||
        if (typeof copy.useAzureSdk === 'boolean') {
 | 
					        if (typeof copy.useAzureSdk === 'boolean') {
 | 
				
			||||||
| 
						 | 
					@ -40807,10 +40828,14 @@ function getDownloadOptions(copy) {
 | 
				
			||||||
        if (typeof copy.timeoutInMs === 'number') {
 | 
					        if (typeof copy.timeoutInMs === 'number') {
 | 
				
			||||||
            result.timeoutInMs = copy.timeoutInMs;
 | 
					            result.timeoutInMs = copy.timeoutInMs;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (typeof copy.segmentTimeoutInMs === 'number') {
 | 
				
			||||||
 | 
					            result.segmentTimeoutInMs = copy.segmentTimeoutInMs;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
 | 
					    core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
 | 
				
			||||||
    core.debug(`Download concurrency: ${result.downloadConcurrency}`);
 | 
					    core.debug(`Download concurrency: ${result.downloadConcurrency}`);
 | 
				
			||||||
    core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
 | 
					    core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
 | 
				
			||||||
 | 
					    core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`);
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.getDownloadOptions = getDownloadOptions;
 | 
					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 utils = __importStar(__webpack_require__(15));
 | 
				
			||||||
const constants_1 = __webpack_require__(931);
 | 
					const constants_1 = __webpack_require__(931);
 | 
				
			||||||
const requestUtils_1 = __webpack_require__(899);
 | 
					const requestUtils_1 = __webpack_require__(899);
 | 
				
			||||||
 | 
					const abort_controller_1 = __webpack_require__(106);
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Pipes the body of a HTTP response to a stream
 | 
					 * 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');
 | 
					            const fd = fs.openSync(archivePath, 'w');
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                downloadProgress.startDisplayTimer();
 | 
					                downloadProgress.startDisplayTimer();
 | 
				
			||||||
 | 
					                const controller = new abort_controller_1.AbortController();
 | 
				
			||||||
 | 
					                const abortSignal = controller.signal;
 | 
				
			||||||
                while (!downloadProgress.isDone()) {
 | 
					                while (!downloadProgress.isDone()) {
 | 
				
			||||||
                    const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
 | 
					                    const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
 | 
				
			||||||
                    const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
 | 
					                    const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
 | 
				
			||||||
                    downloadProgress.nextSegment(segmentSize);
 | 
					                    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,
 | 
					                        concurrency: options.downloadConcurrency,
 | 
				
			||||||
                        onProgress: downloadProgress.onProgress()
 | 
					                        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 {
 | 
					            finally {
 | 
				
			||||||
| 
						 | 
					@ -5675,6 +5685,16 @@ function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
 | 
					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
 | 
					//# sourceMappingURL=downloadUtils.js.map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/***/ }),
 | 
					/***/ }),
 | 
				
			||||||
| 
						 | 
					@ -40795,7 +40815,8 @@ function getDownloadOptions(copy) {
 | 
				
			||||||
    const result = {
 | 
					    const result = {
 | 
				
			||||||
        useAzureSdk: true,
 | 
					        useAzureSdk: true,
 | 
				
			||||||
        downloadConcurrency: 8,
 | 
					        downloadConcurrency: 8,
 | 
				
			||||||
        timeoutInMs: 30000
 | 
					        timeoutInMs: 30000,
 | 
				
			||||||
 | 
					        segmentTimeoutInMs: 3600000
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    if (copy) {
 | 
					    if (copy) {
 | 
				
			||||||
        if (typeof copy.useAzureSdk === 'boolean') {
 | 
					        if (typeof copy.useAzureSdk === 'boolean') {
 | 
				
			||||||
| 
						 | 
					@ -40807,10 +40828,14 @@ function getDownloadOptions(copy) {
 | 
				
			||||||
        if (typeof copy.timeoutInMs === 'number') {
 | 
					        if (typeof copy.timeoutInMs === 'number') {
 | 
				
			||||||
            result.timeoutInMs = copy.timeoutInMs;
 | 
					            result.timeoutInMs = copy.timeoutInMs;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (typeof copy.segmentTimeoutInMs === 'number') {
 | 
				
			||||||
 | 
					            result.segmentTimeoutInMs = copy.segmentTimeoutInMs;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
 | 
					    core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
 | 
				
			||||||
    core.debug(`Download concurrency: ${result.downloadConcurrency}`);
 | 
					    core.debug(`Download concurrency: ${result.downloadConcurrency}`);
 | 
				
			||||||
    core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
 | 
					    core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
 | 
				
			||||||
 | 
					    core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`);
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.getDownloadOptions = getDownloadOptions;
 | 
					exports.getDownloadOptions = getDownloadOptions;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| 
						 | 
					@ -1,15 +1,15 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "name": "cache",
 | 
					  "name": "cache",
 | 
				
			||||||
  "version": "3.0.6",
 | 
					  "version": "3.0.7",
 | 
				
			||||||
  "lockfileVersion": 2,
 | 
					  "lockfileVersion": 2,
 | 
				
			||||||
  "requires": true,
 | 
					  "requires": true,
 | 
				
			||||||
  "packages": {
 | 
					  "packages": {
 | 
				
			||||||
    "": {
 | 
					    "": {
 | 
				
			||||||
      "name": "cache",
 | 
					      "name": "cache",
 | 
				
			||||||
      "version": "3.0.6",
 | 
					      "version": "3.0.7",
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@actions/cache": "^3.0.1",
 | 
					        "@actions/cache": "^3.0.3",
 | 
				
			||||||
        "@actions/core": "^1.7.0",
 | 
					        "@actions/core": "^1.7.0",
 | 
				
			||||||
        "@actions/exec": "^1.1.1",
 | 
					        "@actions/exec": "^1.1.1",
 | 
				
			||||||
        "@actions/io": "^1.1.2"
 | 
					        "@actions/io": "^1.1.2"
 | 
				
			||||||
| 
						 | 
					@ -36,9 +36,9 @@
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@actions/cache": {
 | 
					    "node_modules/@actions/cache": {
 | 
				
			||||||
      "version": "3.0.1",
 | 
					      "version": "3.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-z4cbwCuzyZHQ3Y3AyQEFb+WQneC1wcOWfjrKxhulGkbXBLiMH/Uga2hknNEgOY16XaDZ7hArYaY3nUxE7IzqLQ==",
 | 
					      "integrity": "sha512-kn0pZRQNFRg1IQnW/N7uTNbbLqYalvQW2bmrznn3C34LMY/rSuEmH6Uo69HDh335Q0vKs9kg/jsIarzUBKzEXg==",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@actions/core": "^1.2.6",
 | 
					        "@actions/core": "^1.2.6",
 | 
				
			||||||
        "@actions/exec": "^1.0.1",
 | 
					        "@actions/exec": "^1.0.1",
 | 
				
			||||||
| 
						 | 
					@ -9533,9 +9533,9 @@
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@actions/cache": {
 | 
					    "@actions/cache": {
 | 
				
			||||||
      "version": "3.0.1",
 | 
					      "version": "3.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-z4cbwCuzyZHQ3Y3AyQEFb+WQneC1wcOWfjrKxhulGkbXBLiMH/Uga2hknNEgOY16XaDZ7hArYaY3nUxE7IzqLQ==",
 | 
					      "integrity": "sha512-kn0pZRQNFRg1IQnW/N7uTNbbLqYalvQW2bmrznn3C34LMY/rSuEmH6Uo69HDh335Q0vKs9kg/jsIarzUBKzEXg==",
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "@actions/core": "^1.2.6",
 | 
					        "@actions/core": "^1.2.6",
 | 
				
			||||||
        "@actions/exec": "^1.0.1",
 | 
					        "@actions/exec": "^1.0.1",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "name": "cache",
 | 
					  "name": "cache",
 | 
				
			||||||
  "version": "3.0.6",
 | 
					  "version": "3.0.7",
 | 
				
			||||||
  "private": true,
 | 
					  "private": true,
 | 
				
			||||||
  "description": "Cache dependencies and build outputs",
 | 
					  "description": "Cache dependencies and build outputs",
 | 
				
			||||||
  "main": "dist/restore/index.js",
 | 
					  "main": "dist/restore/index.js",
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
  "author": "GitHub",
 | 
					  "author": "GitHub",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@actions/cache": "^3.0.1",
 | 
					    "@actions/cache": "^3.0.3",
 | 
				
			||||||
    "@actions/core": "^1.7.0",
 | 
					    "@actions/core": "^1.7.0",
 | 
				
			||||||
    "@actions/exec": "^1.1.1",
 | 
					    "@actions/exec": "^1.1.1",
 | 
				
			||||||
    "@actions/io": "^1.1.2"
 | 
					    "@actions/io": "^1.1.2"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user