Compare commits
	
		
			26 Commits
		
	
	
		
			vsvipul/ch
			...
			bishal-pdM
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					619517aa29 | ||
| 
						 | 
					dc097e3bb9 | ||
| 
						 | 
					fb86cbf360 | ||
| 
						 | 
					a57932faba | ||
| 
						 | 
					04b13caea4 | ||
| 
						 | 
					941bc71a24 | ||
| 
						 | 
					08d8639046 | ||
| 
						 | 
					a2f324eeb7 | ||
| 
						 | 
					35f4702f6c | ||
| 
						 | 
					e050ebdd63 | ||
| 
						 | 
					0d47d164e9 | ||
| 
						 | 
					e2d614414f | ||
| 
						 | 
					532752012e | ||
| 
						 | 
					b26da1fc31 | ||
| 
						 | 
					ce61cc4d24 | ||
| 
						 | 
					268ae08cbc | ||
| 
						 | 
					b4ac56fa43 | ||
| 
						 | 
					24f54d74c0 | ||
| 
						 | 
					8d99052cbc | ||
| 
						 | 
					58a0402e7d | ||
| 
						 | 
					7920f570b8 | ||
| 
						 | 
					f8116c8945 | ||
| 
						 | 
					2a6cd14175 | ||
| 
						 | 
					651d82954c | ||
| 
						 | 
					cfa1b7695d | ||
| 
						 | 
					fa8856311e | 
							
								
								
									
										10
									
								
								.github/workflows/add-reviewer-pr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/add-reviewer-pr.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
name: Add Reviewer PR
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
  pull_request_target:
 | 
			
		||||
    types: [opened]
 | 
			
		||||
jobs:
 | 
			
		||||
  run-action:
 | 
			
		||||
@@ -11,6 +11,10 @@ jobs:
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "CURRENT=$(curl --request GET 'https://api.pagerduty.com/oncalls?include[]=users&schedule_ids[]=P5VG2BX&earliest=true' --header 'Authorization: Token token=${{ secrets.PAGERDUTY_TOKEN }}' --header 'Accept: application/vnd.pagerduty+json;version=2' --header 'Content-Type: application/json' | jq -r '.oncalls[].user.name')" >> $GITHUB_OUTPUT
 | 
			
		||||
    
 | 
			
		||||
    - name: add_reviewer
 | 
			
		||||
    - name: Request Review
 | 
			
		||||
      run: |
 | 
			
		||||
        curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN}}" https://api.github.com/repos/${{github.repository}}/pulls/${{ github.event.pull_request.number}}/requested_reviewers -d '{"reviewers":["${{steps.oncall.outputs.CURRENT}}"]}'
 | 
			
		||||
        curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN}}" https://api.github.com/repos/${{github.repository}}/pulls/${{ github.event.pull_request.number}}/requested_reviewers -d '{"reviewers":["${{steps.oncall.outputs.CURRENT}}"]}'
 | 
			
		||||
        
 | 
			
		||||
    - name: Add Assignee
 | 
			
		||||
      run: |
 | 
			
		||||
        curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN}}" https://api.github.com/repos/${{github.repository}}/issues/${{ github.event.pull_request.number}}/assignees -d '{"assignees":["${{steps.oncall.outputs.CURRENT}}"]}'    
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
								
							@@ -27,6 +27,7 @@ jobs:
 | 
			
		||||
        uses: actions/setup-node@v3
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: 16.x
 | 
			
		||||
          cache: npm
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: npm ci
 | 
			
		||||
      - name: Rebuild the dist/ directory
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							@@ -25,17 +25,7 @@ jobs:
 | 
			
		||||
      uses: actions/setup-node@v3
 | 
			
		||||
      with:
 | 
			
		||||
        node-version: 16.x
 | 
			
		||||
    - name: Determine npm cache directory
 | 
			
		||||
      id: npm-cache
 | 
			
		||||
      run: |
 | 
			
		||||
        echo "::set-output name=dir::$(npm config get cache)"
 | 
			
		||||
    - name: Restore npm cache
 | 
			
		||||
      uses: actions/cache@v3
 | 
			
		||||
      with:
 | 
			
		||||
        path: ${{ steps.npm-cache.outputs.dir }}
 | 
			
		||||
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
 | 
			
		||||
        restore-keys: |
 | 
			
		||||
          ${{ runner.os }}-node-
 | 
			
		||||
        cache: npm
 | 
			
		||||
    - run: npm ci
 | 
			
		||||
    - name: Prettier Format Check
 | 
			
		||||
      run: npm run format-check
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										177
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										177
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							@@ -1892,10 +1892,10 @@ function serial(list, iterator, callback)
 | 
			
		||||
module.exports = minimatch
 | 
			
		||||
minimatch.Minimatch = Minimatch
 | 
			
		||||
 | 
			
		||||
var path = { sep: '/' }
 | 
			
		||||
try {
 | 
			
		||||
  path = __webpack_require__(622)
 | 
			
		||||
} catch (er) {}
 | 
			
		||||
var path = (function () { try { return __webpack_require__(622) } catch (e) {}}()) || {
 | 
			
		||||
  sep: '/'
 | 
			
		||||
}
 | 
			
		||||
minimatch.sep = path.sep
 | 
			
		||||
 | 
			
		||||
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
 | 
			
		||||
var expand = __webpack_require__(306)
 | 
			
		||||
