mirror of
				https://github.com/actions/cache.git
				synced 2025-11-04 15:48:39 +08:00 
			
		
		
		
	build action & add jobs to Tests workflow for only-restore option
* add regular & proxy server jobs * run job between save & restore jobs to test that only-restore option works with consecutive restores
This commit is contained in:
		
							parent
							
								
									4827442d41
								
							
						
					
					
						commit
						02fa69bea4
					
				
							
								
								
									
										48
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -71,6 +71,30 @@ jobs:
 | 
			
		|||
        path: |
 | 
			
		||||
          test-cache
 | 
			
		||||
          ~/test-cache
 | 
			
		||||
  test-only-restore:
 | 
			
		||||
    needs: test-restore
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [ubuntu-latest, windows-latest, macOS-latest]
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
    - name: Restore cache
 | 
			
		||||
      uses: ./
 | 
			
		||||
      with:
 | 
			
		||||
        only-restore: true
 | 
			
		||||
        key: test-${{ runner.os }}-${{ github.run_id }}
 | 
			
		||||
        path: |
 | 
			
		||||
          test-cache
 | 
			
		||||
          ~/test-cache
 | 
			
		||||
    - name: Verify cache files in working directory
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: __tests__/verify-cache-files.sh ${{ runner.os }} test-cache
 | 
			
		||||
    - name: Verify cache files outside working directory
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: __tests__/verify-cache-files.sh ${{ runner.os }} ~/test-cache
 | 
			
		||||
  test-restore:
 | 
			
		||||
    needs: test-save
 | 
			
		||||
    strategy:
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +142,30 @@ jobs:
 | 
			
		|||
      with:
 | 
			
		||||
        key: test-proxy-${{ github.run_id }}
 | 
			
		||||
        path: test-cache
 | 
			
		||||
  test-proxy-only-restore:
 | 
			
		||||
    needs: test-proxy-save
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container:
 | 
			
		||||
      image: ubuntu:latest
 | 
			
		||||
      options: --dns 127.0.0.1
 | 
			
		||||
    services:
 | 
			
		||||
      squid-proxy:
 | 
			
		||||
        image: datadog/squid:latest
 | 
			
		||||
        ports:
 | 
			
		||||
          - 3128:3128
 | 
			
		||||
    env:
 | 
			
		||||
      https_proxy: http://squid-proxy:3128
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
    - name: Restore cache
 | 
			
		||||
      uses: ./
 | 
			
		||||
      with:
 | 
			
		||||
        only-restore: true
 | 
			
		||||
        key: test-proxy-${{ github.run_id }}
 | 
			
		||||
        path: test-cache
 | 
			
		||||
    - name: Verify cache
 | 
			
		||||
      run: __tests__/verify-cache-files.sh proxy test-cache
 | 
			
		||||
  test-proxy-restore:
 | 
			
		||||
    needs: test-proxy-save
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -4607,7 +4607,9 @@ exports.RefKey = exports.Events = exports.State = exports.Outputs = exports.Inpu
 | 
			
		|||
var Inputs;
 | 
			
		||||
(function (Inputs) {
 | 
			
		||||
    Inputs["Key"] = "key";
 | 
			
		||||
    Inputs["OnlyRestore"] = "only-restore";
 | 
			
		||||
    Inputs["Path"] = "path";
 | 
			
		||||
    Inputs["Reeval"] = "reeval";
 | 
			
		||||
    Inputs["RestoreKeys"] = "restore-keys";
 | 
			
		||||
    Inputs["UploadChunkSize"] = "upload-chunk-size";
 | 
			
		||||
})(Inputs = exports.Inputs || (exports.Inputs = {}));
 | 
			
		||||
