mirror of
				https://github.com/Swatinem/rust-cache.git
				synced 2025-10-31 23:03:48 +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; |         return packages; | ||||||
|     } |     } | ||||||
|     async getPackagesOutsideWorkspaceRoot() { |     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() { |     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; |             const root = workspace.root; | ||||||
|             keyFiles.push(...(await globFiles(`${root}/**/.cargo/config.toml\n${root}/**/rust-toolchain\n${root}/**/rust-toolchain.toml`))); |             keyFiles.push(...(await globFiles(`${root}/**/.cargo/config.toml\n${root}/**/rust-toolchain\n${root}/**/rust-toolchain.toml`))); | ||||||
|             const workspaceMembers = await workspace.getWorkspaceMembers(); |             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) { |             for (const cargo_manifest of cargo_manifests) { | ||||||
|                 try { |                 try { | ||||||
|                     const content = await promises_default().readFile(cargo_manifest, { encoding: "utf8" }); |                     const content = await promises_default().readFile(cargo_manifest, { encoding: "utf8" }); | ||||||
| @ -86847,7 +86847,8 @@ class CacheConfig { | |||||||
|                     hasher.update(JSON.stringify(parsed)); |                     hasher.update(JSON.stringify(parsed)); | ||||||
|                     parsedKeyFiles.push(cargo_manifest); |                     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}`); |                     lib_core.warning(`Error parsing Cargo.toml manifest, fallback to caching entire file: ${e}`); | ||||||
|                     keyFiles.push(cargo_manifest); |                     keyFiles.push(cargo_manifest); | ||||||
|                 } |                 } | ||||||
| @ -86860,7 +86861,7 @@ class CacheConfig { | |||||||
|                     if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { |                     if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { | ||||||
|                         // Fallback to caching them as regular file since this action
 |                         // Fallback to caching them as regular file since this action
 | ||||||
|                         // can only handle Cargo.lock format version 3
 |                         // 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); |                         keyFiles.push(cargo_lock); | ||||||
|                         continue; |                         continue; | ||||||
|                     } |                     } | ||||||
| @ -86870,7 +86871,8 @@ class CacheConfig { | |||||||
|                     hasher.update(JSON.stringify(packages)); |                     hasher.update(JSON.stringify(packages)); | ||||||
|                     parsedKeyFiles.push(cargo_lock); |                     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}`); |                     lib_core.warning(`Error parsing Cargo.lock manifest, fallback to caching entire file: ${e}`); | ||||||
|                     keyFiles.push(cargo_lock); |                     keyFiles.push(cargo_lock); | ||||||
|                 } |                 } | ||||||
| @ -86887,12 +86889,14 @@ class CacheConfig { | |||||||
|         self.keyFiles = sort_and_uniq(keyFiles); |         self.keyFiles = sort_and_uniq(keyFiles); | ||||||
|         key += `-${lockHash}`; |         key += `-${lockHash}`; | ||||||
|         self.cacheKey = key; |         self.cacheKey = key; | ||||||
|         self.cachePaths = [ |         self.cachePaths = [external_path_default().join(config_CARGO_HOME, "registry"), external_path_default().join(config_CARGO_HOME, "git")]; | ||||||
|             external_path_default().join(config_CARGO_HOME, "registry"), |  | ||||||
|             external_path_default().join(config_CARGO_HOME, "git"), |  | ||||||
|         ]; |  | ||||||
|         if (self.cacheBin) { |         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"; |         const cacheTargets = lib_core.getInput("cache-targets").toLowerCase() || "true"; | ||||||
|         if (cacheTargets === "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:
 |         // Pass a copy of cachePaths to avoid mutating the original array as reported by:
 | ||||||
|         // https://github.com/actions/toolkit/pull/1378
 |         // https://github.com/actions/toolkit/pull/1378
 | ||||||
|         // TODO: remove this once the underlying bug is fixed.
 |         // 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) { |         if (restoreKey) { | ||||||
|             const match = restoreKey === key; |             const match = restoreKey === key; | ||||||
|             lib_core.info(`${lookupOnly ? "Found" : "Restored from"} cache key "${restoreKey}" full match: ${match}.`); |             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; |         return packages; | ||||||
|     } |     } | ||||||
|     async getPackagesOutsideWorkspaceRoot() { |     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() { |     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; |             const root = workspace.root; | ||||||
|             keyFiles.push(...(await globFiles(`${root}/**/.cargo/config.toml\n${root}/**/rust-toolchain\n${root}/**/rust-toolchain.toml`))); |             keyFiles.push(...(await globFiles(`${root}/**/.cargo/config.toml\n${root}/**/rust-toolchain\n${root}/**/rust-toolchain.toml`))); | ||||||
|             const workspaceMembers = await workspace.getWorkspaceMembers(); |             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) { |             for (const cargo_manifest of cargo_manifests) { | ||||||
|                 try { |                 try { | ||||||
|                     const content = await promises_default().readFile(cargo_manifest, { encoding: "utf8" }); |                     const content = await promises_default().readFile(cargo_manifest, { encoding: "utf8" }); | ||||||
| @ -86847,7 +86847,8 @@ class CacheConfig { | |||||||
|                     hasher.update(JSON.stringify(parsed)); |                     hasher.update(JSON.stringify(parsed)); | ||||||
|                     parsedKeyFiles.push(cargo_manifest); |                     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}`); |                     core.warning(`Error parsing Cargo.toml manifest, fallback to caching entire file: ${e}`); | ||||||
|                     keyFiles.push(cargo_manifest); |                     keyFiles.push(cargo_manifest); | ||||||
|                 } |                 } | ||||||
| @ -86860,7 +86861,7 @@ class CacheConfig { | |||||||
|                     if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { |                     if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { | ||||||
|                         // Fallback to caching them as regular file since this action
 |                         // Fallback to caching them as regular file since this action
 | ||||||
|                         // can only handle Cargo.lock format version 3
 |                         // 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); |                         keyFiles.push(cargo_lock); | ||||||
|                         continue; |                         continue; | ||||||
|                     } |                     } | ||||||
| @ -86870,7 +86871,8 @@ class CacheConfig { | |||||||
|                     hasher.update(JSON.stringify(packages)); |                     hasher.update(JSON.stringify(packages)); | ||||||
|                     parsedKeyFiles.push(cargo_lock); |                     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}`); |                     core.warning(`Error parsing Cargo.lock manifest, fallback to caching entire file: ${e}`); | ||||||
|                     keyFiles.push(cargo_lock); |                     keyFiles.push(cargo_lock); | ||||||
|                 } |                 } | ||||||
| @ -86887,12 +86889,14 @@ class CacheConfig { | |||||||
|         self.keyFiles = sort_and_uniq(keyFiles); |         self.keyFiles = sort_and_uniq(keyFiles); | ||||||
|         key += `-${lockHash}`; |         key += `-${lockHash}`; | ||||||
|         self.cacheKey = key; |         self.cacheKey = key; | ||||||
|         self.cachePaths = [ |         self.cachePaths = [external_path_default().join(CARGO_HOME, "registry"), external_path_default().join(CARGO_HOME, "git")]; | ||||||
|             external_path_default().join(CARGO_HOME, "registry"), |  | ||||||
|             external_path_default().join(CARGO_HOME, "git"), |  | ||||||
|         ]; |  | ||||||
|         if (self.cacheBin) { |         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"; |         const cacheTargets = core.getInput("cache-targets").toLowerCase() || "true"; | ||||||
|         if (cacheTargets === "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/vertexclique/kaos/blob/9876f6c890339741cc5be4b7cb9df72baa5a6d79/src/cargo.rs#L25
 | ||||||
|       // https://github.com/eupn/macrotest/blob/c4151a5f9f545942f4971980b5d264ebcd0b1d11/src/cargo.rs#L27
 |       // https://github.com/eupn/macrotest/blob/c4151a5f9f545942f4971980b5d264ebcd0b1d11/src/cargo.rs#L27
 | ||||||
|       cleanTargetDir(path.join(profileDir, "target"), packages, checkTimestamp); |       cleanTargetDir(path.join(profileDir, "target"), packages, checkTimestamp); | ||||||
|     } catch { } |     } catch {} | ||||||
|     try { |     try { | ||||||
|       // https://github.com/dtolnay/trybuild/blob/eec8ca6cb9b8f53d0caf1aa499d99df52cae8b40/src/cargo.rs#L50
 |       // https://github.com/dtolnay/trybuild/blob/eec8ca6cb9b8f53d0caf1aa499d99df52cae8b40/src/cargo.rs#L50
 | ||||||
|       cleanTargetDir(path.join(profileDir, "trybuild"), packages, checkTimestamp); |       cleanTargetDir(path.join(profileDir, "trybuild"), packages, checkTimestamp); | ||||||
|     } catch { } |     } catch {} | ||||||
| 
 | 
 | ||||||
|     // Delete everything else.
 |     // Delete everything else.
 | ||||||
|     await rmExcept(profileDir, new Set(["target", "trybuild"]), checkTimestamp); |     await rmExcept(profileDir, new Set(["target", "trybuild"]), checkTimestamp); | ||||||
| 
 | 
 | ||||||
|     return |     return; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   let keepProfile = new Set(["build", ".fingerprint", "deps"]); |   let keepProfile = new Set(["build", ".fingerprint", "deps"]); | ||||||
|  | |||||||
| @ -153,7 +153,7 @@ export class CacheConfig { | |||||||
| 
 | 
 | ||||||
|       const workspaceMembers = await workspace.getWorkspaceMembers(); |       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) { |       for (const cargo_manifest of cargo_manifests) { | ||||||
|         try { |         try { | ||||||
| @ -194,7 +194,8 @@ export class CacheConfig { | |||||||
|           hasher.update(JSON.stringify(parsed)); |           hasher.update(JSON.stringify(parsed)); | ||||||
| 
 | 
 | ||||||
|           parsedKeyFiles.push(cargo_manifest); |           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}`); |           core.warning(`Error parsing Cargo.toml manifest, fallback to caching entire file: ${e}`); | ||||||
|           keyFiles.push(cargo_manifest); |           keyFiles.push(cargo_manifest); | ||||||
|         } |         } | ||||||
| @ -209,7 +210,7 @@ export class CacheConfig { | |||||||
|           if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { |           if ((parsed.version !== 3 && parsed.version !== 4) || !("package" in parsed)) { | ||||||
|             // Fallback to caching them as regular file since this action
 |             // Fallback to caching them as regular file since this action
 | ||||||
|             // can only handle Cargo.lock format version 3
 |             // 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); |             keyFiles.push(cargo_lock); | ||||||
|             continue; |             continue; | ||||||
|           } |           } | ||||||
| @ -221,7 +222,8 @@ export class CacheConfig { | |||||||
|           hasher.update(JSON.stringify(packages)); |           hasher.update(JSON.stringify(packages)); | ||||||
| 
 | 
 | ||||||
|           parsedKeyFiles.push(cargo_lock); |           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}`); |           core.warning(`Error parsing Cargo.lock manifest, fallback to caching entire file: ${e}`); | ||||||
|           keyFiles.push(cargo_lock); |           keyFiles.push(cargo_lock); | ||||||
|         } |         } | ||||||
| @ -243,12 +245,14 @@ export class CacheConfig { | |||||||
|     key += `-${lockHash}`; |     key += `-${lockHash}`; | ||||||
|     self.cacheKey = key; |     self.cacheKey = key; | ||||||
| 
 | 
 | ||||||
|     self.cachePaths = [ |     self.cachePaths = [path.join(CARGO_HOME, "registry"), path.join(CARGO_HOME, "git")]; | ||||||
|       path.join(CARGO_HOME, "registry"), |  | ||||||
|       path.join(CARGO_HOME, "git"), |  | ||||||
|     ]; |  | ||||||
|     if (self.cacheBin) { |     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"; |     const cacheTargets = core.getInput("cache-targets").toLowerCase() || "true"; | ||||||
|     if (cacheTargets === "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:
 |     // Pass a copy of cachePaths to avoid mutating the original array as reported by:
 | ||||||
|     // https://github.com/actions/toolkit/pull/1378
 |     // https://github.com/actions/toolkit/pull/1378
 | ||||||
|     // TODO: remove this once the underlying bug is fixed.
 |     // TODO: remove this once the underlying bug is fixed.
 | ||||||
|     const restoreKey = await cacheProvider.cache.restoreCache( |     const restoreKey = await cacheProvider.cache.restoreCache(config.cachePaths.slice(), key, [config.restoreKey], { | ||||||
|       config.cachePaths.slice(), |       lookupOnly, | ||||||
|       key, |     }); | ||||||
|       [config.restoreKey], |  | ||||||
|       { lookupOnly } |  | ||||||
|     ); |  | ||||||
|     if (restoreKey) { |     if (restoreKey) { | ||||||
|       const match = restoreKey === key; |       const match = restoreKey === key; | ||||||
|       core.info( |       core.info(`${lookupOnly ? "Found" : "Restored from"} cache key "${restoreKey}" full match: ${match}.`); | ||||||
|         `${ |  | ||||||
|           lookupOnly ? "Found" : "Restored from" |  | ||||||
|         } cache key "${restoreKey}" full match: ${match}.` |  | ||||||
|       ); |  | ||||||
|       if (!match) { |       if (!match) { | ||||||
|         // pre-clean the target directory on cache mismatch
 |         // pre-clean the target directory on cache mismatch
 | ||||||
|         for (const workspace of config.workspaces) { |         for (const workspace of config.workspaces) { | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ const SAVE_TARGETS = new Set(["lib", "proc-macro"]); | |||||||
| export class Workspace { | export class Workspace { | ||||||
|   constructor(public root: string, public target: string) {} |   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 = []; |     let packages: Packages = []; | ||||||
|     try { |     try { | ||||||
|       core.debug(`collecting metadata for "${this.root}"`); |       core.debug(`collecting metadata for "${this.root}"`); | ||||||
| @ -29,11 +29,11 @@ export class Workspace { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public async getPackagesOutsideWorkspaceRoot(): Promise<Packages> { |   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> { |   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