@@ -1947,43 +1947,64 @@ function filter (pattern, options) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function ext (a, b) {
 | 
			
		||||
  a = a || {}
 | 
			
		||||
  b = b || {}
 | 
			
		||||
  var t = {}
 | 
			
		||||
  Object.keys(b).forEach(function (k) {
 | 
			
		||||
    t[k] = b[k]
 | 
			
		||||
  })
 | 
			
		||||
  Object.keys(a).forEach(function (k) {
 | 
			
		||||
    t[k] = a[k]
 | 
			
		||||
  })
 | 
			
		||||
  Object.keys(b).forEach(function (k) {
 | 
			
		||||
    t[k] = b[k]
 | 
			
		||||
  })
 | 
			
		||||
  return t
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minimatch.defaults = function (def) {
 | 
			
		||||
  if (!def || !Object.keys(def).length) return minimatch
 | 
			
		||||
  if (!def || typeof def !== 'object' || !Object.keys(def).length) {
 | 
			
		||||
    return minimatch
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var orig = minimatch
 | 
			
		||||
 | 
			
		||||
  var m = function minimatch (p, pattern, options) {
 | 
			
		||||
    return orig.minimatch(p, pattern, ext(def, options))
 | 
			
		||||
    return orig(p, pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.Minimatch = function Minimatch (pattern, options) {
 | 
			
		||||
    return new orig.Minimatch(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
  m.Minimatch.defaults = function defaults (options) {
 | 
			
		||||
    return orig.defaults(ext(def, options)).Minimatch
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.filter = function filter (pattern, options) {
 | 
			
		||||
    return orig.filter(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.defaults = function defaults (options) {
 | 
			
		||||
    return orig.defaults(ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.makeRe = function makeRe (pattern, options) {
 | 
			
		||||
    return orig.makeRe(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.braceExpand = function braceExpand (pattern, options) {
 | 
			
		||||
    return orig.braceExpand(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.match = function (list, pattern, options) {
 | 
			
		||||
    return orig.match(list, pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return m
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Minimatch.defaults = function (def) {
 | 
			
		||||
  if (!def || !Object.keys(def).length) return Minimatch
 | 
			
		||||
  return minimatch.defaults(def).Minimatch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function minimatch (p, pattern, options) {
 | 
			
		||||
  if (typeof pattern !== 'string') {
 | 
			
		||||
    throw new TypeError('glob pattern string required')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  if (!options) options = {}
 | 
			
		||||
 | 
			
		||||
@@ -1992,9 +2013,6 @@ function minimatch (p, pattern, options) {
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // "" only matches ""
 | 
			
		||||
  if (pattern.trim() === '') return p === ''
 | 
			
		||||
 | 
			
		||||
  return new Minimatch(pattern, options).match(p)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2003,15 +2021,14 @@ function Minimatch (pattern, options) {
 | 
			
		||||
    return new Minimatch(pattern, options)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (typeof pattern !== 'string') {
 | 
			
		||||
    throw new TypeError('glob pattern string required')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  if (!options) options = {}
 | 
			
		||||
 | 
			
		||||
  pattern = pattern.trim()
 | 
			
		||||
 | 
			
		||||
  // windows support: need to use /, not \
 | 
			
		||||
  if (path.sep !== '/') {
 | 
			
		||||
  if (!options.allowWindowsEscape && path.sep !== '/') {
 | 
			
		||||
    pattern = pattern.split(path.sep).join('/')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -2022,6 +2039,7 @@ function Minimatch (pattern, options) {
 | 
			
		||||
  this.negate = false
 | 
			
		||||
  this.comment = false
 | 
			
		||||
  this.empty = false
 | 
			
		||||
  this.partial = !!options.partial
 | 
			
		||||
 | 
			
		||||
  // make the set of regexps etc.
 | 
			
		||||
  this.make()
 | 
			
		||||
@@ -2031,9 +2049,6 @@ Minimatch.prototype.debug = function () {}
 | 
			
		||||
 | 
			
		||||
Minimatch.prototype.make = make
 | 
			
		||||
function make () {
 | 
			
		||||
  // don't do it more than once.
 | 
			
		||||
  if (this._made) return
 | 
			
		||||
 | 
			
		||||
  var pattern = this.pattern
 | 
			
		||||
  var options = this.options
 | 
			
		||||
 | 
			
		||||
@@ -2053,7 +2068,7 @@ function make () {
 | 
			
		||||
  // step 2: expand braces
 | 
			
		||||
  var set = this.globSet = this.braceExpand()
 | 
			
		||||
 | 
			
		||||
  if (options.debug) this.debug = console.error
 | 
			
		||||
  if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }
 | 
			
		||||
 | 
			
		||||
  this.debug(this.pattern, set)
 | 
			
		||||
 | 
			
		||||
@@ -2133,12 +2148,11 @@ function braceExpand (pattern, options) {
 | 
			
		||||
  pattern = typeof pattern === 'undefined'
 | 
			
		||||
    ? this.pattern : pattern
 | 
			
		||||
 | 
			
		||||
  if (typeof pattern === 'undefined') {
 | 
			
		||||
    throw new TypeError('undefined pattern')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  if (options.nobrace ||
 | 
			
		||||
    !pattern.match(/\{.*\}/)) {
 | 
			
		||||
  // Thanks to Yeting Li <https://github.com/yetingli> for
 | 
			
		||||
  // improving this regexp to avoid a ReDOS vulnerability.
 | 
			
		||||
  if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
 | 
			
		||||
    // shortcut. no need to expand.
 | 
			
		||||
    return [pattern]
 | 
			
		||||
  }
 | 
			
		||||
@@ -2146,6 +2160,17 @@ function braceExpand (pattern, options) {
 | 
			
		||||
  return expand(pattern)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var MAX_PATTERN_LENGTH = 1024 * 64
 | 
			
		||||
var assertValidPattern = function (pattern) {
 | 
			
		||||
  if (typeof pattern !== 'string') {
 | 
			
		||||
    throw new TypeError('invalid pattern')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (pattern.length > MAX_PATTERN_LENGTH) {
 | 
			
		||||
    throw new TypeError('pattern is too long')
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// parse a component of the expanded set.
 | 
			
		||||
// At this point, no pattern may contain "/" in it
 | 
			
		||||
// so we're going to return a 2d array, where each entry is the full
 | 
			
		||||
@@ -2160,14 +2185,17 @@ function braceExpand (pattern, options) {
 | 
			
		||||
Minimatch.prototype.parse = parse
 | 
			
		||||
var SUBPARSE = {}
 | 
			
		||||
function parse (pattern, isSub) {
 | 
			
		||||
  if (pattern.length > 1024 * 64) {
 | 
			
		||||
    throw new TypeError('pattern is too long')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  var options = this.options
 | 
			
		||||
 | 
			
		||||
  // shortcuts
 | 
			
		||||
  if (!options.noglobstar && pattern === '**') return GLOBSTAR
 | 
			
		||||
  if (pattern === '**') {
 | 
			
		||||
    if (!options.noglobstar)
 | 
			
		||||
      return GLOBSTAR
 | 
			
		||||
    else
 | 
			
		||||
      pattern = '*'
 | 
			
		||||
  }
 | 
			
		||||
  if (pattern === '') return ''
 | 
			
		||||
 | 
			
		||||
  var re = ''
 | 
			
		||||
@@ -2223,10 +2251,12 @@ function parse (pattern, isSub) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (c) {
 | 
			
		||||
      case '/':
 | 
			
		||||
      /* istanbul ignore next */
 | 
			
		||||
      case '/': {
 | 
			
		||||
        // completely not allowed, even escaped.
 | 
			
		||||
        // Should already be path-split by now.
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      case '\\':
 | 
			
		||||
        clearStateChar()
 | 
			
		||||
@@ -2345,25 +2375,23 @@ function parse (pattern, isSub) {
 | 
			
		||||
 | 
			
		||||
        // handle the case where we left a class open.
 | 
			
		||||
        // "[z-a]" is valid, equivalent to "\[z-a\]"
 | 
			
		||||
        if (inClass) {
 | 
			
		||||
          // split where the last [ was, make sure we don't have
 | 
			
		||||
          // an invalid re. if so, re-walk the contents of the
 | 
			
		||||
          // would-be class to re-translate any characters that
 | 
			
		||||
          // were passed through as-is
 | 
			
		||||
          // TODO: It would probably be faster to determine this
 | 
			
		||||
          // without a try/catch and a new RegExp, but it's tricky
 | 
			
		||||
          // to do safely.  For now, this is safe and works.
 | 
			
		||||
          var cs = pattern.substring(classStart + 1, i)
 | 
			
		||||
          try {
 | 
			
		||||
            RegExp('[' + cs + ']')
 | 
			
		||||
          } catch (er) {
 | 
			
		||||
            // not a valid class!
 | 
			
		||||
            var sp = this.parse(cs, SUBPARSE)
 | 
			
		||||
            re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
 | 
			
		||||
            hasMagic = hasMagic || sp[1]
 | 
			
		||||
            inClass = false
 | 
			
		||||
            continue
 | 
			
		||||
          }
 | 
			
		||||
        // split where the last [ was, make sure we don't have
 | 
			
		||||
        // an invalid re. if so, re-walk the contents of the
 | 
			
		||||
        // would-be class to re-translate any characters that
 | 
			
		||||
        // were passed through as-is
 | 
			
		||||
        // TODO: It would probably be faster to determine this
 | 
			
		||||
        // without a try/catch and a new RegExp, but it's tricky
 | 
			
		||||
        // to do safely.  For now, this is safe and works.
 | 
			
		||||
        var cs = pattern.substring(classStart + 1, i)
 | 
			
		||||
        try {
 | 
			
		||||
          RegExp('[' + cs + ']')
 | 
			
		||||
        } catch (er) {
 | 
			
		||||
          // not a valid class!
 | 
			
		||||
          var sp = this.parse(cs, SUBPARSE)
 | 
			
		||||
          re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
 | 
			
		||||
          hasMagic = hasMagic || sp[1]
 | 
			
		||||
          inClass = false
 | 
			
		||||
          continue
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // finish up the class.
 | 
			
		||||
@@ -2447,9 +2475,7 @@ function parse (pattern, isSub) {
 | 
			
		||||
  // something that could conceivably capture a dot
 | 
			
		||||
  var addPatternStart = false
 | 
			
		||||
  switch (re.charAt(0)) {
 | 
			
		||||
    case '.':
 | 
			
		||||
    case '[':
 | 
			
		||||
    case '(': addPatternStart = true
 | 
			
		||||
    case '[': case '.': case '(': addPatternStart = true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Hack to work around lack of negative lookbehind in JS
 | 
			
		||||
@@ -2511,7 +2537,7 @@ function parse (pattern, isSub) {
 | 
			
		||||
  var flags = options.nocase ? 'i' : ''
 | 
			
		||||
  try {
 | 
			
		||||
    var regExp = new RegExp('^' + re + '$', flags)
 | 
			
		||||
  } catch (er) {
 | 
			
		||||
  } catch (er) /* istanbul ignore next - should be impossible */ {
 | 
			
		||||
    // If it was an invalid regular expression, then it can't match
 | 
			
		||||
    // anything.  This trick looks for a character after the end of
 | 
			
		||||
    // the string, which is of course impossible, except in multi-line
 | 
			
		||||
@@ -2569,7 +2595,7 @@ function makeRe () {
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    this.regexp = new RegExp(re, flags)
 | 
			
		||||
  } catch (ex) {
 | 
			
		||||
  } catch (ex) /* istanbul ignore next - should be impossible */ {
 | 
			
		||||
    this.regexp = false
 | 
			
		||||
  }
 | 
			
		||||
  return this.regexp
 | 
			
		||||
@@ -2587,8 +2613,8 @@ minimatch.match = function (list, pattern, options) {
 | 
			
		||||
  return list
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Minimatch.prototype.match = match
 | 
			
		||||
function match (f, partial) {
 | 
			
		||||
Minimatch.prototype.match = function match (f, partial) {
 | 
			
		||||
  if (typeof partial === 'undefined') partial = this.partial
 | 
			
		||||
  this.debug('match', f, this.pattern)
 | 
			
		||||
  // short-circuit in the case of busted things.
 | 
			
		||||
  // comments, etc.
 | 
			
		||||
@@ -2670,6 +2696,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
 | 
			
		||||
    // should be impossible.
 | 
			
		||||
    // some invalid regexp stuff in the set.
 | 
			
		||||
    /* istanbul ignore if */
 | 
			
		||||
    if (p === false) return false
 | 
			
		||||
 | 
			
		||||
    if (p === GLOBSTAR) {
 | 
			
		||||
@@ -2743,6 +2770,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
      // no match was found.
 | 
			
		||||
      // However, in partial mode, we can't say this is necessarily over.
 | 
			
		||||
      // If there's more *pattern* left, then
 | 
			
		||||
      /* istanbul ignore if */
 | 
			
		||||
      if (partial) {
 | 
			
		||||
        // ran out of file
 | 
			
		||||
        this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
 | 
			
		||||
@@ -2756,11 +2784,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
    // patterns with magic have been turned into regexps.
 | 
			
		||||
    var hit
 | 
			
		||||
    if (typeof p === 'string') {
 | 
			
		||||
      if (options.nocase) {
 | 
			
		||||
        hit = f.toLowerCase() === p.toLowerCase()
 | 
			
		||||
      } else {
 | 
			
		||||
        hit = f === p
 | 
			
		||||
      }
 | 
			
		||||
      hit = f === p
 | 
			
		||||
      this.debug('string match', p, f, hit)
 | 
			
		||||
    } else {
 | 
			
		||||
      hit = f.match(p)
 | 
			
		||||
@@ -2791,16 +2815,16 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
    // this is ok if we're doing the match as part of
 | 
			
		||||
    // a glob fs traversal.
 | 
			
		||||
    return partial
 | 
			
		||||
  } else if (pi === pl) {
 | 
			
		||||
  } else /* istanbul ignore else */ if (pi === pl) {
 | 
			
		||||
    // ran out of pattern, still have file left.
 | 
			
		||||
    // this is only acceptable if we're on the very last
 | 
			
		||||
    // empty segment of a file with a trailing slash.
 | 
			
		||||
    // a/* should match a/b/
 | 
			
		||||
    var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
 | 
			
		||||
    return emptyFileEnd
 | 
			
		||||
    return (fi === fl - 1) && (file[fi] === '')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // should be unreachable.
 | 
			
		||||
  /* istanbul ignore next */
 | 
			
		||||
  throw new Error('wtf?')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -38465,17 +38489,16 @@ function getInputAsInt(name, options) {
 | 
			
		||||
}
 | 
			
		||||
exports.getInputAsInt = getInputAsInt;
 | 
			
		||||
function isCacheFeatureAvailable() {
 | 
			
		||||
    if (!cache.isFeatureAvailable()) {
 | 
			
		||||
        if (isGhes()) {
 | 
			
		||||
            logWarning(`Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
 | 
			
		||||
    if (cache.isFeatureAvailable()) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    if (isGhes()) {
 | 
			
		||||
        logWarning(`Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
 | 
			
		||||
Otherwise please upgrade to GHES version >= 3.5 and If you are also using Github Connect, please unretire the actions/cache namespace before upgrade (see https://docs.github.com/en/enterprise-server@3.5/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect#automatic-retirement-of-namespaces-for-actions-accessed-on-githubcom)`);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            logWarning("An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions.");
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
    logWarning("An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions.");
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										177
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										177
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							@@ -1892,10 +1892,10 @@ function serial(list, iterator, callback)
 | 
			
		||||
module.exports = minimatch
 | 
			
		||||
minimatch.Minimatch = Minimatch
 | 
			
		||||
 | 
			
		||||
var path = { sep: '/' }
 | 
			
		||||
try {
 | 
			
		||||
  path = __webpack_require__(622)
 | 
			
		||||
} catch (er) {}
 | 
			
		||||
var path = (function () { try { return __webpack_require__(622) } catch (e) {}}()) || {
 | 
			
		||||
  sep: '/'
 | 
			
		||||
}
 | 
			
		||||
minimatch.sep = path.sep
 | 
			
		||||
 | 
			
		||||
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
 | 
			
		||||
var expand = __webpack_require__(306)
 | 
			
		||||
@@ -1947,43 +1947,64 @@ function filter (pattern, options) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function ext (a, b) {
 | 
			
		||||
  a = a || {}
 | 
			
		||||
  b = b || {}
 | 
			
		||||
  var t = {}
 | 
			
		||||
  Object.keys(b).forEach(function (k) {
 | 
			
		||||
    t[k] = b[k]
 | 
			
		||||
  })
 | 
			
		||||
  Object.keys(a).forEach(function (k) {
 | 
			
		||||
    t[k] = a[k]
 | 
			
		||||
  })
 | 
			
		||||
  Object.keys(b).forEach(function (k) {
 | 
			
		||||
    t[k] = b[k]
 | 
			
		||||
  })
 | 
			
		||||
  return t
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minimatch.defaults = function (def) {
 | 
			
		||||
  if (!def || !Object.keys(def).length) return minimatch
 | 
			
		||||
  if (!def || typeof def !== 'object' || !Object.keys(def).length) {
 | 
			
		||||
    return minimatch
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var orig = minimatch
 | 
			
		||||
 | 
			
		||||
  var m = function minimatch (p, pattern, options) {
 | 
			
		||||
    return orig.minimatch(p, pattern, ext(def, options))
 | 
			
		||||
    return orig(p, pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.Minimatch = function Minimatch (pattern, options) {
 | 
			
		||||
    return new orig.Minimatch(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
  m.Minimatch.defaults = function defaults (options) {
 | 
			
		||||
    return orig.defaults(ext(def, options)).Minimatch
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.filter = function filter (pattern, options) {
 | 
			
		||||
    return orig.filter(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.defaults = function defaults (options) {
 | 
			
		||||
    return orig.defaults(ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.makeRe = function makeRe (pattern, options) {
 | 
			
		||||
    return orig.makeRe(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.braceExpand = function braceExpand (pattern, options) {
 | 
			
		||||
    return orig.braceExpand(pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m.match = function (list, pattern, options) {
 | 
			
		||||
    return orig.match(list, pattern, ext(def, options))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return m
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Minimatch.defaults = function (def) {
 | 
			
		||||
  if (!def || !Object.keys(def).length) return Minimatch
 | 
			
		||||
  return minimatch.defaults(def).Minimatch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function minimatch (p, pattern, options) {
 | 
			
		||||
  if (typeof pattern !== 'string') {
 | 
			
		||||
    throw new TypeError('glob pattern string required')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  if (!options) options = {}
 | 
			
		||||
 | 
			
		||||
@@ -1992,9 +2013,6 @@ function minimatch (p, pattern, options) {
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // "" only matches ""
 | 
			
		||||
  if (pattern.trim() === '') return p === ''
 | 
			
		||||
 | 
			
		||||
  return new Minimatch(pattern, options).match(p)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2003,15 +2021,14 @@ function Minimatch (pattern, options) {
 | 
			
		||||
    return new Minimatch(pattern, options)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (typeof pattern !== 'string') {
 | 
			
		||||
    throw new TypeError('glob pattern string required')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  if (!options) options = {}
 | 
			
		||||
 | 
			
		||||
  pattern = pattern.trim()
 | 
			
		||||
 | 
			
		||||
  // windows support: need to use /, not \
 | 
			
		||||
  if (path.sep !== '/') {
 | 
			
		||||
  if (!options.allowWindowsEscape && path.sep !== '/') {
 | 
			
		||||
    pattern = pattern.split(path.sep).join('/')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -2022,6 +2039,7 @@ function Minimatch (pattern, options) {
 | 
			
		||||
  this.negate = false
 | 
			
		||||
  this.comment = false
 | 
			
		||||
  this.empty = false
 | 
			
		||||
  this.partial = !!options.partial
 | 
			
		||||
 | 
			
		||||
  // make the set of regexps etc.
 | 
			
		||||
  this.make()
 | 
			
		||||
@@ -2031,9 +2049,6 @@ Minimatch.prototype.debug = function () {}
 | 
			
		||||
 | 
			
		||||
Minimatch.prototype.make = make
 | 
			
		||||
function make () {
 | 
			
		||||
  // don't do it more than once.
 | 
			
		||||
  if (this._made) return
 | 
			
		||||
 | 
			
		||||
  var pattern = this.pattern
 | 
			
		||||
  var options = this.options
 | 
			
		||||
 | 
			
		||||
@@ -2053,7 +2068,7 @@ function make () {
 | 
			
		||||
  // step 2: expand braces
 | 
			
		||||
  var set = this.globSet = this.braceExpand()
 | 
			
		||||
 | 
			
		||||
  if (options.debug) this.debug = console.error
 | 
			
		||||
  if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }
 | 
			
		||||
 | 
			
		||||
  this.debug(this.pattern, set)
 | 
			
		||||
 | 
			
		||||
@@ -2133,12 +2148,11 @@ function braceExpand (pattern, options) {
 | 
			
		||||
  pattern = typeof pattern === 'undefined'
 | 
			
		||||
    ? this.pattern : pattern
 | 
			
		||||
 | 
			
		||||
  if (typeof pattern === 'undefined') {
 | 
			
		||||
    throw new TypeError('undefined pattern')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  if (options.nobrace ||
 | 
			
		||||
    !pattern.match(/\{.*\}/)) {
 | 
			
		||||
  // Thanks to Yeting Li <https://github.com/yetingli> for
 | 
			
		||||
  // improving this regexp to avoid a ReDOS vulnerability.
 | 
			
		||||
  if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
 | 
			
		||||
    // shortcut. no need to expand.
 | 
			
		||||
    return [pattern]
 | 
			
		||||
  }
 | 
			
		||||
@@ -2146,6 +2160,17 @@ function braceExpand (pattern, options) {
 | 
			
		||||
  return expand(pattern)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var MAX_PATTERN_LENGTH = 1024 * 64
 | 
			
		||||
var assertValidPattern = function (pattern) {
 | 
			
		||||
  if (typeof pattern !== 'string') {
 | 
			
		||||
    throw new TypeError('invalid pattern')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (pattern.length > MAX_PATTERN_LENGTH) {
 | 
			
		||||
    throw new TypeError('pattern is too long')
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// parse a component of the expanded set.
 | 
			
		||||
// At this point, no pattern may contain "/" in it
 | 
			
		||||
// so we're going to return a 2d array, where each entry is the full
 | 
			
		||||
@@ -2160,14 +2185,17 @@ function braceExpand (pattern, options) {
 | 
			
		||||
Minimatch.prototype.parse = parse
 | 
			
		||||
var SUBPARSE = {}
 | 
			
		||||
function parse (pattern, isSub) {
 | 
			
		||||
  if (pattern.length > 1024 * 64) {
 | 
			
		||||
    throw new TypeError('pattern is too long')
 | 
			
		||||
  }
 | 
			
		||||
  assertValidPattern(pattern)
 | 
			
		||||
 | 
			
		||||
  var options = this.options
 | 
			
		||||
 | 
			
		||||
  // shortcuts
 | 
			
		||||
  if (!options.noglobstar && pattern === '**') return GLOBSTAR
 | 
			
		||||
  if (pattern === '**') {
 | 
			
		||||
    if (!options.noglobstar)
 | 
			
		||||
      return GLOBSTAR
 | 
			
		||||
    else
 | 
			
		||||
      pattern = '*'
 | 
			
		||||
  }
 | 
			
		||||
  if (pattern === '') return ''
 | 
			
		||||
 | 
			
		||||
  var re = ''
 | 
			
		||||
@@ -2223,10 +2251,12 @@ function parse (pattern, isSub) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (c) {
 | 
			
		||||
      case '/':
 | 
			
		||||
      /* istanbul ignore next */
 | 
			
		||||
      case '/': {
 | 
			
		||||
        // completely not allowed, even escaped.
 | 
			
		||||
        // Should already be path-split by now.
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      case '\\':
 | 
			
		||||
        clearStateChar()
 | 
			
		||||
@@ -2345,25 +2375,23 @@ function parse (pattern, isSub) {
 | 
			
		||||
 | 
			
		||||
        // handle the case where we left a class open.
 | 
			
		||||
        // "[z-a]" is valid, equivalent to "\[z-a\]"
 | 
			
		||||
        if (inClass) {
 | 
			
		||||
          // split where the last [ was, make sure we don't have
 | 
			
		||||
          // an invalid re. if so, re-walk the contents of the
 | 
			
		||||
          // would-be class to re-translate any characters that
 | 
			
		||||
          // were passed through as-is
 | 
			
		||||
          // TODO: It would probably be faster to determine this
 | 
			
		||||
          // without a try/catch and a new RegExp, but it's tricky
 | 
			
		||||
          // to do safely.  For now, this is safe and works.
 | 
			
		||||
          var cs = pattern.substring(classStart + 1, i)
 | 
			
		||||
          try {
 | 
			
		||||
            RegExp('[' + cs + ']')
 | 
			
		||||
          } catch (er) {
 | 
			
		||||
            // not a valid class!
 | 
			
		||||
            var sp = this.parse(cs, SUBPARSE)
 | 
			
		||||
            re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
 | 
			
		||||
            hasMagic = hasMagic || sp[1]
 | 
			
		||||
            inClass = false
 | 
			
		||||
            continue
 | 
			
		||||
          }
 | 
			
		||||
        // split where the last [ was, make sure we don't have
 | 
			
		||||
        // an invalid re. if so, re-walk the contents of the
 | 
			
		||||
        // would-be class to re-translate any characters that
 | 
			
		||||
        // were passed through as-is
 | 
			
		||||
        // TODO: It would probably be faster to determine this
 | 
			
		||||
        // without a try/catch and a new RegExp, but it's tricky
 | 
			
		||||
        // to do safely.  For now, this is safe and works.
 | 
			
		||||
        var cs = pattern.substring(classStart + 1, i)
 | 
			
		||||
        try {
 | 
			
		||||
          RegExp('[' + cs + ']')
 | 
			
		||||
        } catch (er) {
 | 
			
		||||
          // not a valid class!
 | 
			
		||||
          var sp = this.parse(cs, SUBPARSE)
 | 
			
		||||
          re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
 | 
			
		||||
          hasMagic = hasMagic || sp[1]
 | 
			
		||||
          inClass = false
 | 
			
		||||
          continue
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // finish up the class.
 | 
			
		||||
@@ -2447,9 +2475,7 @@ function parse (pattern, isSub) {
 | 
			
		||||
  // something that could conceivably capture a dot
 | 
			
		||||
  var addPatternStart = false
 | 
			
		||||
  switch (re.charAt(0)) {
 | 
			
		||||
    case '.':
 | 
			
		||||
    case '[':
 | 
			
		||||
    case '(': addPatternStart = true
 | 
			
		||||
    case '[': case '.': case '(': addPatternStart = true
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Hack to work around lack of negative lookbehind in JS
 | 
			
		||||
@@ -2511,7 +2537,7 @@ function parse (pattern, isSub) {
 | 
			
		||||
  var flags = options.nocase ? 'i' : ''
 | 
			
		||||
  try {
 | 
			
		||||
    var regExp = new RegExp('^' + re + '$', flags)
 | 
			
		||||
  } catch (er) {
 | 
			
		||||
  } catch (er) /* istanbul ignore next - should be impossible */ {
 | 
			
		||||
    // If it was an invalid regular expression, then it can't match
 | 
			
		||||
    // anything.  This trick looks for a character after the end of
 | 
			
		||||
    // the string, which is of course impossible, except in multi-line
 | 
			
		||||
@@ -2569,7 +2595,7 @@ function makeRe () {
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    this.regexp = new RegExp(re, flags)
 | 
			
		||||
  } catch (ex) {
 | 
			
		||||
  } catch (ex) /* istanbul ignore next - should be impossible */ {
 | 
			
		||||
    this.regexp = false
 | 
			
		||||
  }
 | 
			
		||||
  return this.regexp
 | 
			
		||||
@@ -2587,8 +2613,8 @@ minimatch.match = function (list, pattern, options) {
 | 
			
		||||
  return list
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Minimatch.prototype.match = match
 | 
			
		||||
function match (f, partial) {
 | 
			
		||||
Minimatch.prototype.match = function match (f, partial) {
 | 
			
		||||
  if (typeof partial === 'undefined') partial = this.partial
 | 
			
		||||
  this.debug('match', f, this.pattern)
 | 
			
		||||
  // short-circuit in the case of busted things.
 | 
			
		||||
  // comments, etc.
 | 
			
		||||
@@ -2670,6 +2696,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
 | 
			
		||||
    // should be impossible.
 | 
			
		||||
    // some invalid regexp stuff in the set.
 | 
			
		||||
    /* istanbul ignore if */
 | 
			
		||||
    if (p === false) return false
 | 
			
		||||
 | 
			
		||||
    if (p === GLOBSTAR) {
 | 
			
		||||
@@ -2743,6 +2770,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
      // no match was found.
 | 
			
		||||
      // However, in partial mode, we can't say this is necessarily over.
 | 
			
		||||
      // If there's more *pattern* left, then
 | 
			
		||||
      /* istanbul ignore if */
 | 
			
		||||
      if (partial) {
 | 
			
		||||
        // ran out of file
 | 
			
		||||
        this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
 | 
			
		||||
@@ -2756,11 +2784,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
    // patterns with magic have been turned into regexps.
 | 
			
		||||
    var hit
 | 
			
		||||
    if (typeof p === 'string') {
 | 
			
		||||
      if (options.nocase) {
 | 
			
		||||
        hit = f.toLowerCase() === p.toLowerCase()
 | 
			
		||||
      } else {
 | 
			
		||||
        hit = f === p
 | 
			
		||||
      }
 | 
			
		||||
      hit = f === p
 | 
			
		||||
      this.debug('string match', p, f, hit)
 | 
			
		||||
    } else {
 | 
			
		||||
      hit = f.match(p)
 | 
			
		||||
@@ -2791,16 +2815,16 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
 | 
			
		||||
    // this is ok if we're doing the match as part of
 | 
			
		||||
    // a glob fs traversal.
 | 
			
		||||
    return partial
 | 
			
		||||
  } else if (pi === pl) {
 | 
			
		||||
  } else /* istanbul ignore else */ if (pi === pl) {
 | 
			
		||||
    // ran out of pattern, still have file left.
 | 
			
		||||
    // this is only acceptable if we're on the very last
 | 
			
		||||
    // empty segment of a file with a trailing slash.
 | 
			
		||||
    // a/* should match a/b/
 | 
			
		||||
    var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
 | 
			
		||||
    return emptyFileEnd
 | 
			
		||||
    return (fi === fl - 1) && (file[fi] === '')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // should be unreachable.
 | 
			
		||||
  /* istanbul ignore next */
 | 
			
		||||
  throw new Error('wtf?')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -38465,17 +38489,16 @@ function getInputAsInt(name, options) {
 | 
			
		||||
}
 | 
			
		||||
exports.getInputAsInt = getInputAsInt;
 | 
			
		||||
function isCacheFeatureAvailable() {
 | 
			
		||||
    if (!cache.isFeatureAvailable()) {
 | 
			
		||||
        if (isGhes()) {
 | 
			
		||||
            logWarning(`Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
 | 
			
		||||
    if (cache.isFeatureAvailable()) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    if (isGhes()) {
 | 
			
		||||
        logWarning(`Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
 | 
			
		||||
Otherwise please upgrade to GHES version >= 3.5 and If you are also using Github Connect, please unretire the actions/cache namespace before upgrade (see https://docs.github.com/en/enterprise-server@3.5/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect#automatic-retirement-of-namespaces-for-actions-accessed-on-githubcom)`);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            logWarning("An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions.");
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
    logWarning("An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions.");
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								examples.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								examples.md
									
									
									
									
									
								
							@@ -309,14 +309,29 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba
 | 
			
		||||
For npm, cache files are stored in `~/.npm` on Posix, or `~\AppData\npm-cache` on Windows, but it's possible to use `npm config get cache` to find the path on any platform. See [the npm docs](https://docs.npmjs.com/cli/cache#cache) for more details.
 | 
			
		||||
 | 
			
		||||
If using `npm config` to retrieve the cache directory, ensure you run [actions/setup-node](https://github.com/actions/setup-node) first to ensure your `npm` version is correct.
 | 
			
		||||
After [deprecation](https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/) of save-state and set-output commands, the correct way to set output is using `${GITHUB_OUTPUT}`. For linux, we can use `${GITHUB_OUTPUT}` whereas for windows we need to use `${env:GITHUB_OUTPUT}` due to two different default shells in these two different OS ie `bash` and `pwsh` respectively.
 | 
			
		||||
 | 
			
		||||
>Note: It is not recommended to cache `node_modules`, as it can break across Node versions and won't work with `npm ci`
 | 
			
		||||
 | 
			
		||||
### **Get npm cache directory using same shell**
 | 
			
		||||
### Bash shell
 | 
			
		||||
```yaml
 | 
			
		||||
- name: Get npm cache directory
 | 
			
		||||
  id: npm-cache-dir
 | 
			
		||||
  run: |
 | 
			
		||||
    echo "::set-output name=dir::$(npm config get cache)"
 | 
			
		||||
  shell: bash
 | 
			
		||||
  run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### PWSH shell
 | 
			
		||||
```yaml
 | 
			
		||||
- name: Get npm cache directory
 | 
			
		||||
  id: npm-cache-dir
 | 
			
		||||
  shell: pwsh
 | 
			
		||||
  run: echo "dir=$(npm config get cache)" >> ${env:GITHUB_OUTPUT}
 | 
			
		||||
```
 | 
			
		||||
`Get npm cache directory` step can then be used with `actions/cache` as shown below
 | 
			
		||||
 | 
			
		||||
```yaml
 | 
			
		||||
- uses: actions/cache@v3
 | 
			
		||||
  id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true'
 | 
			
		||||
  with:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6516
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6516
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										24
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								package.json
									
									
									
									
									
								
							@@ -29,23 +29,23 @@
 | 
			
		||||
    "@actions/io": "^1.1.2"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/jest": "^27.5.0",
 | 
			
		||||
    "@types/jest": "^27.5.2",
 | 
			
		||||
    "@types/nock": "^11.1.0",
 | 
			
		||||
    "@types/node": "^16.11.33",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^5.22.0",
 | 
			
		||||
    "@typescript-eslint/parser": "^5.22.0",
 | 
			
		||||
    "@types/node": "^16.18.3",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^5.45.0",
 | 
			
		||||
    "@typescript-eslint/parser": "^5.45.0",
 | 
			
		||||
    "@zeit/ncc": "^0.20.5",
 | 
			
		||||
    "eslint": "^8.14.0",
 | 
			
		||||
    "eslint": "^8.28.0",
 | 
			
		||||
    "eslint-config-prettier": "^8.5.0",
 | 
			
		||||
    "eslint-plugin-import": "^2.26.0",
 | 
			
		||||
    "eslint-plugin-jest": "^26.1.5",
 | 
			
		||||
    "eslint-plugin-prettier": "^4.0.0",
 | 
			
		||||
    "eslint-plugin-jest": "^26.9.0",
 | 
			
		||||
    "eslint-plugin-prettier": "^4.2.1",
 | 
			
		||||
    "eslint-plugin-simple-import-sort": "^7.0.0",
 | 
			
		||||
    "jest": "^28.0.3",
 | 
			
		||||
    "jest": "^28.1.3",
 | 
			
		||||
    "jest-circus": "^27.5.1",
 | 
			
		||||
    "nock": "^13.2.4",
 | 
			
		||||
    "prettier": "^2.6.2",
 | 
			
		||||
    "ts-jest": "^28.0.2",
 | 
			
		||||
    "typescript": "^4.6.4"
 | 
			
		||||
    "nock": "^13.2.9",
 | 
			
		||||
    "prettier": "^2.8.0",
 | 
			
		||||
    "ts-jest": "^28.0.8",
 | 
			
		||||
    "typescript": "^4.9.3"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -77,19 +77,20 @@ export function getInputAsInt(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isCacheFeatureAvailable(): boolean {
 | 
			
		||||
    if (!cache.isFeatureAvailable()) {
 | 
			
		||||
        if (isGhes()) {
 | 
			
		||||
            logWarning(
 | 
			
		||||
                `Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
 | 
			
		||||
    if (cache.isFeatureAvailable()) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (isGhes()) {
 | 
			
		||||
        logWarning(
 | 
			
		||||
            `Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
 | 
			
		||||
Otherwise please upgrade to GHES version >= 3.5 and If you are also using Github Connect, please unretire the actions/cache namespace before upgrade (see https://docs.github.com/en/enterprise-server@3.5/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect#automatic-retirement-of-namespaces-for-actions-accessed-on-githubcom)`
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            logWarning(
 | 
			
		||||
                "An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions."
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        );
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
    logWarning(
 | 
			
		||||
        "An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions."
 | 
			
		||||
    );
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ A cache today is immutable and cannot be updated. But some use cases require the
 | 
			
		||||
          restore-keys: |
 | 
			
		||||
            primes-${{ runner.os }}
 | 
			
		||||
  ```          
 | 
			
		||||
  Please note that this will create a new cache on every run and hence will consume the cache [quota](#cache-limits).
 | 
			
		||||
  Please note that this will create a new cache on every run and hence will consume the cache [quota](./README.md#cache-limits).
 | 
			
		||||
  
 | 
			
		||||
## Use cache across feature branches
 | 
			
		||||
Reusing cache across feature branches is not allowed today to provide cache [isolation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#restrictions-for-accessing-a-cache). However if both feature branches are from the default branch, a good way to achieve this is to ensure that the default branch has a cache. This cache will then be consumable by both feature branches.
 | 
			
		||||
@@ -80,4 +80,4 @@ jobs:
 | 
			
		||||
        env:
 | 
			
		||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
```
 | 
			
		||||
</details>
 | 
			
		||||
</details>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user