mirror of
				https://gitea.com/actions/setup-node.git
				synced 2025-10-29 15:52:42 +08:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			v4.0.4
			...
			update-mem
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8cd066d2e7 | ||
| 
						 | 
					fc5dc8bbe4 | ||
| 
						 | 
					8819aae165 | ||
| 
						 | 
					ba2f076a9c | ||
| 
						 | 
					d5f102c3e3 | 
							
								
								
									
										58
									
								
								.licenses/npm/lodash.memoize.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								.licenses/npm/lodash.memoize.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
---
 | 
			
		||||
name: lodash.memoize
 | 
			
		||||
version: 4.1.2
 | 
			
		||||
type: npm
 | 
			
		||||
summary: The lodash method `_.memoize` exported as a module.
 | 
			
		||||
homepage: https://lodash.com/
 | 
			
		||||
license: mit
 | 
			
		||||
licenses:
 | 
			
		||||
- sources: LICENSE
 | 
			
		||||
  text: |
 | 
			
		||||
    Copyright jQuery Foundation and other contributors <https://jquery.org/>
 | 
			
		||||
 | 
			
		||||
    Based on Underscore.js, copyright Jeremy Ashkenas,
 | 
			
		||||
    DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
 | 
			
		||||
 | 
			
		||||
    This software consists of voluntary contributions made by many
 | 
			
		||||
    individuals. For exact contribution history, see the revision history
 | 
			
		||||
    available at https://github.com/lodash/lodash
 | 
			
		||||
 | 
			
		||||
    The following license applies to all parts of this software except as
 | 
			
		||||
    documented below:
 | 
			
		||||
 | 
			
		||||
    ====
 | 
			
		||||
 | 
			
		||||
    Permission is hereby granted, free of charge, to any person obtaining
 | 
			
		||||
    a copy of this software and associated documentation files (the
 | 
			
		||||
    "Software"), to deal in the Software without restriction, including
 | 
			
		||||
    without limitation the rights to use, copy, modify, merge, publish,
 | 
			
		||||
    distribute, sublicense, and/or sell copies of the Software, and to
 | 
			
		||||
    permit persons to whom the Software is furnished to do so, subject to
 | 
			
		||||
    the following conditions:
 | 
			
		||||
 | 
			
		||||
    The above copyright notice and this permission notice shall be
 | 
			
		||||
    included in all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
			
		||||
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | 
			
		||||
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
			
		||||
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 | 
			
		||||
    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 | 
			
		||||
    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 | 
			
		||||
    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
    ====
 | 
			
		||||
 | 
			
		||||
    Copyright and related rights for sample code are waived via CC0. Sample
 | 
			
		||||
    code is defined as all source code displayed within the prose of the
 | 
			
		||||
    documentation.
 | 
			
		||||
 | 
			
		||||
    CC0: http://creativecommons.org/publicdomain/zero/1.0/
 | 
			
		||||
 | 
			
		||||
    ====
 | 
			
		||||
 | 
			
		||||
    Files located in the node_modules and vendor directories are externally
 | 
			
		||||
    maintained libraries used by this software which have their own
 | 
			
		||||
    licenses; we recommend you read them, as their terms may differ from the
 | 
			
		||||
    terms above.
 | 
			
		||||
notices: []
 | 
			
		||||
@@ -6,8 +6,7 @@ import {
 | 
			
		||||
  PackageManagerInfo,
 | 
			
		||||
  isCacheFeatureAvailable,
 | 
			
		||||
  supportedPackageManagers,
 | 
			
		||||
  getCommandOutput,
 | 
			
		||||
  resetProjectDirectoriesMemoized
 | 
			
		||||
  getProjectDirectoriesFromCacheDependencyPath
 | 
			
		||||
} from '../src/cache-utils';
 | 
			
		||||
import fs from 'fs';
 | 
			
		||||
import * as cacheUtils from '../src/cache-utils';
 | 
			
		||||