| 
						 | 
				
			
			@ -37317,8 +37319,6 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) {
 | 
			
		|||
            ...getCompressionProgram(),
 | 
			
		||||
            '-cf',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '--exclude',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P',
 | 
			
		||||
            '-C',
 | 
			
		||||
            workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										83
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										83
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -4607,7 +4607,9 @@ exports.RefKey = exports.Events = exports.State = exports.Outputs = exports.Inpu
 | 
			
		|||
var Inputs;
 | 
			
		||||
(function (Inputs) {
 | 
			
		||||
    Inputs["Key"] = "key";
 | 
			
		||||
    Inputs["OnlyRestore"] = "only-restore";
 | 
			
		||||
    Inputs["Path"] = "path";
 | 
			
		||||
    Inputs["Reeval"] = "reeval";
 | 
			
		||||
    Inputs["RestoreKeys"] = "restore-keys";
 | 
			
		||||
    Inputs["UploadChunkSize"] = "upload-chunk-size";
 | 
			
		||||
})(Inputs = exports.Inputs || (exports.Inputs = {}));
 | 
			
		||||
| 
						 | 
				
			
			@ -37317,8 +37319,6 @@ function createTar(archiveFolder, sourceDirectories, compressionMethod) {
 | 
			
		|||
            ...getCompressionProgram(),
 | 
			
		||||
            '-cf',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '--exclude',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P',
 | 
			
		||||
            '-C',
 | 
			
		||||
            workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
| 
						 | 
				
			
			@ -46770,50 +46770,53 @@ const utils = __importStar(__webpack_require__(443));
 | 
			
		|||
process.on("uncaughtException", e => utils.logWarning(e.message));
 | 
			
		||||
function run() {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        try {
 | 
			
		||||
            if (!utils.isCacheFeatureAvailable()) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (!utils.isValidEvent()) {
 | 
			
		||||
                utils.logWarning(`Event Validation Error: The event type ${process.env[constants_1.Events.Key]} is not supported because it's not tied to a branch or tag ref.`);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            const state = utils.getCacheState();
 | 
			
		||||
            // Inputs are re-evaluted before the post action, so we want the original key used for restore
 | 
			
		||||
            const primaryKey = core.getState(constants_1.State.CachePrimaryKey);
 | 
			
		||||
            if (!primaryKey) {
 | 
			
		||||
                utils.logWarning(`Error retrieving key from state.`);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (utils.isExactKeyMatch(primaryKey, state)) {
 | 
			
		||||
                core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            const cachePaths = utils.getInputAsArray(constants_1.Inputs.Path, {
 | 
			
		||||
                required: true
 | 
			
		||||
            });
 | 
			
		||||
        const save = !core.getBooleanInput(constants_1.Inputs.OnlyRestore);
 | 
			
		||||
        if (save) {
 | 
			
		||||
            try {
 | 
			
		||||
                yield cache.saveCache(cachePaths, primaryKey, {
 | 
			
		||||
                    uploadChunkSize: utils.getInputAsInt(constants_1.Inputs.UploadChunkSize)
 | 
			
		||||
                if (!utils.isCacheFeatureAvailable()) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (!utils.isValidEvent()) {
 | 
			
		||||
                    utils.logWarning(`Event Validation Error: The event type ${process.env[constants_1.Events.Key]} is not supported because it's not tied to a branch or tag ref.`);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                const state = utils.getCacheState();
 | 
			
		||||
                // Inputs are re-evaluted before the post action, so we want the original key used for restore
 | 
			
		||||
                const primaryKey = core.getState(constants_1.State.CachePrimaryKey);
 | 
			
		||||
                if (!primaryKey) {
 | 
			
		||||
                    utils.logWarning(`Error retrieving key from state.`);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (utils.isExactKeyMatch(primaryKey, state)) {
 | 
			
		||||
                    core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                const cachePaths = utils.getInputAsArray(constants_1.Inputs.Path, {
 | 
			
		||||
                    required: true
 | 
			
		||||
                });
 | 
			
		||||
                core.info(`Cache saved with key: ${primaryKey}`);
 | 
			
		||||
                try {
 | 
			
		||||
                    yield cache.saveCache(cachePaths, primaryKey, {
 | 
			
		||||
                        uploadChunkSize: utils.getInputAsInt(constants_1.Inputs.UploadChunkSize)
 | 
			
		||||
                    });
 | 
			
		||||
                    core.info(`Cache saved with key: ${primaryKey}`);
 | 
			
		||||
                }
 | 
			
		||||
                catch (error) {
 | 
			
		||||
                    const typedError = error;
 | 
			
		||||
                    if (typedError.name === cache.ValidationError.name) {
 | 
			
		||||
                        throw error;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (typedError.name === cache.ReserveCacheError.name) {
 | 
			
		||||
                        core.info(typedError.message);
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        utils.logWarning(typedError.message);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (error) {
 | 
			
		||||
                const typedError = error;
 | 
			
		||||
                if (typedError.name === cache.ValidationError.name) {
 | 
			
		||||
                    throw error;
 | 
			
		||||
                }
 | 
			
		||||
                else if (typedError.name === cache.ReserveCacheError.name) {
 | 
			
		||||
                    core.info(typedError.message);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    utils.logWarning(typedError.message);
 | 
			
		||||
                }
 | 
			
		||||
                utils.logWarning(error.message);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (error) {
 | 
			
		||||
            utils.logWarning(error.message);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
run();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user