Merge pull request #93 from gradle/dd/instrumented-jars-fix

Ensure all-or-nothing restore of cached instrumented-jars

Leaving the .lock and .receipt files lying around was causing issues when the actual jar files were not restored. Now the entire directory will either be missing, or completely restored.

Fixes #91
This commit is contained in:
Daz DeBoer authored and GitHub committed 2021-10-15 23:04:47 +02:00
commit 0eb5996567
8 files changed
+70 -41

No files matched your search

+16
View File
@@ -82,3 +82,19 @@ jobs:
build-root-directory: __tests__/samples/groovy-dsl
arguments: test --configuration-cache
cache-read-only: true
# Check that the build can run when no bundles are restored
no-bundles-restored:
needs: seed-build
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v2
- name: Execute Gradle build with no cache artifact bundles restored
uses: ./
with:
build-root-directory: __tests__/samples/groovy-dsl
arguments: test
cache-artifact-bundles: '[]'
cache-read-only: true
+10
View File
@@ -30,6 +30,16 @@ inputs:
description: Used to uniquely identify the current job invocation. Defaults to the matrix values for this job; this should not be overridden by users.
required: false
default: ${{ toJSON(matrix) }}
cache-artifact-bundles:
description: Names and patterns of artifact bundles to cache separately. For internal use only.
required: false
default: |
[
["generated-gradle-jars", "caches/*/generated-gradle-jars/*.jar"],
["wrapper-zips", "wrapper/dists/*/*/*.zip"],
["dependency-jars", "caches/modules-*/files-*/**/*.jar"],
["instrumented-jars", "caches/jars-*/*"]
]
outputs:
build-scan-url:
+1 -1
View File
@@ -1,2 +1,2 @@
require('./sourcemap-register.js');module.exports=function(e,t){"use strict";var n={};function __webpack_require__(t){if(n[t]){return n[t].exports}var r=n[t]={i:t,l:false,exports:{}};var i=true;try{e[t].call(r.exports,r,r.exports,__webpack_require__);i=false}finally{if(i)delete n[t]}r.l=true;return r.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(131)}return startup()}([,function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){if(r===undefined)r=n;Object.defineProperty(e,r,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,r){if(r===undefined)r=n;e[r]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))r(t,e,n);i(t,e);return t};var a=this&&this.__awaiter||function(e,t,n,r){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.findInPath=t.which=t.mkdirP=t.rmRF=t.mv=t.cp=void 0;const s=n(357);const c=o(n(129));const u=o(n(622));const l=n(669);const p=o(n(672));const m=l.promisify(c.exec);const d=l.promisify(c.execFile);function cp(e,t,n={}){return a(this,void 0,void 0,function*(){const{force:r,recursive:i,copySourceDirectory:o}=readCopyOptions(n);const a=(yield p.exists(t))?yield p.stat(t):null;if(a&&a.isFile()&&!r){return}const s=a&&a.isDirectory()&&o?u.join(t,u.basename(e)):t;if(!(yield p.exists(e))){throw new Error(`no such file or directory: ${e}`)}const c=yield p.stat(e);if(c.isDirectory()){if(!i){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,s,0,r)}}else{if(u.relative(e,s)===""){throw new Error(`'${s}' and '${e}' are the same file`)}yield copyFile(e,s,r)}})}t.cp=cp;function mv(e,t,n={}){return a(this,void 0,void 0,function*(){if(yield p.exists(t)){let r=true;if(yield p.isDirectory(t)){t=u.join(t,u.basename(e));r=yield p.exists(t)}if(r){if(n.force==null||n.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(u.dirname(t));yield p.rename(e,t)})}t.mv=mv;function rmRF(e){return a(this,void 0,void 0,function*(){if(p.IS_WINDOWS){if(/[*"<>|]/.test(e)){throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows')}try{const t=p.getCmdPath();if(yield p.isDirectory(e,true)){yield m(`${t} /s /c "rd /s /q "%inputPath%""`,{env:{inputPath:e}})}else{yield m(`${t} /s /c "del /f /a "%inputPath%""`,{env:{inputPath:e}})}}catch(e){if(e.code!=="ENOENT")throw e}try{yield p.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield p.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield d(`rm`,[`-rf`,`${e}`])}else{yield p.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return a(this,void 0,void 0,function*(){s.ok(e,"a path argument must be provided");yield p.mkdir(e,{recursive:true})})}t.mkdirP=mkdirP;function which(e,t){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}if(t){const t=yield which(e,false);if(!t){if(p.IS_WINDOWS){throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`)}else{throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`)}}return t}const n=yield findInPath(e);if(n&&n.length>0){return n[0]}return""})}t.which=which;function findInPath(e){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}const t=[];if(p.IS_WINDOWS&&process.env["PATHEXT"]){for(const e of process.env["PATHEXT"].split(u.delimiter)){if(e){t.push(e)}}}if(p.isRooted(e)){const n=yield p.tryGetExecutablePath(e,t);if(n){return[n]}return[]}if(e.includes(u.sep)){return[]}const n=[];if(process.env.PATH){for(const e of process.env.PATH.split(u.delimiter)){if(e){n.push(e)}}}const r=[];for(const i of n){const n=yield p.tryGetExecutablePath(u.join(i,e),t);if(n){r.push(n)}}return r})}t.findInPath=findInPath;function readCopyOptions(e){const t=e.force==null?true:e.force;const n=Boolean(e.recursive);const r=e.copySourceDirectory==null?true:Boolean(e.copySourceDirectory);return{force:t,recursive:n,copySourceDirectory:r}}function cpDirLine truncated
require('./sourcemap-register.js');module.exports=function(e,t){"use strict";var n={};function __webpack_require__(t){if(n[t]){return n[t].exports}var r=n[t]={i:t,l:false,exports:{}};var i=true;try{e[t].call(r.exports,r,r.exports,__webpack_require__);i=false}finally{if(i)delete n[t]}r.l=true;return r.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(131)}return startup()}([,function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){if(r===undefined)r=n;Object.defineProperty(e,r,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,r){if(r===undefined)r=n;e[r]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))r(t,e,n);i(t,e);return t};var a=this&&this.__awaiter||function(e,t,n,r){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.findInPath=t.which=t.mkdirP=t.rmRF=t.mv=t.cp=void 0;const s=n(357);const c=o(n(129));const u=o(n(622));const l=n(669);const p=o(n(672));const m=l.promisify(c.exec);const d=l.promisify(c.execFile);function cp(e,t,n={}){return a(this,void 0,void 0,function*(){const{force:r,recursive:i,copySourceDirectory:o}=readCopyOptions(n);const a=(yield p.exists(t))?yield p.stat(t):null;if(a&&a.isFile()&&!r){return}const s=a&&a.isDirectory()&&o?u.join(t,u.basename(e)):t;if(!(yield p.exists(e))){throw new Error(`no such file or directory: ${e}`)}const c=yield p.stat(e);if(c.isDirectory()){if(!i){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,s,0,r)}}else{if(u.relative(e,s)===""){throw new Error(`'${s}' and '${e}' are the same file`)}yield copyFile(e,s,r)}})}t.cp=cp;function mv(e,t,n={}){return a(this,void 0,void 0,function*(){if(yield p.exists(t)){let r=true;if(yield p.isDirectory(t)){t=u.join(t,u.basename(e));r=yield p.exists(t)}if(r){if(n.force==null||n.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(u.dirname(t));yield p.rename(e,t)})}t.mv=mv;function rmRF(e){return a(this,void 0,void 0,function*(){if(p.IS_WINDOWS){if(/[*"<>|]/.test(e)){throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows')}try{const t=p.getCmdPath();if(yield p.isDirectory(e,true)){yield m(`${t} /s /c "rd /s /q "%inputPath%""`,{env:{inputPath:e}})}else{yield m(`${t} /s /c "del /f /a "%inputPath%""`,{env:{inputPath:e}})}}catch(e){if(e.code!=="ENOENT")throw e}try{yield p.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield p.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield d(`rm`,[`-rf`,`${e}`])}else{yield p.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return a(this,void 0,void 0,function*(){s.ok(e,"a path argument must be provided");yield p.mkdir(e,{recursive:true})})}t.mkdirP=mkdirP;function which(e,t){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}if(t){const t=yield which(e,false);if(!t){if(p.IS_WINDOWS){throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`)}else{throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`)}}return t}const n=yield findInPath(e);if(n&&n.length>0){return n[0]}return""})}t.which=which;function findInPath(e){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}const t=[];if(p.IS_WINDOWS&&process.env["PATHEXT"]){for(const e of process.env["PATHEXT"].split(u.delimiter)){if(e){t.push(e)}}}if(p.isRooted(e)){const n=yield p.tryGetExecutablePath(e,t);if(n){return[n]}return[]}if(e.includes(u.sep)){return[]}const n=[];if(process.env.PATH){for(const e of process.env.PATH.split(u.delimiter)){if(e){n.push(e)}}}const r=[];for(const i of n){const n=yield p.tryGetExecutablePath(u.join(i,e),t);if(n){r.push(n)}}return r})}t.findInPath=findInPath;function readCopyOptions(e){const t=e.force==null?true:e.force;const n=Boolean(e.recursive);const r=e.copySourceDirectory==null?true:Boolean(e.copySourceDirectory);return{force:t,recursive:n,copySourceDirectory:r}}function cpDirLine truncated
//# sourceMappingURL=index.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sources":["/webpack/bootstrap","../node_modules/@actions/io/lib/io.js","../node_modules/@octokit/endpoint/node_modules/is-plain-object/dist/is-plain-object.js","../node_modules/@actions/exec/lib/toolrunner.js","../node_modules/wrappy/wrappy.js","../node_modules/@actions/cache/lib/internal/cacheUtils.js","../external \"tls\"","../(webpack)/ncc/@@notfound.js","../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../node_modules/@opentelemetry/api/build/src/api/propagation.js","../node_modules/@azure/core-http/node_modules/uuid/dist/nil.js","../node_modules/@actions/tool-cache/lib/manifest.js","../node_modules/once/once.js","../node_modules/xmlbuilder/lib/DocumentPosition.js","../node_modules/@opentelemetry/api/build/src/trace/trace_state.js","../node_modules/@azure/core-asynciterator-polyfill/dist-esm/index.js","../node_modules/@actions/core/lib/utils.js","../node_modules/uuid/v1.js","../external \"os\"","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/permuteDomain.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v5.js","../node_modules/asynckit/serial.js","../node_modules/minimatch/minimatch.js","../node_modules/@opentelemetry/api/build/src/trace/link.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern-helper.js","../node_modules/@actions/core/lib/file-command.js","../node_modules/@azure/core-http/node_modules/uuid/dist/version.js","../node_modules/@azure/abort-controller/dist/index.js","../node_modules/@actions/cache/lib/internal/cacheHttpClient.js","../node_modules/@opentelemetry/api/build/src/api/diag.js","../node_modules/@actions/github/lib/internal/utils.js","../external \"child_process\"","../src/main.ts","../node_modules/@opentelemetry/api/build/src/context/context.js","../node_modules/uuid/lib/rng.js","../node_modules/tunnel/lib/tunnel.js","../node_modules/@azure/core-tracing/node_modules/tslib/tslib.js","../node_modules/@opentelemetry/api/build/src/platform/node/globalThis.js","../node_modules/universalify/index.js","../node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","../node_modules/delayed-stream/lib/delayed_stream.js","../node_modules/asynckit/lib/iterate.js","../node_modules/@opentelemetry/api/build/src/common/Time.js","../src/build-scan-capture.ts","../node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js","../src/execution.ts","../node_modules/@azure/core-http/node_modules/uuid/dist/v1.js","../node_modules/@actions/github/lib/context.js","../node_modules/@azure/core-http/node_modules/uuid/dist/parse.js","../node_modules/xml2js/lib/bom.js","../external \"https\"","../external \"timers\"","../node_modules/@opentelemetry/api/build/src/trace/SpanOptions.js","../node_modules/@actions/http-client/auth.js","../node_modules/@azure/core-auth/dist/index.js","../node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js","../node_modules/@azure/core-http/node_modules/uuid/dist/regex.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v35.js","../node_modules/@azure/core-http/node_modules/uuid/dist/md5.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern.js","../node_modules/@actions/cache/lib/internal/downloadUtils.js","../node_modules/xmlbuilder/lib/XMLNode.js","../node_modules/@azure/logger/node_modules/tslib/tslib.js","../node_modules/@azure/core-tracing/dist/index.js","../node_modules/xmlbuilder/lib/XMLNodeList.js","../node_modules/semver/semver.js","../node_modules/@actions/glob/lib/glob.js","../src/provision.ts","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-glob-options-helper.js","../node_modules/@opentelemetry/api/build/src/common/Exception.js","../external \"buffer\"","../node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../node_modules/@actions/glob/lib/internal-globber.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v3.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/glob.js","../external \"string_decoder\"","../node_modules/brace-expansion/index.js","../node_modules/xmlbuilder/lib/index.js","../src/gradlew.ts","../node_modules/@actions/glob/lib/internal-match-kind.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/memstore.js","../node_modules/asynckit/index.js","../src/caches.ts","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/store.js","../node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js","../node_modules/xmlbuilder/lib/XMLStringWriter.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/pathMatch.js","../node_modules/xml2js/lib/processors.js","../external \"assert\"","../node_modules/before-after-hook/lib/register.js","../node_modules/@azure/storage-blob/dist/index.js","../node_modules/@actions/glob/lib/internal-path.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-search-state.js","../node_modules/@octokit/endpoint/dist-node/index.js","../node_modules/@azure/core-http/node_modules/tLine truncated
{"version":3,"sources":["/webpack/bootstrap","../node_modules/@actions/io/lib/io.js","../node_modules/@octokit/endpoint/node_modules/is-plain-object/dist/is-plain-object.js","../node_modules/@actions/exec/lib/toolrunner.js","../node_modules/wrappy/wrappy.js","../node_modules/@actions/cache/lib/internal/cacheUtils.js","../external \"tls\"","../(webpack)/ncc/@@notfound.js","../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../node_modules/@opentelemetry/api/build/src/api/propagation.js","../node_modules/@azure/core-http/node_modules/uuid/dist/nil.js","../node_modules/@actions/tool-cache/lib/manifest.js","../node_modules/once/once.js","../node_modules/xmlbuilder/lib/DocumentPosition.js","../node_modules/@opentelemetry/api/build/src/trace/trace_state.js","../node_modules/@azure/core-asynciterator-polyfill/dist-esm/index.js","../node_modules/@actions/core/lib/utils.js","../node_modules/uuid/v1.js","../external \"os\"","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/permuteDomain.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v5.js","../node_modules/asynckit/serial.js","../node_modules/minimatch/minimatch.js","../node_modules/@opentelemetry/api/build/src/trace/link.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern-helper.js","../node_modules/@actions/core/lib/file-command.js","../node_modules/@azure/core-http/node_modules/uuid/dist/version.js","../node_modules/@azure/abort-controller/dist/index.js","../node_modules/@actions/cache/lib/internal/cacheHttpClient.js","../node_modules/@opentelemetry/api/build/src/api/diag.js","../node_modules/@actions/github/lib/internal/utils.js","../external \"child_process\"","../src/main.ts","../node_modules/@opentelemetry/api/build/src/context/context.js","../node_modules/uuid/lib/rng.js","../node_modules/tunnel/lib/tunnel.js","../node_modules/@azure/core-tracing/node_modules/tslib/tslib.js","../node_modules/@opentelemetry/api/build/src/platform/node/globalThis.js","../node_modules/universalify/index.js","../node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","../node_modules/delayed-stream/lib/delayed_stream.js","../node_modules/asynckit/lib/iterate.js","../node_modules/@opentelemetry/api/build/src/common/Time.js","../src/build-scan-capture.ts","../node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js","../src/execution.ts","../node_modules/@azure/core-http/node_modules/uuid/dist/v1.js","../node_modules/@actions/github/lib/context.js","../node_modules/@azure/core-http/node_modules/uuid/dist/parse.js","../node_modules/xml2js/lib/bom.js","../external \"https\"","../external \"timers\"","../node_modules/@opentelemetry/api/build/src/trace/SpanOptions.js","../node_modules/@actions/http-client/auth.js","../node_modules/@azure/core-auth/dist/index.js","../node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js","../node_modules/@azure/core-http/node_modules/uuid/dist/regex.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v35.js","../node_modules/@azure/core-http/node_modules/uuid/dist/md5.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern.js","../node_modules/@actions/cache/lib/internal/downloadUtils.js","../node_modules/xmlbuilder/lib/XMLNode.js","../node_modules/@azure/logger/node_modules/tslib/tslib.js","../node_modules/@azure/core-tracing/dist/index.js","../node_modules/xmlbuilder/lib/XMLNodeList.js","../node_modules/semver/semver.js","../node_modules/@actions/glob/lib/glob.js","../src/provision.ts","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-glob-options-helper.js","../node_modules/@opentelemetry/api/build/src/common/Exception.js","../external \"buffer\"","../node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../node_modules/@actions/glob/lib/internal-globber.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v3.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/glob.js","../external \"string_decoder\"","../node_modules/brace-expansion/index.js","../node_modules/xmlbuilder/lib/index.js","../src/gradlew.ts","../node_modules/@actions/glob/lib/internal-match-kind.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/memstore.js","../node_modules/asynckit/index.js","../src/caches.ts","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/store.js","../node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js","../node_modules/xmlbuilder/lib/XMLStringWriter.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/pathMatch.js","../node_modules/xml2js/lib/processors.js","../external \"assert\"","../node_modules/before-after-hook/lib/register.js","../node_modules/@azure/storage-blob/dist/index.js","../node_modules/@actions/glob/lib/internal-path.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-search-state.js","../node_modules/@octokit/endpoint/dist-node/index.js","../node_modules/@azure/core-http/node_modules/tLine truncated
+1 -1
View File
@@ -1,2 +1,2 @@
require('./sourcemap-register.js');module.exports=function(e,t){"use strict";var n={};function __webpack_require__(t){if(n[t]){return n[t].exports}var r=n[t]={i:t,l:false,exports:{}};var i=true;try{e[t].call(r.exports,r,r.exports,__webpack_require__);i=false}finally{if(i)delete n[t]}r.l=true;return r.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(878)}return startup()}([,function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){if(r===undefined)r=n;Object.defineProperty(e,r,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,r){if(r===undefined)r=n;e[r]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))r(t,e,n);i(t,e);return t};var a=this&&this.__awaiter||function(e,t,n,r){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.findInPath=t.which=t.mkdirP=t.rmRF=t.mv=t.cp=void 0;const s=n(357);const c=o(n(129));const u=o(n(622));const l=n(669);const p=o(n(672));const m=l.promisify(c.exec);const d=l.promisify(c.execFile);function cp(e,t,n={}){return a(this,void 0,void 0,function*(){const{force:r,recursive:i,copySourceDirectory:o}=readCopyOptions(n);const a=(yield p.exists(t))?yield p.stat(t):null;if(a&&a.isFile()&&!r){return}const s=a&&a.isDirectory()&&o?u.join(t,u.basename(e)):t;if(!(yield p.exists(e))){throw new Error(`no such file or directory: ${e}`)}const c=yield p.stat(e);if(c.isDirectory()){if(!i){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,s,0,r)}}else{if(u.relative(e,s)===""){throw new Error(`'${s}' and '${e}' are the same file`)}yield copyFile(e,s,r)}})}t.cp=cp;function mv(e,t,n={}){return a(this,void 0,void 0,function*(){if(yield p.exists(t)){let r=true;if(yield p.isDirectory(t)){t=u.join(t,u.basename(e));r=yield p.exists(t)}if(r){if(n.force==null||n.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(u.dirname(t));yield p.rename(e,t)})}t.mv=mv;function rmRF(e){return a(this,void 0,void 0,function*(){if(p.IS_WINDOWS){if(/[*"<>|]/.test(e)){throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows')}try{const t=p.getCmdPath();if(yield p.isDirectory(e,true)){yield m(`${t} /s /c "rd /s /q "%inputPath%""`,{env:{inputPath:e}})}else{yield m(`${t} /s /c "del /f /a "%inputPath%""`,{env:{inputPath:e}})}}catch(e){if(e.code!=="ENOENT")throw e}try{yield p.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield p.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield d(`rm`,[`-rf`,`${e}`])}else{yield p.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return a(this,void 0,void 0,function*(){s.ok(e,"a path argument must be provided");yield p.mkdir(e,{recursive:true})})}t.mkdirP=mkdirP;function which(e,t){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}if(t){const t=yield which(e,false);if(!t){if(p.IS_WINDOWS){throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`)}else{throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`)}}return t}const n=yield findInPath(e);if(n&&n.length>0){return n[0]}return""})}t.which=which;function findInPath(e){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}const t=[];if(p.IS_WINDOWS&&process.env["PATHEXT"]){for(const e of process.env["PATHEXT"].split(u.delimiter)){if(e){t.push(e)}}}if(p.isRooted(e)){const n=yield p.tryGetExecutablePath(e,t);if(n){return[n]}return[]}if(e.includes(u.sep)){return[]}const n=[];if(process.env.PATH){for(const e of process.env.PATH.split(u.delimiter)){if(e){n.push(e)}}}const r=[];for(const i of n){const n=yield p.tryGetExecutablePath(u.join(i,e),t);if(n){r.push(n)}}return r})}t.findInPath=findInPath;function readCopyOptions(e){const t=e.force==null?true:e.force;const n=Boolean(e.recursive);const r=e.copySourceDirectory==null?true:Boolean(e.copySourceDirectory);return{force:t,recursive:n,copySourceDirectory:r}}function cpDirLine truncated
require('./sourcemap-register.js');module.exports=function(e,t){"use strict";var n={};function __webpack_require__(t){if(n[t]){return n[t].exports}var r=n[t]={i:t,l:false,exports:{}};var i=true;try{e[t].call(r.exports,r,r.exports,__webpack_require__);i=false}finally{if(i)delete n[t]}r.l=true;return r.exports}__webpack_require__.ab=__dirname+"/";function startup(){return __webpack_require__(878)}return startup()}([,function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){if(r===undefined)r=n;Object.defineProperty(e,r,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,r){if(r===undefined)r=n;e[r]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))r(t,e,n);i(t,e);return t};var a=this&&this.__awaiter||function(e,t,n,r){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.findInPath=t.which=t.mkdirP=t.rmRF=t.mv=t.cp=void 0;const s=n(357);const c=o(n(129));const u=o(n(622));const l=n(669);const p=o(n(672));const m=l.promisify(c.exec);const d=l.promisify(c.execFile);function cp(e,t,n={}){return a(this,void 0,void 0,function*(){const{force:r,recursive:i,copySourceDirectory:o}=readCopyOptions(n);const a=(yield p.exists(t))?yield p.stat(t):null;if(a&&a.isFile()&&!r){return}const s=a&&a.isDirectory()&&o?u.join(t,u.basename(e)):t;if(!(yield p.exists(e))){throw new Error(`no such file or directory: ${e}`)}const c=yield p.stat(e);if(c.isDirectory()){if(!i){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,s,0,r)}}else{if(u.relative(e,s)===""){throw new Error(`'${s}' and '${e}' are the same file`)}yield copyFile(e,s,r)}})}t.cp=cp;function mv(e,t,n={}){return a(this,void 0,void 0,function*(){if(yield p.exists(t)){let r=true;if(yield p.isDirectory(t)){t=u.join(t,u.basename(e));r=yield p.exists(t)}if(r){if(n.force==null||n.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(u.dirname(t));yield p.rename(e,t)})}t.mv=mv;function rmRF(e){return a(this,void 0,void 0,function*(){if(p.IS_WINDOWS){if(/[*"<>|]/.test(e)){throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows')}try{const t=p.getCmdPath();if(yield p.isDirectory(e,true)){yield m(`${t} /s /c "rd /s /q "%inputPath%""`,{env:{inputPath:e}})}else{yield m(`${t} /s /c "del /f /a "%inputPath%""`,{env:{inputPath:e}})}}catch(e){if(e.code!=="ENOENT")throw e}try{yield p.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield p.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield d(`rm`,[`-rf`,`${e}`])}else{yield p.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return a(this,void 0,void 0,function*(){s.ok(e,"a path argument must be provided");yield p.mkdir(e,{recursive:true})})}t.mkdirP=mkdirP;function which(e,t){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}if(t){const t=yield which(e,false);if(!t){if(p.IS_WINDOWS){throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`)}else{throw new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`)}}return t}const n=yield findInPath(e);if(n&&n.length>0){return n[0]}return""})}t.which=which;function findInPath(e){return a(this,void 0,void 0,function*(){if(!e){throw new Error("parameter 'tool' is required")}const t=[];if(p.IS_WINDOWS&&process.env["PATHEXT"]){for(const e of process.env["PATHEXT"].split(u.delimiter)){if(e){t.push(e)}}}if(p.isRooted(e)){const n=yield p.tryGetExecutablePath(e,t);if(n){return[n]}return[]}if(e.includes(u.sep)){return[]}const n=[];if(process.env.PATH){for(const e of process.env.PATH.split(u.delimiter)){if(e){n.push(e)}}}const r=[];for(const i of n){const n=yield p.tryGetExecutablePath(u.join(i,e),t);if(n){r.push(n)}}return r})}t.findInPath=findInPath;function readCopyOptions(e){const t=e.force==null?true:e.force;const n=Boolean(e.recursive);const r=e.copySourceDirectory==null?true:Boolean(e.copySourceDirectory);return{force:t,recursive:n,copySourceDirectory:r}}function cpDirLine truncated
//# sourceMappingURL=index.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sources":["/webpack/bootstrap","../node_modules/@actions/io/lib/io.js","../node_modules/@octokit/endpoint/node_modules/is-plain-object/dist/is-plain-object.js","../node_modules/@actions/exec/lib/toolrunner.js","../node_modules/wrappy/wrappy.js","../node_modules/@actions/cache/lib/internal/cacheUtils.js","../external \"tls\"","../(webpack)/ncc/@@notfound.js","../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../node_modules/@opentelemetry/api/build/src/api/propagation.js","../node_modules/@azure/core-http/node_modules/uuid/dist/nil.js","../node_modules/once/once.js","../node_modules/xmlbuilder/lib/DocumentPosition.js","../node_modules/@opentelemetry/api/build/src/trace/trace_state.js","../node_modules/@azure/core-asynciterator-polyfill/dist-esm/index.js","../node_modules/@actions/core/lib/utils.js","../node_modules/uuid/v1.js","../external \"os\"","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/permuteDomain.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v5.js","../node_modules/asynckit/serial.js","../node_modules/minimatch/minimatch.js","../node_modules/@opentelemetry/api/build/src/trace/link.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern-helper.js","../node_modules/@actions/core/lib/file-command.js","../node_modules/@azure/core-http/node_modules/uuid/dist/version.js","../node_modules/@azure/abort-controller/dist/index.js","../node_modules/@actions/cache/lib/internal/cacheHttpClient.js","../node_modules/@opentelemetry/api/build/src/api/diag.js","../node_modules/@actions/github/lib/internal/utils.js","../external \"child_process\"","../node_modules/@opentelemetry/api/build/src/context/context.js","../node_modules/uuid/lib/rng.js","../node_modules/tunnel/lib/tunnel.js","../node_modules/@azure/core-tracing/node_modules/tslib/tslib.js","../node_modules/@opentelemetry/api/build/src/platform/node/globalThis.js","../node_modules/universalify/index.js","../node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","../node_modules/delayed-stream/lib/delayed_stream.js","../node_modules/asynckit/lib/iterate.js","../node_modules/@opentelemetry/api/build/src/common/Time.js","../node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v1.js","../node_modules/@actions/github/lib/context.js","../node_modules/@azure/core-http/node_modules/uuid/dist/parse.js","../node_modules/xml2js/lib/bom.js","../external \"https\"","../external \"timers\"","../node_modules/@opentelemetry/api/build/src/trace/SpanOptions.js","../node_modules/@actions/http-client/auth.js","../node_modules/@azure/core-auth/dist/index.js","../node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js","../node_modules/@azure/core-http/node_modules/uuid/dist/regex.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v35.js","../node_modules/@azure/core-http/node_modules/uuid/dist/md5.js","../node_modules/@actions/cache/lib/internal/downloadUtils.js","../node_modules/xmlbuilder/lib/XMLNode.js","../node_modules/@azure/logger/node_modules/tslib/tslib.js","../node_modules/@azure/core-tracing/dist/index.js","../node_modules/xmlbuilder/lib/XMLNodeList.js","../node_modules/semver/semver.js","../node_modules/@actions/glob/lib/glob.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-glob-options-helper.js","../node_modules/@opentelemetry/api/build/src/common/Exception.js","../external \"buffer\"","../node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../node_modules/@actions/glob/lib/internal-globber.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v3.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/glob.js","../external \"string_decoder\"","../node_modules/brace-expansion/index.js","../node_modules/xmlbuilder/lib/index.js","../node_modules/@actions/glob/lib/internal-match-kind.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/memstore.js","../node_modules/asynckit/index.js","../src/caches.ts","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/store.js","../node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js","../node_modules/xmlbuilder/lib/XMLStringWriter.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/pathMatch.js","../node_modules/xml2js/lib/processors.js","../external \"assert\"","../node_modules/before-after-hook/lib/register.js","../node_modules/@azure/storage-blob/dist/index.js","../node_modules/@actions/glob/lib/internal-path.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-search-state.js","../node_modules/@octokit/endpoint/dist-node/index.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/cookie.js","../node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js","../node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js","../external \"stream\"","../external \"crypto\"","../node_modules/xmlbuilder/lLine truncated
{"version":3,"sources":["/webpack/bootstrap","../node_modules/@actions/io/lib/io.js","../node_modules/@octokit/endpoint/node_modules/is-plain-object/dist/is-plain-object.js","../node_modules/@actions/exec/lib/toolrunner.js","../node_modules/wrappy/wrappy.js","../node_modules/@actions/cache/lib/internal/cacheUtils.js","../external \"tls\"","../(webpack)/ncc/@@notfound.js","../node_modules/xmlbuilder/lib/XMLDTDNotation.js","../node_modules/@opentelemetry/api/build/src/api/propagation.js","../node_modules/@azure/core-http/node_modules/uuid/dist/nil.js","../node_modules/once/once.js","../node_modules/xmlbuilder/lib/DocumentPosition.js","../node_modules/@opentelemetry/api/build/src/trace/trace_state.js","../node_modules/@azure/core-asynciterator-polyfill/dist-esm/index.js","../node_modules/@actions/core/lib/utils.js","../node_modules/uuid/v1.js","../external \"os\"","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/permuteDomain.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v5.js","../node_modules/asynckit/serial.js","../node_modules/minimatch/minimatch.js","../node_modules/@opentelemetry/api/build/src/trace/link.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern-helper.js","../node_modules/@actions/core/lib/file-command.js","../node_modules/@azure/core-http/node_modules/uuid/dist/version.js","../node_modules/@azure/abort-controller/dist/index.js","../node_modules/@actions/cache/lib/internal/cacheHttpClient.js","../node_modules/@opentelemetry/api/build/src/api/diag.js","../node_modules/@actions/github/lib/internal/utils.js","../external \"child_process\"","../node_modules/@opentelemetry/api/build/src/context/context.js","../node_modules/uuid/lib/rng.js","../node_modules/tunnel/lib/tunnel.js","../node_modules/@azure/core-tracing/node_modules/tslib/tslib.js","../node_modules/@opentelemetry/api/build/src/platform/node/globalThis.js","../node_modules/universalify/index.js","../node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","../node_modules/delayed-stream/lib/delayed_stream.js","../node_modules/asynckit/lib/iterate.js","../node_modules/@opentelemetry/api/build/src/common/Time.js","../node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v1.js","../node_modules/@actions/github/lib/context.js","../node_modules/@azure/core-http/node_modules/uuid/dist/parse.js","../node_modules/xml2js/lib/bom.js","../external \"https\"","../external \"timers\"","../node_modules/@opentelemetry/api/build/src/trace/SpanOptions.js","../node_modules/@actions/http-client/auth.js","../node_modules/@azure/core-auth/dist/index.js","../node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js","../node_modules/@azure/core-http/node_modules/uuid/dist/regex.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v35.js","../node_modules/@azure/core-http/node_modules/uuid/dist/md5.js","../node_modules/@actions/cache/lib/internal/downloadUtils.js","../node_modules/xmlbuilder/lib/XMLNode.js","../node_modules/@azure/logger/node_modules/tslib/tslib.js","../node_modules/@azure/core-tracing/dist/index.js","../node_modules/xmlbuilder/lib/XMLNodeList.js","../node_modules/semver/semver.js","../node_modules/@actions/glob/lib/glob.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-glob-options-helper.js","../node_modules/@opentelemetry/api/build/src/common/Exception.js","../external \"buffer\"","../node_modules/@octokit/plugin-paginate-rest/dist-node/index.js","../node_modules/@actions/glob/lib/internal-globber.js","../node_modules/@azure/core-http/node_modules/uuid/dist/v3.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/glob.js","../external \"string_decoder\"","../node_modules/brace-expansion/index.js","../node_modules/xmlbuilder/lib/index.js","../node_modules/@actions/glob/lib/internal-match-kind.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/memstore.js","../node_modules/asynckit/index.js","../src/caches.ts","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/store.js","../node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js","../node_modules/xmlbuilder/lib/XMLStringWriter.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/pathMatch.js","../node_modules/xml2js/lib/processors.js","../external \"assert\"","../node_modules/before-after-hook/lib/register.js","../node_modules/@azure/storage-blob/dist/index.js","../node_modules/@actions/glob/lib/internal-path.js","../node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-search-state.js","../node_modules/@octokit/endpoint/dist-node/index.js","../node_modules/@azure/core-http/node_modules/tough-cookie/lib/cookie.js","../node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js","../node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js","../external \"stream\"","../external \"crypto\"","../node_modules/xmlbuilder/lLine truncated
+33 -35
View File
@@ -10,13 +10,6 @@ import {AbstractCache, hashFileNames, tryDelete} from './cache-utils'
// Which paths under Gradle User Home should be cached
const CACHE_PATH = ['caches', 'notifications']
const COMMON_ARTIFACT_CACHES = new Map([
['generated-gradle-jars', 'caches/*/generated-gradle-jars/*.jar'],
['wrapper-zips', 'wrapper/dists/*/*/*.zip'],
['dependency-jars', 'caches/modules-*/files-*/**/*.jar'],
['instrumented-jars', 'caches/jars-*/*/*.jar']
])
export class GradleUserHomeCache extends AbstractCache {
private gradleUserHome: string
@@ -27,14 +20,14 @@ export class GradleUserHomeCache extends AbstractCache {
async afterRestore(): Promise<void> {
await this.reportGradleUserHomeSize('as restored from cache')
await this.restoreCommonArtifacts()
await this.restoreArtifactBundles()
await this.reportGradleUserHomeSize('after restoring common artifacts')
}
private async restoreCommonArtifacts(): Promise<void> {
private async restoreArtifactBundles(): Promise<void> {
const processes: Promise<void>[] = []
for (const [bundle, pattern] of this.getCommonArtifactPaths()) {
const p = this.restoreCommonArtifactBundle(bundle, pattern)
for (const [bundle, pattern] of this.getArtifactBundles()) {
const p = this.restoreArtifactBundle(bundle, pattern)
// Run sequentially when debugging enabled
if (this.cacheDebuggingEnabled) {
await p
@@ -45,13 +38,13 @@ export class GradleUserHomeCache extends AbstractCache {
await Promise.all(processes)
}
private async restoreCommonArtifactBundle(
private async restoreArtifactBundle(
bundle: string,
artifactPath: string
): Promise<void> {
const cacheMetaFile = this.getCacheMetaFile(bundle)
if (fs.existsSync(cacheMetaFile)) {
const cacheKey = fs.readFileSync(cacheMetaFile, 'utf-8').trim()
const bundleMetaFile = this.getBundleMetaFile(bundle)
if (fs.existsSync(bundleMetaFile)) {
const cacheKey = fs.readFileSync(bundleMetaFile, 'utf-8').trim()
const restoreKey = await this.restoreCache([artifactPath], cacheKey)
if (restoreKey) {
core.info(
@@ -64,12 +57,12 @@ export class GradleUserHomeCache extends AbstractCache {
}
} else {
this.debug(
`No metafile found to restore ${bundle}: ${cacheMetaFile}`
`No metafile found to restore ${bundle}: ${bundleMetaFile}`
)
}
}
private getCacheMetaFile(name: string): string {
private getBundleMetaFile(name: string): string {
return path.resolve(
this.gradleUserHome,
'caches',
@@ -79,14 +72,14 @@ export class GradleUserHomeCache extends AbstractCache {
async beforeSave(): Promise<void> {
await this.reportGradleUserHomeSize('before saving common artifacts')
await this.saveCommonArtifacts()
await this.saveArtifactBundles()
await this.reportGradleUserHomeSize('after saving common artifacts')
}
private async saveCommonArtifacts(): Promise<void> {
private async saveArtifactBundles(): Promise<void> {
const processes: Promise<void>[] = []
for (const [bundle, pattern] of this.getCommonArtifactPaths()) {
const p = this.saveCommonArtifactBundle(bundle, pattern)
for (const [bundle, pattern] of this.getArtifactBundles()) {
const p = this.saveArtifactBundle(bundle, pattern)
// Run sequentially when debugging enabled
if (this.cacheDebuggingEnabled) {
await p
@@ -97,28 +90,28 @@ export class GradleUserHomeCache extends AbstractCache {
await Promise.all(processes)
}
private async saveCommonArtifactBundle(
private async saveArtifactBundle(
bundle: string,
artifactPath: string
): Promise<void> {
const cacheMetaFile = this.getCacheMetaFile(bundle)
const bundleMetaFile = this.getBundleMetaFile(bundle)
const globber = await glob.create(artifactPath)
const commonArtifactFiles = await globber.glob()
const bundleFiles = await globber.glob()
// Handle no matching files
if (commonArtifactFiles.length === 0) {
if (bundleFiles.length === 0) {
this.debug(`No files found to cache for ${bundle}`)
if (fs.existsSync(cacheMetaFile)) {
tryDelete(cacheMetaFile)
if (fs.existsSync(bundleMetaFile)) {
tryDelete(bundleMetaFile)
}
return
}
const previouslyRestoredKey = fs.existsSync(cacheMetaFile)
? fs.readFileSync(cacheMetaFile, 'utf-8').trim()
const previouslyRestoredKey = fs.existsSync(bundleMetaFile)
? fs.readFileSync(bundleMetaFile, 'utf-8').trim()
: ''
const cacheKey = this.createCacheKey(bundle, commonArtifactFiles)
const cacheKey = this.createCacheKey(bundle, bundleFiles)
if (previouslyRestoredKey === cacheKey) {
this.debug(
@@ -128,11 +121,11 @@ export class GradleUserHomeCache extends AbstractCache {
core.info(`Caching ${bundle} with cache key: ${cacheKey}`)
await this.saveCache([artifactPath], cacheKey)
this.debug(`Writing cache metafile: ${cacheMetaFile}`)
fs.writeFileSync(cacheMetaFile, cacheKey)
this.debug(`Writing cache metafile: ${bundleMetaFile}`)
fs.writeFileSync(bundleMetaFile, cacheKey)
}
for (const file of commonArtifactFiles) {
for (const file of bundleFiles) {
tryDelete(file)
}
}
@@ -170,9 +163,14 @@ export class GradleUserHomeCache extends AbstractCache {
return CACHE_PATH.map(x => path.resolve(this.gradleUserHome, x))
}
private getCommonArtifactPaths(): Map<string, string> {
private getArtifactBundles(): Map<string, string> {
const artifactBundleDefinition = core.getInput('cache-artifact-bundles')
this.debug(
`Using artifact bundle definition: ${artifactBundleDefinition}`
)
const artifactBundles = JSON.parse(artifactBundleDefinition)
return new Map(
Array.from(COMMON_ARTIFACT_CACHES, ([key, value]) => [
Array.from(artifactBundles, ([key, value]) => [
key,
path.resolve(this.gradleUserHome, value)
])
+7 -2
View File
@@ -62,12 +62,17 @@ export function hashFileNames(fileNames: string[]): string {
}
/**
* Attempt to delete a file, waiting to allow locks to be released
* Attempt to delete a file or directory, waiting to allow locks to be released
*/
export async function tryDelete(file: string): Promise<void> {
const stat = fs.lstatSync(file)
for (let count = 0; count < 3; count++) {
try {
fs.unlinkSync(file)
if (stat.isDirectory()) {
fs.rmdirSync(file, {recursive: true})
} else {
fs.unlinkSync(file)
}
return
} catch (error) {
if (count === 2) {