diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..d5a7b14 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,6 @@ +// eslint-disable-next-line no-undef +module.exports = { + extends: [ + "@redhat-actions/eslint-config", + ], +}; diff --git a/.github/workflows/verify-push.yaml b/.github/workflows/verify-push.yaml index b4668eb..e281400 100644 --- a/.github/workflows/verify-push.yaml +++ b/.github/workflows/verify-push.yaml @@ -1,10 +1,10 @@ # This workflow will perform a test whenever there # is some change in code done to ensure that the changes # are not buggy and we are getting the desired output. -name: Test Push -on: [ push, pull_request, workflow_dispatch ] +name: Test Push without image +on: [ push, workflow_dispatch ] env: - IMAGE_NAME: hello-world + IMAGE_NAME: myimage IMAGE_REGISTRY: quay.io IMAGE_TAG: latest @@ -17,9 +17,12 @@ jobs: - name: Checkout Push to Registry action uses: actions/checkout@v2 - # Pull hello-world image to push in next step - - name: Pull Hello world image - run: docker pull ${{ env.IMAGE_NAME }} + - name: Build Image using Docker + run: | + docker build -t ${{ env.IMAGE_NAME }}:latest -< diff --git a/dist/index.js b/dist/index.js index 784efe4..af302b0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,2 +1,2 @@ -require('./sourcemap-register.js');module.exports=(()=>{"use strict";var e={351:function(e,t,i){var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const r=n(i(87));const s=i(278);function issueCommand(e,t,i){const n=new Command(e,t,i);process.stdout.write(n.toString()+r.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const o="::";class Command{constructor(e,t,i){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=i}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const i in this.properties){if(this.properties.hasOwnProperty(i)){const n=this.properties[i];if(n){if(t){t=false}else{e+=","}e+=`${i}=${escapeProperty(n)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},186:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=i(351);const o=i(717);const c=i(278);const u=r(i(87));const l=r(i(622));var d;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(d=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const i=c.toCommandValue(t);process.env[e]=i;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${u.EOL}${i}${u.EOL}${t}`;o.issueCommand("ENV",n)}else{s.issueCommand("set-env",{name:e},i)}}t.exportVariable=exportVariable;function setSecret(e){s.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){o.issueCommand("PATH",e)}else{s.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${l.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const i=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!i){throw new Error(`Input required and not supplied: ${e}`)}return i.trim()}t.getInput=getInput;function setOutput(e,t){s.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){s.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=d.Failure;error(e)}t.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}t.isDebug=isDebug;function debug(e){s.issueCommand("debug",{},e)}t.debug=debug;function error(e){s.issue("error",e instanceof Error?e.toString():e)}t.error=error;function warning(e){s.issue("warning",e instanceof Error?e.toString():e)}t.warning=warning;function info(e){process.stdout.write(e+u.EOL)}t.info=info;function startGroup(e){s.issue("group",e)}t.startGroup=startGroup;function endGroup(){s.issue("endgroup")}t.endGroup=endGroup;function group(e,t){return n(this,void 0,void 0,function*(){startGroup(e);let i;try{i=yield t()}finally{endGroup()}return i})}t.group=group;function saveState(e,t){s.issueCommand("save-state",{name:e},t)}t.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}t.getState=getState},717:function(e,t,i){var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const r=n(i(747));const s=n(i(87));const o=i(278);function issueCommand(e,t){const i=process.env[`GITHUB_${e}`];if(!i){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!r.existsSync(i)){throw new Error(`Missing file at path: ${i}`)}r.appendFileSync(i,`${o.toCommandValue(t)}${s.EOL}`,{encoding:"utf8"})}t.issueCommand=issueCommand},278:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}t.toCommandValue=toCommandValue},514:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=r(i(159));function exec(e,t,i){return n(this,void 0,void 0,function*(){const n=s.argStringToArray(e);if(n.length===0){throw new Error(`Parameter 'commandLine' cannot be null or empty.`)}const r=n[0];t=n.slice(1).concat(t||[]);const o=new s.ToolRunner(r,t,i);return o.exec()})}t.exec=exec},159:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=r(i(87));const o=r(i(614));const c=r(i(129));const u=r(i(622));const l=r(i(436));const d=r(i(962));const f=process.platform==="win32";class ToolRunner extends o.EventEmitter{constructor(e,t,i){super();if(!e){throw new Error("Parameter 'toolPath' cannot be null or empty.")}this.toolPath=e;this.args=t||[];this.options=i||{}}_debug(e){if(this.options.listeners&&this.options.listeners.debug){this.options.listeners.debug(e)}}_getCommandString(e,t){const i=this._getSpawnFileName();const n=this._getSpawnArgs(e);let r=t?"":"[command]";if(f){if(this._isCmdFile()){r+=i;for(const e of n){r+=` ${e}`}}else if(e.windowsVerbatimArguments){r+=`"${i}"`;for(const e of n){r+=` ${e}`}}else{r+=this._windowsQuoteCmdArg(i);for(const e of n){r+=` ${this._windowsQuoteCmdArg(e)}`}}}else{r+=i;for(const e of n){r+=` ${e}`}}return r}_processLineBuffer(e,t,i){try{let n=t+e.toString();let r=n.indexOf(s.EOL);while(r>-1){const e=n.substring(0,r);i(e);n=n.substring(r+s.EOL.length);r=n.indexOf(s.EOL)}t=n}catch(e){this._debug(`error processing line. Failed with error ${e}`)}}_getSpawnFileName(){if(f){if(this._isCmdFile()){return process.env["COMSPEC"]||"cmd.exe"}}return this.toolPath}_getSpawnArgs(e){if(f){if(this._isCmdFile()){let t=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(const i of this.args){t+=" ";t+=e.windowsVerbatimArguments?i:this._windowsQuoteCmdArg(i)}t+='"';return[t]}}return this.args}_endsWith(e,t){return e.endsWith(t)}_isCmdFile(){const e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile()){return this._uvQuoteCmdArg(e)}if(!e){return'""'}const t=[" ","\t","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'];let i=false;for(const n of e){if(t.some(e=>e===n)){i=true;break}}if(!i){return e}let n='"';let r=true;for(let t=e.length;t>0;t--){n+=e[t-1];if(r&&e[t-1]==="\\"){n+="\\"}else if(e[t-1]==='"'){r=true;n+='"'}else{r=false}}n+='"';return n.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e){return'""'}if(!e.includes(" ")&&!e.includes("\t")&&!e.includes('"')){return e}if(!e.includes('"')&&!e.includes("\\")){return`"${e}"`}let t='"';let i=true;for(let n=e.length;n>0;n--){t+=e[n-1];if(i&&e[n-1]==="\\"){t+="\\"}else if(e[n-1]==='"'){i=true;t+="\\"}else{i=false}}t+='"';return t.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};const t={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||false,windowsVerbatimArguments:e.windowsVerbatimArguments||false,failOnStdErr:e.failOnStdErr||false,ignoreReturnCode:e.ignoreReturnCode||false,delay:e.delay||1e4};t.outStream=e.outStream||process.stdout;t.errStream=e.errStream||process.stderr;return t}_getSpawnOptions(e,t){e=e||{};const i={};i.cwd=e.cwd;i.env=e.env;i["windowsVerbatimArguments"]=e.windowsVerbatimArguments||this._isCmdFile();if(e.windowsVerbatimArguments){i.argv0=`"${t}"`}return i}exec(){return n(this,void 0,void 0,function*(){if(!d.isRooted(this.toolPath)&&(this.toolPath.includes("/")||f&&this.toolPath.includes("\\"))){this.toolPath=u.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)}this.toolPath=yield l.which(this.toolPath,true);return new Promise((e,t)=>{this._debug(`exec tool: ${this.toolPath}`);this._debug("arguments:");for(const e of this.args){this._debug(` ${e}`)}const i=this._cloneExecOptions(this.options);if(!i.silent&&i.outStream){i.outStream.write(this._getCommandString(i)+s.EOL)}const n=new ExecState(i,this.toolPath);n.on("debug",e=>{this._debug(e)});const r=this._getSpawnFileName();const o=c.spawn(r,this._getSpawnArgs(i),this._getSpawnOptions(this.options,r));const u="";if(o.stdout){o.stdout.on("data",e=>{if(this.options.listeners&&this.options.listeners.stdout){this.options.listeners.stdout(e)}if(!i.silent&&i.outStream){i.outStream.write(e)}this._processLineBuffer(e,u,e=>{if(this.options.listeners&&this.options.listeners.stdline){this.options.listeners.stdline(e)}})})}const l="";if(o.stderr){o.stderr.on("data",e=>{n.processStderr=true;if(this.options.listeners&&this.options.listeners.stderr){this.options.listeners.stderr(e)}if(!i.silent&&i.errStream&&i.outStream){const t=i.failOnStdErr?i.errStream:i.outStream;t.write(e)}this._processLineBuffer(e,l,e=>{if(this.options.listeners&&this.options.listeners.errline){this.options.listeners.errline(e)}})})}o.on("error",e=>{n.processError=e.message;n.processExited=true;n.processClosed=true;n.CheckComplete()});o.on("exit",e=>{n.processExitCode=e;n.processExited=true;this._debug(`Exit code ${e} received from tool '${this.toolPath}'`);n.CheckComplete()});o.on("close",e=>{n.processExitCode=e;n.processExited=true;n.processClosed=true;this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);n.CheckComplete()});n.on("done",(i,n)=>{if(u.length>0){this.emit("stdline",u)}if(l.length>0){this.emit("errline",l)}o.removeAllListeners();if(i){t(i)}else{e(n)}});if(this.options.input){if(!o.stdin){throw new Error("child process missing stdin")}o.stdin.end(this.options.input)}})})}}t.ToolRunner=ToolRunner;function argStringToArray(e){const t=[];let i=false;let n=false;let r="";function append(e){if(n&&e!=='"'){r+="\\"}r+=e;n=false}for(let s=0;s0){t.push(r);r=""}continue}append(o)}if(r.length>0){t.push(r.trim())}return t}t.argStringToArray=argStringToArray;class ExecState extends o.EventEmitter{constructor(e,t){super();this.processClosed=false;this.processError="";this.processExitCode=0;this.processExited=false;this.processStderr=false;this.delay=1e4;this.done=false;this.timeout=null;if(!t){throw new Error("toolPath must not be empty")}this.options=e;this.toolPath=t;if(e.delay){this.delay=e.delay}}CheckComplete(){if(this.done){return}if(this.processClosed){this._setResult()}else if(this.processExited){this.timeout=setTimeout(ExecState.HandleTimeout,this.delay,this)}}_debug(e){this.emit("debug",e)}_setResult(){let e;if(this.processExited){if(this.processError){e=new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`)}else if(this.processExitCode!==0&&!this.options.ignoreReturnCode){e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`)}else if(this.processStderr&&this.options.failOnStdErr){e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`)}}if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.done=true;this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(e.done){return}if(!e.processClosed&&e.processExited){const t=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(t)}e._setResult()}}},962:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var r;Object.defineProperty(t,"__esModule",{value:true});const s=i(357);const o=i(747);const c=i(622);r=o.promises,t.chmod=r.chmod,t.copyFile=r.copyFile,t.lstat=r.lstat,t.mkdir=r.mkdir,t.readdir=r.readdir,t.readlink=r.readlink,t.rename=r.rename,t.rmdir=r.rmdir,t.stat=r.stat,t.symlink=r.symlink,t.unlink=r.unlink;t.IS_WINDOWS=process.platform==="win32";function exists(e){return n(this,void 0,void 0,function*(){try{yield t.stat(e)}catch(e){if(e.code==="ENOENT"){return false}throw e}return true})}t.exists=exists;function isDirectory(e,i=false){return n(this,void 0,void 0,function*(){const n=i?yield t.stat(e):yield t.lstat(e);return n.isDirectory()})}t.isDirectory=isDirectory;function isRooted(e){e=normalizeSeparators(e);if(!e){throw new Error('isRooted() parameter "p" cannot be empty')}if(t.IS_WINDOWS){return e.startsWith("\\")||/^[A-Z]:/i.test(e)}return e.startsWith("/")}t.isRooted=isRooted;function mkdirP(e,i=1e3,r=1){return n(this,void 0,void 0,function*(){s.ok(e,"a path argument must be provided");e=c.resolve(e);if(r>=i)return t.mkdir(e);try{yield t.mkdir(e);return}catch(n){switch(n.code){case"ENOENT":{yield mkdirP(c.dirname(e),i,r+1);yield t.mkdir(e);return}default:{let i;try{i=yield t.stat(e)}catch(e){throw n}if(!i.isDirectory())throw n}}}})}t.mkdirP=mkdirP;function tryGetExecutablePath(e,i){return n(this,void 0,void 0,function*(){let n=undefined;try{n=yield t.stat(e)}catch(t){if(t.code!=="ENOENT"){console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}}if(n&&n.isFile()){if(t.IS_WINDOWS){const t=c.extname(e).toUpperCase();if(i.some(e=>e.toUpperCase()===t)){return e}}else{if(isUnixExecutable(n)){return e}}}const r=e;for(const s of i){e=r+s;n=undefined;try{n=yield t.stat(e)}catch(t){if(t.code!=="ENOENT"){console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}}if(n&&n.isFile()){if(t.IS_WINDOWS){try{const i=c.dirname(e);const n=c.basename(e).toUpperCase();for(const r of yield t.readdir(i)){if(n===r.toUpperCase()){e=c.join(i,r);break}}}catch(t){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${t}`)}return e}else{if(isUnixExecutable(n)){return e}}}}return""})}t.tryGetExecutablePath=tryGetExecutablePath;function normalizeSeparators(e){e=e||"";if(t.IS_WINDOWS){e=e.replace(/\//g,"\\");return e.replace(/\\\\+/g,"\\")}return e.replace(/\/\/+/g,"/")}function isUnixExecutable(e){return(e.mode&1)>0||(e.mode&8)>0&&e.gid===process.getgid()||(e.mode&64)>0&&e.uid===process.getuid()}},436:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});const r=i(129);const s=i(622);const o=i(669);const c=i(962);const u=o.promisify(r.exec);function cp(e,t,i={}){return n(this,void 0,void 0,function*(){const{force:n,recursive:r}=readCopyOptions(i);const o=(yield c.exists(t))?yield c.stat(t):null;if(o&&o.isFile()&&!n){return}const u=o&&o.isDirectory()?s.join(t,s.basename(e)):t;if(!(yield c.exists(e))){throw new Error(`no such file or directory: ${e}`)}const l=yield c.stat(e);if(l.isDirectory()){if(!r){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,u,0,n)}}else{if(s.relative(e,u)===""){throw new Error(`'${u}' and '${e}' are the same file`)}yield copyFile(e,u,n)}})}t.cp=cp;function mv(e,t,i={}){return n(this,void 0,void 0,function*(){if(yield c.exists(t)){let n=true;if(yield c.isDirectory(t)){t=s.join(t,s.basename(e));n=yield c.exists(t)}if(n){if(i.force==null||i.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(s.dirname(t));yield c.rename(e,t)})}t.mv=mv;function rmRF(e){return n(this,void 0,void 0,function*(){if(c.IS_WINDOWS){try{if(yield c.isDirectory(e,true)){yield u(`rd /s /q "${e}"`)}else{yield u(`del /f /a "${e}"`)}}catch(e){if(e.code!=="ENOENT")throw e}try{yield c.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield c.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield u(`rm -rf "${e}"`)}else{yield c.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return n(this,void 0,void 0,function*(){yield c.mkdirP(e)})}t.mkdirP=mkdirP;function which(e,t){return n(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(c.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.`)}}}try{const t=[];if(c.IS_WINDOWS&&process.env.PATHEXT){for(const e of process.env.PATHEXT.split(s.delimiter)){if(e){t.push(e)}}}if(c.isRooted(e)){const i=yield c.tryGetExecutablePath(e,t);if(i){return i}return""}if(e.includes("/")||c.IS_WINDOWS&&e.includes("\\")){return""}const i=[];if(process.env.PATH){for(const e of process.env.PATH.split(s.delimiter)){if(e){i.push(e)}}}for(const n of i){const i=yield c.tryGetExecutablePath(n+s.sep+e,t);if(i){return i}}return""}catch(e){throw new Error(`which failed with message ${e.message}`)}})}t.which=which;function readCopyOptions(e){const t=e.force==null?true:e.force;const i=Boolean(e.recursive);return{force:t,recursive:i}}function cpDirRecursive(e,t,i,r){return n(this,void 0,void 0,function*(){if(i>=255)return;i++;yield mkdirP(t);const n=yield c.readdir(e);for(const s of n){const n=`${e}/${s}`;const o=`${t}/${s}`;const u=yield c.lstat(n);if(u.isDirectory()){yield cpDirRecursive(n,o,i,r)}else{yield copyFile(n,o,r)}}yield c.chmod(t,(yield c.stat(e)).mode)})}function copyFile(e,t,i){return n(this,void 0,void 0,function*(){if((yield c.lstat(e)).isSymbolicLink()){try{yield c.lstat(t);yield c.unlink(t)}catch(e){if(e.code==="EPERM"){yield c.chmod(t,"0666");yield c.unlink(t)}}const i=yield c.readlink(e);yield c.symlink(i,t,c.IS_WINDOWS?"junction":null)}else if(!(yield c.exists(t))||i){yield c.copyFile(e,t)}})}},144:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});t.run=void 0;const r=i(186);const s=i(514);const o=i(436);const c=i(747);const u=i(622);function run(){return n(this,void 0,void 0,function*(){const e=r.getInput("image",{required:true});const t=r.getInput("tag")||"latest";const i=r.getInput("registry",{required:true});const n=r.getInput("username",{required:true});const s=r.getInput("password",{required:true});const u=r.getInput("tls-verify");const l=r.getInput("digestfile");const d=yield o.which("podman",true);const f=`${e}:${t}`;let a=`Pushing ${f} to ${i}`;if(n){a+=` as ${n}`}r.info(a);const p=yield execute(d,["images","--format","json"]);const h=JSON.parse(p.stdout);const m=h[0]&&Object.keys(h[0]).find(e=>"names"===e.toLowerCase());const y=h.filter(e=>e[m]&&e[m].find(e=>e.includes(`${f}`))).map(e=>e[m]);if(y.length===0){yield execute(d,["pull",`docker-daemon:${f}`])}const w=`${i.replace(/\/$/,"")}/${f}`;const g=`${n}:${s}`;let _=l;if(!_){_=`${f.replace(/[/\\/?%*:|"<>]/g,"-")}_digest.txt`}const v=["push","--quiet","--digestfile",_,"--creds",g,f,w];if(u){v.push(`--tls-verify=${u}`)}yield execute(d,v);r.info(`Successfully pushed ${f} to ${w}.`);r.setOutput("registry-path",w);try{const e=(yield c.promises.readFile(_)).toString();r.info(e);r.setOutput("digest",e)}catch(e){r.warning(`Failed to read digest file "${_}": ${e}`)}})}t.run=run;function execute(e,t,i={}){return n(this,void 0,void 0,function*(){let n="";let r="";const o=Object.assign({},i);o.ignoreReturnCode=true;o.listeners={stdline:e=>{n+=e+"\n"},errline:e=>{r+=e+"\n"}};const c=yield s.exec(e,t,o);if(i.ignoreReturnCode!==true&&c!==0){let t=`${u.basename(e)} exited with code ${c}`;if(r){t+=`\n${r}`}throw new Error(t)}return{exitCode:c,stdout:n,stderr:r}})}run().catch(r.setFailed)},357:e=>{e.exports=require("assert")},129:e=>{e.exports=require("child_process")},614:e=>{e.exports=require("events")},747:e=>{e.exports=require("fs")},87:e=>{e.exports=require("os")},622:e=>{e.exports=require("path")},669:e=>{e.exports=require("util")}};var t={};function __webpack_require__(i){if(t[i]){return t[i].exports}var n=t[i]={exports:{}};var r=true;try{e[i].call(n.exports,n,n.exports,__webpack_require__);r=false}finally{if(r)delete t[i]}return n.exports}__webpack_require__.ab=__dirname+"/";return __webpack_require__(144)})(); +require('./sourcemap-register.js');module.exports=(()=>{"use strict";var e={351:function(e,t,n){var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(Object.hasOwnProperty.call(e,n))t[n]=e[n];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const r=i(n(87));const s=n(278);function issueCommand(e,t,n){const i=new Command(e,t,n);process.stdout.write(i.toString()+r.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const o="::";class Command{constructor(e,t,n){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=n}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const n in this.properties){if(this.properties.hasOwnProperty(n)){const i=this.properties[n];if(i){if(t){t=false}else{e+=","}e+=`${n}=${escapeProperty(i)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},186:function(e,t,n){var i=this&&this.__awaiter||function(e,t,n,i){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,r){function fulfilled(e){try{step(i.next(e))}catch(e){r(e)}}function rejected(e){try{step(i["throw"](e))}catch(e){r(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((i=i.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(Object.hasOwnProperty.call(e,n))t[n]=e[n];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=n(351);const o=n(717);const c=n(278);const u=r(n(87));const a=r(n(622));var l;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(l=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const n=c.toCommandValue(t);process.env[e]=n;const i=process.env["GITHUB_ENV"]||"";if(i){const t="_GitHubActionsFileCommandDelimeter_";const i=`${e}<<${t}${u.EOL}${n}${u.EOL}${t}`;o.issueCommand("ENV",i)}else{s.issueCommand("set-env",{name:e},n)}}t.exportVariable=exportVariable;function setSecret(e){s.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){o.issueCommand("PATH",e)}else{s.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${a.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const n=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!n){throw new Error(`Input required and not supplied: ${e}`)}return n.trim()}t.getInput=getInput;function setOutput(e,t){s.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){s.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=l.Failure;error(e)}t.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}t.isDebug=isDebug;function debug(e){s.issueCommand("debug",{},e)}t.debug=debug;function error(e){s.issue("error",e instanceof Error?e.toString():e)}t.error=error;function warning(e){s.issue("warning",e instanceof Error?e.toString():e)}t.warning=warning;function info(e){process.stdout.write(e+u.EOL)}t.info=info;function startGroup(e){s.issue("group",e)}t.startGroup=startGroup;function endGroup(){s.issue("endgroup")}t.endGroup=endGroup;function group(e,t){return i(this,void 0,void 0,function*(){startGroup(e);let n;try{n=yield t()}finally{endGroup()}return n})}t.group=group;function saveState(e,t){s.issueCommand("save-state",{name:e},t)}t.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}t.getState=getState},717:function(e,t,n){var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(Object.hasOwnProperty.call(e,n))t[n]=e[n];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const r=i(n(747));const s=i(n(87));const o=n(278);function issueCommand(e,t){const n=process.env[`GITHUB_${e}`];if(!n){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!r.existsSync(n)){throw new Error(`Missing file at path: ${n}`)}r.appendFileSync(n,`${o.toCommandValue(t)}${s.EOL}`,{encoding:"utf8"})}t.issueCommand=issueCommand},278:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}t.toCommandValue=toCommandValue},514:function(e,t,n){var i=this&&this.__awaiter||function(e,t,n,i){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,r){function fulfilled(e){try{step(i.next(e))}catch(e){r(e)}}function rejected(e){try{step(i["throw"](e))}catch(e){r(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((i=i.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(Object.hasOwnProperty.call(e,n))t[n]=e[n];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=r(n(159));function exec(e,t,n){return i(this,void 0,void 0,function*(){const i=s.argStringToArray(e);if(i.length===0){throw new Error(`Parameter 'commandLine' cannot be null or empty.`)}const r=i[0];t=i.slice(1).concat(t||[]);const o=new s.ToolRunner(r,t,n);return o.exec()})}t.exec=exec},159:function(e,t,n){var i=this&&this.__awaiter||function(e,t,n,i){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,r){function fulfilled(e){try{step(i.next(e))}catch(e){r(e)}}function rejected(e){try{step(i["throw"](e))}catch(e){r(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((i=i.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(Object.hasOwnProperty.call(e,n))t[n]=e[n];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=r(n(87));const o=r(n(614));const c=r(n(129));const u=r(n(622));const a=r(n(436));const l=r(n(962));const f=process.platform==="win32";class ToolRunner extends o.EventEmitter{constructor(e,t,n){super();if(!e){throw new Error("Parameter 'toolPath' cannot be null or empty.")}this.toolPath=e;this.args=t||[];this.options=n||{}}_debug(e){if(this.options.listeners&&this.options.listeners.debug){this.options.listeners.debug(e)}}_getCommandString(e,t){const n=this._getSpawnFileName();const i=this._getSpawnArgs(e);let r=t?"":"[command]";if(f){if(this._isCmdFile()){r+=n;for(const e of i){r+=` ${e}`}}else if(e.windowsVerbatimArguments){r+=`"${n}"`;for(const e of i){r+=` ${e}`}}else{r+=this._windowsQuoteCmdArg(n);for(const e of i){r+=` ${this._windowsQuoteCmdArg(e)}`}}}else{r+=n;for(const e of i){r+=` ${e}`}}return r}_processLineBuffer(e,t,n){try{let i=t+e.toString();let r=i.indexOf(s.EOL);while(r>-1){const e=i.substring(0,r);n(e);i=i.substring(r+s.EOL.length);r=i.indexOf(s.EOL)}t=i}catch(e){this._debug(`error processing line. Failed with error ${e}`)}}_getSpawnFileName(){if(f){if(this._isCmdFile()){return process.env["COMSPEC"]||"cmd.exe"}}return this.toolPath}_getSpawnArgs(e){if(f){if(this._isCmdFile()){let t=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(const n of this.args){t+=" ";t+=e.windowsVerbatimArguments?n:this._windowsQuoteCmdArg(n)}t+='"';return[t]}}return this.args}_endsWith(e,t){return e.endsWith(t)}_isCmdFile(){const e=this.toolPath.toUpperCase();return this._endsWith(e,".CMD")||this._endsWith(e,".BAT")}_windowsQuoteCmdArg(e){if(!this._isCmdFile()){return this._uvQuoteCmdArg(e)}if(!e){return'""'}const t=[" ","\t","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'];let n=false;for(const i of e){if(t.some(e=>e===i)){n=true;break}}if(!n){return e}let i='"';let r=true;for(let t=e.length;t>0;t--){i+=e[t-1];if(r&&e[t-1]==="\\"){i+="\\"}else if(e[t-1]==='"'){r=true;i+='"'}else{r=false}}i+='"';return i.split("").reverse().join("")}_uvQuoteCmdArg(e){if(!e){return'""'}if(!e.includes(" ")&&!e.includes("\t")&&!e.includes('"')){return e}if(!e.includes('"')&&!e.includes("\\")){return`"${e}"`}let t='"';let n=true;for(let i=e.length;i>0;i--){t+=e[i-1];if(n&&e[i-1]==="\\"){t+="\\"}else if(e[i-1]==='"'){n=true;t+="\\"}else{n=false}}t+='"';return t.split("").reverse().join("")}_cloneExecOptions(e){e=e||{};const t={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||false,windowsVerbatimArguments:e.windowsVerbatimArguments||false,failOnStdErr:e.failOnStdErr||false,ignoreReturnCode:e.ignoreReturnCode||false,delay:e.delay||1e4};t.outStream=e.outStream||process.stdout;t.errStream=e.errStream||process.stderr;return t}_getSpawnOptions(e,t){e=e||{};const n={};n.cwd=e.cwd;n.env=e.env;n["windowsVerbatimArguments"]=e.windowsVerbatimArguments||this._isCmdFile();if(e.windowsVerbatimArguments){n.argv0=`"${t}"`}return n}exec(){return i(this,void 0,void 0,function*(){if(!l.isRooted(this.toolPath)&&(this.toolPath.includes("/")||f&&this.toolPath.includes("\\"))){this.toolPath=u.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)}this.toolPath=yield a.which(this.toolPath,true);return new Promise((e,t)=>{this._debug(`exec tool: ${this.toolPath}`);this._debug("arguments:");for(const e of this.args){this._debug(` ${e}`)}const n=this._cloneExecOptions(this.options);if(!n.silent&&n.outStream){n.outStream.write(this._getCommandString(n)+s.EOL)}const i=new ExecState(n,this.toolPath);i.on("debug",e=>{this._debug(e)});const r=this._getSpawnFileName();const o=c.spawn(r,this._getSpawnArgs(n),this._getSpawnOptions(this.options,r));const u="";if(o.stdout){o.stdout.on("data",e=>{if(this.options.listeners&&this.options.listeners.stdout){this.options.listeners.stdout(e)}if(!n.silent&&n.outStream){n.outStream.write(e)}this._processLineBuffer(e,u,e=>{if(this.options.listeners&&this.options.listeners.stdline){this.options.listeners.stdline(e)}})})}const a="";if(o.stderr){o.stderr.on("data",e=>{i.processStderr=true;if(this.options.listeners&&this.options.listeners.stderr){this.options.listeners.stderr(e)}if(!n.silent&&n.errStream&&n.outStream){const t=n.failOnStdErr?n.errStream:n.outStream;t.write(e)}this._processLineBuffer(e,a,e=>{if(this.options.listeners&&this.options.listeners.errline){this.options.listeners.errline(e)}})})}o.on("error",e=>{i.processError=e.message;i.processExited=true;i.processClosed=true;i.CheckComplete()});o.on("exit",e=>{i.processExitCode=e;i.processExited=true;this._debug(`Exit code ${e} received from tool '${this.toolPath}'`);i.CheckComplete()});o.on("close",e=>{i.processExitCode=e;i.processExited=true;i.processClosed=true;this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);i.CheckComplete()});i.on("done",(n,i)=>{if(u.length>0){this.emit("stdline",u)}if(a.length>0){this.emit("errline",a)}o.removeAllListeners();if(n){t(n)}else{e(i)}});if(this.options.input){if(!o.stdin){throw new Error("child process missing stdin")}o.stdin.end(this.options.input)}})})}}t.ToolRunner=ToolRunner;function argStringToArray(e){const t=[];let n=false;let i=false;let r="";function append(e){if(i&&e!=='"'){r+="\\"}r+=e;i=false}for(let s=0;s0){t.push(r);r=""}continue}append(o)}if(r.length>0){t.push(r.trim())}return t}t.argStringToArray=argStringToArray;class ExecState extends o.EventEmitter{constructor(e,t){super();this.processClosed=false;this.processError="";this.processExitCode=0;this.processExited=false;this.processStderr=false;this.delay=1e4;this.done=false;this.timeout=null;if(!t){throw new Error("toolPath must not be empty")}this.options=e;this.toolPath=t;if(e.delay){this.delay=e.delay}}CheckComplete(){if(this.done){return}if(this.processClosed){this._setResult()}else if(this.processExited){this.timeout=setTimeout(ExecState.HandleTimeout,this.delay,this)}}_debug(e){this.emit("debug",e)}_setResult(){let e;if(this.processExited){if(this.processError){e=new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`)}else if(this.processExitCode!==0&&!this.options.ignoreReturnCode){e=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`)}else if(this.processStderr&&this.options.failOnStdErr){e=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`)}}if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.done=true;this.emit("done",e,this.processExitCode)}static HandleTimeout(e){if(e.done){return}if(!e.processClosed&&e.processExited){const t=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(t)}e._setResult()}}},962:function(e,t,n){var i=this&&this.__awaiter||function(e,t,n,i){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,r){function fulfilled(e){try{step(i.next(e))}catch(e){r(e)}}function rejected(e){try{step(i["throw"](e))}catch(e){r(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((i=i.apply(e,t||[])).next())})};var r;Object.defineProperty(t,"__esModule",{value:true});const s=n(357);const o=n(747);const c=n(622);r=o.promises,t.chmod=r.chmod,t.copyFile=r.copyFile,t.lstat=r.lstat,t.mkdir=r.mkdir,t.readdir=r.readdir,t.readlink=r.readlink,t.rename=r.rename,t.rmdir=r.rmdir,t.stat=r.stat,t.symlink=r.symlink,t.unlink=r.unlink;t.IS_WINDOWS=process.platform==="win32";function exists(e){return i(this,void 0,void 0,function*(){try{yield t.stat(e)}catch(e){if(e.code==="ENOENT"){return false}throw e}return true})}t.exists=exists;function isDirectory(e,n=false){return i(this,void 0,void 0,function*(){const i=n?yield t.stat(e):yield t.lstat(e);return i.isDirectory()})}t.isDirectory=isDirectory;function isRooted(e){e=normalizeSeparators(e);if(!e){throw new Error('isRooted() parameter "p" cannot be empty')}if(t.IS_WINDOWS){return e.startsWith("\\")||/^[A-Z]:/i.test(e)}return e.startsWith("/")}t.isRooted=isRooted;function mkdirP(e,n=1e3,r=1){return i(this,void 0,void 0,function*(){s.ok(e,"a path argument must be provided");e=c.resolve(e);if(r>=n)return t.mkdir(e);try{yield t.mkdir(e);return}catch(i){switch(i.code){case"ENOENT":{yield mkdirP(c.dirname(e),n,r+1);yield t.mkdir(e);return}default:{let n;try{n=yield t.stat(e)}catch(e){throw i}if(!n.isDirectory())throw i}}}})}t.mkdirP=mkdirP;function tryGetExecutablePath(e,n){return i(this,void 0,void 0,function*(){let i=undefined;try{i=yield t.stat(e)}catch(t){if(t.code!=="ENOENT"){console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}}if(i&&i.isFile()){if(t.IS_WINDOWS){const t=c.extname(e).toUpperCase();if(n.some(e=>e.toUpperCase()===t)){return e}}else{if(isUnixExecutable(i)){return e}}}const r=e;for(const s of n){e=r+s;i=undefined;try{i=yield t.stat(e)}catch(t){if(t.code!=="ENOENT"){console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}}if(i&&i.isFile()){if(t.IS_WINDOWS){try{const n=c.dirname(e);const i=c.basename(e).toUpperCase();for(const r of yield t.readdir(n)){if(i===r.toUpperCase()){e=c.join(n,r);break}}}catch(t){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${t}`)}return e}else{if(isUnixExecutable(i)){return e}}}}return""})}t.tryGetExecutablePath=tryGetExecutablePath;function normalizeSeparators(e){e=e||"";if(t.IS_WINDOWS){e=e.replace(/\//g,"\\");return e.replace(/\\\\+/g,"\\")}return e.replace(/\/\/+/g,"/")}function isUnixExecutable(e){return(e.mode&1)>0||(e.mode&8)>0&&e.gid===process.getgid()||(e.mode&64)>0&&e.uid===process.getuid()}},436:function(e,t,n){var i=this&&this.__awaiter||function(e,t,n,i){function adopt(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,r){function fulfilled(e){try{step(i.next(e))}catch(e){r(e)}}function rejected(e){try{step(i["throw"](e))}catch(e){r(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((i=i.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:true});const r=n(129);const s=n(622);const o=n(669);const c=n(962);const u=o.promisify(r.exec);function cp(e,t,n={}){return i(this,void 0,void 0,function*(){const{force:i,recursive:r}=readCopyOptions(n);const o=(yield c.exists(t))?yield c.stat(t):null;if(o&&o.isFile()&&!i){return}const u=o&&o.isDirectory()?s.join(t,s.basename(e)):t;if(!(yield c.exists(e))){throw new Error(`no such file or directory: ${e}`)}const a=yield c.stat(e);if(a.isDirectory()){if(!r){throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`)}else{yield cpDirRecursive(e,u,0,i)}}else{if(s.relative(e,u)===""){throw new Error(`'${u}' and '${e}' are the same file`)}yield copyFile(e,u,i)}})}t.cp=cp;function mv(e,t,n={}){return i(this,void 0,void 0,function*(){if(yield c.exists(t)){let i=true;if(yield c.isDirectory(t)){t=s.join(t,s.basename(e));i=yield c.exists(t)}if(i){if(n.force==null||n.force){yield rmRF(t)}else{throw new Error("Destination already exists")}}}yield mkdirP(s.dirname(t));yield c.rename(e,t)})}t.mv=mv;function rmRF(e){return i(this,void 0,void 0,function*(){if(c.IS_WINDOWS){try{if(yield c.isDirectory(e,true)){yield u(`rd /s /q "${e}"`)}else{yield u(`del /f /a "${e}"`)}}catch(e){if(e.code!=="ENOENT")throw e}try{yield c.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield c.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield u(`rm -rf "${e}"`)}else{yield c.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return i(this,void 0,void 0,function*(){yield c.mkdirP(e)})}t.mkdirP=mkdirP;function which(e,t){return i(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(c.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.`)}}}try{const t=[];if(c.IS_WINDOWS&&process.env.PATHEXT){for(const e of process.env.PATHEXT.split(s.delimiter)){if(e){t.push(e)}}}if(c.isRooted(e)){const n=yield c.tryGetExecutablePath(e,t);if(n){return n}return""}if(e.includes("/")||c.IS_WINDOWS&&e.includes("\\")){return""}const n=[];if(process.env.PATH){for(const e of process.env.PATH.split(s.delimiter)){if(e){n.push(e)}}}for(const i of n){const n=yield c.tryGetExecutablePath(i+s.sep+e,t);if(n){return n}}return""}catch(e){throw new Error(`which failed with message ${e.message}`)}})}t.which=which;function readCopyOptions(e){const t=e.force==null?true:e.force;const n=Boolean(e.recursive);return{force:t,recursive:n}}function cpDirRecursive(e,t,n,r){return i(this,void 0,void 0,function*(){if(n>=255)return;n++;yield mkdirP(t);const i=yield c.readdir(e);for(const s of i){const i=`${e}/${s}`;const o=`${t}/${s}`;const u=yield c.lstat(i);if(u.isDirectory()){yield cpDirRecursive(i,o,n,r)}else{yield copyFile(i,o,r)}}yield c.chmod(t,(yield c.stat(e)).mode)})}function copyFile(e,t,n){return i(this,void 0,void 0,function*(){if((yield c.lstat(e)).isSymbolicLink()){try{yield c.lstat(t);yield c.unlink(t)}catch(e){if(e.code==="EPERM"){yield c.chmod(t,"0666");yield c.unlink(t)}}const n=yield c.readlink(e);yield c.symlink(n,t,c.IS_WINDOWS?"junction":null)}else if(!(yield c.exists(t))||n){yield c.copyFile(e,t)}})}},144:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:true});const i=n(186);const r=n(514);const s=n(436);const o=n(747);const c=n(622);let u;let a=false;let l;async function getPodmanPath(){if(u==null){u=await s.which("podman",true)}return u}const f="docker.io/library";async function run(){const e=i.getInput("image",{required:true});const t=i.getInput("tag")||"latest";const n=i.getInput("registry",{required:true});const r=i.getInput("username",{required:true});const s=i.getInput("password",{required:true});const c=i.getInput("tls-verify");const u=i.getInput("digestfile");l=`${e}:${t}`;const d=await checkImageInPodman();const p=await pullImageFromDocker();if(!p&&!d){throw new Error(`${l} not found in Podman local storage, or Docker local storage.`)}if(d&&p){const e=await isPodmanLocalImageLatest();if(!e){i.warning(`The version of ${l} in the Docker image storage is more recent `+`than the version in the Podman image storage. The image from the Docker image storage `+`will be pushed.`);l=`${f}/${l}`;a=true}else{i.warning(`The version of ${l} in the Podman image storage is more recent `+`than the version in the Docker image storage. The image from the Podman image `+`storage will be pushed.`)}}else if(p){l=`${f}/${l}`;i.info(`${l} was found in the Docker image storage, but not in the Podman `+`image storage. The image will be pulled into Podman image storage, pushed, and then `+`removed from the Podman image storage.`);a=true}let h=`Pushing ${l} to ${n}`;if(r){h+=` as ${r}`}i.info(h);const m=n.replace(/\/$/,"");const w=`${m}/${e}:${t}`;const y=`${r}:${s}`;let g=u;if(!g){g=`${l.replace(/[/\\/?%*:|"<>]/g,"-")}_digest.txt`}const v=["push","--quiet","--digestfile",g,"--creds",y,l,w];if(c){v.push(`--tls-verify=${c}`)}await execute(await getPodmanPath(),v);i.info(`Successfully pushed ${l} to ${w}.`);i.setOutput("registry-path",w);try{const e=(await o.promises.readFile(g)).toString();i.info(e);i.setOutput("digest",e)}catch(e){i.warning(`Failed to read digest file "${g}": ${e}`)}}async function pullImageFromDocker(){try{await execute(await getPodmanPath(),["pull",`docker-daemon:${l}`]);i.info(`${l} found in Docker image storage`);return true}catch(e){i.info(`${l} not found in Docker image storage`);return false}}async function checkImageInPodman(){i.info(`Checking if ${l} is in Podman image storage`);try{await execute(await getPodmanPath(),["image","exists",l]);i.info(`${l} found in Podman image storage`);return true}catch(e){i.info(`${l} not found in Podman image storage`);i.debug(e);return false}}async function isPodmanLocalImageLatest(){const e=await execute(await getPodmanPath(),["image","inspect",l,"--format","{{.Created}}"]);const t=await execute(await getPodmanPath(),["image","inspect",`${f}/${l}`,"--format","{{.Created}}"]);const n=new Date(e.stdout).getTime();const i=new Date(t.stdout).getTime();return n>i}async function removeDockerImage(){if(l){i.info(`Removing ${l} from the Podman image storage`);await execute(await getPodmanPath(),["rmi",l])}}async function execute(e,t,n={}){let i="";let s="";const o={...n};o.ignoreReturnCode=true;o.listeners={stdline:e=>{i+=`${e}\n`},errline:e=>{s+=`${e}\n`}};const u=await r.exec(e,t,o);if(n.ignoreReturnCode!==true&&u!==0){let t=`${c.basename(e)} exited with code ${u}`;if(s){t+=`\n${s}`}throw new Error(t)}return{exitCode:u,stdout:i,stderr:s}}run().catch(i.setFailed).finally(()=>{if(a){removeDockerImage()}})},357:e=>{e.exports=require("assert")},129:e=>{e.exports=require("child_process")},614:e=>{e.exports=require("events")},747:e=>{e.exports=require("fs")},87:e=>{e.exports=require("os")},622:e=>{e.exports=require("path")},669:e=>{e.exports=require("util")}};var t={};function __webpack_require__(n){if(t[n]){return t[n].exports}var i=t[n]={exports:{}};var r=true;try{e[n].call(i.exports,i,i.exports,__webpack_require__);r=false}finally{if(r)delete t[n]}return i.exports}__webpack_require__.ab=__dirname+"/";return __webpack_require__(144)})(); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 8c0d4fe..d6e589e 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../webpack:/push-to-registry/node_modules/@actions/core/lib/command.js","../webpack:/push-to-registry/node_modules/@actions/core/lib/core.js","../webpack:/push-to-registry/node_modules/@actions/core/lib/file-command.js","../webpack:/push-to-registry/node_modules/@actions/core/lib/utils.js","../webpack:/push-to-registry/node_modules/@actions/exec/lib/exec.js","../webpack:/push-to-registry/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/push-to-registry/node_modules/@actions/io/lib/io-util.js","../webpack:/push-to-registry/node_modules/@actions/io/lib/io.js","../webpack:/push-to-registry/src/index.ts","../webpack:/push-to-registry/external \"assert\"","../webpack:/push-to-registry/external \"child_process\"","../webpack:/push-to-registry/external \"events\"","../webpack:/push-to-registry/external \"fs\"","../webpack:/push-to-registry/external \"os\"","../webpack:/push-to-registry/external \"path\"","../webpack:/push-to-registry/external \"util\"","../webpack:/push-to-registry/webpack/bootstrap","../webpack:/push-to-registry/webpack/runtime/compat","../webpack:/push-to-registry/webpack/startup"],"names":["__importStar","this","mod","__esModule","result","k","Object","hasOwnProperty","call","defineProperty","exports","value","os","__webpack_require__","utils_1","issueCommand","command","properties","message","cmd","Command","process","stdout","write","toString","EOL","issue","name","CMD_STRING","[object Object]","cmdStr","keys","length","first","key","val","escapeProperty","escapeData","s","toCommandValue","replace","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","done","then","apply","command_1","file_command_1","path","ExitCode","exportVariable","convertedVal","env","filePath","delimiter","commandValue","setSecret","secret","addPath","inputPath","getInput","options","toUpperCase","required","Error","trim","setOutput","setCommandEcho","enabled","setFailed","exitCode","Failure","error","isDebug","debug","warning","info","startGroup","endGroup","group","fn","saveState","getState","fs","existsSync","appendFileSync","encoding","input","undefined","String","JSON","stringify","tr","exec","commandLine","args","commandArgs","argStringToArray","toolPath","slice","concat","runner","ToolRunner","events","child","io","ioUtil","IS_WINDOWS","platform","EventEmitter","super","listeners","noPrefix","_getSpawnFileName","_getSpawnArgs","_isCmdFile","a","windowsVerbatimArguments","_windowsQuoteCmdArg","data","strBuffer","onLine","n","indexOf","line","substring","err","_debug","argline","str","end","endsWith","upperToolPath","_endsWith","arg","_uvQuoteCmdArg","cmdSpecialChars","needsQuotes","char","some","x","reverse","quoteHit","i","split","join","includes","cwd","silent","failOnStdErr","ignoreReturnCode","delay","outStream","errStream","stderr","argv0","isRooted","which","optionsNonNull","_cloneExecOptions","_getCommandString","state","ExecState","on","fileName","cp","spawn","_getSpawnOptions","stdbuffer","_processLineBuffer","stdline","errbuffer","processStderr","errline","processError","processExited","processClosed","CheckComplete","code","processExitCode","emit","removeAllListeners","stdin","argString","inQuotes","escaped","append","c","charAt","push","timeout","_setResult","setTimeout","HandleTimeout","clearTimeout","_a","assert_1","promises","chmod","copyFile","lstat","mkdir","readdir","readlink","rename","rmdir","stat","symlink","unlink","exists","fsPath","isDirectory","useStat","stats","p","normalizeSeparators","startsWith","test","mkdirP","maxDepth","depth","ok","dirname","err2","tryGetExecutablePath","extensions","console","log","isFile","upperExt","extname","validExt","isUnixExecutable","originalFilePath","extension","directory","upperName","basename","actualName","mode","gid","getgid","uid","getuid","childProcess","util_1","promisify","source","dest","force","recursive","readCopyOptions","destStat","newDest","sourceStat","cpDirRecursive","relative","mv","destExists","rmRF","isDir","tool","check","PATHEXT","directories","PATH","sep","Boolean","sourceDir","destDir","currentDepth","files","srcFile","destFile","srcFileStat","isSymbolicLink","symlinkFull","run","core","imageInput","tag","registry","username","password","tlsVerify","digestFileInput","podman","imageToPush","pushMsg","checkImages","execute","parsedCheckImages","parse","nameKeyMixedCase","find","toLowerCase","imagesFound","filter","image","map","registryPath","creds","digestFile","digest","readFile","executable","execOptions","finalExecOptions","assign","catch","module","require","__webpack_module_cache__","moduleId","threw","__webpack_modules__","ab","__dirname"],"mappings":"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","file":"index.js","sourcesContent":["\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n const delimiter = '_GitHubActionsFileCommandDelimeter_';\n const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;\n file_command_1.issueCommand('ENV', commandValue);\n }\n else {\n command_1.issueCommand('set-env', { name }, convertedVal);\n }\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input. The value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n command_1.issueCommand('set-output', { name }, value);\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n */\nfunction error(message) {\n command_1.issue('error', message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds an warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n */\nfunction warning(message) {\n command_1.issue('warning', message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n command_1.issueCommand('save-state', { name }, value);\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\nfunction issueCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueCommand = issueCommand;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tr = __importStar(require(\"./toolrunner\"));\n/**\n * Exec a command.\n * Output will be streamed to the live console.\n * Returns promise with return code\n *\n * @param commandLine command to execute (can include additional args). Must be correctly escaped.\n * @param args optional arguments for tool. Escaping is handled by the lib.\n * @param options optional exec options. See ExecOptions\n * @returns Promise exit code\n */\nfunction exec(commandLine, args, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const commandArgs = tr.argStringToArray(commandLine);\n if (commandArgs.length === 0) {\n throw new Error(`Parameter 'commandLine' cannot be null or empty.`);\n }\n // Path to tool to execute should be first arg\n const toolPath = commandArgs[0];\n args = commandArgs.slice(1).concat(args || []);\n const runner = new tr.ToolRunner(toolPath, args, options);\n return runner.exec();\n });\n}\nexports.exec = exec;\n//# sourceMappingURL=exec.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst os = __importStar(require(\"os\"));\nconst events = __importStar(require(\"events\"));\nconst child = __importStar(require(\"child_process\"));\nconst path = __importStar(require(\"path\"));\nconst io = __importStar(require(\"@actions/io\"));\nconst ioUtil = __importStar(require(\"@actions/io/lib/io-util\"));\n/* eslint-disable @typescript-eslint/unbound-method */\nconst IS_WINDOWS = process.platform === 'win32';\n/*\n * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.\n */\nclass ToolRunner extends events.EventEmitter {\n constructor(toolPath, args, options) {\n super();\n if (!toolPath) {\n throw new Error(\"Parameter 'toolPath' cannot be null or empty.\");\n }\n this.toolPath = toolPath;\n this.args = args || [];\n this.options = options || {};\n }\n _debug(message) {\n if (this.options.listeners && this.options.listeners.debug) {\n this.options.listeners.debug(message);\n }\n }\n _getCommandString(options, noPrefix) {\n const toolPath = this._getSpawnFileName();\n const args = this._getSpawnArgs(options);\n let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool\n if (IS_WINDOWS) {\n // Windows + cmd file\n if (this._isCmdFile()) {\n cmd += toolPath;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n // Windows + verbatim\n else if (options.windowsVerbatimArguments) {\n cmd += `\"${toolPath}\"`;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n // Windows (regular)\n else {\n cmd += this._windowsQuoteCmdArg(toolPath);\n for (const a of args) {\n cmd += ` ${this._windowsQuoteCmdArg(a)}`;\n }\n }\n }\n else {\n // OSX/Linux - this can likely be improved with some form of quoting.\n // creating processes on Unix is fundamentally different than Windows.\n // on Unix, execvp() takes an arg array.\n cmd += toolPath;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n return cmd;\n }\n _processLineBuffer(data, strBuffer, onLine) {\n try {\n let s = strBuffer + data.toString();\n let n = s.indexOf(os.EOL);\n while (n > -1) {\n const line = s.substring(0, n);\n onLine(line);\n // the rest of the string ...\n s = s.substring(n + os.EOL.length);\n n = s.indexOf(os.EOL);\n }\n strBuffer = s;\n }\n catch (err) {\n // streaming lines to console is best effort. Don't fail a build.\n this._debug(`error processing line. Failed with error ${err}`);\n }\n }\n _getSpawnFileName() {\n if (IS_WINDOWS) {\n if (this._isCmdFile()) {\n return process.env['COMSPEC'] || 'cmd.exe';\n }\n }\n return this.toolPath;\n }\n _getSpawnArgs(options) {\n if (IS_WINDOWS) {\n if (this._isCmdFile()) {\n let argline = `/D /S /C \"${this._windowsQuoteCmdArg(this.toolPath)}`;\n for (const a of this.args) {\n argline += ' ';\n argline += options.windowsVerbatimArguments\n ? a\n : this._windowsQuoteCmdArg(a);\n }\n argline += '\"';\n return [argline];\n }\n }\n return this.args;\n }\n _endsWith(str, end) {\n return str.endsWith(end);\n }\n _isCmdFile() {\n const upperToolPath = this.toolPath.toUpperCase();\n return (this._endsWith(upperToolPath, '.CMD') ||\n this._endsWith(upperToolPath, '.BAT'));\n }\n _windowsQuoteCmdArg(arg) {\n // for .exe, apply the normal quoting rules that libuv applies\n if (!this._isCmdFile()) {\n return this._uvQuoteCmdArg(arg);\n }\n // otherwise apply quoting rules specific to the cmd.exe command line parser.\n // the libuv rules are generic and are not designed specifically for cmd.exe\n // command line parser.\n //\n // for a detailed description of the cmd.exe command line parser, refer to\n // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912\n // need quotes for empty arg\n if (!arg) {\n return '\"\"';\n }\n // determine whether the arg needs to be quoted\n const cmdSpecialChars = [\n ' ',\n '\\t',\n '&',\n '(',\n ')',\n '[',\n ']',\n '{',\n '}',\n '^',\n '=',\n ';',\n '!',\n \"'\",\n '+',\n ',',\n '`',\n '~',\n '|',\n '<',\n '>',\n '\"'\n ];\n let needsQuotes = false;\n for (const char of arg) {\n if (cmdSpecialChars.some(x => x === char)) {\n needsQuotes = true;\n break;\n }\n }\n // short-circuit if quotes not needed\n if (!needsQuotes) {\n return arg;\n }\n // the following quoting rules are very similar to the rules that by libuv applies.\n //\n // 1) wrap the string in quotes\n //\n // 2) double-up quotes - i.e. \" => \"\"\n //\n // this is different from the libuv quoting rules. libuv replaces \" with \\\", which unfortunately\n // doesn't work well with a cmd.exe command line.\n //\n // note, replacing \" with \"\" also works well if the arg is passed to a downstream .NET console app.\n // for example, the command line:\n // foo.exe \"myarg:\"\"my val\"\"\"\n // is parsed by a .NET console app into an arg array:\n // [ \"myarg:\\\"my val\\\"\" ]\n // which is the same end result when applying libuv quoting rules. although the actual\n // command line from libuv quoting rules would look like:\n // foo.exe \"myarg:\\\"my val\\\"\"\n //\n // 3) double-up slashes that precede a quote,\n // e.g. hello \\world => \"hello \\world\"\n // hello\\\"world => \"hello\\\\\"\"world\"\n // hello\\\\\"world => \"hello\\\\\\\\\"\"world\"\n // hello world\\ => \"hello world\\\\\"\n //\n // technically this is not required for a cmd.exe command line, or the batch argument parser.\n // the reasons for including this as a .cmd quoting rule are:\n //\n // a) this is optimized for the scenario where the argument is passed from the .cmd file to an\n // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.\n //\n // b) it's what we've been doing previously (by deferring to node default behavior) and we\n // haven't heard any complaints about that aspect.\n //\n // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be\n // escaped when used on the command line directly - even though within a .cmd file % can be escaped\n // by using %%.\n //\n // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts\n // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.\n //\n // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would\n // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the\n // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args\n // to an external program.\n //\n // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.\n // % can be escaped within a .cmd file.\n let reverse = '\"';\n let quoteHit = true;\n for (let i = arg.length; i > 0; i--) {\n // walk the string in reverse\n reverse += arg[i - 1];\n if (quoteHit && arg[i - 1] === '\\\\') {\n reverse += '\\\\'; // double the slash\n }\n else if (arg[i - 1] === '\"') {\n quoteHit = true;\n reverse += '\"'; // double the quote\n }\n else {\n quoteHit = false;\n }\n }\n reverse += '\"';\n return reverse\n .split('')\n .reverse()\n .join('');\n }\n _uvQuoteCmdArg(arg) {\n // Tool runner wraps child_process.spawn() and needs to apply the same quoting as\n // Node in certain cases where the undocumented spawn option windowsVerbatimArguments\n // is used.\n //\n // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,\n // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),\n // pasting copyright notice from Node within this function:\n //\n // Copyright Joyent, Inc. and other Node contributors. All rights reserved.\n //\n // Permission is hereby granted, free of charge, to any person obtaining a copy\n // of this software and associated documentation files (the \"Software\"), to\n // deal in the Software without restriction, including without limitation the\n // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n // sell copies of the Software, and to permit persons to whom the Software is\n // furnished to do so, subject to the following conditions:\n //\n // The above copyright notice and this permission notice shall be included in\n // all copies or substantial portions of the Software.\n //\n // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n // IN THE SOFTWARE.\n if (!arg) {\n // Need double quotation for empty argument\n return '\"\"';\n }\n if (!arg.includes(' ') && !arg.includes('\\t') && !arg.includes('\"')) {\n // No quotation needed\n return arg;\n }\n if (!arg.includes('\"') && !arg.includes('\\\\')) {\n // No embedded double quotes or backslashes, so I can just wrap\n // quote marks around the whole thing.\n return `\"${arg}\"`;\n }\n // Expected input/output:\n // input : hello\"world\n // output: \"hello\\\"world\"\n // input : hello\"\"world\n // output: \"hello\\\"\\\"world\"\n // input : hello\\world\n // output: hello\\world\n // input : hello\\\\world\n // output: hello\\\\world\n // input : hello\\\"world\n // output: \"hello\\\\\\\"world\"\n // input : hello\\\\\"world\n // output: \"hello\\\\\\\\\\\"world\"\n // input : hello world\\\n // output: \"hello world\\\\\" - note the comment in libuv actually reads \"hello world\\\"\n // but it appears the comment is wrong, it should be \"hello world\\\\\"\n let reverse = '\"';\n let quoteHit = true;\n for (let i = arg.length; i > 0; i--) {\n // walk the string in reverse\n reverse += arg[i - 1];\n if (quoteHit && arg[i - 1] === '\\\\') {\n reverse += '\\\\';\n }\n else if (arg[i - 1] === '\"') {\n quoteHit = true;\n reverse += '\\\\';\n }\n else {\n quoteHit = false;\n }\n }\n reverse += '\"';\n return reverse\n .split('')\n .reverse()\n .join('');\n }\n _cloneExecOptions(options) {\n options = options || {};\n const result = {\n cwd: options.cwd || process.cwd(),\n env: options.env || process.env,\n silent: options.silent || false,\n windowsVerbatimArguments: options.windowsVerbatimArguments || false,\n failOnStdErr: options.failOnStdErr || false,\n ignoreReturnCode: options.ignoreReturnCode || false,\n delay: options.delay || 10000\n };\n result.outStream = options.outStream || process.stdout;\n result.errStream = options.errStream || process.stderr;\n return result;\n }\n _getSpawnOptions(options, toolPath) {\n options = options || {};\n const result = {};\n result.cwd = options.cwd;\n result.env = options.env;\n result['windowsVerbatimArguments'] =\n options.windowsVerbatimArguments || this._isCmdFile();\n if (options.windowsVerbatimArguments) {\n result.argv0 = `\"${toolPath}\"`;\n }\n return result;\n }\n /**\n * Exec a tool.\n * Output will be streamed to the live console.\n * Returns promise with return code\n *\n * @param tool path to tool to exec\n * @param options optional exec options. See ExecOptions\n * @returns number\n */\n exec() {\n return __awaiter(this, void 0, void 0, function* () {\n // root the tool path if it is unrooted and contains relative pathing\n if (!ioUtil.isRooted(this.toolPath) &&\n (this.toolPath.includes('/') ||\n (IS_WINDOWS && this.toolPath.includes('\\\\')))) {\n // prefer options.cwd if it is specified, however options.cwd may also need to be rooted\n this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);\n }\n // if the tool is only a file name, then resolve it from the PATH\n // otherwise verify it exists (add extension on Windows if necessary)\n this.toolPath = yield io.which(this.toolPath, true);\n return new Promise((resolve, reject) => {\n this._debug(`exec tool: ${this.toolPath}`);\n this._debug('arguments:');\n for (const arg of this.args) {\n this._debug(` ${arg}`);\n }\n const optionsNonNull = this._cloneExecOptions(this.options);\n if (!optionsNonNull.silent && optionsNonNull.outStream) {\n optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);\n }\n const state = new ExecState(optionsNonNull, this.toolPath);\n state.on('debug', (message) => {\n this._debug(message);\n });\n const fileName = this._getSpawnFileName();\n const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));\n const stdbuffer = '';\n if (cp.stdout) {\n cp.stdout.on('data', (data) => {\n if (this.options.listeners && this.options.listeners.stdout) {\n this.options.listeners.stdout(data);\n }\n if (!optionsNonNull.silent && optionsNonNull.outStream) {\n optionsNonNull.outStream.write(data);\n }\n this._processLineBuffer(data, stdbuffer, (line) => {\n if (this.options.listeners && this.options.listeners.stdline) {\n this.options.listeners.stdline(line);\n }\n });\n });\n }\n const errbuffer = '';\n if (cp.stderr) {\n cp.stderr.on('data', (data) => {\n state.processStderr = true;\n if (this.options.listeners && this.options.listeners.stderr) {\n this.options.listeners.stderr(data);\n }\n if (!optionsNonNull.silent &&\n optionsNonNull.errStream &&\n optionsNonNull.outStream) {\n const s = optionsNonNull.failOnStdErr\n ? optionsNonNull.errStream\n : optionsNonNull.outStream;\n s.write(data);\n }\n this._processLineBuffer(data, errbuffer, (line) => {\n if (this.options.listeners && this.options.listeners.errline) {\n this.options.listeners.errline(line);\n }\n });\n });\n }\n cp.on('error', (err) => {\n state.processError = err.message;\n state.processExited = true;\n state.processClosed = true;\n state.CheckComplete();\n });\n cp.on('exit', (code) => {\n state.processExitCode = code;\n state.processExited = true;\n this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);\n state.CheckComplete();\n });\n cp.on('close', (code) => {\n state.processExitCode = code;\n state.processExited = true;\n state.processClosed = true;\n this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);\n state.CheckComplete();\n });\n state.on('done', (error, exitCode) => {\n if (stdbuffer.length > 0) {\n this.emit('stdline', stdbuffer);\n }\n if (errbuffer.length > 0) {\n this.emit('errline', errbuffer);\n }\n cp.removeAllListeners();\n if (error) {\n reject(error);\n }\n else {\n resolve(exitCode);\n }\n });\n if (this.options.input) {\n if (!cp.stdin) {\n throw new Error('child process missing stdin');\n }\n cp.stdin.end(this.options.input);\n }\n });\n });\n }\n}\nexports.ToolRunner = ToolRunner;\n/**\n * Convert an arg string to an array of args. Handles escaping\n *\n * @param argString string of arguments\n * @returns string[] array of arguments\n */\nfunction argStringToArray(argString) {\n const args = [];\n let inQuotes = false;\n let escaped = false;\n let arg = '';\n function append(c) {\n // we only escape double quotes.\n if (escaped && c !== '\"') {\n arg += '\\\\';\n }\n arg += c;\n escaped = false;\n }\n for (let i = 0; i < argString.length; i++) {\n const c = argString.charAt(i);\n if (c === '\"') {\n if (!escaped) {\n inQuotes = !inQuotes;\n }\n else {\n append(c);\n }\n continue;\n }\n if (c === '\\\\' && escaped) {\n append(c);\n continue;\n }\n if (c === '\\\\' && inQuotes) {\n escaped = true;\n continue;\n }\n if (c === ' ' && !inQuotes) {\n if (arg.length > 0) {\n args.push(arg);\n arg = '';\n }\n continue;\n }\n append(c);\n }\n if (arg.length > 0) {\n args.push(arg.trim());\n }\n return args;\n}\nexports.argStringToArray = argStringToArray;\nclass ExecState extends events.EventEmitter {\n constructor(options, toolPath) {\n super();\n this.processClosed = false; // tracks whether the process has exited and stdio is closed\n this.processError = '';\n this.processExitCode = 0;\n this.processExited = false; // tracks whether the process has exited\n this.processStderr = false; // tracks whether stderr was written to\n this.delay = 10000; // 10 seconds\n this.done = false;\n this.timeout = null;\n if (!toolPath) {\n throw new Error('toolPath must not be empty');\n }\n this.options = options;\n this.toolPath = toolPath;\n if (options.delay) {\n this.delay = options.delay;\n }\n }\n CheckComplete() {\n if (this.done) {\n return;\n }\n if (this.processClosed) {\n this._setResult();\n }\n else if (this.processExited) {\n this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);\n }\n }\n _debug(message) {\n this.emit('debug', message);\n }\n _setResult() {\n // determine whether there is an error\n let error;\n if (this.processExited) {\n if (this.processError) {\n error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);\n }\n else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {\n error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);\n }\n else if (this.processStderr && this.options.failOnStdErr) {\n error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);\n }\n }\n // clear the timeout\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.done = true;\n this.emit('done', error, this.processExitCode);\n }\n static HandleTimeout(state) {\n if (state.done) {\n return;\n }\n if (!state.processClosed && state.processExited) {\n const message = `The STDIO streams did not close within ${state.delay /\n 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;\n state._debug(message);\n }\n state._setResult();\n }\n}\n//# sourceMappingURL=toolrunner.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert_1 = require(\"assert\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;\nexports.IS_WINDOWS = process.platform === 'win32';\nfunction exists(fsPath) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield exports.stat(fsPath);\n }\n catch (err) {\n if (err.code === 'ENOENT') {\n return false;\n }\n throw err;\n }\n return true;\n });\n}\nexports.exists = exists;\nfunction isDirectory(fsPath, useStat = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);\n return stats.isDirectory();\n });\n}\nexports.isDirectory = isDirectory;\n/**\n * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:\n * \\, \\hello, \\\\hello\\share, C:, and C:\\hello (and corresponding alternate separator cases).\n */\nfunction isRooted(p) {\n p = normalizeSeparators(p);\n if (!p) {\n throw new Error('isRooted() parameter \"p\" cannot be empty');\n }\n if (exports.IS_WINDOWS) {\n return (p.startsWith('\\\\') || /^[A-Z]:/i.test(p) // e.g. \\ or \\hello or \\\\hello\n ); // e.g. C: or C:\\hello\n }\n return p.startsWith('/');\n}\nexports.isRooted = isRooted;\n/**\n * Recursively create a directory at `fsPath`.\n *\n * This implementation is optimistic, meaning it attempts to create the full\n * path first, and backs up the path stack from there.\n *\n * @param fsPath The path to create\n * @param maxDepth The maximum recursion depth\n * @param depth The current recursion depth\n */\nfunction mkdirP(fsPath, maxDepth = 1000, depth = 1) {\n return __awaiter(this, void 0, void 0, function* () {\n assert_1.ok(fsPath, 'a path argument must be provided');\n fsPath = path.resolve(fsPath);\n if (depth >= maxDepth)\n return exports.mkdir(fsPath);\n try {\n yield exports.mkdir(fsPath);\n return;\n }\n catch (err) {\n switch (err.code) {\n case 'ENOENT': {\n yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);\n yield exports.mkdir(fsPath);\n return;\n }\n default: {\n let stats;\n try {\n stats = yield exports.stat(fsPath);\n }\n catch (err2) {\n throw err;\n }\n if (!stats.isDirectory())\n throw err;\n }\n }\n }\n });\n}\nexports.mkdirP = mkdirP;\n/**\n * Best effort attempt to determine whether a file exists and is executable.\n * @param filePath file path to check\n * @param extensions additional file extensions to try\n * @return if file exists and is executable, returns the file path. otherwise empty string.\n */\nfunction tryGetExecutablePath(filePath, extensions) {\n return __awaiter(this, void 0, void 0, function* () {\n let stats = undefined;\n try {\n // test file exists\n stats = yield exports.stat(filePath);\n }\n catch (err) {\n if (err.code !== 'ENOENT') {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);\n }\n }\n if (stats && stats.isFile()) {\n if (exports.IS_WINDOWS) {\n // on Windows, test for valid extension\n const upperExt = path.extname(filePath).toUpperCase();\n if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {\n return filePath;\n }\n }\n else {\n if (isUnixExecutable(stats)) {\n return filePath;\n }\n }\n }\n // try each extension\n const originalFilePath = filePath;\n for (const extension of extensions) {\n filePath = originalFilePath + extension;\n stats = undefined;\n try {\n stats = yield exports.stat(filePath);\n }\n catch (err) {\n if (err.code !== 'ENOENT') {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);\n }\n }\n if (stats && stats.isFile()) {\n if (exports.IS_WINDOWS) {\n // preserve the case of the actual file (since an extension was appended)\n try {\n const directory = path.dirname(filePath);\n const upperName = path.basename(filePath).toUpperCase();\n for (const actualName of yield exports.readdir(directory)) {\n if (upperName === actualName.toUpperCase()) {\n filePath = path.join(directory, actualName);\n break;\n }\n }\n }\n catch (err) {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);\n }\n return filePath;\n }\n else {\n if (isUnixExecutable(stats)) {\n return filePath;\n }\n }\n }\n }\n return '';\n });\n}\nexports.tryGetExecutablePath = tryGetExecutablePath;\nfunction normalizeSeparators(p) {\n p = p || '';\n if (exports.IS_WINDOWS) {\n // convert slashes on Windows\n p = p.replace(/\\//g, '\\\\');\n // remove redundant slashes\n return p.replace(/\\\\\\\\+/g, '\\\\');\n }\n // remove redundant slashes\n return p.replace(/\\/\\/+/g, '/');\n}\n// on Mac/Linux, test the execute bit\n// R W X R W X R W X\n// 256 128 64 32 16 8 4 2 1\nfunction isUnixExecutable(stats) {\n return ((stats.mode & 1) > 0 ||\n ((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||\n ((stats.mode & 64) > 0 && stats.uid === process.getuid()));\n}\n//# sourceMappingURL=io-util.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst childProcess = require(\"child_process\");\nconst path = require(\"path\");\nconst util_1 = require(\"util\");\nconst ioUtil = require(\"./io-util\");\nconst exec = util_1.promisify(childProcess.exec);\n/**\n * Copies a file or folder.\n * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js\n *\n * @param source source path\n * @param dest destination path\n * @param options optional. See CopyOptions.\n */\nfunction cp(source, dest, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const { force, recursive } = readCopyOptions(options);\n const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;\n // Dest is an existing file, but not forcing\n if (destStat && destStat.isFile() && !force) {\n return;\n }\n // If dest is an existing directory, should copy inside.\n const newDest = destStat && destStat.isDirectory()\n ? path.join(dest, path.basename(source))\n : dest;\n if (!(yield ioUtil.exists(source))) {\n throw new Error(`no such file or directory: ${source}`);\n }\n const sourceStat = yield ioUtil.stat(source);\n if (sourceStat.isDirectory()) {\n if (!recursive) {\n throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);\n }\n else {\n yield cpDirRecursive(source, newDest, 0, force);\n }\n }\n else {\n if (path.relative(source, newDest) === '') {\n // a file cannot be copied to itself\n throw new Error(`'${newDest}' and '${source}' are the same file`);\n }\n yield copyFile(source, newDest, force);\n }\n });\n}\nexports.cp = cp;\n/**\n * Moves a path.\n *\n * @param source source path\n * @param dest destination path\n * @param options optional. See MoveOptions.\n */\nfunction mv(source, dest, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n if (yield ioUtil.exists(dest)) {\n let destExists = true;\n if (yield ioUtil.isDirectory(dest)) {\n // If dest is directory copy src into dest\n dest = path.join(dest, path.basename(source));\n destExists = yield ioUtil.exists(dest);\n }\n if (destExists) {\n if (options.force == null || options.force) {\n yield rmRF(dest);\n }\n else {\n throw new Error('Destination already exists');\n }\n }\n }\n yield mkdirP(path.dirname(dest));\n yield ioUtil.rename(source, dest);\n });\n}\nexports.mv = mv;\n/**\n * Remove a path recursively with force\n *\n * @param inputPath path to remove\n */\nfunction rmRF(inputPath) {\n return __awaiter(this, void 0, void 0, function* () {\n if (ioUtil.IS_WINDOWS) {\n // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another\n // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.\n try {\n if (yield ioUtil.isDirectory(inputPath, true)) {\n yield exec(`rd /s /q \"${inputPath}\"`);\n }\n else {\n yield exec(`del /f /a \"${inputPath}\"`);\n }\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n }\n // Shelling out fails to remove a symlink folder with missing source, this unlink catches that\n try {\n yield ioUtil.unlink(inputPath);\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n }\n }\n else {\n let isDir = false;\n try {\n isDir = yield ioUtil.isDirectory(inputPath);\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n return;\n }\n if (isDir) {\n yield exec(`rm -rf \"${inputPath}\"`);\n }\n else {\n yield ioUtil.unlink(inputPath);\n }\n }\n });\n}\nexports.rmRF = rmRF;\n/**\n * Make a directory. Creates the full path with folders in between\n * Will throw if it fails\n *\n * @param fsPath path to create\n * @returns Promise\n */\nfunction mkdirP(fsPath) {\n return __awaiter(this, void 0, void 0, function* () {\n yield ioUtil.mkdirP(fsPath);\n });\n}\nexports.mkdirP = mkdirP;\n/**\n * Returns path of a tool had the tool actually been invoked. Resolves via paths.\n * If you check and the tool does not exist, it will throw.\n *\n * @param tool name of the tool\n * @param check whether to check if tool exists\n * @returns Promise path to tool\n */\nfunction which(tool, check) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!tool) {\n throw new Error(\"parameter 'tool' is required\");\n }\n // recursive when check=true\n if (check) {\n const result = yield which(tool, false);\n if (!result) {\n if (ioUtil.IS_WINDOWS) {\n throw new Error(`Unable to locate executable file: ${tool}. 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.`);\n }\n else {\n throw new Error(`Unable to locate executable file: ${tool}. 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.`);\n }\n }\n }\n try {\n // build the list of extensions to try\n const extensions = [];\n if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {\n for (const extension of process.env.PATHEXT.split(path.delimiter)) {\n if (extension) {\n extensions.push(extension);\n }\n }\n }\n // if it's rooted, return it if exists. otherwise return empty.\n if (ioUtil.isRooted(tool)) {\n const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);\n if (filePath) {\n return filePath;\n }\n return '';\n }\n // if any path separators, return empty\n if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\\\'))) {\n return '';\n }\n // build the list of directories\n //\n // Note, technically \"where\" checks the current directory on Windows. From a toolkit perspective,\n // it feels like we should not do this. Checking the current directory seems like more of a use\n // case of a shell, and the which() function exposed by the toolkit should strive for consistency\n // across platforms.\n const directories = [];\n if (process.env.PATH) {\n for (const p of process.env.PATH.split(path.delimiter)) {\n if (p) {\n directories.push(p);\n }\n }\n }\n // return the first match\n for (const directory of directories) {\n const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);\n if (filePath) {\n return filePath;\n }\n }\n return '';\n }\n catch (err) {\n throw new Error(`which failed with message ${err.message}`);\n }\n });\n}\nexports.which = which;\nfunction readCopyOptions(options) {\n const force = options.force == null ? true : options.force;\n const recursive = Boolean(options.recursive);\n return { force, recursive };\n}\nfunction cpDirRecursive(sourceDir, destDir, currentDepth, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // Ensure there is not a run away recursive copy\n if (currentDepth >= 255)\n return;\n currentDepth++;\n yield mkdirP(destDir);\n const files = yield ioUtil.readdir(sourceDir);\n for (const fileName of files) {\n const srcFile = `${sourceDir}/${fileName}`;\n const destFile = `${destDir}/${fileName}`;\n const srcFileStat = yield ioUtil.lstat(srcFile);\n if (srcFileStat.isDirectory()) {\n // Recurse\n yield cpDirRecursive(srcFile, destFile, currentDepth, force);\n }\n else {\n yield copyFile(srcFile, destFile, force);\n }\n }\n // Change the mode for the newly created directory\n yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);\n });\n}\n// Buffered file copy\nfunction copyFile(srcFile, destFile, force) {\n return __awaiter(this, void 0, void 0, function* () {\n if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {\n // unlink/re-link it\n try {\n yield ioUtil.lstat(destFile);\n yield ioUtil.unlink(destFile);\n }\n catch (e) {\n // Try to override file permission\n if (e.code === 'EPERM') {\n yield ioUtil.chmod(destFile, '0666');\n yield ioUtil.unlink(destFile);\n }\n // other errors = it doesn't exist, no work to do\n }\n // Copy over symlink\n const symlinkFull = yield ioUtil.readlink(srcFile);\n yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);\n }\n else if (!(yield ioUtil.exists(destFile)) || force) {\n yield ioUtil.copyFile(srcFile, destFile);\n }\n });\n}\n//# sourceMappingURL=io.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.run = void 0;\nconst core = require(\"@actions/core\");\nconst exec = require(\"@actions/exec\");\nconst io = require(\"@actions/io\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nfunction run() {\n return __awaiter(this, void 0, void 0, function* () {\n const imageInput = core.getInput('image', { required: true });\n const tag = core.getInput('tag') || 'latest';\n const registry = core.getInput('registry', { required: true });\n const username = core.getInput('username', { required: true });\n const password = core.getInput('password', { required: true });\n const tlsVerify = core.getInput('tls-verify');\n const digestFileInput = core.getInput('digestfile');\n // get podman cli\n const podman = yield io.which('podman', true);\n const imageToPush = `${imageInput}:${tag}`;\n let pushMsg = `Pushing ${imageToPush} to ${registry}`;\n if (username) {\n pushMsg += ` as ${username}`;\n }\n core.info(pushMsg);\n //check if images exist in podman's local storage\n const checkImages = yield execute(podman, ['images', '--format', 'json']);\n const parsedCheckImages = JSON.parse(checkImages.stdout);\n // this is to temporarily solve an issue with the case-sensitive of the property field name. i.e it is Names or names??\n const nameKeyMixedCase = parsedCheckImages[0] && Object.keys(parsedCheckImages[0]).find(key => 'names' === key.toLowerCase());\n const imagesFound = parsedCheckImages.\n filter((image) => image[nameKeyMixedCase] && image[nameKeyMixedCase].find((name) => name.includes(`${imageToPush}`))).\n map((image) => image[nameKeyMixedCase]);\n if (imagesFound.length === 0) {\n //check inside the docker daemon local storage\n yield execute(podman, ['pull', `docker-daemon:${imageToPush}`]);\n }\n // push image\n const registryPath = `${registry.replace(/\\/$/, '')}/${imageToPush}`;\n const creds = `${username}:${password}`;\n let digestFile = digestFileInput;\n if (!digestFile) {\n digestFile = `${imageToPush.replace(/[/\\\\/?%*:|\"<>]/g, \"-\")}_digest.txt`;\n }\n const args = ['push',\n '--quiet',\n '--digestfile', digestFile,\n '--creds', creds,\n imageToPush,\n registryPath\n ];\n // check if tls-verify is not set to null\n if (tlsVerify) {\n args.push(`--tls-verify=${tlsVerify}`);\n }\n yield execute(podman, args);\n core.info(`Successfully pushed ${imageToPush} to ${registryPath}.`);\n core.setOutput('registry-path', registryPath);\n try {\n const digest = (yield fs.promises.readFile(digestFile)).toString();\n core.info(digest);\n core.setOutput('digest', digest);\n }\n catch (err) {\n core.warning(`Failed to read digest file \"${digestFile}\": ${err}`);\n }\n });\n}\nexports.run = run;\nfunction execute(executable, args, execOptions = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n let stdout = \"\";\n let stderr = \"\";\n const finalExecOptions = Object.assign({}, execOptions);\n finalExecOptions.ignoreReturnCode = true; // the return code is processed below\n finalExecOptions.listeners = {\n stdline: (line) => {\n stdout += line + \"\\n\";\n },\n errline: (line) => {\n stderr += line + \"\\n\";\n },\n };\n const exitCode = yield exec.exec(executable, args, finalExecOptions);\n if (execOptions.ignoreReturnCode !== true && exitCode !== 0) {\n // Throwing the stderr as part of the Error makes the stderr show up in the action outline, which saves some clicking when debugging.\n let error = `${path.basename(executable)} exited with code ${exitCode}`;\n if (stderr) {\n error += `\\n${stderr}`;\n }\n throw new Error(error);\n }\n return {\n exitCode, stdout, stderr\n };\n });\n}\nrun().catch(core.setFailed);\n","module.exports = require(\"assert\");;","module.exports = require(\"child_process\");;","module.exports = require(\"events\");;","module.exports = require(\"fs\");;","module.exports = require(\"os\");;","module.exports = require(\"path\");;","module.exports = require(\"util\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\n__webpack_require__.ab = __dirname + \"/\";","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(144);\n"]} \ No newline at end of file +{"version":3,"sources":["../webpack:/push-to-registry/node_modules/@actions/core/lib/command.js","../webpack:/push-to-registry/node_modules/@actions/core/lib/core.js","../webpack:/push-to-registry/node_modules/@actions/core/lib/file-command.js","../webpack:/push-to-registry/node_modules/@actions/core/lib/utils.js","../webpack:/push-to-registry/node_modules/@actions/exec/lib/exec.js","../webpack:/push-to-registry/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/push-to-registry/node_modules/@actions/io/lib/io-util.js","../webpack:/push-to-registry/node_modules/@actions/io/lib/io.js","../webpack:/push-to-registry/src/index.ts","../webpack:/push-to-registry/external \"assert\"","../webpack:/push-to-registry/external \"child_process\"","../webpack:/push-to-registry/external \"events\"","../webpack:/push-to-registry/external \"fs\"","../webpack:/push-to-registry/external \"os\"","../webpack:/push-to-registry/external \"path\"","../webpack:/push-to-registry/external \"util\"","../webpack:/push-to-registry/webpack/bootstrap","../webpack:/push-to-registry/webpack/runtime/compat","../webpack:/push-to-registry/webpack/startup"],"names":["__importStar","this","mod","__esModule","result","k","Object","hasOwnProperty","call","defineProperty","exports","value","os","__webpack_require__","utils_1","issueCommand","command","properties","message","cmd","Command","process","stdout","write","toString","EOL","issue","name","CMD_STRING","[object Object]","cmdStr","keys","length","first","key","val","escapeProperty","escapeData","s","toCommandValue","replace","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","done","then","apply","command_1","file_command_1","path","ExitCode","exportVariable","convertedVal","env","filePath","delimiter","commandValue","setSecret","secret","addPath","inputPath","getInput","options","toUpperCase","required","Error","trim","setOutput","setCommandEcho","enabled","setFailed","exitCode","Failure","error","isDebug","debug","warning","info","startGroup","endGroup","group","fn","saveState","getState","fs","existsSync","appendFileSync","encoding","input","undefined","String","JSON","stringify","tr","exec","commandLine","args","commandArgs","argStringToArray","toolPath","slice","concat","runner","ToolRunner","events","child","io","ioUtil","IS_WINDOWS","platform","EventEmitter","super","listeners","noPrefix","_getSpawnFileName","_getSpawnArgs","_isCmdFile","a","windowsVerbatimArguments","_windowsQuoteCmdArg","data","strBuffer","onLine","n","indexOf","line","substring","err","_debug","argline","str","end","endsWith","upperToolPath","_endsWith","arg","_uvQuoteCmdArg","cmdSpecialChars","needsQuotes","char","some","x","reverse","quoteHit","i","split","join","includes","cwd","silent","failOnStdErr","ignoreReturnCode","delay","outStream","errStream","stderr","argv0","isRooted","which","optionsNonNull","_cloneExecOptions","_getCommandString","state","ExecState","on","fileName","cp","spawn","_getSpawnOptions","stdbuffer","_processLineBuffer","stdline","errbuffer","processStderr","errline","processError","processExited","processClosed","CheckComplete","code","processExitCode","emit","removeAllListeners","stdin","argString","inQuotes","escaped","append","c","charAt","push","timeout","_setResult","setTimeout","HandleTimeout","clearTimeout","_a","assert_1","promises","chmod","copyFile","lstat","mkdir","readdir","readlink","rename","rmdir","stat","symlink","unlink","exists","fsPath","isDirectory","useStat","stats","p","normalizeSeparators","startsWith","test","mkdirP","maxDepth","depth","ok","dirname","err2","tryGetExecutablePath","extensions","console","log","isFile","upperExt","extname","validExt","isUnixExecutable","originalFilePath","extension","directory","upperName","basename","actualName","mode","gid","getgid","uid","getuid","childProcess","util_1","promisify","source","dest","force","recursive","readCopyOptions","destStat","newDest","sourceStat","cpDirRecursive","relative","mv","destExists","rmRF","isDir","tool","check","PATHEXT","directories","PATH","sep","Boolean","sourceDir","destDir","currentDepth","files","srcFile","destFile","srcFileStat","isSymbolicLink","symlinkFull","core","podmanPath","isImageFromDocker","imageToPush","async","getPodmanPath","dockerBaseUrl","run","imageInput","tag","registry","username","password","tlsVerify","digestFileInput","isPresentInPodman","checkImageInPodman","isPresentInDocker","pullImageFromDocker","isPodmanImageLatest","isPodmanLocalImageLatest","pushMsg","registryWithoutTrailingSlash","registryPath","creds","digestFile","execute","digest","readFile","podmanLocalImageTimeStamp","pulledImageCreationTimeStamp","podmanImageTime","Date","getTime","dockerImageTime","removeDockerImage","executable","execOptions","finalExecOptions","catch","finally","module","require","__webpack_module_cache__","moduleId","threw","__webpack_modules__","ab","__dirname"],"mappings":"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","file":"index.js","sourcesContent":["\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Commands\n *\n * Command Format:\n * ::name key=value,key=value::message\n *\n * Examples:\n * ::warning::This is the message\n * ::set-env name=MY_VAR::some value\n */\nfunction issueCommand(command, properties, message) {\n const cmd = new Command(command, properties, message);\n process.stdout.write(cmd.toString() + os.EOL);\n}\nexports.issueCommand = issueCommand;\nfunction issue(name, message = '') {\n issueCommand(name, {}, message);\n}\nexports.issue = issue;\nconst CMD_STRING = '::';\nclass Command {\n constructor(command, properties, message) {\n if (!command) {\n command = 'missing.command';\n }\n this.command = command;\n this.properties = properties;\n this.message = message;\n }\n toString() {\n let cmdStr = CMD_STRING + this.command;\n if (this.properties && Object.keys(this.properties).length > 0) {\n cmdStr += ' ';\n let first = true;\n for (const key in this.properties) {\n if (this.properties.hasOwnProperty(key)) {\n const val = this.properties[key];\n if (val) {\n if (first) {\n first = false;\n }\n else {\n cmdStr += ',';\n }\n cmdStr += `${key}=${escapeProperty(val)}`;\n }\n }\n }\n }\n cmdStr += `${CMD_STRING}${escapeData(this.message)}`;\n return cmdStr;\n }\n}\nfunction escapeData(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A');\n}\nfunction escapeProperty(s) {\n return utils_1.toCommandValue(s)\n .replace(/%/g, '%25')\n .replace(/\\r/g, '%0D')\n .replace(/\\n/g, '%0A')\n .replace(/:/g, '%3A')\n .replace(/,/g, '%2C');\n}\n//# sourceMappingURL=command.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst command_1 = require(\"./command\");\nconst file_command_1 = require(\"./file-command\");\nconst utils_1 = require(\"./utils\");\nconst os = __importStar(require(\"os\"));\nconst path = __importStar(require(\"path\"));\n/**\n * The code to exit an action\n */\nvar ExitCode;\n(function (ExitCode) {\n /**\n * A code indicating that the action was successful\n */\n ExitCode[ExitCode[\"Success\"] = 0] = \"Success\";\n /**\n * A code indicating that the action was a failure\n */\n ExitCode[ExitCode[\"Failure\"] = 1] = \"Failure\";\n})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));\n//-----------------------------------------------------------------------\n// Variables\n//-----------------------------------------------------------------------\n/**\n * Sets env variable for this action and future actions in the job\n * @param name the name of the variable to set\n * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction exportVariable(name, val) {\n const convertedVal = utils_1.toCommandValue(val);\n process.env[name] = convertedVal;\n const filePath = process.env['GITHUB_ENV'] || '';\n if (filePath) {\n const delimiter = '_GitHubActionsFileCommandDelimeter_';\n const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;\n file_command_1.issueCommand('ENV', commandValue);\n }\n else {\n command_1.issueCommand('set-env', { name }, convertedVal);\n }\n}\nexports.exportVariable = exportVariable;\n/**\n * Registers a secret which will get masked from logs\n * @param secret value of the secret\n */\nfunction setSecret(secret) {\n command_1.issueCommand('add-mask', {}, secret);\n}\nexports.setSecret = setSecret;\n/**\n * Prepends inputPath to the PATH (for this action and future actions)\n * @param inputPath\n */\nfunction addPath(inputPath) {\n const filePath = process.env['GITHUB_PATH'] || '';\n if (filePath) {\n file_command_1.issueCommand('PATH', inputPath);\n }\n else {\n command_1.issueCommand('add-path', {}, inputPath);\n }\n process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;\n}\nexports.addPath = addPath;\n/**\n * Gets the value of an input. The value is also trimmed.\n *\n * @param name name of the input to get\n * @param options optional. See InputOptions.\n * @returns string\n */\nfunction getInput(name, options) {\n const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';\n if (options && options.required && !val) {\n throw new Error(`Input required and not supplied: ${name}`);\n }\n return val.trim();\n}\nexports.getInput = getInput;\n/**\n * Sets the value of an output.\n *\n * @param name name of the output to set\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setOutput(name, value) {\n command_1.issueCommand('set-output', { name }, value);\n}\nexports.setOutput = setOutput;\n/**\n * Enables or disables the echoing of commands into stdout for the rest of the step.\n * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.\n *\n */\nfunction setCommandEcho(enabled) {\n command_1.issue('echo', enabled ? 'on' : 'off');\n}\nexports.setCommandEcho = setCommandEcho;\n//-----------------------------------------------------------------------\n// Results\n//-----------------------------------------------------------------------\n/**\n * Sets the action status to failed.\n * When the action exits it will be with an exit code of 1\n * @param message add error issue message\n */\nfunction setFailed(message) {\n process.exitCode = ExitCode.Failure;\n error(message);\n}\nexports.setFailed = setFailed;\n//-----------------------------------------------------------------------\n// Logging Commands\n//-----------------------------------------------------------------------\n/**\n * Gets whether Actions Step Debug is on or not\n */\nfunction isDebug() {\n return process.env['RUNNER_DEBUG'] === '1';\n}\nexports.isDebug = isDebug;\n/**\n * Writes debug message to user log\n * @param message debug message\n */\nfunction debug(message) {\n command_1.issueCommand('debug', {}, message);\n}\nexports.debug = debug;\n/**\n * Adds an error issue\n * @param message error issue message. Errors will be converted to string via toString()\n */\nfunction error(message) {\n command_1.issue('error', message instanceof Error ? message.toString() : message);\n}\nexports.error = error;\n/**\n * Adds an warning issue\n * @param message warning issue message. Errors will be converted to string via toString()\n */\nfunction warning(message) {\n command_1.issue('warning', message instanceof Error ? message.toString() : message);\n}\nexports.warning = warning;\n/**\n * Writes info to log with console.log.\n * @param message info message\n */\nfunction info(message) {\n process.stdout.write(message + os.EOL);\n}\nexports.info = info;\n/**\n * Begin an output group.\n *\n * Output until the next `groupEnd` will be foldable in this group\n *\n * @param name The name of the output group\n */\nfunction startGroup(name) {\n command_1.issue('group', name);\n}\nexports.startGroup = startGroup;\n/**\n * End an output group.\n */\nfunction endGroup() {\n command_1.issue('endgroup');\n}\nexports.endGroup = endGroup;\n/**\n * Wrap an asynchronous function call in a group.\n *\n * Returns the same type as the function itself.\n *\n * @param name The name of the group\n * @param fn The function to wrap in the group\n */\nfunction group(name, fn) {\n return __awaiter(this, void 0, void 0, function* () {\n startGroup(name);\n let result;\n try {\n result = yield fn();\n }\n finally {\n endGroup();\n }\n return result;\n });\n}\nexports.group = group;\n//-----------------------------------------------------------------------\n// Wrapper action state\n//-----------------------------------------------------------------------\n/**\n * Saves state for current action, the state can only be retrieved by this action's post job execution.\n *\n * @param name name of the state to store\n * @param value value to store. Non-string values will be converted to a string via JSON.stringify\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction saveState(name, value) {\n command_1.issueCommand('save-state', { name }, value);\n}\nexports.saveState = saveState;\n/**\n * Gets the value of an state set by this action's main execution.\n *\n * @param name name of the state to get\n * @returns string\n */\nfunction getState(name) {\n return process.env[`STATE_${name}`] || '';\n}\nexports.getState = getState;\n//# sourceMappingURL=core.js.map","\"use strict\";\n// For internal use, subject to change.\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst fs = __importStar(require(\"fs\"));\nconst os = __importStar(require(\"os\"));\nconst utils_1 = require(\"./utils\");\nfunction issueCommand(command, message) {\n const filePath = process.env[`GITHUB_${command}`];\n if (!filePath) {\n throw new Error(`Unable to find environment variable for file command ${command}`);\n }\n if (!fs.existsSync(filePath)) {\n throw new Error(`Missing file at path: ${filePath}`);\n }\n fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {\n encoding: 'utf8'\n });\n}\nexports.issueCommand = issueCommand;\n//# sourceMappingURL=file-command.js.map","\"use strict\";\n// We use any as a valid input type\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Sanitizes an input into a string so it can be passed into issueCommand safely\n * @param input input to sanitize into a string\n */\nfunction toCommandValue(input) {\n if (input === null || input === undefined) {\n return '';\n }\n else if (typeof input === 'string' || input instanceof String) {\n return input;\n }\n return JSON.stringify(input);\n}\nexports.toCommandValue = toCommandValue;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tr = __importStar(require(\"./toolrunner\"));\n/**\n * Exec a command.\n * Output will be streamed to the live console.\n * Returns promise with return code\n *\n * @param commandLine command to execute (can include additional args). Must be correctly escaped.\n * @param args optional arguments for tool. Escaping is handled by the lib.\n * @param options optional exec options. See ExecOptions\n * @returns Promise exit code\n */\nfunction exec(commandLine, args, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const commandArgs = tr.argStringToArray(commandLine);\n if (commandArgs.length === 0) {\n throw new Error(`Parameter 'commandLine' cannot be null or empty.`);\n }\n // Path to tool to execute should be first arg\n const toolPath = commandArgs[0];\n args = commandArgs.slice(1).concat(args || []);\n const runner = new tr.ToolRunner(toolPath, args, options);\n return runner.exec();\n });\n}\nexports.exec = exec;\n//# sourceMappingURL=exec.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst os = __importStar(require(\"os\"));\nconst events = __importStar(require(\"events\"));\nconst child = __importStar(require(\"child_process\"));\nconst path = __importStar(require(\"path\"));\nconst io = __importStar(require(\"@actions/io\"));\nconst ioUtil = __importStar(require(\"@actions/io/lib/io-util\"));\n/* eslint-disable @typescript-eslint/unbound-method */\nconst IS_WINDOWS = process.platform === 'win32';\n/*\n * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.\n */\nclass ToolRunner extends events.EventEmitter {\n constructor(toolPath, args, options) {\n super();\n if (!toolPath) {\n throw new Error(\"Parameter 'toolPath' cannot be null or empty.\");\n }\n this.toolPath = toolPath;\n this.args = args || [];\n this.options = options || {};\n }\n _debug(message) {\n if (this.options.listeners && this.options.listeners.debug) {\n this.options.listeners.debug(message);\n }\n }\n _getCommandString(options, noPrefix) {\n const toolPath = this._getSpawnFileName();\n const args = this._getSpawnArgs(options);\n let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool\n if (IS_WINDOWS) {\n // Windows + cmd file\n if (this._isCmdFile()) {\n cmd += toolPath;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n // Windows + verbatim\n else if (options.windowsVerbatimArguments) {\n cmd += `\"${toolPath}\"`;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n // Windows (regular)\n else {\n cmd += this._windowsQuoteCmdArg(toolPath);\n for (const a of args) {\n cmd += ` ${this._windowsQuoteCmdArg(a)}`;\n }\n }\n }\n else {\n // OSX/Linux - this can likely be improved with some form of quoting.\n // creating processes on Unix is fundamentally different than Windows.\n // on Unix, execvp() takes an arg array.\n cmd += toolPath;\n for (const a of args) {\n cmd += ` ${a}`;\n }\n }\n return cmd;\n }\n _processLineBuffer(data, strBuffer, onLine) {\n try {\n let s = strBuffer + data.toString();\n let n = s.indexOf(os.EOL);\n while (n > -1) {\n const line = s.substring(0, n);\n onLine(line);\n // the rest of the string ...\n s = s.substring(n + os.EOL.length);\n n = s.indexOf(os.EOL);\n }\n strBuffer = s;\n }\n catch (err) {\n // streaming lines to console is best effort. Don't fail a build.\n this._debug(`error processing line. Failed with error ${err}`);\n }\n }\n _getSpawnFileName() {\n if (IS_WINDOWS) {\n if (this._isCmdFile()) {\n return process.env['COMSPEC'] || 'cmd.exe';\n }\n }\n return this.toolPath;\n }\n _getSpawnArgs(options) {\n if (IS_WINDOWS) {\n if (this._isCmdFile()) {\n let argline = `/D /S /C \"${this._windowsQuoteCmdArg(this.toolPath)}`;\n for (const a of this.args) {\n argline += ' ';\n argline += options.windowsVerbatimArguments\n ? a\n : this._windowsQuoteCmdArg(a);\n }\n argline += '\"';\n return [argline];\n }\n }\n return this.args;\n }\n _endsWith(str, end) {\n return str.endsWith(end);\n }\n _isCmdFile() {\n const upperToolPath = this.toolPath.toUpperCase();\n return (this._endsWith(upperToolPath, '.CMD') ||\n this._endsWith(upperToolPath, '.BAT'));\n }\n _windowsQuoteCmdArg(arg) {\n // for .exe, apply the normal quoting rules that libuv applies\n if (!this._isCmdFile()) {\n return this._uvQuoteCmdArg(arg);\n }\n // otherwise apply quoting rules specific to the cmd.exe command line parser.\n // the libuv rules are generic and are not designed specifically for cmd.exe\n // command line parser.\n //\n // for a detailed description of the cmd.exe command line parser, refer to\n // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912\n // need quotes for empty arg\n if (!arg) {\n return '\"\"';\n }\n // determine whether the arg needs to be quoted\n const cmdSpecialChars = [\n ' ',\n '\\t',\n '&',\n '(',\n ')',\n '[',\n ']',\n '{',\n '}',\n '^',\n '=',\n ';',\n '!',\n \"'\",\n '+',\n ',',\n '`',\n '~',\n '|',\n '<',\n '>',\n '\"'\n ];\n let needsQuotes = false;\n for (const char of arg) {\n if (cmdSpecialChars.some(x => x === char)) {\n needsQuotes = true;\n break;\n }\n }\n // short-circuit if quotes not needed\n if (!needsQuotes) {\n return arg;\n }\n // the following quoting rules are very similar to the rules that by libuv applies.\n //\n // 1) wrap the string in quotes\n //\n // 2) double-up quotes - i.e. \" => \"\"\n //\n // this is different from the libuv quoting rules. libuv replaces \" with \\\", which unfortunately\n // doesn't work well with a cmd.exe command line.\n //\n // note, replacing \" with \"\" also works well if the arg is passed to a downstream .NET console app.\n // for example, the command line:\n // foo.exe \"myarg:\"\"my val\"\"\"\n // is parsed by a .NET console app into an arg array:\n // [ \"myarg:\\\"my val\\\"\" ]\n // which is the same end result when applying libuv quoting rules. although the actual\n // command line from libuv quoting rules would look like:\n // foo.exe \"myarg:\\\"my val\\\"\"\n //\n // 3) double-up slashes that precede a quote,\n // e.g. hello \\world => \"hello \\world\"\n // hello\\\"world => \"hello\\\\\"\"world\"\n // hello\\\\\"world => \"hello\\\\\\\\\"\"world\"\n // hello world\\ => \"hello world\\\\\"\n //\n // technically this is not required for a cmd.exe command line, or the batch argument parser.\n // the reasons for including this as a .cmd quoting rule are:\n //\n // a) this is optimized for the scenario where the argument is passed from the .cmd file to an\n // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.\n //\n // b) it's what we've been doing previously (by deferring to node default behavior) and we\n // haven't heard any complaints about that aspect.\n //\n // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be\n // escaped when used on the command line directly - even though within a .cmd file % can be escaped\n // by using %%.\n //\n // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts\n // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.\n //\n // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would\n // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the\n // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args\n // to an external program.\n //\n // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.\n // % can be escaped within a .cmd file.\n let reverse = '\"';\n let quoteHit = true;\n for (let i = arg.length; i > 0; i--) {\n // walk the string in reverse\n reverse += arg[i - 1];\n if (quoteHit && arg[i - 1] === '\\\\') {\n reverse += '\\\\'; // double the slash\n }\n else if (arg[i - 1] === '\"') {\n quoteHit = true;\n reverse += '\"'; // double the quote\n }\n else {\n quoteHit = false;\n }\n }\n reverse += '\"';\n return reverse\n .split('')\n .reverse()\n .join('');\n }\n _uvQuoteCmdArg(arg) {\n // Tool runner wraps child_process.spawn() and needs to apply the same quoting as\n // Node in certain cases where the undocumented spawn option windowsVerbatimArguments\n // is used.\n //\n // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,\n // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),\n // pasting copyright notice from Node within this function:\n //\n // Copyright Joyent, Inc. and other Node contributors. All rights reserved.\n //\n // Permission is hereby granted, free of charge, to any person obtaining a copy\n // of this software and associated documentation files (the \"Software\"), to\n // deal in the Software without restriction, including without limitation the\n // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n // sell copies of the Software, and to permit persons to whom the Software is\n // furnished to do so, subject to the following conditions:\n //\n // The above copyright notice and this permission notice shall be included in\n // all copies or substantial portions of the Software.\n //\n // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n // IN THE SOFTWARE.\n if (!arg) {\n // Need double quotation for empty argument\n return '\"\"';\n }\n if (!arg.includes(' ') && !arg.includes('\\t') && !arg.includes('\"')) {\n // No quotation needed\n return arg;\n }\n if (!arg.includes('\"') && !arg.includes('\\\\')) {\n // No embedded double quotes or backslashes, so I can just wrap\n // quote marks around the whole thing.\n return `\"${arg}\"`;\n }\n // Expected input/output:\n // input : hello\"world\n // output: \"hello\\\"world\"\n // input : hello\"\"world\n // output: \"hello\\\"\\\"world\"\n // input : hello\\world\n // output: hello\\world\n // input : hello\\\\world\n // output: hello\\\\world\n // input : hello\\\"world\n // output: \"hello\\\\\\\"world\"\n // input : hello\\\\\"world\n // output: \"hello\\\\\\\\\\\"world\"\n // input : hello world\\\n // output: \"hello world\\\\\" - note the comment in libuv actually reads \"hello world\\\"\n // but it appears the comment is wrong, it should be \"hello world\\\\\"\n let reverse = '\"';\n let quoteHit = true;\n for (let i = arg.length; i > 0; i--) {\n // walk the string in reverse\n reverse += arg[i - 1];\n if (quoteHit && arg[i - 1] === '\\\\') {\n reverse += '\\\\';\n }\n else if (arg[i - 1] === '\"') {\n quoteHit = true;\n reverse += '\\\\';\n }\n else {\n quoteHit = false;\n }\n }\n reverse += '\"';\n return reverse\n .split('')\n .reverse()\n .join('');\n }\n _cloneExecOptions(options) {\n options = options || {};\n const result = {\n cwd: options.cwd || process.cwd(),\n env: options.env || process.env,\n silent: options.silent || false,\n windowsVerbatimArguments: options.windowsVerbatimArguments || false,\n failOnStdErr: options.failOnStdErr || false,\n ignoreReturnCode: options.ignoreReturnCode || false,\n delay: options.delay || 10000\n };\n result.outStream = options.outStream || process.stdout;\n result.errStream = options.errStream || process.stderr;\n return result;\n }\n _getSpawnOptions(options, toolPath) {\n options = options || {};\n const result = {};\n result.cwd = options.cwd;\n result.env = options.env;\n result['windowsVerbatimArguments'] =\n options.windowsVerbatimArguments || this._isCmdFile();\n if (options.windowsVerbatimArguments) {\n result.argv0 = `\"${toolPath}\"`;\n }\n return result;\n }\n /**\n * Exec a tool.\n * Output will be streamed to the live console.\n * Returns promise with return code\n *\n * @param tool path to tool to exec\n * @param options optional exec options. See ExecOptions\n * @returns number\n */\n exec() {\n return __awaiter(this, void 0, void 0, function* () {\n // root the tool path if it is unrooted and contains relative pathing\n if (!ioUtil.isRooted(this.toolPath) &&\n (this.toolPath.includes('/') ||\n (IS_WINDOWS && this.toolPath.includes('\\\\')))) {\n // prefer options.cwd if it is specified, however options.cwd may also need to be rooted\n this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);\n }\n // if the tool is only a file name, then resolve it from the PATH\n // otherwise verify it exists (add extension on Windows if necessary)\n this.toolPath = yield io.which(this.toolPath, true);\n return new Promise((resolve, reject) => {\n this._debug(`exec tool: ${this.toolPath}`);\n this._debug('arguments:');\n for (const arg of this.args) {\n this._debug(` ${arg}`);\n }\n const optionsNonNull = this._cloneExecOptions(this.options);\n if (!optionsNonNull.silent && optionsNonNull.outStream) {\n optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);\n }\n const state = new ExecState(optionsNonNull, this.toolPath);\n state.on('debug', (message) => {\n this._debug(message);\n });\n const fileName = this._getSpawnFileName();\n const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));\n const stdbuffer = '';\n if (cp.stdout) {\n cp.stdout.on('data', (data) => {\n if (this.options.listeners && this.options.listeners.stdout) {\n this.options.listeners.stdout(data);\n }\n if (!optionsNonNull.silent && optionsNonNull.outStream) {\n optionsNonNull.outStream.write(data);\n }\n this._processLineBuffer(data, stdbuffer, (line) => {\n if (this.options.listeners && this.options.listeners.stdline) {\n this.options.listeners.stdline(line);\n }\n });\n });\n }\n const errbuffer = '';\n if (cp.stderr) {\n cp.stderr.on('data', (data) => {\n state.processStderr = true;\n if (this.options.listeners && this.options.listeners.stderr) {\n this.options.listeners.stderr(data);\n }\n if (!optionsNonNull.silent &&\n optionsNonNull.errStream &&\n optionsNonNull.outStream) {\n const s = optionsNonNull.failOnStdErr\n ? optionsNonNull.errStream\n : optionsNonNull.outStream;\n s.write(data);\n }\n this._processLineBuffer(data, errbuffer, (line) => {\n if (this.options.listeners && this.options.listeners.errline) {\n this.options.listeners.errline(line);\n }\n });\n });\n }\n cp.on('error', (err) => {\n state.processError = err.message;\n state.processExited = true;\n state.processClosed = true;\n state.CheckComplete();\n });\n cp.on('exit', (code) => {\n state.processExitCode = code;\n state.processExited = true;\n this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);\n state.CheckComplete();\n });\n cp.on('close', (code) => {\n state.processExitCode = code;\n state.processExited = true;\n state.processClosed = true;\n this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);\n state.CheckComplete();\n });\n state.on('done', (error, exitCode) => {\n if (stdbuffer.length > 0) {\n this.emit('stdline', stdbuffer);\n }\n if (errbuffer.length > 0) {\n this.emit('errline', errbuffer);\n }\n cp.removeAllListeners();\n if (error) {\n reject(error);\n }\n else {\n resolve(exitCode);\n }\n });\n if (this.options.input) {\n if (!cp.stdin) {\n throw new Error('child process missing stdin');\n }\n cp.stdin.end(this.options.input);\n }\n });\n });\n }\n}\nexports.ToolRunner = ToolRunner;\n/**\n * Convert an arg string to an array of args. Handles escaping\n *\n * @param argString string of arguments\n * @returns string[] array of arguments\n */\nfunction argStringToArray(argString) {\n const args = [];\n let inQuotes = false;\n let escaped = false;\n let arg = '';\n function append(c) {\n // we only escape double quotes.\n if (escaped && c !== '\"') {\n arg += '\\\\';\n }\n arg += c;\n escaped = false;\n }\n for (let i = 0; i < argString.length; i++) {\n const c = argString.charAt(i);\n if (c === '\"') {\n if (!escaped) {\n inQuotes = !inQuotes;\n }\n else {\n append(c);\n }\n continue;\n }\n if (c === '\\\\' && escaped) {\n append(c);\n continue;\n }\n if (c === '\\\\' && inQuotes) {\n escaped = true;\n continue;\n }\n if (c === ' ' && !inQuotes) {\n if (arg.length > 0) {\n args.push(arg);\n arg = '';\n }\n continue;\n }\n append(c);\n }\n if (arg.length > 0) {\n args.push(arg.trim());\n }\n return args;\n}\nexports.argStringToArray = argStringToArray;\nclass ExecState extends events.EventEmitter {\n constructor(options, toolPath) {\n super();\n this.processClosed = false; // tracks whether the process has exited and stdio is closed\n this.processError = '';\n this.processExitCode = 0;\n this.processExited = false; // tracks whether the process has exited\n this.processStderr = false; // tracks whether stderr was written to\n this.delay = 10000; // 10 seconds\n this.done = false;\n this.timeout = null;\n if (!toolPath) {\n throw new Error('toolPath must not be empty');\n }\n this.options = options;\n this.toolPath = toolPath;\n if (options.delay) {\n this.delay = options.delay;\n }\n }\n CheckComplete() {\n if (this.done) {\n return;\n }\n if (this.processClosed) {\n this._setResult();\n }\n else if (this.processExited) {\n this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);\n }\n }\n _debug(message) {\n this.emit('debug', message);\n }\n _setResult() {\n // determine whether there is an error\n let error;\n if (this.processExited) {\n if (this.processError) {\n error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);\n }\n else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {\n error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);\n }\n else if (this.processStderr && this.options.failOnStdErr) {\n error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);\n }\n }\n // clear the timeout\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.done = true;\n this.emit('done', error, this.processExitCode);\n }\n static HandleTimeout(state) {\n if (state.done) {\n return;\n }\n if (!state.processClosed && state.processExited) {\n const message = `The STDIO streams did not close within ${state.delay /\n 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;\n state._debug(message);\n }\n state._setResult();\n }\n}\n//# sourceMappingURL=toolrunner.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert_1 = require(\"assert\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;\nexports.IS_WINDOWS = process.platform === 'win32';\nfunction exists(fsPath) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield exports.stat(fsPath);\n }\n catch (err) {\n if (err.code === 'ENOENT') {\n return false;\n }\n throw err;\n }\n return true;\n });\n}\nexports.exists = exists;\nfunction isDirectory(fsPath, useStat = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);\n return stats.isDirectory();\n });\n}\nexports.isDirectory = isDirectory;\n/**\n * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:\n * \\, \\hello, \\\\hello\\share, C:, and C:\\hello (and corresponding alternate separator cases).\n */\nfunction isRooted(p) {\n p = normalizeSeparators(p);\n if (!p) {\n throw new Error('isRooted() parameter \"p\" cannot be empty');\n }\n if (exports.IS_WINDOWS) {\n return (p.startsWith('\\\\') || /^[A-Z]:/i.test(p) // e.g. \\ or \\hello or \\\\hello\n ); // e.g. C: or C:\\hello\n }\n return p.startsWith('/');\n}\nexports.isRooted = isRooted;\n/**\n * Recursively create a directory at `fsPath`.\n *\n * This implementation is optimistic, meaning it attempts to create the full\n * path first, and backs up the path stack from there.\n *\n * @param fsPath The path to create\n * @param maxDepth The maximum recursion depth\n * @param depth The current recursion depth\n */\nfunction mkdirP(fsPath, maxDepth = 1000, depth = 1) {\n return __awaiter(this, void 0, void 0, function* () {\n assert_1.ok(fsPath, 'a path argument must be provided');\n fsPath = path.resolve(fsPath);\n if (depth >= maxDepth)\n return exports.mkdir(fsPath);\n try {\n yield exports.mkdir(fsPath);\n return;\n }\n catch (err) {\n switch (err.code) {\n case 'ENOENT': {\n yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);\n yield exports.mkdir(fsPath);\n return;\n }\n default: {\n let stats;\n try {\n stats = yield exports.stat(fsPath);\n }\n catch (err2) {\n throw err;\n }\n if (!stats.isDirectory())\n throw err;\n }\n }\n }\n });\n}\nexports.mkdirP = mkdirP;\n/**\n * Best effort attempt to determine whether a file exists and is executable.\n * @param filePath file path to check\n * @param extensions additional file extensions to try\n * @return if file exists and is executable, returns the file path. otherwise empty string.\n */\nfunction tryGetExecutablePath(filePath, extensions) {\n return __awaiter(this, void 0, void 0, function* () {\n let stats = undefined;\n try {\n // test file exists\n stats = yield exports.stat(filePath);\n }\n catch (err) {\n if (err.code !== 'ENOENT') {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);\n }\n }\n if (stats && stats.isFile()) {\n if (exports.IS_WINDOWS) {\n // on Windows, test for valid extension\n const upperExt = path.extname(filePath).toUpperCase();\n if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {\n return filePath;\n }\n }\n else {\n if (isUnixExecutable(stats)) {\n return filePath;\n }\n }\n }\n // try each extension\n const originalFilePath = filePath;\n for (const extension of extensions) {\n filePath = originalFilePath + extension;\n stats = undefined;\n try {\n stats = yield exports.stat(filePath);\n }\n catch (err) {\n if (err.code !== 'ENOENT') {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);\n }\n }\n if (stats && stats.isFile()) {\n if (exports.IS_WINDOWS) {\n // preserve the case of the actual file (since an extension was appended)\n try {\n const directory = path.dirname(filePath);\n const upperName = path.basename(filePath).toUpperCase();\n for (const actualName of yield exports.readdir(directory)) {\n if (upperName === actualName.toUpperCase()) {\n filePath = path.join(directory, actualName);\n break;\n }\n }\n }\n catch (err) {\n // eslint-disable-next-line no-console\n console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);\n }\n return filePath;\n }\n else {\n if (isUnixExecutable(stats)) {\n return filePath;\n }\n }\n }\n }\n return '';\n });\n}\nexports.tryGetExecutablePath = tryGetExecutablePath;\nfunction normalizeSeparators(p) {\n p = p || '';\n if (exports.IS_WINDOWS) {\n // convert slashes on Windows\n p = p.replace(/\\//g, '\\\\');\n // remove redundant slashes\n return p.replace(/\\\\\\\\+/g, '\\\\');\n }\n // remove redundant slashes\n return p.replace(/\\/\\/+/g, '/');\n}\n// on Mac/Linux, test the execute bit\n// R W X R W X R W X\n// 256 128 64 32 16 8 4 2 1\nfunction isUnixExecutable(stats) {\n return ((stats.mode & 1) > 0 ||\n ((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||\n ((stats.mode & 64) > 0 && stats.uid === process.getuid()));\n}\n//# sourceMappingURL=io-util.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst childProcess = require(\"child_process\");\nconst path = require(\"path\");\nconst util_1 = require(\"util\");\nconst ioUtil = require(\"./io-util\");\nconst exec = util_1.promisify(childProcess.exec);\n/**\n * Copies a file or folder.\n * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js\n *\n * @param source source path\n * @param dest destination path\n * @param options optional. See CopyOptions.\n */\nfunction cp(source, dest, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const { force, recursive } = readCopyOptions(options);\n const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;\n // Dest is an existing file, but not forcing\n if (destStat && destStat.isFile() && !force) {\n return;\n }\n // If dest is an existing directory, should copy inside.\n const newDest = destStat && destStat.isDirectory()\n ? path.join(dest, path.basename(source))\n : dest;\n if (!(yield ioUtil.exists(source))) {\n throw new Error(`no such file or directory: ${source}`);\n }\n const sourceStat = yield ioUtil.stat(source);\n if (sourceStat.isDirectory()) {\n if (!recursive) {\n throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);\n }\n else {\n yield cpDirRecursive(source, newDest, 0, force);\n }\n }\n else {\n if (path.relative(source, newDest) === '') {\n // a file cannot be copied to itself\n throw new Error(`'${newDest}' and '${source}' are the same file`);\n }\n yield copyFile(source, newDest, force);\n }\n });\n}\nexports.cp = cp;\n/**\n * Moves a path.\n *\n * @param source source path\n * @param dest destination path\n * @param options optional. See MoveOptions.\n */\nfunction mv(source, dest, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n if (yield ioUtil.exists(dest)) {\n let destExists = true;\n if (yield ioUtil.isDirectory(dest)) {\n // If dest is directory copy src into dest\n dest = path.join(dest, path.basename(source));\n destExists = yield ioUtil.exists(dest);\n }\n if (destExists) {\n if (options.force == null || options.force) {\n yield rmRF(dest);\n }\n else {\n throw new Error('Destination already exists');\n }\n }\n }\n yield mkdirP(path.dirname(dest));\n yield ioUtil.rename(source, dest);\n });\n}\nexports.mv = mv;\n/**\n * Remove a path recursively with force\n *\n * @param inputPath path to remove\n */\nfunction rmRF(inputPath) {\n return __awaiter(this, void 0, void 0, function* () {\n if (ioUtil.IS_WINDOWS) {\n // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another\n // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.\n try {\n if (yield ioUtil.isDirectory(inputPath, true)) {\n yield exec(`rd /s /q \"${inputPath}\"`);\n }\n else {\n yield exec(`del /f /a \"${inputPath}\"`);\n }\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n }\n // Shelling out fails to remove a symlink folder with missing source, this unlink catches that\n try {\n yield ioUtil.unlink(inputPath);\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n }\n }\n else {\n let isDir = false;\n try {\n isDir = yield ioUtil.isDirectory(inputPath);\n }\n catch (err) {\n // if you try to delete a file that doesn't exist, desired result is achieved\n // other errors are valid\n if (err.code !== 'ENOENT')\n throw err;\n return;\n }\n if (isDir) {\n yield exec(`rm -rf \"${inputPath}\"`);\n }\n else {\n yield ioUtil.unlink(inputPath);\n }\n }\n });\n}\nexports.rmRF = rmRF;\n/**\n * Make a directory. Creates the full path with folders in between\n * Will throw if it fails\n *\n * @param fsPath path to create\n * @returns Promise\n */\nfunction mkdirP(fsPath) {\n return __awaiter(this, void 0, void 0, function* () {\n yield ioUtil.mkdirP(fsPath);\n });\n}\nexports.mkdirP = mkdirP;\n/**\n * Returns path of a tool had the tool actually been invoked. Resolves via paths.\n * If you check and the tool does not exist, it will throw.\n *\n * @param tool name of the tool\n * @param check whether to check if tool exists\n * @returns Promise path to tool\n */\nfunction which(tool, check) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!tool) {\n throw new Error(\"parameter 'tool' is required\");\n }\n // recursive when check=true\n if (check) {\n const result = yield which(tool, false);\n if (!result) {\n if (ioUtil.IS_WINDOWS) {\n throw new Error(`Unable to locate executable file: ${tool}. 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.`);\n }\n else {\n throw new Error(`Unable to locate executable file: ${tool}. 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.`);\n }\n }\n }\n try {\n // build the list of extensions to try\n const extensions = [];\n if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {\n for (const extension of process.env.PATHEXT.split(path.delimiter)) {\n if (extension) {\n extensions.push(extension);\n }\n }\n }\n // if it's rooted, return it if exists. otherwise return empty.\n if (ioUtil.isRooted(tool)) {\n const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);\n if (filePath) {\n return filePath;\n }\n return '';\n }\n // if any path separators, return empty\n if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\\\'))) {\n return '';\n }\n // build the list of directories\n //\n // Note, technically \"where\" checks the current directory on Windows. From a toolkit perspective,\n // it feels like we should not do this. Checking the current directory seems like more of a use\n // case of a shell, and the which() function exposed by the toolkit should strive for consistency\n // across platforms.\n const directories = [];\n if (process.env.PATH) {\n for (const p of process.env.PATH.split(path.delimiter)) {\n if (p) {\n directories.push(p);\n }\n }\n }\n // return the first match\n for (const directory of directories) {\n const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);\n if (filePath) {\n return filePath;\n }\n }\n return '';\n }\n catch (err) {\n throw new Error(`which failed with message ${err.message}`);\n }\n });\n}\nexports.which = which;\nfunction readCopyOptions(options) {\n const force = options.force == null ? true : options.force;\n const recursive = Boolean(options.recursive);\n return { force, recursive };\n}\nfunction cpDirRecursive(sourceDir, destDir, currentDepth, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // Ensure there is not a run away recursive copy\n if (currentDepth >= 255)\n return;\n currentDepth++;\n yield mkdirP(destDir);\n const files = yield ioUtil.readdir(sourceDir);\n for (const fileName of files) {\n const srcFile = `${sourceDir}/${fileName}`;\n const destFile = `${destDir}/${fileName}`;\n const srcFileStat = yield ioUtil.lstat(srcFile);\n if (srcFileStat.isDirectory()) {\n // Recurse\n yield cpDirRecursive(srcFile, destFile, currentDepth, force);\n }\n else {\n yield copyFile(srcFile, destFile, force);\n }\n }\n // Change the mode for the newly created directory\n yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);\n });\n}\n// Buffered file copy\nfunction copyFile(srcFile, destFile, force) {\n return __awaiter(this, void 0, void 0, function* () {\n if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {\n // unlink/re-link it\n try {\n yield ioUtil.lstat(destFile);\n yield ioUtil.unlink(destFile);\n }\n catch (e) {\n // Try to override file permission\n if (e.code === 'EPERM') {\n yield ioUtil.chmod(destFile, '0666');\n yield ioUtil.unlink(destFile);\n }\n // other errors = it doesn't exist, no work to do\n }\n // Copy over symlink\n const symlinkFull = yield ioUtil.readlink(srcFile);\n yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);\n }\n else if (!(yield ioUtil.exists(destFile)) || force) {\n yield ioUtil.copyFile(srcFile, destFile);\n }\n });\n}\n//# sourceMappingURL=io.js.map","import * as core from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport * as io from \"@actions/io\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\ninterface ExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\nlet podmanPath: string | undefined;\n\n// boolean value to check if pushed image is from Docker image storage\nlet isImageFromDocker = false;\nlet imageToPush: string;\n\nasync function getPodmanPath(): Promise {\n if (podmanPath == null) {\n podmanPath = await io.which(\"podman\", true);\n }\n\n return podmanPath;\n}\n\n// base URL that gets appended if image is pulled from the Docker imaege storage\nconst dockerBaseUrl = \"docker.io/library\";\n\nasync function run(): Promise {\n const imageInput = core.getInput(\"image\", { required: true });\n const tag = core.getInput(\"tag\") || \"latest\";\n const registry = core.getInput(\"registry\", { required: true });\n const username = core.getInput(\"username\", { required: true });\n const password = core.getInput(\"password\", { required: true });\n const tlsVerify = core.getInput(\"tls-verify\");\n const digestFileInput = core.getInput(\"digestfile\");\n\n imageToPush = `${imageInput}:${tag}`;\n\n // check if image exist in Podman image storage\n const isPresentInPodman: boolean = await checkImageInPodman();\n\n // check if image exist in Docker image storage and if exist pull the image to Podman\n const isPresentInDocker: boolean = await pullImageFromDocker();\n\n // failing if image is not found in Docker as well as Podman\n if (!isPresentInDocker && !isPresentInPodman) {\n throw new Error(`${imageToPush} not found in Podman local storage, or Docker local storage.`);\n }\n\n if (isPresentInPodman && isPresentInDocker) {\n const isPodmanImageLatest = await isPodmanLocalImageLatest();\n if (!isPodmanImageLatest) {\n core.warning(`The version of ${imageToPush} in the Docker image storage is more recent `\n + `than the version in the Podman image storage. The image from the Docker image storage `\n + `will be pushed.`);\n imageToPush = `${dockerBaseUrl}/${imageToPush}`;\n isImageFromDocker = true;\n }\n else {\n core.warning(`The version of ${imageToPush} in the Podman image storage is more recent `\n + `than the version in the Docker image storage. The image from the Podman image `\n + `storage will be pushed.`);\n }\n }\n else if (isPresentInDocker) {\n imageToPush = `${dockerBaseUrl}/${imageToPush}`;\n core.info(`${imageToPush} was found in the Docker image storage, but not in the Podman `\n + `image storage. The image will be pulled into Podman image storage, pushed, and then `\n + `removed from the Podman image storage.`);\n isImageFromDocker = true;\n }\n\n let pushMsg = `Pushing ${imageToPush} to ${registry}`;\n if (username) {\n pushMsg += ` as ${username}`;\n }\n core.info(pushMsg);\n\n const registryWithoutTrailingSlash = registry.replace(/\\/$/, \"\");\n const registryPath = `${registryWithoutTrailingSlash}/${imageInput}:${tag}`;\n\n const creds = `${username}:${password}`;\n\n let digestFile = digestFileInput;\n if (!digestFile) {\n digestFile = `${imageToPush.replace(\n /[/\\\\/?%*:|\"<>]/g,\n \"-\",\n )}_digest.txt`;\n }\n\n // push the image\n const args = [\n \"push\",\n \"--quiet\",\n \"--digestfile\",\n digestFile,\n \"--creds\",\n creds,\n imageToPush,\n registryPath,\n ];\n\n // check if tls-verify is not set to null\n if (tlsVerify) {\n args.push(`--tls-verify=${tlsVerify}`);\n }\n\n await execute(await getPodmanPath(), args);\n\n core.info(`Successfully pushed ${imageToPush} to ${registryPath}.`);\n core.setOutput(\"registry-path\", registryPath);\n\n try {\n const digest = (await fs.promises.readFile(digestFile)).toString();\n core.info(digest);\n core.setOutput(\"digest\", digest);\n }\n catch (err) {\n core.warning(`Failed to read digest file \"${digestFile}\": ${err}`);\n }\n}\n\nasync function pullImageFromDocker(): Promise {\n try {\n await execute(await getPodmanPath(), [ \"pull\", `docker-daemon:${imageToPush}` ]);\n core.info(`${imageToPush} found in Docker image storage`);\n return true;\n }\n catch (err) {\n core.info(`${imageToPush} not found in Docker image storage`);\n return false;\n }\n}\n\nasync function checkImageInPodman(): Promise {\n // check if images exist in Podman's storage\n core.info(`Checking if ${imageToPush} is in Podman image storage`);\n try {\n await execute(await getPodmanPath(), [ \"image\", \"exists\", imageToPush ]);\n core.info(`${imageToPush} found in Podman image storage`);\n return true;\n }\n catch (err) {\n core.info(`${imageToPush} not found in Podman image storage`);\n core.debug(err);\n return false;\n }\n}\n\nasync function isPodmanLocalImageLatest(): Promise {\n // get creation time of the image present in the Podman image storage\n const podmanLocalImageTimeStamp = await execute(await getPodmanPath(), [\n \"image\",\n \"inspect\",\n imageToPush,\n \"--format\",\n \"{{.Created}}\",\n ]);\n\n // get creation time of the image pulled from the Docker image storage\n // appending 'docker.io/library' infront of image name as pulled image name\n // from Docker image storage starts with the 'docker.io/library'\n const pulledImageCreationTimeStamp = await execute(await getPodmanPath(), [\n \"image\",\n \"inspect\",\n `${dockerBaseUrl}/${imageToPush}`,\n \"--format\",\n \"{{.Created}}\",\n ]);\n\n const podmanImageTime = new Date(podmanLocalImageTimeStamp.stdout).getTime();\n\n const dockerImageTime = new Date(pulledImageCreationTimeStamp.stdout).getTime();\n\n return podmanImageTime > dockerImageTime;\n}\n\n// remove the pulled image from the Podman image storage\nasync function removeDockerImage(): Promise {\n if (imageToPush) {\n core.info(`Removing ${imageToPush} from the Podman image storage`);\n await execute(await getPodmanPath(), [ \"rmi\", imageToPush ]);\n }\n}\n\nasync function execute(\n executable: string,\n args: string[],\n execOptions: exec.ExecOptions = {},\n): Promise {\n let stdout = \"\";\n let stderr = \"\";\n\n const finalExecOptions = { ...execOptions };\n finalExecOptions.ignoreReturnCode = true; // the return code is processed below\n\n finalExecOptions.listeners = {\n stdline: (line): void => {\n stdout += `${line}\\n`;\n },\n errline: (line): void => {\n stderr += `${line}\\n`;\n },\n };\n\n const exitCode = await exec.exec(executable, args, finalExecOptions);\n\n if (execOptions.ignoreReturnCode !== true && exitCode !== 0) {\n // Throwing the stderr as part of the Error makes the stderr show up in the action outline,\n // which saves some clicking when debugging.\n let error = `${path.basename(executable)} exited with code ${exitCode}`;\n if (stderr) {\n error += `\\n${stderr}`;\n }\n throw new Error(error);\n }\n\n return {\n exitCode,\n stdout,\n stderr,\n };\n}\n\nrun()\n .catch(core.setFailed)\n .finally(() => {\n if (isImageFromDocker) {\n removeDockerImage();\n }\n });\n","module.exports = require(\"assert\");;","module.exports = require(\"child_process\");;","module.exports = require(\"events\");;","module.exports = require(\"fs\");;","module.exports = require(\"os\");;","module.exports = require(\"path\");;","module.exports = require(\"util\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tvar threw = true;\n\ttry {\n\t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\t\tthrew = false;\n\t} finally {\n\t\tif(threw) delete __webpack_module_cache__[moduleId];\n\t}\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","\n__webpack_require__.ab = __dirname + \"/\";","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(144);\n"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 646c453..1741d72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,23 +22,1870 @@ "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.0.2.tgz", "integrity": "sha512-J8KuFqVPr3p6U8W93DOXlXW6zFvrQAJANdS+vw0YhusLIq+bszW8zmK2Fh1C2kDPX8FMvwIl1OUcFgvJoXLbAg==" }, + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@redhat-actions/eslint-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redhat-actions/eslint-config/-/eslint-config-1.2.0.tgz", + "integrity": "sha512-HFpdgXIB01wmZbCsEpaY0UhQlRBiM/kJxO0WCufIx/wTxepewwsLTsgCgKkljbGfSaqN7FMJ/TbwY1CY/ltHcw==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": ">= 14", + "eslint-plugin-import": ">=2" + } + }, + "@redhat-actions/tsconfig": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redhat-actions/tsconfig/-/tsconfig-1.1.0.tgz", + "integrity": "sha512-9eiU6lLepYIO/h51F8bph2KI4/ZdqK0inDcoOtaBGfQslsoSRygaTmRwD6EaejcDTor/5MZZo9dIKmm+5BGkXw==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/node": { "version": "12.19.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.4.tgz", "integrity": "sha512-o3oj1bETk8kBwzz1WlO6JWL/AfAA3Vm6J1B3C9CsdxHYp7XgPiH7OEXPUbZTndHlRaIElrANkQfe6ZmfJb3H2w==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.0.tgz", + "integrity": "sha512-IJ5e2W7uFNfg4qh9eHkHRUCbgZ8VKtGwD07kannJvM5t/GU8P8+24NX8gi3Hf5jST5oWPY8kyV1s/WtfiZ4+Ww==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.14.0", + "@typescript-eslint/scope-manager": "4.14.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.0.tgz", + "integrity": "sha512-6i6eAoiPlXMKRbXzvoQD5Yn9L7k9ezzGRvzC/x1V3650rUk3c3AOjQyGYyF9BDxQQDK2ElmKOZRD0CbtdkMzQQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.14.0", + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/typescript-estree": "4.14.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.14.0.tgz", + "integrity": "sha512-sUDeuCjBU+ZF3Lzw0hphTyScmDDJ5QVkyE21pRoBo8iDl7WBtVFS+WDN3blY1CH3SBt7EmYCw6wfmJjF0l/uYg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.14.0", + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/typescript-estree": "4.14.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.14.0.tgz", + "integrity": "sha512-/J+LlRMdbPh4RdL4hfP1eCwHN5bAhFAGOTsvE6SxsrM/47XQiPSgF5MDgLyp/i9kbZV9Lx80DW0OpPkzL+uf8Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/visitor-keys": "4.14.0" + } + }, + "@typescript-eslint/types": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.14.0.tgz", + "integrity": "sha512-VsQE4VvpldHrTFuVPY1ZnHn/Txw6cZGjL48e+iBxTi2ksa9DmebKjAeFmTVAYoSkTk7gjA7UqJ7pIsyifTsI4A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.0.tgz", + "integrity": "sha512-wRjZ5qLao+bvS2F7pX4qi2oLcOONIB+ru8RGBieDptq/SudYwshveORwCVU4/yMAd4GK7Fsf8Uq1tjV838erag==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/visitor-keys": "4.14.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.0.tgz", + "integrity": "sha512-MeHHzUyRI50DuiPgV9+LxcM52FCJFYjJiWHtXlbyC27b80mfOwKeiKI+MHOTEpcpfmoPFm/vvQS88bYIx6PZTA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.14.0", + "eslint-visitor-keys": "^2.0.0" + } + }, "@vercel/ncc": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.25.1.tgz", "integrity": "sha512-dGecC5+1wLof1MQpey4+6i2KZv4Sfs6WfXkl9KfO32GED4ZPiKxRfvtGPjbjZv0IbqMl6CxtcV1RotXYfd5SSA==", "dev": true }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", + "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.3.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", + "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", + "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "typescript": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } } diff --git a/package.json b/package.json index 36327db..8d2e00c 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "compile": "tsc -p .", "bundle": "ncc build src/index.ts --source-map --minify", "clean": "rm -rf out/ dist/", + "lint": "eslint . --max-warnings=0", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Red Hat", @@ -17,8 +18,13 @@ "@actions/io": "^1.0.2" }, "devDependencies": { + "@redhat-actions/eslint-config": "^1.2.0", + "@redhat-actions/tsconfig": "^1.1.0", "@types/node": "^12.12.7", + "@typescript-eslint/eslint-plugin": "^4.14.0", + "@typescript-eslint/parser": "^4.14.0", "@vercel/ncc": "^0.25.1", + "eslint": "^7.18.0", "typescript": "^4.0.5" } } diff --git a/src/index.ts b/src/index.ts index 6cbe999..79318ce 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,60 +1,106 @@ -import * as core from '@actions/core'; -import * as exec from '@actions/exec'; -import * as io from '@actions/io'; +import * as core from "@actions/core"; +import * as exec from "@actions/exec"; +import * as io from "@actions/io"; import * as fs from "fs"; import * as path from "path"; -export async function run(): Promise { - const imageInput = core.getInput('image', { required: true }); - const tag = core.getInput('tag') || 'latest'; - const registry = core.getInput('registry', { required: true }); - const username = core.getInput('username', { required: true }); - const password = core.getInput('password', { required: true }); - const tlsVerify = core.getInput('tls-verify'); - const digestFileInput = core.getInput('digestfile'); +interface ExecResult { + exitCode: number; + stdout: string; + stderr: string; +} - // get podman cli - const podman = await io.which('podman', true); +let podmanPath: string | undefined; + +// boolean value to check if pushed image is from Docker image storage +let isImageFromDocker = false; +let imageToPush: string; + +async function getPodmanPath(): Promise { + if (podmanPath == null) { + podmanPath = await io.which("podman", true); + } + + return podmanPath; +} + +// base URL that gets appended if image is pulled from the Docker imaege storage +const dockerBaseUrl = "docker.io/library"; + +async function run(): Promise { + const imageInput = core.getInput("image", { required: true }); + const tag = core.getInput("tag") || "latest"; + const registry = core.getInput("registry", { required: true }); + const username = core.getInput("username", { required: true }); + const password = core.getInput("password", { required: true }); + const tlsVerify = core.getInput("tls-verify"); + const digestFileInput = core.getInput("digestfile"); + + imageToPush = `${imageInput}:${tag}`; + + // check if image exist in Podman image storage + const isPresentInPodman: boolean = await checkImageInPodman(); + + // check if image exist in Docker image storage and if exist pull the image to Podman + const isPresentInDocker: boolean = await pullImageFromDocker(); + + // failing if image is not found in Docker as well as Podman + if (!isPresentInDocker && !isPresentInPodman) { + throw new Error(`${imageToPush} not found in Podman local storage, or Docker local storage.`); + } + + if (isPresentInPodman && isPresentInDocker) { + const isPodmanImageLatest = await isPodmanLocalImageLatest(); + if (!isPodmanImageLatest) { + core.warning(`The version of ${imageToPush} in the Docker image storage is more recent ` + + `than the version in the Podman image storage. The image from the Docker image storage ` + + `will be pushed.`); + imageToPush = `${dockerBaseUrl}/${imageToPush}`; + isImageFromDocker = true; + } + else { + core.warning(`The version of ${imageToPush} in the Podman image storage is more recent ` + + `than the version in the Docker image storage. The image from the Podman image ` + + `storage will be pushed.`); + } + } + else if (isPresentInDocker) { + imageToPush = `${dockerBaseUrl}/${imageToPush}`; + core.info(`${imageToPush} was found in the Docker image storage, but not in the Podman ` + + `image storage. The image will be pulled into Podman image storage, pushed, and then ` + + `removed from the Podman image storage.`); + isImageFromDocker = true; + } - const imageToPush = `${imageInput}:${tag}`; let pushMsg = `Pushing ${imageToPush} to ${registry}`; if (username) { pushMsg += ` as ${username}`; } core.info(pushMsg); - //check if images exist in podman's local storage - const checkImages = await execute(podman, ['images', '--format', 'json']); + const registryWithoutTrailingSlash = registry.replace(/\/$/, ""); + const registryPath = `${registryWithoutTrailingSlash}/${imageInput}:${tag}`; - const parsedCheckImages = JSON.parse(checkImages.stdout); - - // this is to temporarily solve an issue with the case-sensitive of the property field name. i.e it is Names or names?? - const nameKeyMixedCase = parsedCheckImages[0] && Object.keys(parsedCheckImages[0]).find(key => 'names' === key.toLowerCase()); - const imagesFound = parsedCheckImages. - filter((image: string) => image[nameKeyMixedCase] && image[nameKeyMixedCase].find((name: string) => name.includes(`${imageToPush}`))). - map((image: string ) => image[nameKeyMixedCase]); - - if (imagesFound.length === 0) { - //check inside the docker daemon local storage - await execute(podman, [ 'pull', `docker-daemon:${imageToPush}` ]); - } - - // push image - const registryPath = `${registry.replace(/\/$/, '')}/${imageToPush}`; - - const creds: string = `${username}:${password}`; + const creds = `${username}:${password}`; let digestFile = digestFileInput; if (!digestFile) { - digestFile = `${imageToPush.replace(/[/\\/?%*:|"<>]/g, "-")}_digest.txt`; + digestFile = `${imageToPush.replace( + /[/\\/?%*:|"<>]/g, + "-", + )}_digest.txt`; } - const args = [ 'push', - '--quiet', - '--digestfile', digestFile, - '--creds', creds, + // push the image + const args = [ + "push", + "--quiet", + "--digestfile", + digestFile, + "--creds", + creds, imageToPush, - registryPath + registryPath, ]; // check if tls-verify is not set to null @@ -62,41 +108,109 @@ export async function run(): Promise { args.push(`--tls-verify=${tlsVerify}`); } - await execute(podman, args); + await execute(await getPodmanPath(), args); core.info(`Successfully pushed ${imageToPush} to ${registryPath}.`); - core.setOutput('registry-path', registryPath); + core.setOutput("registry-path", registryPath); try { const digest = (await fs.promises.readFile(digestFile)).toString(); core.info(digest); - core.setOutput('digest', digest); + core.setOutput("digest", digest); } catch (err) { core.warning(`Failed to read digest file "${digestFile}": ${err}`); } } -async function execute(executable: string, args: string[], execOptions: exec.ExecOptions = {}): Promise<{ exitCode: number, stdout: string, stderr: string }> { +async function pullImageFromDocker(): Promise { + try { + await execute(await getPodmanPath(), [ "pull", `docker-daemon:${imageToPush}` ]); + core.info(`${imageToPush} found in Docker image storage`); + return true; + } + catch (err) { + core.info(`${imageToPush} not found in Docker image storage`); + return false; + } +} + +async function checkImageInPodman(): Promise { + // check if images exist in Podman's storage + core.info(`Checking if ${imageToPush} is in Podman image storage`); + try { + await execute(await getPodmanPath(), [ "image", "exists", imageToPush ]); + core.info(`${imageToPush} found in Podman image storage`); + return true; + } + catch (err) { + core.info(`${imageToPush} not found in Podman image storage`); + core.debug(err); + return false; + } +} + +async function isPodmanLocalImageLatest(): Promise { + // get creation time of the image present in the Podman image storage + const podmanLocalImageTimeStamp = await execute(await getPodmanPath(), [ + "image", + "inspect", + imageToPush, + "--format", + "{{.Created}}", + ]); + + // get creation time of the image pulled from the Docker image storage + // appending 'docker.io/library' infront of image name as pulled image name + // from Docker image storage starts with the 'docker.io/library' + const pulledImageCreationTimeStamp = await execute(await getPodmanPath(), [ + "image", + "inspect", + `${dockerBaseUrl}/${imageToPush}`, + "--format", + "{{.Created}}", + ]); + + const podmanImageTime = new Date(podmanLocalImageTimeStamp.stdout).getTime(); + + const dockerImageTime = new Date(pulledImageCreationTimeStamp.stdout).getTime(); + + return podmanImageTime > dockerImageTime; +} + +// remove the pulled image from the Podman image storage +async function removeDockerImage(): Promise { + if (imageToPush) { + core.info(`Removing ${imageToPush} from the Podman image storage`); + await execute(await getPodmanPath(), [ "rmi", imageToPush ]); + } +} + +async function execute( + executable: string, + args: string[], + execOptions: exec.ExecOptions = {}, +): Promise { let stdout = ""; let stderr = ""; const finalExecOptions = { ...execOptions }; - finalExecOptions.ignoreReturnCode = true; // the return code is processed below + finalExecOptions.ignoreReturnCode = true; // the return code is processed below finalExecOptions.listeners = { - stdline: (line) => { - stdout += line + "\n"; + stdline: (line): void => { + stdout += `${line}\n`; }, - errline: (line) => { - stderr += line + "\n" + errline: (line): void => { + stderr += `${line}\n`; }, - } + }; const exitCode = await exec.exec(executable, args, finalExecOptions); if (execOptions.ignoreReturnCode !== true && exitCode !== 0) { - // Throwing the stderr as part of the Error makes the stderr show up in the action outline, which saves some clicking when debugging. + // Throwing the stderr as part of the Error makes the stderr show up in the action outline, + // which saves some clicking when debugging. let error = `${path.basename(executable)} exited with code ${exitCode}`; if (stderr) { error += `\n${stderr}`; @@ -105,8 +219,16 @@ async function execute(executable: string, args: string[], execOptions: exec.Exe } return { - exitCode, stdout, stderr + exitCode, + stdout, + stderr, }; } -run().catch(core.setFailed); +run() + .catch(core.setFailed) + .finally(() => { + if (isImageFromDocker) { + removeDockerImage(); + } + }); diff --git a/tsconfig.json b/tsconfig.json index 2056b59..dc4049e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,11 @@ { + "extends": "@redhat-actions/tsconfig", "compilerOptions": { - "target": "ES6", - "module": "commonjs", - "lib": [ - "ES2017" - ], - "outDir": "out", - "rootDir": ".", + "rootDir": "src/", + "outDir": "out/" }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file + "include": [ + "src/" + ], + } + \ No newline at end of file