mirror of
				https://github.com/gradle/gradle-build-action.git
				synced 2025-10-31 23:28:55 +08:00 
			
		
		
		
	Allow time for processes to release file locks on windows
This commit is contained in:
		| @@ -5,7 +5,7 @@ import * as core from '@actions/core' | |||||||
| import * as glob from '@actions/glob' | import * as glob from '@actions/glob' | ||||||
| import * as exec from '@actions/exec' | import * as exec from '@actions/exec' | ||||||
|  |  | ||||||
| import {AbstractCache, hashFileNames} from './cache-utils' | import {AbstractCache, hashFileNames, tryDelete} from './cache-utils' | ||||||
|  |  | ||||||
| // Which paths under Gradle User Home should be cached | // Which paths under Gradle User Home should be cached | ||||||
| const CACHE_PATH = ['caches', 'notifications'] | const CACHE_PATH = ['caches', 'notifications'] | ||||||
| @@ -141,7 +141,7 @@ export class GradleUserHomeCache extends AbstractCache { | |||||||
|         if (commonArtifactFiles.length === 0) { |         if (commonArtifactFiles.length === 0) { | ||||||
|             this.debug(`No files found to cache for ${bundle}`) |             this.debug(`No files found to cache for ${bundle}`) | ||||||
|             if (fs.existsSync(cacheMetaFile)) { |             if (fs.existsSync(cacheMetaFile)) { | ||||||
|                 fs.unlinkSync(cacheMetaFile) |                 tryDelete(cacheMetaFile) | ||||||
|             } |             } | ||||||
|             return |             return | ||||||
|         } |         } | ||||||
| @@ -164,7 +164,7 @@ export class GradleUserHomeCache extends AbstractCache { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         for (const file of commonArtifactFiles) { |         for (const file of commonArtifactFiles) { | ||||||
|             fs.unlinkSync(file) |             tryDelete(file) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ import * as cache from '@actions/cache' | |||||||
| import * as github from '@actions/github' | import * as github from '@actions/github' | ||||||
| import * as crypto from 'crypto' | import * as crypto from 'crypto' | ||||||
| import * as path from 'path' | import * as path from 'path' | ||||||
|  | import * as fs from 'fs' | ||||||
|  |  | ||||||
| export function isCacheDisabled(): boolean { | export function isCacheDisabled(): boolean { | ||||||
|     return core.getBooleanInput('cache-disabled') |     return core.getBooleanInput('cache-disabled') | ||||||
| @@ -60,6 +61,29 @@ export function hashFileNames(fileNames: string[]): string { | |||||||
|     ) |     ) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Attempt to delete a file, waiting to allow locks to be released | ||||||
|  |  */ | ||||||
|  | export async function tryDelete(file: string): Promise<void> { | ||||||
|  |     for (let count = 0; count < 3; count++) { | ||||||
|  |         try { | ||||||
|  |             fs.unlinkSync(file) | ||||||
|  |             return | ||||||
|  |         } catch (error) { | ||||||
|  |             if (count === 2) { | ||||||
|  |                 throw error | ||||||
|  |             } else { | ||||||
|  |                 core.warning(String(error)) | ||||||
|  |                 await delay(1000) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | async function delay(ms: number): Promise<void> { | ||||||
|  |     return new Promise(resolve => setTimeout(resolve, ms)) | ||||||
|  | } | ||||||
|  |  | ||||||
| class CacheKey { | class CacheKey { | ||||||
|     key: string |     key: string | ||||||
|     restoreKeys: string[] |     restoreKeys: string[] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user