mirror of
				https://github.com/Swatinem/rust-cache.git
				synced 2025-10-31 15:43:49 +00:00 
			
		
		
		
	also cache cargo install metadata
				
					
				
			This commit is contained in:
		
							parent
							
								
									720f7e45cc
								
							
						
					
					
						commit
						008623fb83
					
				
							
								
								
									
										30
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							| @ -86684,10 +86684,10 @@ class Workspace { | ||||
|         return packages; | ||||
|     } | ||||
|     async getPackagesOutsideWorkspaceRoot() { | ||||
|         return await this.getPackages(pkg => !pkg.manifest_path.startsWith(this.root)); | ||||
|         return await this.getPackages((pkg) => !pkg.manifest_path.startsWith(this.root)); | ||||
|     } | ||||
|     async getWorkspaceMembers() { | ||||
|         return await this.getPackages(_ => true, "--no-deps"); | ||||
|         return await this.getPackages((_) => true, "--no-deps"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -86811,7 +86811,7 @@ class CacheConfig { | ||||
|             const root = workspace.root; | ||||
|             keyFiles.push(...(await globFiles(`${root}/**/.cargo/config.toml\n${root}/**/rust-toolchain\n${root}/**/rust-toolchain.toml`))); | ||||
|             const workspaceMembers = await workspace.getWorkspaceMembers(); | ||||
|             const cargo_manifests = sort_and_uniq(workspaceMembers.map(member => external_path_default().join(member.path, "Cargo.toml"))); | ||||
|             const cargo_manifests = sort_and_uniq(workspaceMembers.map((member) => external_path_default().join(member.path, "Cargo.toml"))); | ||||
|             for (const cargo_manifest of cargo_manifests) { | ||||
|                 try { | ||||
|                     const content = await promises_default().readFile(cargo_manifest, { encoding: "utf8" }); | ||||
| @ -86847,7 +86847,8 @@ class CacheConfig { | ||||
|                     hasher.update(JSON.stringify(parsed)); | ||||
|                     parsedKeyFiles.push(cargo_manifest); | ||||
|                 } | ||||
|                 catch (e) { // Fallback to caching them as regular file
 | ||||
|                 catch (e) { | ||||
|                     // Fallback to caching them as regular file
 | ||||
|                     lib_core.warning(`Error parsing Cargo.toml manifest, fallback to caching entire file: ${e}`); | ||||
|                     keyFiles.push(cargo_manifest); | ||||
|                 } | ||||
| @ -86860,7 +86861,7 @@ class CacheConfig { | ||||
|                     if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { | ||||
|                         // Fallback to caching them as regular file since this action
 | ||||
|                         // can only handle Cargo.lock format version 3
 | ||||
|                         lib_core.warning('Unsupported Cargo.lock format, fallback to caching entire file'); | ||||
|                         lib_core.warning("Unsupported Cargo.lock format, fallback to caching entire file"); | ||||
|                         keyFiles.push(cargo_lock); | ||||
|                         continue; | ||||
|                     } | ||||
| @ -86870,7 +86871,8 @@ class CacheConfig { | ||||
|                     hasher.update(JSON.stringify(packages)); | ||||
|                     parsedKeyFiles.push(cargo_lock); | ||||
|                 } | ||||
|                 catch (e) { // Fallback to caching them as regular file
 | ||||
|                 catch (e) { | ||||
|                     // Fallback to caching them as regular file
 | ||||
|                     lib_core.warning(`Error parsing Cargo.lock manifest, fallback to caching entire file: ${e}`); | ||||
|                     keyFiles.push(cargo_lock); | ||||
|                 } | ||||
| @ -86887,12 +86889,14 @@ class CacheConfig { | ||||
|         self.keyFiles = sort_and_uniq(keyFiles); | ||||
|         key += `-${lockHash}`; | ||||
|         self.cacheKey = key; | ||||
|         self.cachePaths = [ | ||||
|             external_path_default().join(config_CARGO_HOME, "registry"), | ||||
|             external_path_default().join(config_CARGO_HOME, "git"), | ||||
|         ]; | ||||
|         self.cachePaths = [external_path_default().join(config_CARGO_HOME, "registry"), external_path_default().join(config_CARGO_HOME, "git")]; | ||||
|         if (self.cacheBin) { | ||||
|             self.cachePaths = [external_path_default().join(config_CARGO_HOME, "bin"), ...self.cachePaths]; | ||||
|             self.cachePaths = [ | ||||
|                 external_path_default().join(config_CARGO_HOME, "bin"), | ||||
|                 external_path_default().join(config_CARGO_HOME, ".crates.toml"), | ||||
|                 external_path_default().join(config_CARGO_HOME, ".crates2.json"), | ||||
|                 ...self.cachePaths, | ||||
|             ]; | ||||
|         } | ||||
|         const cacheTargets = lib_core.getInput("cache-targets").toLowerCase() || "true"; | ||||
|         if (cacheTargets === "true") { | ||||
| @ -87338,7 +87342,9 @@ async function run() { | ||||
|         // Pass a copy of cachePaths to avoid mutating the original array as reported by:
 | ||||
|         // https://github.com/actions/toolkit/pull/1378
 | ||||
|         // TODO: remove this once the underlying bug is fixed.
 | ||||
|         const restoreKey = await cacheProvider.cache.restoreCache(config.cachePaths.slice(), key, [config.restoreKey], { lookupOnly }); | ||||
|         const restoreKey = await cacheProvider.cache.restoreCache(config.cachePaths.slice(), key, [config.restoreKey], { | ||||
|             lookupOnly, | ||||
|         }); | ||||
|         if (restoreKey) { | ||||
|             const match = restoreKey === key; | ||||
|             lib_core.info(`${lookupOnly ? "Found" : "Restored from"} cache key "${restoreKey}" full match: ${match}.`); | ||||
|  | ||||
							
								
								
									
										26
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							| @ -86684,10 +86684,10 @@ class Workspace { | ||||
|         return packages; | ||||
|     } | ||||
|     async getPackagesOutsideWorkspaceRoot() { | ||||
|         return await this.getPackages(pkg => !pkg.manifest_path.startsWith(this.root)); | ||||
|         return await this.getPackages((pkg) => !pkg.manifest_path.startsWith(this.root)); | ||||
|     } | ||||
|     async getWorkspaceMembers() { | ||||
|         return await this.getPackages(_ => true, "--no-deps"); | ||||
|         return await this.getPackages((_) => true, "--no-deps"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -86811,7 +86811,7 @@ class CacheConfig { | ||||
|             const root = workspace.root; | ||||
|             keyFiles.push(...(await globFiles(`${root}/**/.cargo/config.toml\n${root}/**/rust-toolchain\n${root}/**/rust-toolchain.toml`))); | ||||
|             const workspaceMembers = await workspace.getWorkspaceMembers(); | ||||
|             const cargo_manifests = sort_and_uniq(workspaceMembers.map(member => external_path_default().join(member.path, "Cargo.toml"))); | ||||
|             const cargo_manifests = sort_and_uniq(workspaceMembers.map((member) => external_path_default().join(member.path, "Cargo.toml"))); | ||||
|             for (const cargo_manifest of cargo_manifests) { | ||||
|                 try { | ||||
|                     const content = await promises_default().readFile(cargo_manifest, { encoding: "utf8" }); | ||||
| @ -86847,7 +86847,8 @@ class CacheConfig { | ||||
|                     hasher.update(JSON.stringify(parsed)); | ||||
|                     parsedKeyFiles.push(cargo_manifest); | ||||
|                 } | ||||
|                 catch (e) { // Fallback to caching them as regular file
 | ||||
|                 catch (e) { | ||||
|                     // Fallback to caching them as regular file
 | ||||
|                     core.warning(`Error parsing Cargo.toml manifest, fallback to caching entire file: ${e}`); | ||||
|                     keyFiles.push(cargo_manifest); | ||||
|                 } | ||||
| @ -86860,7 +86861,7 @@ class CacheConfig { | ||||
|                     if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { | ||||
|                         // Fallback to caching them as regular file since this action
 | ||||
|                         // can only handle Cargo.lock format version 3
 | ||||
|                         core.warning('Unsupported Cargo.lock format, fallback to caching entire file'); | ||||
|                         core.warning("Unsupported Cargo.lock format, fallback to caching entire file"); | ||||
|                         keyFiles.push(cargo_lock); | ||||
|                         continue; | ||||
|                     } | ||||
| @ -86870,7 +86871,8 @@ class CacheConfig { | ||||
|                     hasher.update(JSON.stringify(packages)); | ||||
|                     parsedKeyFiles.push(cargo_lock); | ||||
|                 } | ||||
|                 catch (e) { // Fallback to caching them as regular file
 | ||||
|                 catch (e) { | ||||
|                     // Fallback to caching them as regular file
 | ||||
|                     core.warning(`Error parsing Cargo.lock manifest, fallback to caching entire file: ${e}`); | ||||
|                     keyFiles.push(cargo_lock); | ||||
|                 } | ||||
| @ -86887,12 +86889,14 @@ class CacheConfig { | ||||
|         self.keyFiles = sort_and_uniq(keyFiles); | ||||
|         key += `-${lockHash}`; | ||||
|         self.cacheKey = key; | ||||
|         self.cachePaths = [ | ||||
|             external_path_default().join(CARGO_HOME, "registry"), | ||||
|             external_path_default().join(CARGO_HOME, "git"), | ||||
|         ]; | ||||
|         self.cachePaths = [external_path_default().join(CARGO_HOME, "registry"), external_path_default().join(CARGO_HOME, "git")]; | ||||
|         if (self.cacheBin) { | ||||
|             self.cachePaths = [external_path_default().join(CARGO_HOME, "bin"), ...self.cachePaths]; | ||||
|             self.cachePaths = [ | ||||
|                 external_path_default().join(CARGO_HOME, "bin"), | ||||
|                 external_path_default().join(CARGO_HOME, ".crates.toml"), | ||||
|                 external_path_default().join(CARGO_HOME, ".crates2.json"), | ||||
|                 ...self.cachePaths, | ||||
|             ]; | ||||
|         } | ||||
|         const cacheTargets = core.getInput("cache-targets").toLowerCase() || "true"; | ||||
|         if (cacheTargets === "true") { | ||||
|  | ||||
| @ -43,16 +43,16 @@ async function cleanProfileTarget(profileDir: string, packages: Packages, checkT | ||||
|       // https://github.com/vertexclique/kaos/blob/9876f6c890339741cc5be4b7cb9df72baa5a6d79/src/cargo.rs#L25
 | ||||
|       // https://github.com/eupn/macrotest/blob/c4151a5f9f545942f4971980b5d264ebcd0b1d11/src/cargo.rs#L27
 | ||||
|       cleanTargetDir(path.join(profileDir, "target"), packages, checkTimestamp); | ||||
|     } catch { } | ||||
|     } catch {} | ||||
|     try { | ||||
|       // https://github.com/dtolnay/trybuild/blob/eec8ca6cb9b8f53d0caf1aa499d99df52cae8b40/src/cargo.rs#L50
 | ||||
|       cleanTargetDir(path.join(profileDir, "trybuild"), packages, checkTimestamp); | ||||
|     } catch { } | ||||
|     } catch {} | ||||
| 
 | ||||
|     // Delete everything else.
 | ||||
|     await rmExcept(profileDir, new Set(["target", "trybuild"]), checkTimestamp); | ||||
| 
 | ||||
|     return | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   let keepProfile = new Set(["build", ".fingerprint", "deps"]); | ||||
|  | ||||
| @ -153,7 +153,7 @@ export class CacheConfig { | ||||
| 
 | ||||
|       const workspaceMembers = await workspace.getWorkspaceMembers(); | ||||
| 
 | ||||
|       const cargo_manifests = sort_and_uniq(workspaceMembers.map(member => path.join(member.path, "Cargo.toml"))); | ||||
|       const cargo_manifests = sort_and_uniq(workspaceMembers.map((member) => path.join(member.path, "Cargo.toml"))); | ||||
| 
 | ||||
|       for (const cargo_manifest of cargo_manifests) { | ||||
|         try { | ||||
| @ -194,7 +194,8 @@ export class CacheConfig { | ||||
|           hasher.update(JSON.stringify(parsed)); | ||||
| 
 | ||||
|           parsedKeyFiles.push(cargo_manifest); | ||||
|         } catch (e) { // Fallback to caching them as regular file
 | ||||
|         } catch (e) { | ||||
|           // Fallback to caching them as regular file
 | ||||
|           core.warning(`Error parsing Cargo.toml manifest, fallback to caching entire file: ${e}`); | ||||
|           keyFiles.push(cargo_manifest); | ||||
|         } | ||||
| @ -209,7 +210,7 @@ export class CacheConfig { | ||||
|           if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { | ||||
|             // Fallback to caching them as regular file since this action
 | ||||
|             // can only handle Cargo.lock format version 3
 | ||||
|             core.warning('Unsupported Cargo.lock format, fallback to caching entire file'); | ||||
|             core.warning("Unsupported Cargo.lock format, fallback to caching entire file"); | ||||
|             keyFiles.push(cargo_lock); | ||||
|             continue; | ||||
|           } | ||||
| @ -221,7 +222,8 @@ export class CacheConfig { | ||||
|           hasher.update(JSON.stringify(packages)); | ||||
| 
 | ||||
|           parsedKeyFiles.push(cargo_lock); | ||||
|         } catch (e) { // Fallback to caching them as regular file
 | ||||
|         } catch (e) { | ||||
|           // Fallback to caching them as regular file
 | ||||
|           core.warning(`Error parsing Cargo.lock manifest, fallback to caching entire file: ${e}`); | ||||
|           keyFiles.push(cargo_lock); | ||||
|         } | ||||
| @ -243,12 +245,14 @@ export class CacheConfig { | ||||
|     key += `-${lockHash}`; | ||||
|     self.cacheKey = key; | ||||
| 
 | ||||
|     self.cachePaths = [ | ||||
|       path.join(CARGO_HOME, "registry"), | ||||
|       path.join(CARGO_HOME, "git"), | ||||
|     ]; | ||||
|     self.cachePaths = [path.join(CARGO_HOME, "registry"), path.join(CARGO_HOME, "git")]; | ||||
|     if (self.cacheBin) { | ||||
|       self.cachePaths = [path.join(CARGO_HOME, "bin"), ...self.cachePaths]; | ||||
|       self.cachePaths = [ | ||||
|         path.join(CARGO_HOME, "bin"), | ||||
|         path.join(CARGO_HOME, ".crates.toml"), | ||||
|         path.join(CARGO_HOME, ".crates2.json"), | ||||
|         ...self.cachePaths, | ||||
|       ]; | ||||
|     } | ||||
|     const cacheTargets = core.getInput("cache-targets").toLowerCase() || "true"; | ||||
|     if (cacheTargets === "true") { | ||||
|  | ||||
| @ -38,19 +38,12 @@ async function run() { | ||||
|     // Pass a copy of cachePaths to avoid mutating the original array as reported by:
 | ||||
|     // https://github.com/actions/toolkit/pull/1378
 | ||||
|     // TODO: remove this once the underlying bug is fixed.
 | ||||
|     const restoreKey = await cacheProvider.cache.restoreCache( | ||||
|       config.cachePaths.slice(), | ||||
|       key, | ||||
|       [config.restoreKey], | ||||
|       { lookupOnly } | ||||
|     ); | ||||
|     const restoreKey = await cacheProvider.cache.restoreCache(config.cachePaths.slice(), key, [config.restoreKey], { | ||||
|       lookupOnly, | ||||
|     }); | ||||
|     if (restoreKey) { | ||||
|       const match = restoreKey === key; | ||||
|       core.info( | ||||
|         `${ | ||||
|           lookupOnly ? "Found" : "Restored from" | ||||
|         } cache key "${restoreKey}" full match: ${match}.` | ||||
|       ); | ||||
|       core.info(`${lookupOnly ? "Found" : "Restored from"} cache key "${restoreKey}" full match: ${match}.`); | ||||
|       if (!match) { | ||||
|         // pre-clean the target directory on cache mismatch
 | ||||
|         for (const workspace of config.workspaces) { | ||||
|  | ||||
| @ -8,7 +8,7 @@ const SAVE_TARGETS = new Set(["lib", "proc-macro"]); | ||||
| export class Workspace { | ||||
|   constructor(public root: string, public target: string) {} | ||||
| 
 | ||||
|   async getPackages(filter: ((p: Meta['packages'][0]) => boolean), ...extraArgs: string[]): Promise<Packages> { | ||||
|   async getPackages(filter: (p: Meta["packages"][0]) => boolean, ...extraArgs: string[]): Promise<Packages> { | ||||
|     let packages: Packages = []; | ||||
|     try { | ||||
|       core.debug(`collecting metadata for "${this.root}"`); | ||||
| @ -29,11 +29,11 @@ export class Workspace { | ||||
|   } | ||||
| 
 | ||||
|   public async getPackagesOutsideWorkspaceRoot(): Promise<Packages> { | ||||
|     return await this.getPackages(pkg => !pkg.manifest_path.startsWith(this.root)); | ||||
|     return await this.getPackages((pkg) => !pkg.manifest_path.startsWith(this.root)); | ||||
|   } | ||||
| 
 | ||||
|   public async getWorkspaceMembers(): Promise<Packages> { | ||||
|     return await this.getPackages(_ => true, "--no-deps"); | ||||
|     return await this.getPackages((_) => true, "--no-deps"); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user