@@ -123,7 +122,7 @@ describe('cache-utils', () => {
 | 
			
		||||
          MockGlobber.create(['/foo', '/bar'])
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      resetProjectDirectoriesMemoized();
 | 
			
		||||
      getProjectDirectoriesFromCacheDependencyPath.cache.clear?.();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    afterEach(() => {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1574
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1574
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3198
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3198
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										42
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										42
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -17,10 +17,12 @@
 | 
			
		||||
        "@actions/http-client": "^1.0.11",
 | 
			
		||||
        "@actions/io": "^1.0.2",
 | 
			
		||||
        "@actions/tool-cache": "^1.5.4",
 | 
			
		||||
        "lodash.memoize": "^4.1.2",
 | 
			
		||||
        "semver": "^6.3.1"
 | 
			
		||||
      },
 | 
			
		||||
      "devDependencies": {
 | 
			
		||||
        "@types/jest": "^27.0.2",
 | 
			
		||||
        "@types/lodash.memoize": "^4.1.7",
 | 
			
		||||
        "@types/node": "^16.11.25",
 | 
			
		||||
        "@types/semver": "^6.0.0",
 | 
			
		||||
        "@typescript-eslint/eslint-plugin": "^5.54.0",
 | 
			
		||||
@@ -1648,6 +1650,21 @@
 | 
			
		||||
      "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/lodash": {
 | 
			
		||||
      "version": "4.14.197",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz",
 | 
			
		||||
      "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/lodash.memoize": {
 | 
			
		||||
      "version": "4.1.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.7.tgz",
 | 
			
		||||
      "integrity": "sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/lodash": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/node": {
 | 
			
		||||
      "version": "16.11.25",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.25.tgz",
 | 
			
		||||
@@ -4972,6 +4989,11 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
 | 
			
		||||
      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.memoize": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/lodash.merge": {
 | 
			
		||||
      "version": "4.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
 | 
			
		||||
@@ -7780,6 +7802,21 @@
 | 
			
		||||
      "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@types/lodash": {
 | 
			
		||||
      "version": "4.14.197",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz",
 | 
			
		||||
      "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@types/lodash.memoize": {
 | 
			
		||||
      "version": "4.1.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.7.tgz",
 | 
			
		||||
      "integrity": "sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@types/lodash": "*"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@types/node": {
 | 
			
		||||
      "version": "16.11.25",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.25.tgz",
 | 
			
		||||
@@ -10244,6 +10281,11 @@
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
 | 
			
		||||
      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.memoize": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.merge": {
 | 
			
		||||
      "version": "4.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
 | 
			
		||||
 
 | 
			
		||||
@@ -33,10 +33,12 @@
 | 
			
		||||
    "@actions/http-client": "^1.0.11",
 | 
			
		||||
    "@actions/io": "^1.0.2",
 | 
			
		||||
    "@actions/tool-cache": "^1.5.4",
 | 
			
		||||
    "lodash.memoize": "^4.1.2",
 | 
			
		||||
    "semver": "^6.3.1"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/jest": "^27.0.2",
 | 
			
		||||
    "@types/lodash.memoize": "^4.1.7",
 | 
			
		||||
    "@types/node": "^16.11.25",
 | 
			
		||||
    "@types/semver": "^6.0.0",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^5.54.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ import * as core from '@actions/core';
 | 
			
		||||
import * as exec from '@actions/exec';
 | 
			
		||||
import * as cache from '@actions/cache';
 | 
			
		||||
import * as glob from '@actions/glob';
 | 
			
		||||
import memoize from 'lodash.memoize';
 | 
			
		||||
import path from 'path';
 | 
			
		||||
import fs from 'fs';
 | 
			
		||||
import {unique} from './util';
 | 
			
		||||
@@ -111,50 +112,38 @@ export const getPackageManagerInfo = async (packageManager: string) => {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Expands (converts) the string input `cache-dependency-path` to list of directories that
 | 
			
		||||
 * may be project roots
 | 
			
		||||
 *
 | 
			
		||||
 * getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
 | 
			
		||||
 *  - first through `getCacheDirectories`
 | 
			
		||||
 *  - second from `repoHasYarn3ManagedCache`
 | 
			
		||||
 *
 | 
			
		||||
 *  it contains expensive IO operation and thus should be memoized
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
let projectDirectoriesMemoized: string[] | null = null;
 | 
			
		||||
/**
 | 
			
		||||
 * unit test must reset memoized variables
 | 
			
		||||
 */
 | 
			
		||||
export const resetProjectDirectoriesMemoized = () =>
 | 
			
		||||
  (projectDirectoriesMemoized = null);
 | 
			
		||||
/**
 | 
			
		||||
 * Expands (converts) the string input `cache-dependency-path` to list of directories that
 | 
			
		||||
 * may be project roots
 | 
			
		||||
 * it contains expensive IO operation and thus should be memoized
 | 
			
		||||
 *
 | 
			
		||||
 * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
 | 
			
		||||
 *                              expected to be the result of `core.getInput('cache-dependency-path')`
 | 
			
		||||
 * @return list of directories and possible
 | 
			
		||||
 * @return list of directories
 | 
			
		||||
 */
 | 
			
		||||
const getProjectDirectoriesFromCacheDependencyPath = async (
 | 
			
		||||
  cacheDependencyPath: string
 | 
			
		||||
): Promise<string[]> => {
 | 
			
		||||
  if (projectDirectoriesMemoized !== null) {
 | 
			
		||||
    return projectDirectoriesMemoized;
 | 
			
		||||
export const getProjectDirectoriesFromCacheDependencyPath = memoize(
 | 
			
		||||
  async (cacheDependencyPath: string): Promise<string[]> => {
 | 
			
		||||
    const globber = await glob.create(cacheDependencyPath);
 | 
			
		||||
    const cacheDependenciesPaths = await globber.glob();
 | 
			
		||||
 | 
			
		||||
    const existingDirectories: string[] = cacheDependenciesPaths
 | 
			
		||||
      .map(path.dirname)
 | 
			
		||||
      .filter(unique())
 | 
			
		||||
      .map(dirName => fs.realpathSync(dirName))
 | 
			
		||||
      .filter(directory => fs.lstatSync(directory).isDirectory());
 | 
			
		||||
 | 
			
		||||
    if (!existingDirectories.length)
 | 
			
		||||
      core.warning(
 | 
			
		||||
        `No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
    return existingDirectories;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const globber = await glob.create(cacheDependencyPath);
 | 
			
		||||
  const cacheDependenciesPaths = await globber.glob();
 | 
			
		||||
 | 
			
		||||
  const existingDirectories: string[] = cacheDependenciesPaths
 | 
			
		||||
    .map(path.dirname)
 | 
			
		||||
    .filter(unique())
 | 
			
		||||
    .map(dirName => fs.realpathSync(dirName))
 | 
			
		||||
    .filter(directory => fs.lstatSync(directory).isDirectory());
 | 
			
		||||
 | 
			
		||||
  if (!existingDirectories.length)
 | 
			
		||||
    core.warning(
 | 
			
		||||
      `No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
  projectDirectoriesMemoized = existingDirectories;
 | 
			
		||||
  return existingDirectories;
 | 
			
		||||
};
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Finds the cache directories configured for the repo if cache-dependency-path is not empty
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user