diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..3a7dfe5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,48 @@ +name: CI checks +on: + push: + pull_request: + +jobs: + lint: + name: Run ESLint + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + - run: npm ci + - run: npm run lint + + check-dist: + name: Check Distribution + runs-on: ubuntu-20.04 + env: + BUNDLE_FILE: "dist/index.js" + BUNDLE_COMMAND: "npm run bundle" + steps: + - uses: actions/checkout@v2 + + - name: Install + run: npm ci + + - name: Verify Latest Bundle + uses: redhat-actions/common/bundle-verifier@v1 + with: + bundle_file: ${{ env.BUNDLE_FILE }} + bundle_command: ${{ env.BUNDLE_COMMAND }} + + check-inputs-outputs: + name: Check Input and Output enums + runs-on: ubuntu-20.04 + env: + IO_FILE: ./src/generated/inputs-outputs.ts + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies + run: npm ci + + - name: Verify Input and Output enums + uses: redhat-actions/common/action-io-generator@v1 + with: + io_file: ${{ env.IO_FILE }} diff --git a/.github/workflows/verify-bundle.yml b/.github/workflows/verify-bundle.yml deleted file mode 100644 index 0b2156c..0000000 --- a/.github/workflows/verify-bundle.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Verify Bundle -on: [ push, pull_request ] - -jobs: - verify-bundle: - name: Verify Distribution Bundle - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Install dependencies - run: npm ci - - - name: Check Distribution - uses: tetchel/bundle-verifier-action@v0.0.2 - with: - bundle_file: dist/index.js - bundle_command: "npm run bundle" diff --git a/README.md b/README.md index f514b94..4e3d9b7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # buildah-build +[![CI checks](https://github.com/redhat-actions/buildah-build/workflows/CI%20checks/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3A%22CI+checks%22) [![Verify Build](https://github.com/redhat-actions/buildah-build/workflows/Test%20Build/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3A%22Test+Build%22) -[![Verify Bundle](https://github.com/redhat-actions/buildah-build/workflows/Verify%20Bundle/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3A%22Verify+Bundle%22)

[![tag badge](https://img.shields.io/github/v/tag/redhat-actions/buildah-build)](https://github.com/redhat-actions/buildah-build/tags) diff --git a/dist/index.js b/dist/index.js index 2484a19..7cab359 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 u=i(278);const c=r(i(87));const l=r(i(622));var a;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(a=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const i=u.toCommandValue(t);process.env[e]=i;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${c.EOL}${i}${c.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=a.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+c.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 u=r(i(129));const c=r(i(622));const l=r(i(436));const a=r(i(962));const d=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(d){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(d){if(this._isCmdFile()){return process.env["COMSPEC"]||"cmd.exe"}}return this.toolPath}_getSpawnArgs(e){if(d){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(!a.isRooted(this.toolPath)&&(this.toolPath.includes("/")||d&&this.toolPath.includes("\\"))){this.toolPath=c.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=u.spawn(r,this._getSpawnArgs(i),this._getSpawnOptions(this.options,r));const c="";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,c,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(c.length>0){this.emit("stdline",c)}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 u=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=u.resolve(e);if(r>=i)return t.mkdir(e);try{yield t.mkdir(e);return}catch(n){switch(n.code){case"ENOENT":{yield mkdirP(u.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=u.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=u.dirname(e);const n=u.basename(e).toUpperCase();for(const r of yield t.readdir(i)){if(n===r.toUpperCase()){e=u.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 u=i(962);const c=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 u.exists(t))?yield u.stat(t):null;if(o&&o.isFile()&&!n){return}const c=o&&o.isDirectory()?s.join(t,s.basename(e)):t;if(!(yield u.exists(e))){throw new Error(`no such file or directory: ${e}`)}const l=yield u.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,c,0,n)}}else{if(s.relative(e,c)===""){throw new Error(`'${c}' and '${e}' are the same file`)}yield copyFile(e,c,n)}})}t.cp=cp;function mv(e,t,i={}){return n(this,void 0,void 0,function*(){if(yield u.exists(t)){let n=true;if(yield u.isDirectory(t)){t=s.join(t,s.basename(e));n=yield u.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 u.rename(e,t)})}t.mv=mv;function rmRF(e){return n(this,void 0,void 0,function*(){if(u.IS_WINDOWS){try{if(yield u.isDirectory(e,true)){yield c(`rd /s /q "${e}"`)}else{yield c(`del /f /a "${e}"`)}}catch(e){if(e.code!=="ENOENT")throw e}try{yield u.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield u.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield c(`rm -rf "${e}"`)}else{yield u.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return n(this,void 0,void 0,function*(){yield u.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(u.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(u.IS_WINDOWS&&process.env.PATHEXT){for(const e of process.env.PATHEXT.split(s.delimiter)){if(e){t.push(e)}}}if(u.isRooted(e)){const i=yield u.tryGetExecutablePath(e,t);if(i){return i}return""}if(e.includes("/")||u.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 u.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 u.readdir(e);for(const s of n){const n=`${e}/${s}`;const o=`${t}/${s}`;const c=yield u.lstat(n);if(c.isDirectory()){yield cpDirRecursive(n,o,i,r)}else{yield copyFile(n,o,r)}}yield u.chmod(t,(yield u.stat(e)).mode)})}function copyFile(e,t,i){return n(this,void 0,void 0,function*(){if((yield u.lstat(e)).isSymbolicLink()){try{yield u.lstat(t);yield u.unlink(t)}catch(e){if(e.code==="EPERM"){yield u.chmod(t,"0666");yield u.unlink(t)}}const i=yield u.readlink(e);yield u.symlink(i,t,u.IS_WINDOWS?"junction":null)}else if(!(yield u.exists(t))||i){yield u.copyFile(e,t)}})}},987:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:true});t.BuildahCli=void 0;const n=i(186);const r=i(514);const s=i(622);class BuildahCli{constructor(e){this.executable=e}static getImageFormatOption(e){return["--format",e?"oci":"docker"]}async buildUsingDocker(e,t,i,n,r){const s=["bud"];i.forEach(e=>{s.push("-f");s.push(e)});n.forEach(e=>{s.push("--build-arg");s.push(e)});s.push(...BuildahCli.getImageFormatOption(r));s.push("-t");s.push(e);s.push(t);return this.execute(s)}async from(e){return this.execute(["from",e])}async copy(e,t,i){if(t.length===0){return undefined}n.debug("copy");n.debug(e);for(const n of t){const t=["copy",e,n];if(i){t.push(i)}return this.execute(t)}return undefined}async config(e,t){n.debug("config");n.debug(e);const i=["config"];if(t.entrypoint){i.push("--entrypoint");i.push(BuildahCli.convertArrayToStringArg(t.entrypoint))}if(t.port){i.push("--port");i.push(t.port)}if(t.envs){t.envs.forEach(e=>{i.push("--env");i.push(e)})}i.push(e);return this.execute(i)}async commit(e,t,i){n.debug("commit");n.debug(e);n.debug(t);const r=["commit",...BuildahCli.getImageFormatOption(i),"--squash",e,t];return this.execute(r)}async tag(e,t){const i=["tag"];for(const n of t){i.push(`${e}:${n}`)}n.info(`Tagging the built image with tags ${t.toString()}`);return this.execute(i)}static convertArrayToStringArg(e){let t="[";e.forEach(e=>{t+=`"${e}",`});return`${t.slice(0,-1)}]`}async execute(e,t={}){let i="";let n="";const o={...t};o.ignoreReturnCode=true;o.listeners={stdline:e=>{i+=e+"\n"},errline:e=>{n+=e+"\n"}};const u=await r.exec(this.executable,e,o);if(t.ignoreReturnCode!==true&&u!==0){let e=`${s.basename(this.executable)} exited with code ${u}`;if(n){e+=`\n${n}`}throw new Error(e)}return{exitCode:u,output:i,error:n}}}t.BuildahCli=BuildahCli},144:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:true});t.run=void 0;const n=i(186);const r=i(436);const s=i(622);const o=i(987);async function run(){if(process.env.RUNNER_OS!=="Linux"){throw new Error("buildah, and therefore this action, only works on Linux. Please use a Linux runner.")}const e=await r.which("buildah",true);const t=new o.BuildahCli(e);const i=process.env.GITHUB_WORKSPACE||process.cwd();const s=getInputList("dockerfiles");const u=n.getInput("image",{required:true});const c=n.getInput("tags")||"latest";const l=c.split(" ");const a=`${u}:${l[0]}`;const d=n.getInput("oci")==="true";if(s.length!==0){await doBuildUsingDockerFiles(t,a,i,s,d)}else{await doBuildFromScratch(t,a,d)}if(l.length>1){await t.tag(u,l)}n.setOutput("image",u);n.setOutput("tags",c)}t.run=run;async function doBuildUsingDockerFiles(e,t,i,r,o){if(r.length===1){n.info(`Performing build from Dockerfile`)}else{n.info(`Performing build from ${r.length} Dockerfiles`)}const u=s.join(i,n.getInput("context"));const c=getInputList("build-args");const l=r.map(e=>s.join(i,e));await e.buildUsingDocker(t,u,l,c,o)}async function doBuildFromScratch(e,t,i){n.info(`Performing build from scratch`);const r=n.getInput("base-image",{required:true});const s=getInputList("content");const o=getInputList("entrypoint");const u=n.getInput("port");const c=n.getInput("workdir");const l=getInputList("envs");const a=await e.from(r);const d=a.output.replace("\n","");await e.copy(d,s);const f={entrypoint:o,port:u,workingdir:c,envs:l};await e.config(d,f);await e.commit(d,t,i)}function getInputList(e){const t=n.getInput(e);if(!t){return[]}return t.split(/\r?\n/).filter(e=>e).reduce((e,t)=>e.concat(t).map(e=>e.trim()),[])}run().catch(n.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,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 u=i(278);const c=r(i(87));const l=r(i(622));var a;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(a=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const i=u.toCommandValue(t);process.env[e]=i;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${c.EOL}${i}${c.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=a.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+c.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 u=r(i(129));const c=r(i(622));const l=r(i(436));const a=r(i(962));const d=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(d){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(d){if(this._isCmdFile()){return process.env["COMSPEC"]||"cmd.exe"}}return this.toolPath}_getSpawnArgs(e){if(d){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(!a.isRooted(this.toolPath)&&(this.toolPath.includes("/")||d&&this.toolPath.includes("\\"))){this.toolPath=c.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=u.spawn(r,this._getSpawnArgs(i),this._getSpawnOptions(this.options,r));const c="";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,c,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(c.length>0){this.emit("stdline",c)}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 u=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=u.resolve(e);if(r>=i)return t.mkdir(e);try{yield t.mkdir(e);return}catch(n){switch(n.code){case"ENOENT":{yield mkdirP(u.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=u.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=u.dirname(e);const n=u.basename(e).toUpperCase();for(const r of yield t.readdir(i)){if(n===r.toUpperCase()){e=u.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 u=i(962);const c=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 u.exists(t))?yield u.stat(t):null;if(o&&o.isFile()&&!n){return}const c=o&&o.isDirectory()?s.join(t,s.basename(e)):t;if(!(yield u.exists(e))){throw new Error(`no such file or directory: ${e}`)}const l=yield u.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,c,0,n)}}else{if(s.relative(e,c)===""){throw new Error(`'${c}' and '${e}' are the same file`)}yield copyFile(e,c,n)}})}t.cp=cp;function mv(e,t,i={}){return n(this,void 0,void 0,function*(){if(yield u.exists(t)){let n=true;if(yield u.isDirectory(t)){t=s.join(t,s.basename(e));n=yield u.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 u.rename(e,t)})}t.mv=mv;function rmRF(e){return n(this,void 0,void 0,function*(){if(u.IS_WINDOWS){try{if(yield u.isDirectory(e,true)){yield c(`rd /s /q "${e}"`)}else{yield c(`del /f /a "${e}"`)}}catch(e){if(e.code!=="ENOENT")throw e}try{yield u.unlink(e)}catch(e){if(e.code!=="ENOENT")throw e}}else{let t=false;try{t=yield u.isDirectory(e)}catch(e){if(e.code!=="ENOENT")throw e;return}if(t){yield c(`rm -rf "${e}"`)}else{yield u.unlink(e)}}})}t.rmRF=rmRF;function mkdirP(e){return n(this,void 0,void 0,function*(){yield u.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(u.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(u.IS_WINDOWS&&process.env.PATHEXT){for(const e of process.env.PATHEXT.split(s.delimiter)){if(e){t.push(e)}}}if(u.isRooted(e)){const i=yield u.tryGetExecutablePath(e,t);if(i){return i}return""}if(e.includes("/")||u.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 u.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 u.readdir(e);for(const s of n){const n=`${e}/${s}`;const o=`${t}/${s}`;const c=yield u.lstat(n);if(c.isDirectory()){yield cpDirRecursive(n,o,i,r)}else{yield copyFile(n,o,r)}}yield u.chmod(t,(yield u.stat(e)).mode)})}function copyFile(e,t,i){return n(this,void 0,void 0,function*(){if((yield u.lstat(e)).isSymbolicLink()){try{yield u.lstat(t);yield u.unlink(t)}catch(e){if(e.code==="EPERM"){yield u.chmod(t,"0666");yield u.unlink(t)}}const i=yield u.readlink(e);yield u.symlink(i,t,u.IS_WINDOWS?"junction":null)}else if(!(yield u.exists(t))||i){yield u.copyFile(e,t)}})}},987:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:true});t.BuildahCli=void 0;const n=i(186);const r=i(514);const s=i(622);class BuildahCli{constructor(e){this.executable=e}static getImageFormatOption(e){return["--format",e?"oci":"docker"]}async buildUsingDocker(e,t,i,n,r){const s=["bud"];i.forEach(e=>{s.push("-f");s.push(e)});n.forEach(e=>{s.push("--build-arg");s.push(e)});s.push(...BuildahCli.getImageFormatOption(r));s.push("-t");s.push(e);s.push(t);return this.execute(s)}async from(e){return this.execute(["from",e])}async copy(e,t,i){if(t.length===0){return undefined}n.debug("copy");n.debug(e);for(const n of t){const t=["copy",e,n];if(i){t.push(i)}return this.execute(t)}return undefined}async config(e,t){n.debug("config");n.debug(e);const i=["config"];if(t.entrypoint){i.push("--entrypoint");i.push(BuildahCli.convertArrayToStringArg(t.entrypoint))}if(t.port){i.push("--port");i.push(t.port)}if(t.envs){t.envs.forEach(e=>{i.push("--env");i.push(e)})}i.push(e);return this.execute(i)}async commit(e,t,i){n.debug("commit");n.debug(e);n.debug(t);const r=["commit",...BuildahCli.getImageFormatOption(i),"--squash",e,t];return this.execute(r)}async tag(e,t){const i=["tag"];for(const n of t){i.push(`${e}:${n}`)}n.info(`Tagging the built image with tags ${t.toString()}`);return this.execute(i)}static convertArrayToStringArg(e){let t="[";e.forEach(e=>{t+=`"${e}",`});return`${t.slice(0,-1)}]`}async execute(e,t={}){let i="";let n="";const o={...t};o.ignoreReturnCode=true;o.listeners={stdline:e=>{i+=e+"\n"},errline:e=>{n+=e+"\n"}};const u=await r.exec(this.executable,e,o);if(t.ignoreReturnCode!==true&&u!==0){let e=`${s.basename(this.executable)} exited with code ${u}`;if(n){e+=`\n${n}`}throw new Error(e)}return{exitCode:u,output:i,error:n}}}t.BuildahCli=BuildahCli},69:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.Outputs=t.Inputs=void 0;var i;(function(e){e["BASE_IMAGE"]="base-image";e["BUILD_ARGS"]="build-args";e["CONTENT"]="content";e["CONTEXT"]="context";e["DOCKERFILES"]="dockerfiles";e["ENTRYPOINT"]="entrypoint";e["ENVS"]="envs";e["IMAGE"]="image";e["OCI"]="oci";e["PORT"]="port";e["TAGS"]="tags";e["WORKDIR"]="workdir"})(i=t.Inputs||(t.Inputs={}));var n;(function(e){e["IMAGE"]="image";e["TAGS"]="tags"})(n=t.Outputs||(t.Outputs={}))},144:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:true});t.run=void 0;const n=i(186);const r=i(436);const s=i(622);const o=i(69);const u=i(987);async function run(){if(process.env.RUNNER_OS!=="Linux"){throw new Error("buildah, and therefore this action, only works on Linux. Please use a Linux runner.")}const e=await r.which("buildah",true);const t=new u.BuildahCli(e);const i=process.env.GITHUB_WORKSPACE||process.cwd();const s=getInputList(o.Inputs.DOCKERFILES);const c=n.getInput(o.Inputs.IMAGE,{required:true});const l=n.getInput(o.Inputs.TAGS)||"latest";const a=l.split(" ");const d=`${c}:${a[0]}`;const f=n.getInput(o.Inputs.OCI)==="true";if(s.length!==0){await doBuildUsingDockerFiles(t,d,i,s,f)}else{await doBuildFromScratch(t,d,f)}if(a.length>1){await t.tag(c,a)}n.setOutput(o.Outputs.IMAGE,c);n.setOutput(o.Outputs.TAGS,l)}t.run=run;async function doBuildUsingDockerFiles(e,t,i,r,u){if(r.length===1){n.info(`Performing build from Dockerfile`)}else{n.info(`Performing build from ${r.length} Dockerfiles`)}const c=s.join(i,n.getInput(o.Inputs.CONTEXT));const l=getInputList(o.Inputs.BUILD_ARGS);const a=r.map(e=>s.join(i,e));await e.buildUsingDocker(t,c,a,l,u)}async function doBuildFromScratch(e,t,i){n.info(`Performing build from scratch`);const r=n.getInput(o.Inputs.BASE_IMAGE,{required:true});const s=getInputList(o.Inputs.CONTENT);const u=getInputList(o.Inputs.ENTRYPOINT);const c=n.getInput(o.Inputs.PORT);const l=n.getInput(o.Inputs.WORKDIR);const a=getInputList(o.Inputs.ENVS);const d=await e.from(r);const f=d.output.replace("\n","");await e.copy(f,s);const p={entrypoint:u,port:c,workingdir:l,envs:a};await e.config(f,p);await e.commit(f,t,i)}function getInputList(e){const t=n.getInput(e);if(!t){return[]}return t.split(/\r?\n/).filter(e=>e).reduce((e,t)=>e.concat(t).map(e=>e.trim()),[])}run().catch(n.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)})(); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 921ff7f..2b80689 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../webpack:/buildah-build/node_modules/@actions/core/lib/command.js","../webpack:/buildah-build/node_modules/@actions/core/lib/core.js","../webpack:/buildah-build/node_modules/@actions/core/lib/file-command.js","../webpack:/buildah-build/node_modules/@actions/core/lib/utils.js","../webpack:/buildah-build/node_modules/@actions/exec/lib/exec.js","../webpack:/buildah-build/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/buildah-build/node_modules/@actions/io/lib/io-util.js","../webpack:/buildah-build/node_modules/@actions/io/lib/io.js","../webpack:/buildah-build/src/buildah.ts","../webpack:/buildah-build/src/index.ts","../webpack:/buildah-build/external \"assert\"","../webpack:/buildah-build/external \"child_process\"","../webpack:/buildah-build/external \"events\"","../webpack:/buildah-build/external \"fs\"","../webpack:/buildah-build/external \"os\"","../webpack:/buildah-build/external \"path\"","../webpack:/buildah-build/external \"util\"","../webpack:/buildah-build/webpack/bootstrap","../webpack:/buildah-build/webpack/runtime/compat","../webpack:/buildah-build/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","BuildahCli","executable","useOCI","image","context","dockerFiles","buildArgs","forEach","file","buildArg","getImageFormatOption","execute","baseImage","container","contentToCopy","contentPath","content","settings","entrypoint","convertArrayToStringArg","port","envs","newImageName","imageName","tags","tag","arrayAsString","execOptions","finalExecOptions","output","buildah_1","async","run","RUNNER_OS","buildahPath","cli","workspace","GITHUB_WORKSPACE","getInputList","tagsList","newImage","doBuildUsingDockerFiles","doBuildFromScratch","dockerFileAbsPaths","map","buildUsingDocker","workingDir","from","containerId","copy","newImageConfig","workingdir","config","commit","items","filter","reduce","acc","pat","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","import * as core from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport * as path from \"path\";\nimport CommandResult from \"./types\";\n\nexport interface BuildahConfigSettings {\n entrypoint?: string[];\n envs?: string[];\n port?: string;\n workingdir?: string;\n}\n\ninterface Buildah {\n buildUsingDocker(\n image: string, context: string, dockerFiles: string[], buildArgs: string[], useOCI: boolean,\n ): Promise;\n from(baseImage: string): Promise;\n copy(container: string, contentToCopy: string[]): Promise;\n config(container: string, setting: BuildahConfigSettings): Promise;\n commit(container: string, newImageName: string, useOCI: boolean): Promise;\n}\n\nexport class BuildahCli implements Buildah {\n private readonly executable: string;\n\n constructor(executable: string) {\n this.executable = executable;\n }\n\n private static getImageFormatOption(useOCI: boolean): string[] {\n return [ \"--format\", useOCI ? \"oci\" : \"docker\" ];\n }\n\n async buildUsingDocker(\n image: string, context: string, dockerFiles: string[], buildArgs: string[], useOCI: boolean,\n ): Promise {\n const args: string[] = [ \"bud\" ];\n dockerFiles.forEach((file) => {\n args.push(\"-f\");\n args.push(file);\n });\n buildArgs.forEach((buildArg) => {\n args.push(\"--build-arg\");\n args.push(buildArg);\n });\n args.push(...BuildahCli.getImageFormatOption(useOCI));\n args.push(\"-t\");\n args.push(image);\n args.push(context);\n return this.execute(args);\n }\n\n async from(baseImage: string): Promise {\n return this.execute([ \"from\", baseImage ]);\n }\n\n async copy(container: string, contentToCopy: string[], contentPath?: string): Promise {\n if (contentToCopy.length === 0) {\n return undefined;\n }\n\n core.debug(\"copy\");\n core.debug(container);\n for (const content of contentToCopy) {\n const args: string[] = [ \"copy\", container, content ];\n if (contentPath) {\n args.push(contentPath);\n }\n return this.execute(args);\n }\n\n return undefined;\n }\n\n async config(container: string, settings: BuildahConfigSettings): Promise {\n core.debug(\"config\");\n core.debug(container);\n const args: string[] = [ \"config\" ];\n if (settings.entrypoint) {\n args.push(\"--entrypoint\");\n args.push(BuildahCli.convertArrayToStringArg(settings.entrypoint));\n }\n if (settings.port) {\n args.push(\"--port\");\n args.push(settings.port);\n }\n if (settings.envs) {\n settings.envs.forEach((env) => {\n args.push(\"--env\");\n args.push(env);\n });\n }\n args.push(container);\n return this.execute(args);\n }\n\n async commit(container: string, newImageName: string, useOCI: boolean): Promise {\n core.debug(\"commit\");\n core.debug(container);\n core.debug(newImageName);\n const args: string[] = [\n \"commit\", ...BuildahCli.getImageFormatOption(useOCI),\n \"--squash\", container, newImageName,\n ];\n return this.execute(args);\n }\n\n async tag(imageName: string, tags: string[]): Promise {\n const args: string[] = [ \"tag\" ];\n for (const tag of tags) {\n args.push(`${imageName}:${tag}`);\n }\n core.info(`Tagging the built image with tags ${tags.toString()}`);\n return this.execute(args);\n }\n\n private static convertArrayToStringArg(args: string[]): string {\n let arrayAsString = \"[\";\n args.forEach((arg) => {\n arrayAsString += `\"${arg}\",`;\n });\n return `${arrayAsString.slice(0, -1)}]`;\n }\n\n private async execute(args: string[], execOptions: exec.ExecOptions = {}): Promise {\n // ghCore.info(`${EXECUTABLE} ${args.join(\" \")}`)\n\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(this.executable, args, finalExecOptions);\n\n if (execOptions.ignoreReturnCode !== true && exitCode !== 0) {\n // Throwing the stderr as part of the Error makes the stderr\n // show up in the action outline, which saves some clicking when debugging.\n let error = `${path.basename(this.executable)} exited with code ${exitCode}`;\n if (stderr) {\n error += `\\n${stderr}`;\n }\n throw new Error(error);\n }\n\n return {\n exitCode, output: stdout, error: stderr,\n };\n }\n}\n","import * as core from \"@actions/core\";\nimport * as io from \"@actions/io\";\nimport * as path from \"path\";\nimport { BuildahCli, BuildahConfigSettings } from \"./buildah\";\n\nexport async function run(): Promise {\n if (process.env.RUNNER_OS !== \"Linux\") {\n throw new Error(\"buildah, and therefore this action, only works on Linux. Please use a Linux runner.\");\n }\n\n // get buildah cli\n const buildahPath = await io.which(\"buildah\", true);\n const cli: BuildahCli = new BuildahCli(buildahPath);\n\n const workspace = process.env.GITHUB_WORKSPACE || process.cwd();\n const dockerFiles = getInputList(\"dockerfiles\");\n const image = core.getInput(\"image\", { required: true });\n const tags = core.getInput(\"tags\") || \"latest\";\n const tagsList: string[] = tags.split(\" \");\n const newImage = `${image}:${tagsList[0]}`;\n const useOCI = core.getInput(\"oci\") === \"true\";\n\n if (dockerFiles.length !== 0) {\n await doBuildUsingDockerFiles(cli, newImage, workspace, dockerFiles, useOCI);\n }\n else {\n await doBuildFromScratch(cli, newImage, useOCI);\n }\n\n if (tagsList.length > 1) {\n await cli.tag(image, tagsList);\n }\n core.setOutput(\"image\", image);\n core.setOutput(\"tags\", tags);\n}\n\nasync function doBuildUsingDockerFiles(\n cli: BuildahCli, newImage: string, workspace: string, dockerFiles: string[], useOCI: boolean,\n): Promise {\n if (dockerFiles.length === 1) {\n core.info(`Performing build from Dockerfile`);\n }\n else {\n core.info(`Performing build from ${dockerFiles.length} Dockerfiles`);\n }\n\n const context = path.join(workspace, core.getInput(\"context\"));\n const buildArgs = getInputList(\"build-args\");\n const dockerFileAbsPaths = dockerFiles.map((file) => path.join(workspace, file));\n await cli.buildUsingDocker(newImage, context, dockerFileAbsPaths, buildArgs, useOCI);\n}\n\nasync function doBuildFromScratch(\n cli: BuildahCli, newImage: string, useOCI: boolean,\n): Promise {\n core.info(`Performing build from scratch`);\n\n const baseImage = core.getInput(\"base-image\", { required: true });\n const content = getInputList(\"content\");\n const entrypoint = getInputList(\"entrypoint\");\n const port = core.getInput(\"port\");\n const workingDir = core.getInput(\"workdir\");\n const envs = getInputList(\"envs\");\n\n const container = await cli.from(baseImage);\n const containerId = container.output.replace(\"\\n\", \"\");\n\n await cli.copy(containerId, content);\n\n const newImageConfig: BuildahConfigSettings = {\n entrypoint,\n port,\n workingdir: workingDir,\n envs,\n };\n await cli.config(containerId, newImageConfig);\n await cli.commit(containerId, newImage, useOCI);\n}\n\nfunction getInputList(name: string): string[] {\n const items = core.getInput(name);\n if (!items) {\n return [];\n }\n return items\n .split(/\\r?\\n/)\n .filter((x) => x)\n .reduce(\n (acc, line) => acc.concat(line).map((pat) => pat.trim()),\n [],\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:/buildah-build/node_modules/@actions/core/lib/command.js","../webpack:/buildah-build/node_modules/@actions/core/lib/core.js","../webpack:/buildah-build/node_modules/@actions/core/lib/file-command.js","../webpack:/buildah-build/node_modules/@actions/core/lib/utils.js","../webpack:/buildah-build/node_modules/@actions/exec/lib/exec.js","../webpack:/buildah-build/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/buildah-build/node_modules/@actions/io/lib/io-util.js","../webpack:/buildah-build/node_modules/@actions/io/lib/io.js","../webpack:/buildah-build/src/buildah.ts","../webpack:/buildah-build/src/generated/inputs-outputs.ts","../webpack:/buildah-build/src/index.ts","../webpack:/buildah-build/external \"assert\"","../webpack:/buildah-build/external \"child_process\"","../webpack:/buildah-build/external \"events\"","../webpack:/buildah-build/external \"fs\"","../webpack:/buildah-build/external \"os\"","../webpack:/buildah-build/external \"path\"","../webpack:/buildah-build/external \"util\"","../webpack:/buildah-build/webpack/bootstrap","../webpack:/buildah-build/webpack/runtime/compat","../webpack:/buildah-build/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","BuildahCli","executable","useOCI","image","context","dockerFiles","buildArgs","forEach","file","buildArg","getImageFormatOption","execute","baseImage","container","contentToCopy","contentPath","content","settings","entrypoint","convertArrayToStringArg","port","envs","newImageName","imageName","tags","tag","arrayAsString","execOptions","finalExecOptions","output","Inputs","Outputs","inputs_outputs_1","buildah_1","async","run","RUNNER_OS","buildahPath","cli","workspace","GITHUB_WORKSPACE","getInputList","DOCKERFILES","IMAGE","TAGS","tagsList","newImage","OCI","doBuildUsingDockerFiles","doBuildFromScratch","CONTEXT","BUILD_ARGS","dockerFileAbsPaths","map","buildUsingDocker","BASE_IMAGE","CONTENT","ENTRYPOINT","PORT","workingDir","WORKDIR","ENVS","from","containerId","copy","newImageConfig","workingdir","config","commit","items","filter","reduce","acc","pat","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","import * as core from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport * as path from \"path\";\nimport CommandResult from \"./types\";\n\nexport interface BuildahConfigSettings {\n entrypoint?: string[];\n envs?: string[];\n port?: string;\n workingdir?: string;\n}\n\ninterface Buildah {\n buildUsingDocker(\n image: string, context: string, dockerFiles: string[], buildArgs: string[], useOCI: boolean,\n ): Promise;\n from(baseImage: string): Promise;\n copy(container: string, contentToCopy: string[]): Promise;\n config(container: string, setting: BuildahConfigSettings): Promise;\n commit(container: string, newImageName: string, useOCI: boolean): Promise;\n}\n\nexport class BuildahCli implements Buildah {\n private readonly executable: string;\n\n constructor(executable: string) {\n this.executable = executable;\n }\n\n private static getImageFormatOption(useOCI: boolean): string[] {\n return [ \"--format\", useOCI ? \"oci\" : \"docker\" ];\n }\n\n async buildUsingDocker(\n image: string, context: string, dockerFiles: string[], buildArgs: string[], useOCI: boolean,\n ): Promise {\n const args: string[] = [ \"bud\" ];\n dockerFiles.forEach((file) => {\n args.push(\"-f\");\n args.push(file);\n });\n buildArgs.forEach((buildArg) => {\n args.push(\"--build-arg\");\n args.push(buildArg);\n });\n args.push(...BuildahCli.getImageFormatOption(useOCI));\n args.push(\"-t\");\n args.push(image);\n args.push(context);\n return this.execute(args);\n }\n\n async from(baseImage: string): Promise {\n return this.execute([ \"from\", baseImage ]);\n }\n\n async copy(container: string, contentToCopy: string[], contentPath?: string): Promise {\n if (contentToCopy.length === 0) {\n return undefined;\n }\n\n core.debug(\"copy\");\n core.debug(container);\n for (const content of contentToCopy) {\n const args: string[] = [ \"copy\", container, content ];\n if (contentPath) {\n args.push(contentPath);\n }\n return this.execute(args);\n }\n\n return undefined;\n }\n\n async config(container: string, settings: BuildahConfigSettings): Promise {\n core.debug(\"config\");\n core.debug(container);\n const args: string[] = [ \"config\" ];\n if (settings.entrypoint) {\n args.push(\"--entrypoint\");\n args.push(BuildahCli.convertArrayToStringArg(settings.entrypoint));\n }\n if (settings.port) {\n args.push(\"--port\");\n args.push(settings.port);\n }\n if (settings.envs) {\n settings.envs.forEach((env) => {\n args.push(\"--env\");\n args.push(env);\n });\n }\n args.push(container);\n return this.execute(args);\n }\n\n async commit(container: string, newImageName: string, useOCI: boolean): Promise {\n core.debug(\"commit\");\n core.debug(container);\n core.debug(newImageName);\n const args: string[] = [\n \"commit\", ...BuildahCli.getImageFormatOption(useOCI),\n \"--squash\", container, newImageName,\n ];\n return this.execute(args);\n }\n\n async tag(imageName: string, tags: string[]): Promise {\n const args: string[] = [ \"tag\" ];\n for (const tag of tags) {\n args.push(`${imageName}:${tag}`);\n }\n core.info(`Tagging the built image with tags ${tags.toString()}`);\n return this.execute(args);\n }\n\n private static convertArrayToStringArg(args: string[]): string {\n let arrayAsString = \"[\";\n args.forEach((arg) => {\n arrayAsString += `\"${arg}\",`;\n });\n return `${arrayAsString.slice(0, -1)}]`;\n }\n\n private async execute(args: string[], execOptions: exec.ExecOptions = {}): Promise {\n // ghCore.info(`${EXECUTABLE} ${args.join(\" \")}`)\n\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(this.executable, args, finalExecOptions);\n\n if (execOptions.ignoreReturnCode !== true && exitCode !== 0) {\n // Throwing the stderr as part of the Error makes the stderr\n // show up in the action outline, which saves some clicking when debugging.\n let error = `${path.basename(this.executable)} exited with code ${exitCode}`;\n if (stderr) {\n error += `\\n${stderr}`;\n }\n throw new Error(error);\n }\n\n return {\n exitCode, output: stdout, error: stderr,\n };\n }\n}\n","// This file was auto-generated by action-io-generator. Do not edit by hand!\nexport enum Inputs {\n /**\n * The base image to use to create a new container image\n * Required: true\n * Default: None.\n */\n BASE_IMAGE = \"base-image\",\n /**\n * List of --build-args to pass to buildah\n * Required: false\n * Default: None.\n */\n BUILD_ARGS = \"build-args\",\n /**\n * List of files/directories to copy inside the base image\n * Required: false\n * Default: None.\n */\n CONTENT = \"content\",\n /**\n * Path of the directory to use as context (default: .)\n * Required: false\n * Default: \".\"\n */\n CONTEXT = \"context\",\n /**\n * List of Dockerfile paths (eg: ./Dockerfile)\n * Required: false\n * Default: None.\n */\n DOCKERFILES = \"dockerfiles\",\n /**\n * The entry point to set for containers based on image\n * Required: false\n * Default: None.\n */\n ENTRYPOINT = \"entrypoint\",\n /**\n * List of environment variables to be set when running containers based on image\n * Required: false\n * Default: None.\n */\n ENVS = \"envs\",\n /**\n * The name (reference) of the image to build\n * Required: true\n * Default: None.\n */\n IMAGE = \"image\",\n /**\n * Set to true to build using the OCI image format instead of the Docker image format\n * Required: false\n * Default: \"false\"\n */\n OCI = \"oci\",\n /**\n * The port to expose when running containers based on image\n * Required: false\n * Default: None.\n */\n PORT = \"port\",\n /**\n * The tags of the image to build. For multiple tags, seperate by a space. For example, \"latest v1\".\n * Required: false\n * Default: \"latest\"\n */\n TAGS = \"tags\",\n /**\n * The working directory to use within the container\n * Required: false\n * Default: None.\n */\n WORKDIR = \"workdir\",\n}\n\nexport enum Outputs {\n /**\n * Name of the image built\n * Required: false\n * Default: None.\n */\n IMAGE = \"image\",\n /**\n * List of the tags that were created, separated by spaces\n * Required: false\n * Default: None.\n */\n TAGS = \"tags\",\n}\n","import * as core from \"@actions/core\";\nimport * as io from \"@actions/io\";\nimport * as path from \"path\";\nimport { Inputs, Outputs } from \"./generated/inputs-outputs\";\nimport { BuildahCli, BuildahConfigSettings } from \"./buildah\";\n\nexport async function run(): Promise {\n if (process.env.RUNNER_OS !== \"Linux\") {\n throw new Error(\"buildah, and therefore this action, only works on Linux. Please use a Linux runner.\");\n }\n\n // get buildah cli\n const buildahPath = await io.which(\"buildah\", true);\n const cli: BuildahCli = new BuildahCli(buildahPath);\n\n const workspace = process.env.GITHUB_WORKSPACE || process.cwd();\n const dockerFiles = getInputList(Inputs.DOCKERFILES);\n const image = core.getInput(Inputs.IMAGE, { required: true });\n const tags = core.getInput(Inputs.TAGS) || \"latest\";\n const tagsList: string[] = tags.split(\" \");\n const newImage = `${image}:${tagsList[0]}`;\n const useOCI = core.getInput(Inputs.OCI) === \"true\";\n\n if (dockerFiles.length !== 0) {\n await doBuildUsingDockerFiles(cli, newImage, workspace, dockerFiles, useOCI);\n }\n else {\n await doBuildFromScratch(cli, newImage, useOCI);\n }\n\n if (tagsList.length > 1) {\n await cli.tag(image, tagsList);\n }\n core.setOutput(Outputs.IMAGE, image);\n core.setOutput(Outputs.TAGS, tags);\n}\n\nasync function doBuildUsingDockerFiles(\n cli: BuildahCli, newImage: string, workspace: string, dockerFiles: string[], useOCI: boolean,\n): Promise {\n if (dockerFiles.length === 1) {\n core.info(`Performing build from Dockerfile`);\n }\n else {\n core.info(`Performing build from ${dockerFiles.length} Dockerfiles`);\n }\n\n const context = path.join(workspace, core.getInput(Inputs.CONTEXT));\n const buildArgs = getInputList(Inputs.BUILD_ARGS);\n const dockerFileAbsPaths = dockerFiles.map((file) => path.join(workspace, file));\n await cli.buildUsingDocker(newImage, context, dockerFileAbsPaths, buildArgs, useOCI);\n}\n\nasync function doBuildFromScratch(\n cli: BuildahCli, newImage: string, useOCI: boolean,\n): Promise {\n core.info(`Performing build from scratch`);\n\n const baseImage = core.getInput(Inputs.BASE_IMAGE, { required: true });\n const content = getInputList(Inputs.CONTENT);\n const entrypoint = getInputList(Inputs.ENTRYPOINT);\n const port = core.getInput(Inputs.PORT);\n const workingDir = core.getInput(Inputs.WORKDIR);\n const envs = getInputList(Inputs.ENVS);\n\n const container = await cli.from(baseImage);\n const containerId = container.output.replace(\"\\n\", \"\");\n\n await cli.copy(containerId, content);\n\n const newImageConfig: BuildahConfigSettings = {\n entrypoint,\n port,\n workingdir: workingDir,\n envs,\n };\n await cli.config(containerId, newImageConfig);\n await cli.commit(containerId, newImage, useOCI);\n}\n\nfunction getInputList(name: string): string[] {\n const items = core.getInput(name);\n if (!items) {\n return [];\n }\n return items\n .split(/\\r?\\n/)\n .filter((x) => x)\n .reduce(\n (acc, line) => acc.concat(line).map((pat) => pat.trim()),\n [],\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 diff --git a/dist/language-image.json b/dist/language-image.json deleted file mode 100644 index 2845f1b..0000000 --- a/dist/language-image.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java": "docker.io/fabric8/java-alpine-openjdk11-jre" -} \ No newline at end of file diff --git a/dist/languages.yaml b/dist/languages.yaml deleted file mode 100644 index 1f85918..0000000 --- a/dist/languages.yaml +++ /dev/null @@ -1,6622 +0,0 @@ -# Defines all Languages known to GitHub. -# -# fs_name - Optional field. Only necessary as a replacement for the sample directory name if the -# language name is not a valid filename under the Windows filesystem (e.g., if it -# contains an asterisk). -# type - Either data, programming, markup, prose, or nil -# aliases - An Array of additional aliases (implicitly -# includes name.downcase) -# ace_mode - A String name of the Ace Mode used for highlighting whenever -# a file is edited. This must match one of the filenames in http://git.io/3XO_Cg. -# Use "text" if a mode does not exist. -# codemirror_mode - A String name of the CodeMirror Mode used for highlighting whenever a file is edited. -# This must match a mode from https://git.io/vi9Fx -# codemirror_mime_type - A String name of the file mime type used for highlighting whenever a file is edited. -# This should match the `mime` associated with the mode from https://git.io/f4SoQ -# wrap - Boolean wrap to enable line wrapping (default: false) -# extensions - An Array of associated extensions (the first one is -# considered the primary extension, the others should be -# listed alphabetically) -# filenames - An Array of filenames commonly associated with the language -# interpreters - An Array of associated interpreters -# searchable - Boolean flag to enable searching (defaults to true) -# language_id - Integer used as a language-name-independent indexed field so that we can rename -# languages in Linguist without reindexing all the code on GitHub. Must not be -# changed for existing languages without the explicit permission of GitHub staff. -# color - CSS hex color to represent the language. Only used if type is "programming" or "markup". -# tm_scope - The TextMate scope that represents this programming -# language. This should match one of the scopes listed in -# the grammars.yml file. Use "none" if there is no grammar -# for this language. -# group - Name of the parent language. Languages in a group are counted -# in the statistics as the parent language. -# -# Any additions or modifications (even trivial) should have corresponding -# test changes in `test/test_blob.rb`. -# -# Please keep this list alphabetized. Capitalization comes before lowercase. - ---- -1C Enterprise: - type: programming - color: "#814CCC" - extensions: - - ".bsl" - - ".os" - tm_scope: source.bsl - ace_mode: text - language_id: 0 -4D: - type: programming - extensions: - - ".4dm" - tm_scope: source.4dm - ace_mode: text - language_id: 577529595 -ABAP: - type: programming - color: "#E8274B" - extensions: - - ".abap" - tm_scope: source.abap - ace_mode: abap - language_id: 1 -ABNF: - type: data - ace_mode: text - extensions: - - ".abnf" - tm_scope: source.abnf - language_id: 429 -AGS Script: - type: programming - color: "#B9D9FF" - aliases: - - ags - extensions: - - ".asc" - - ".ash" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 2 -AL: - type: programming - color: "#3AA2B5" - extensions: - - ".al" - tm_scope: source.al - ace_mode: text - language_id: 658971832 -AMPL: - type: programming - color: "#E6EFBB" - extensions: - - ".ampl" - - ".mod" - tm_scope: source.ampl - ace_mode: text - language_id: 3 -ANTLR: - type: programming - color: "#9DC3FF" - extensions: - - ".g4" - tm_scope: source.antlr - ace_mode: text - language_id: 4 -API Blueprint: - type: markup - color: "#2ACCA8" - ace_mode: markdown - extensions: - - ".apib" - tm_scope: text.html.markdown.source.gfm.apib - language_id: 5 -APL: - type: programming - color: "#5A8164" - extensions: - - ".apl" - - ".dyalog" - interpreters: - - apl - - aplx - - dyalog - tm_scope: source.apl - ace_mode: text - codemirror_mode: apl - codemirror_mime_type: text/apl - language_id: 6 -ASL: - type: programming - ace_mode: text - extensions: - - ".asl" - - ".dsl" - tm_scope: source.asl - language_id: 124996147 -ASN.1: - type: data - extensions: - - ".asn" - - ".asn1" - tm_scope: source.asn - ace_mode: text - codemirror_mode: asn.1 - codemirror_mime_type: text/x-ttcn-asn - language_id: 7 -ASP.NET: - type: programming - tm_scope: text.html.asp - color: "#9400ff" - aliases: - - aspx - - aspx-vb - extensions: - - ".asax" - - ".ascx" - - ".ashx" - - ".asmx" - - ".aspx" - - ".axd" - ace_mode: text - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-aspx - language_id: 564186416 -ATS: - type: programming - color: "#1ac620" - aliases: - - ats2 - extensions: - - ".dats" - - ".hats" - - ".sats" - tm_scope: source.ats - ace_mode: ocaml - language_id: 9 -ActionScript: - type: programming - tm_scope: source.actionscript.3 - color: "#882B0F" - aliases: - - actionscript 3 - - actionscript3 - - as3 - extensions: - - ".as" - ace_mode: actionscript - language_id: 10 -Ada: - type: programming - color: "#02f88c" - extensions: - - ".adb" - - ".ada" - - ".ads" - aliases: - - ada95 - - ada2005 - tm_scope: source.ada - ace_mode: ada - language_id: 11 -Adobe Font Metrics: - type: data - tm_scope: source.afm - extensions: - - ".afm" - aliases: - - acfm - - adobe composite font metrics - - adobe multiple font metrics - - amfm - ace_mode: text - language_id: 147198098 -Agda: - type: programming - color: "#315665" - extensions: - - ".agda" - tm_scope: source.agda - ace_mode: text - language_id: 12 -Alloy: - type: programming - color: "#64C800" - extensions: - - ".als" - tm_scope: source.alloy - ace_mode: text - language_id: 13 -Alpine Abuild: - type: programming - group: Shell - aliases: - - abuild - - apkbuild - filenames: - - APKBUILD - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 14 -Altium Designer: - type: data - aliases: - - altium - extensions: - - ".OutJob" - - ".PcbDoc" - - ".PrjPCB" - - ".SchDoc" - tm_scope: source.ini - ace_mode: ini - language_id: 187772328 -AngelScript: - type: programming - color: "#C7D7DC" - extensions: - - ".as" - - ".angelscript" - tm_scope: source.angelscript - ace_mode: text - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 389477596 -Ant Build System: - type: data - tm_scope: text.xml.ant - filenames: - - ant.xml - - build.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: application/xml - language_id: 15 -ApacheConf: - type: data - aliases: - - aconf - - apache - extensions: - - ".apacheconf" - - ".vhost" - filenames: - - ".htaccess" - - apache2.conf - - httpd.conf - tm_scope: source.apache-config - ace_mode: apache_conf - language_id: 16 -Apex: - type: programming - color: "#1797c0" - extensions: - - ".cls" - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - language_id: 17 -Apollo Guidance Computer: - type: programming - color: "#0B3D91" - group: Assembly - extensions: - - ".agc" - tm_scope: source.agc - ace_mode: assembly_x86 - language_id: 18 -AppleScript: - type: programming - aliases: - - osascript - extensions: - - ".applescript" - - ".scpt" - interpreters: - - osascript - tm_scope: source.applescript - ace_mode: applescript - color: "#101F1F" - language_id: 19 -Arc: - type: programming - color: "#aa2afe" - extensions: - - ".arc" - tm_scope: none - ace_mode: text - language_id: 20 -AsciiDoc: - type: prose - ace_mode: asciidoc - wrap: true - extensions: - - ".asciidoc" - - ".adoc" - - ".asc" - tm_scope: text.html.asciidoc - language_id: 22 -AspectJ: - type: programming - color: "#a957b0" - extensions: - - ".aj" - tm_scope: source.aspectj - ace_mode: text - language_id: 23 -Assembly: - type: programming - color: "#6E4C13" - aliases: - - asm - - nasm - extensions: - - ".asm" - - ".a51" - - ".i" - - ".inc" - - ".nasm" - tm_scope: source.assembly - ace_mode: assembly_x86 - language_id: 24 -Asymptote: - type: programming - color: "#ff0000" - extensions: - - ".asy" - interpreters: - - asy - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-kotlin - language_id: 591605007 -Augeas: - type: programming - extensions: - - ".aug" - tm_scope: none - ace_mode: text - language_id: 25 -AutoHotkey: - type: programming - color: "#6594b9" - aliases: - - ahk - extensions: - - ".ahk" - - ".ahkl" - tm_scope: source.ahk - ace_mode: autohotkey - language_id: 26 -AutoIt: - type: programming - color: "#1C3552" - aliases: - - au3 - - AutoIt3 - - AutoItScript - extensions: - - ".au3" - tm_scope: source.autoit - ace_mode: autohotkey - language_id: 27 -Avro IDL: - type: data - extensions: - - ".avdl" - tm_scope: source.avro - ace_mode: text - language_id: 785497837 -Awk: - type: programming - extensions: - - ".awk" - - ".auk" - - ".gawk" - - ".mawk" - - ".nawk" - interpreters: - - awk - - gawk - - mawk - - nawk - tm_scope: source.awk - ace_mode: text - language_id: 28 -Ballerina: - type: programming - extensions: - - ".bal" - tm_scope: source.ballerina - ace_mode: text - color: "#FF5000" - language_id: 720859680 -Batchfile: - type: programming - aliases: - - bat - - batch - - dosbatch - - winbatch - extensions: - - ".bat" - - ".cmd" - tm_scope: source.batchfile - ace_mode: batchfile - color: "#C1F12E" - language_id: 29 -Befunge: - type: programming - extensions: - - ".befunge" - tm_scope: source.befunge - ace_mode: text - language_id: 30 -BibTeX: - type: markup - group: TeX - extensions: - - ".bib" - - ".bibtex" - tm_scope: text.bibtex - ace_mode: tex - codemirror_mode: stex - codemirror_mime_type: text/x-stex - language_id: 982188347 -Bison: - type: programming - color: "#6A463F" - group: Yacc - tm_scope: source.yacc - extensions: - - ".bison" - ace_mode: text - language_id: 31 -BitBake: - type: programming - tm_scope: none - extensions: - - ".bb" - ace_mode: text - language_id: 32 -Blade: - type: markup - color: "#f7523f" - extensions: - - ".blade" - - ".blade.php" - tm_scope: text.html.php.blade - ace_mode: text - language_id: 33 -BlitzBasic: - type: programming - aliases: - - b3d - - blitz3d - - blitzplus - - bplus - extensions: - - ".bb" - - ".decls" - tm_scope: source.blitzmax - ace_mode: text - language_id: 34 -BlitzMax: - type: programming - color: "#cd6400" - extensions: - - ".bmx" - aliases: - - bmax - tm_scope: source.blitzmax - ace_mode: text - language_id: 35 -Bluespec: - type: programming - extensions: - - ".bsv" - tm_scope: source.bsv - ace_mode: verilog - language_id: 36 -Boo: - type: programming - color: "#d4bec1" - extensions: - - ".boo" - ace_mode: text - tm_scope: source.boo - language_id: 37 -Brainfuck: - type: programming - color: "#2F2530" - extensions: - - ".b" - - ".bf" - tm_scope: source.bf - ace_mode: text - codemirror_mode: brainfuck - codemirror_mime_type: text/x-brainfuck - language_id: 38 -Brightscript: - type: programming - extensions: - - ".brs" - tm_scope: source.brightscript - ace_mode: text - language_id: 39 -C: - type: programming - color: "#555555" - extensions: - - ".c" - - ".cats" - - ".h" - - ".idc" - interpreters: - - tcc - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 41 -C#: - type: programming - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - tm_scope: source.cs - color: "#178600" - aliases: - - csharp - extensions: - - ".cs" - - ".cake" - - ".csx" - - ".linq" - language_id: 42 -C++: - type: programming - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - color: "#f34b7d" - aliases: - - cpp - extensions: - - ".cpp" - - ".c++" - - ".cc" - - ".cp" - - ".cxx" - - ".h" - - ".h++" - - ".hh" - - ".hpp" - - ".hxx" - - ".inc" - - ".inl" - - ".ino" - - ".ipp" - - ".re" - - ".tcc" - - ".tpp" - language_id: 43 -C-ObjDump: - type: data - extensions: - - ".c-objdump" - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - language_id: 44 -C2hs Haskell: - type: programming - group: Haskell - aliases: - - c2hs - extensions: - - ".chs" - tm_scope: source.haskell - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 45 -CLIPS: - type: programming - extensions: - - ".clp" - tm_scope: source.clips - ace_mode: text - language_id: 46 -CMake: - type: programming - extensions: - - ".cmake" - - ".cmake.in" - filenames: - - CMakeLists.txt - tm_scope: source.cmake - ace_mode: text - codemirror_mode: cmake - codemirror_mime_type: text/x-cmake - language_id: 47 -COBOL: - type: programming - extensions: - - ".cob" - - ".cbl" - - ".ccp" - - ".cobol" - - ".cpy" - tm_scope: source.cobol - ace_mode: cobol - codemirror_mode: cobol - codemirror_mime_type: text/x-cobol - language_id: 48 -COLLADA: - type: data - extensions: - - ".dae" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 49 -CSON: - type: data - color: "#244776" - tm_scope: source.coffee - ace_mode: coffee - codemirror_mode: coffeescript - codemirror_mime_type: text/x-coffeescript - extensions: - - ".cson" - language_id: 424 -CSS: - type: markup - tm_scope: source.css - ace_mode: css - codemirror_mode: css - codemirror_mime_type: text/css - color: "#563d7c" - extensions: - - ".css" - language_id: 50 -CSV: - type: data - ace_mode: text - tm_scope: none - extensions: - - ".csv" - language_id: 51 -CWeb: - type: programming - extensions: - - ".w" - tm_scope: none - ace_mode: text - language_id: 657332628 -Cabal Config: - type: data - aliases: - - Cabal - extensions: - - ".cabal" - filenames: - - cabal.config - - cabal.project - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - tm_scope: source.cabal - language_id: 677095381 -Cap'n Proto: - type: programming - tm_scope: source.capnp - extensions: - - ".capnp" - ace_mode: text - language_id: 52 -CartoCSS: - type: programming - aliases: - - Carto - extensions: - - ".mss" - ace_mode: text - tm_scope: source.css.mss - language_id: 53 -Ceylon: - type: programming - color: "#dfa535" - extensions: - - ".ceylon" - tm_scope: source.ceylon - ace_mode: text - language_id: 54 -Chapel: - type: programming - color: "#8dc63f" - aliases: - - chpl - extensions: - - ".chpl" - tm_scope: source.chapel - ace_mode: text - language_id: 55 -Charity: - type: programming - extensions: - - ".ch" - tm_scope: none - ace_mode: text - language_id: 56 -ChucK: - type: programming - extensions: - - ".ck" - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - language_id: 57 -Cirru: - type: programming - color: "#ccccff" - tm_scope: source.cirru - ace_mode: cirru - extensions: - - ".cirru" - language_id: 58 -Clarion: - type: programming - color: "#db901e" - ace_mode: text - extensions: - - ".clw" - tm_scope: source.clarion - language_id: 59 -Classic ASP: - type: programming - color: "#6a40fd" - tm_scope: text.html.asp - aliases: - - asp - extensions: - - ".asp" - ace_mode: text - language_id: 8 -Clean: - type: programming - color: "#3F85AF" - extensions: - - ".icl" - - ".dcl" - tm_scope: source.clean - ace_mode: text - language_id: 60 -Click: - type: programming - color: "#E4E6F3" - extensions: - - ".click" - tm_scope: source.click - ace_mode: text - language_id: 61 -Clojure: - type: programming - tm_scope: source.clojure - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - color: "#db5855" - extensions: - - ".clj" - - ".boot" - - ".cl2" - - ".cljc" - - ".cljs" - - ".cljs.hl" - - ".cljscm" - - ".cljx" - - ".hic" - filenames: - - riemann.config - language_id: 62 -Closure Templates: - type: markup - group: HTML - ace_mode: soy_template - codemirror_mode: soy - codemirror_mime_type: text/x-soy - aliases: - - soy - extensions: - - ".soy" - tm_scope: text.html.soy - language_id: 357046146 -Cloud Firestore Security Rules: - type: data - ace_mode: less - codemirror_mode: css - codemirror_mime_type: text/css - tm_scope: source.firestore - filenames: - - firestore.rules - language_id: 407996372 -CoNLL-U: - type: data - extensions: - - ".conllu" - - ".conll" - tm_scope: text.conllu - ace_mode: text - aliases: - - CoNLL - - CoNLL-X - language_id: 421026389 -CodeQL: - type: programming - extensions: - - ".ql" - - ".qll" - tm_scope: source.ql - ace_mode: text - language_id: 424259634 - aliases: - - ql -CoffeeScript: - type: programming - tm_scope: source.coffee - ace_mode: coffee - codemirror_mode: coffeescript - codemirror_mime_type: text/x-coffeescript - color: "#244776" - aliases: - - coffee - - coffee-script - extensions: - - ".coffee" - - "._coffee" - - ".cake" - - ".cjsx" - - ".iced" - filenames: - - Cakefile - interpreters: - - coffee - language_id: 63 -ColdFusion: - type: programming - ace_mode: coldfusion - color: "#ed2cd6" - aliases: - - cfm - - cfml - - coldfusion html - extensions: - - ".cfm" - - ".cfml" - tm_scope: text.html.cfm - language_id: 64 -ColdFusion CFC: - type: programming - color: "#ed2cd6" - group: ColdFusion - ace_mode: coldfusion - aliases: - - cfc - extensions: - - ".cfc" - tm_scope: source.cfscript - language_id: 65 -Common Lisp: - type: programming - tm_scope: source.lisp - color: "#3fb68b" - aliases: - - lisp - extensions: - - ".lisp" - - ".asd" - - ".cl" - - ".l" - - ".lsp" - - ".ny" - - ".podsl" - - ".sexp" - interpreters: - - lisp - - sbcl - - ccl - - clisp - - ecl - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 66 -Common Workflow Language: - aliases: - - cwl - type: programming - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - extensions: - - ".cwl" - interpreters: - - cwl-runner - color: "#B5314C" - tm_scope: source.cwl - language_id: 988547172 -Component Pascal: - type: programming - color: "#B0CE4E" - extensions: - - ".cp" - - ".cps" - tm_scope: source.pascal - aliases: - - delphi - - objectpascal - ace_mode: pascal - codemirror_mode: pascal - codemirror_mime_type: text/x-pascal - language_id: 67 -Cool: - type: programming - extensions: - - ".cl" - tm_scope: source.cool - ace_mode: text - language_id: 68 -Coq: - type: programming - extensions: - - ".coq" - - ".v" - tm_scope: source.coq - ace_mode: text - language_id: 69 -Cpp-ObjDump: - type: data - extensions: - - ".cppobjdump" - - ".c++-objdump" - - ".c++objdump" - - ".cpp-objdump" - - ".cxx-objdump" - tm_scope: objdump.x86asm - aliases: - - c++-objdump - ace_mode: assembly_x86 - language_id: 70 -Creole: - type: prose - wrap: true - extensions: - - ".creole" - tm_scope: text.html.creole - ace_mode: text - language_id: 71 -Crystal: - type: programming - color: "#000100" - extensions: - - ".cr" - ace_mode: ruby - codemirror_mode: crystal - codemirror_mime_type: text/x-crystal - tm_scope: source.crystal - interpreters: - - crystal - language_id: 72 -Csound: - type: programming - aliases: - - csound-orc - extensions: - - ".orc" - - ".udo" - tm_scope: source.csound - ace_mode: csound_orchestra - language_id: 73 -Csound Document: - type: programming - aliases: - - csound-csd - extensions: - - ".csd" - tm_scope: source.csound-document - ace_mode: csound_document - language_id: 74 -Csound Score: - type: programming - aliases: - - csound-sco - extensions: - - ".sco" - tm_scope: source.csound-score - ace_mode: csound_score - language_id: 75 -Cuda: - type: programming - extensions: - - ".cu" - - ".cuh" - tm_scope: source.cuda-c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - color: "#3A4E3A" - language_id: 77 -Cycript: - type: programming - extensions: - - ".cy" - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - language_id: 78 -Cython: - type: programming - group: Python - extensions: - - ".pyx" - - ".pxd" - - ".pxi" - aliases: - - pyrex - tm_scope: source.cython - ace_mode: text - codemirror_mode: python - codemirror_mime_type: text/x-cython - language_id: 79 -D: - type: programming - color: "#ba595e" - extensions: - - ".d" - - ".di" - tm_scope: source.d - ace_mode: d - codemirror_mode: d - codemirror_mime_type: text/x-d - language_id: 80 -D-ObjDump: - type: data - extensions: - - ".d-objdump" - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - language_id: 81 -DIGITAL Command Language: - type: programming - aliases: - - dcl - extensions: - - ".com" - tm_scope: none - ace_mode: text - language_id: 82 -DM: - type: programming - color: "#447265" - extensions: - - ".dm" - aliases: - - byond - tm_scope: source.dm - ace_mode: c_cpp - language_id: 83 -DNS Zone: - type: data - extensions: - - ".zone" - - ".arpa" - tm_scope: text.zone_file - ace_mode: text - language_id: 84 -DTrace: - type: programming - aliases: - - dtrace-script - extensions: - - ".d" - interpreters: - - dtrace - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 85 -Dafny: - type: programming - color: "#FFEC25" - extensions: - - ".dfy" - interpreters: - - dafny - tm_scope: text.dfy.dafny - ace_mode: text - language_id: 969323346 -Darcs Patch: - type: data - aliases: - - dpatch - extensions: - - ".darcspatch" - - ".dpatch" - tm_scope: none - ace_mode: text - language_id: 86 -Dart: - type: programming - color: "#00B4AB" - extensions: - - ".dart" - interpreters: - - dart - tm_scope: source.dart - ace_mode: dart - codemirror_mode: dart - codemirror_mime_type: application/dart - language_id: 87 -DataWeave: - type: programming - color: "#003a52" - extensions: - - ".dwl" - ace_mode: text - tm_scope: source.data-weave - language_id: 974514097 -Dhall: - type: programming - color: "#dfafff" - extensions: - - ".dhall" - tm_scope: source.haskell - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 793969321 -Diff: - type: data - extensions: - - ".diff" - - ".patch" - aliases: - - udiff - tm_scope: source.diff - ace_mode: diff - codemirror_mode: diff - codemirror_mime_type: text/x-diff - language_id: 88 -DirectX 3D File: - type: data - extensions: - - ".x" - ace_mode: text - tm_scope: none - language_id: 201049282 -Dockerfile: - type: programming - color: "#384d54" - tm_scope: source.dockerfile - extensions: - - ".dockerfile" - filenames: - - Dockerfile - ace_mode: dockerfile - codemirror_mode: dockerfile - codemirror_mime_type: text/x-dockerfile - language_id: 89 -Dogescript: - type: programming - color: "#cca760" - extensions: - - ".djs" - tm_scope: none - ace_mode: text - language_id: 90 -Dylan: - type: programming - color: "#6c616e" - extensions: - - ".dylan" - - ".dyl" - - ".intr" - - ".lid" - tm_scope: source.dylan - ace_mode: text - codemirror_mode: dylan - codemirror_mime_type: text/x-dylan - language_id: 91 -E: - type: programming - color: "#ccce35" - extensions: - - ".E" - interpreters: - - rune - tm_scope: none - ace_mode: text - language_id: 92 -EBNF: - type: data - extensions: - - ".ebnf" - tm_scope: source.ebnf - ace_mode: text - codemirror_mode: ebnf - codemirror_mime_type: text/x-ebnf - language_id: 430 -ECL: - type: programming - color: "#8a1267" - extensions: - - ".ecl" - - ".eclxml" - tm_scope: none - ace_mode: text - codemirror_mode: ecl - codemirror_mime_type: text/x-ecl - language_id: 93 -ECLiPSe: - type: programming - group: prolog - extensions: - - ".ecl" - tm_scope: source.prolog.eclipse - ace_mode: prolog - language_id: 94 -EJS: - type: markup - color: "#a91e50" - group: HTML - extensions: - - ".ejs" - - ".ect" - - ".jst" - tm_scope: text.html.js - ace_mode: ejs - language_id: 95 -EML: - type: data - extensions: - - ".eml" - - ".mbox" - tm_scope: text.eml.basic - ace_mode: text - language_id: 529653389 -EQ: - type: programming - color: "#a78649" - extensions: - - ".eq" - tm_scope: source.cs - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - language_id: 96 -Eagle: - type: data - extensions: - - ".sch" - - ".brd" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 97 -Easybuild: - type: data - group: Python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - tm_scope: source.python - extensions: - - ".eb" - language_id: 342840477 -Ecere Projects: - type: data - group: JavaScript - extensions: - - ".epj" - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 98 -EditorConfig: - type: data - group: INI - filenames: - - ".editorconfig" - aliases: - - editor-config - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - tm_scope: source.editorconfig - language_id: 96139566 -Edje Data Collection: - type: data - extensions: - - ".edc" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 342840478 -Eiffel: - type: programming - color: "#4d6977" - extensions: - - ".e" - tm_scope: source.eiffel - ace_mode: eiffel - codemirror_mode: eiffel - codemirror_mime_type: text/x-eiffel - language_id: 99 -Elixir: - type: programming - color: "#6e4a7e" - extensions: - - ".ex" - - ".exs" - tm_scope: source.elixir - ace_mode: elixir - filenames: - - mix.lock - interpreters: - - elixir - language_id: 100 -Elm: - type: programming - color: "#60B5CC" - extensions: - - ".elm" - tm_scope: source.elm - ace_mode: elm - codemirror_mode: elm - codemirror_mime_type: text/x-elm - language_id: 101 -Emacs Lisp: - type: programming - tm_scope: source.emacs.lisp - color: "#c065db" - aliases: - - elisp - - emacs - filenames: - - ".abbrev_defs" - - ".emacs" - - ".emacs.desktop" - - ".gnus" - - ".spacemacs" - - ".viper" - - Cask - - Project.ede - - _emacs - - abbrev_defs - extensions: - - ".el" - - ".emacs" - - ".emacs.desktop" - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 102 -EmberScript: - type: programming - color: "#FFF4F3" - extensions: - - ".em" - - ".emberscript" - tm_scope: source.coffee - ace_mode: coffee - codemirror_mode: coffeescript - codemirror_mime_type: text/x-coffeescript - language_id: 103 -Erlang: - type: programming - color: "#B83998" - extensions: - - ".erl" - - ".app.src" - - ".es" - - ".escript" - - ".hrl" - - ".xrl" - - ".yrl" - filenames: - - Emakefile - - rebar.config - - rebar.config.lock - - rebar.lock - tm_scope: source.erlang - ace_mode: erlang - codemirror_mode: erlang - codemirror_mime_type: text/x-erlang - interpreters: - - escript - language_id: 104 -F#: - type: programming - color: "#b845fc" - aliases: - - fsharp - extensions: - - ".fs" - - ".fsi" - - ".fsx" - tm_scope: source.fsharp - ace_mode: text - codemirror_mode: mllike - codemirror_mime_type: text/x-fsharp - language_id: 105 -F*: - fs_name: Fstar - type: programming - color: "#572e30" - aliases: - - fstar - extensions: - - ".fst" - tm_scope: source.fstar - ace_mode: text - language_id: 336943375 -FIGlet Font: - type: data - aliases: - - FIGfont - extensions: - - ".flf" - tm_scope: source.figfont - ace_mode: text - language_id: 686129783 -FLUX: - type: programming - color: "#88ccff" - extensions: - - ".fx" - - ".flux" - tm_scope: none - ace_mode: text - language_id: 106 -Factor: - type: programming - color: "#636746" - extensions: - - ".factor" - filenames: - - ".factor-boot-rc" - - ".factor-rc" - tm_scope: source.factor - ace_mode: text - codemirror_mode: factor - codemirror_mime_type: text/x-factor - language_id: 108 -Fancy: - type: programming - color: "#7b9db4" - extensions: - - ".fy" - - ".fancypack" - filenames: - - Fakefile - tm_scope: source.fancy - ace_mode: text - language_id: 109 -Fantom: - type: programming - color: "#14253c" - extensions: - - ".fan" - tm_scope: source.fan - ace_mode: text - language_id: 110 -Faust: - type: programming - color: "#c37240" - extensions: - - ".dsp" - tm_scope: source.faust - ace_mode: text - language_id: 622529198 -Filebench WML: - type: programming - extensions: - - ".f" - tm_scope: none - ace_mode: text - language_id: 111 -Filterscript: - type: programming - group: RenderScript - extensions: - - ".fs" - tm_scope: none - ace_mode: text - language_id: 112 -Formatted: - type: data - extensions: - - ".for" - - ".eam.fs" - tm_scope: none - ace_mode: text - language_id: 113 -Forth: - type: programming - color: "#341708" - extensions: - - ".fth" - - ".4th" - - ".f" - - ".for" - - ".forth" - - ".fr" - - ".frt" - - ".fs" - tm_scope: source.forth - ace_mode: forth - codemirror_mode: forth - codemirror_mime_type: text/x-forth - language_id: 114 -Fortran: - group: Fortran - type: programming - color: "#4d41b1" - extensions: - - ".f" - - ".f77" - - ".for" - - ".fpp" - tm_scope: source.fortran - ace_mode: text - codemirror_mode: fortran - codemirror_mime_type: text/x-fortran - language_id: 107 -Fortran Free Form: - group: Fortran - type: programming - extensions: - - ".f90" - - ".f03" - - ".f08" - - ".f95" - tm_scope: source.fortran.modern - ace_mode: text - codemirror_mode: fortran - codemirror_mime_type: text/x-fortran - language_id: 761352333 -FreeMarker: - type: programming - color: "#0050b2" - aliases: - - ftl - extensions: - - ".ftl" - tm_scope: text.html.ftl - ace_mode: ftl - language_id: 115 -Frege: - type: programming - color: "#00cafe" - extensions: - - ".fr" - tm_scope: source.haskell - ace_mode: haskell - language_id: 116 -Futhark: - type: programming - color: "#5f021f" - extensions: - - ".fut" - tm_scope: source.futhark - ace_mode: text - language_id: 97358117 -G-code: - type: programming - color: "#D08CF2" - extensions: - - ".g" - - ".cnc" - - ".gco" - - ".gcode" - tm_scope: source.gcode - ace_mode: gcode - language_id: 117 -GAML: - type: programming - color: "#FFC766" - extensions: - - ".gaml" - tm_scope: none - ace_mode: text - language_id: 290345951 -GAMS: - type: programming - extensions: - - ".gms" - tm_scope: none - ace_mode: text - language_id: 118 -GAP: - type: programming - extensions: - - ".g" - - ".gap" - - ".gd" - - ".gi" - - ".tst" - tm_scope: source.gap - ace_mode: text - language_id: 119 -GCC Machine Description: - type: programming - extensions: - - ".md" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 121 -GDB: - type: programming - extensions: - - ".gdb" - - ".gdbinit" - tm_scope: source.gdb - ace_mode: text - language_id: 122 -GDScript: - type: programming - color: "#355570" - extensions: - - ".gd" - tm_scope: source.gdscript - ace_mode: text - language_id: 123 -GEDCOM: - type: data - ace_mode: text - extensions: - - ".ged" - tm_scope: source.gedcom - language_id: 459577965 -GLSL: - type: programming - extensions: - - ".glsl" - - ".fp" - - ".frag" - - ".frg" - - ".fs" - - ".fsh" - - ".fshader" - - ".geo" - - ".geom" - - ".glslf" - - ".glslv" - - ".gs" - - ".gshader" - - ".shader" - - ".tesc" - - ".tese" - - ".vert" - - ".vrx" - - ".vsh" - - ".vshader" - tm_scope: source.glsl - ace_mode: glsl - language_id: 124 -GN: - type: data - extensions: - - ".gn" - - ".gni" - interpreters: - - gn - filenames: - - ".gn" - tm_scope: source.gn - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 302957008 -Game Maker Language: - type: programming - color: "#71b417" - extensions: - - ".gml" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 125 -Genie: - type: programming - ace_mode: text - extensions: - - ".gs" - color: "#fb855d" - tm_scope: none - language_id: 792408528 -Genshi: - type: programming - extensions: - - ".kid" - tm_scope: text.xml.genshi - aliases: - - xml+genshi - - xml+kid - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 126 -Gentoo Ebuild: - type: programming - group: Shell - extensions: - - ".ebuild" - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 127 -Gentoo Eclass: - type: programming - group: Shell - extensions: - - ".eclass" - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 128 -Gerber Image: - type: data - aliases: - - rs-274x - extensions: - - ".gbr" - - ".gbl" - - ".gbo" - - ".gbp" - - ".gbs" - - ".gko" - - ".gml" - - ".gpb" - - ".gpt" - - ".gtl" - - ".gto" - - ".gtp" - - ".gts" - - ".sol" - interpreters: - - gerbv - - gerbview - tm_scope: source.gerber - ace_mode: text - language_id: 404627610 -Gettext Catalog: - type: prose - searchable: false - aliases: - - pot - extensions: - - ".po" - - ".pot" - tm_scope: source.po - ace_mode: text - language_id: 129 -Gherkin: - type: programming - extensions: - - ".feature" - - ".story" - tm_scope: text.gherkin.feature - aliases: - - cucumber - ace_mode: text - color: "#5B2063" - language_id: 76 -Git Attributes: - type: data - group: INI - aliases: - - gitattributes - filenames: - - ".gitattributes" - tm_scope: source.gitattributes - ace_mode: gitignore - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 956324166 -Git Config: - type: data - group: INI - aliases: - - gitconfig - - gitmodules - extensions: - - ".gitconfig" - filenames: - - ".gitconfig" - - ".gitmodules" - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - tm_scope: source.gitconfig - language_id: 807968997 -Glyph: - type: programming - color: "#c1ac7f" - extensions: - - ".glf" - tm_scope: source.tcl - ace_mode: tcl - codemirror_mode: tcl - codemirror_mime_type: text/x-tcl - language_id: 130 -Glyph Bitmap Distribution Format: - type: data - extensions: - - ".bdf" - tm_scope: source.bdf - ace_mode: text - language_id: 997665271 -Gnuplot: - type: programming - color: "#f0a9f0" - extensions: - - ".gp" - - ".gnu" - - ".gnuplot" - - ".p" - - ".plot" - - ".plt" - interpreters: - - gnuplot - tm_scope: source.gnuplot - ace_mode: text - language_id: 131 -Go: - type: programming - color: "#00ADD8" - aliases: - - golang - extensions: - - ".go" - tm_scope: source.go - ace_mode: golang - codemirror_mode: go - codemirror_mime_type: text/x-go - language_id: 132 -Golo: - type: programming - color: "#88562A" - extensions: - - ".golo" - tm_scope: source.golo - ace_mode: text - language_id: 133 -Gosu: - type: programming - color: "#82937f" - extensions: - - ".gs" - - ".gst" - - ".gsx" - - ".vark" - tm_scope: source.gosu.2 - ace_mode: text - language_id: 134 -Grace: - type: programming - extensions: - - ".grace" - tm_scope: source.grace - ace_mode: text - language_id: 135 -Gradle: - type: data - extensions: - - ".gradle" - tm_scope: source.groovy.gradle - ace_mode: text - language_id: 136 -Grammatical Framework: - type: programming - aliases: - - gf - extensions: - - ".gf" - color: "#ff0000" - tm_scope: source.gf - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 137 -Graph Modeling Language: - type: data - extensions: - - ".gml" - tm_scope: none - ace_mode: text - language_id: 138 -GraphQL: - type: data - color: "#e10098" - extensions: - - ".graphql" - - ".gql" - - ".graphqls" - tm_scope: source.graphql - ace_mode: text - language_id: 139 -Graphviz (DOT): - type: data - tm_scope: source.dot - extensions: - - ".dot" - - ".gv" - ace_mode: text - language_id: 140 -Groovy: - type: programming - tm_scope: source.groovy - ace_mode: groovy - codemirror_mode: groovy - codemirror_mime_type: text/x-groovy - color: "#e69f56" - extensions: - - ".groovy" - - ".grt" - - ".gtpl" - - ".gvy" - interpreters: - - groovy - filenames: - - Jenkinsfile - language_id: 142 -Groovy Server Pages: - type: programming - group: Groovy - aliases: - - gsp - - java server page - extensions: - - ".gsp" - tm_scope: text.html.jsp - ace_mode: jsp - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-jsp - language_id: 143 -HAProxy: - type: data - extensions: - - ".cfg" - filenames: - - haproxy.cfg - tm_scope: source.haproxy-config - ace_mode: text - language_id: 366607477 -HCL: - type: programming - extensions: - - ".hcl" - - ".nomad" - - ".tf" - - ".tfvars" - - ".workflow" - aliases: - - terraform - ace_mode: ruby - codemirror_mode: ruby - codemirror_mime_type: text/x-ruby - tm_scope: source.terraform - language_id: 144 -HLSL: - type: programming - extensions: - - ".hlsl" - - ".cginc" - - ".fx" - - ".fxh" - - ".hlsli" - ace_mode: text - tm_scope: source.hlsl - language_id: 145 -HTML: - type: markup - tm_scope: text.html.basic - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - color: "#e34c26" - aliases: - - xhtml - extensions: - - ".html" - - ".htm" - - ".html.hl" - - ".inc" - - ".st" - - ".xht" - - ".xhtml" - language_id: 146 -HTML+Django: - type: markup - tm_scope: text.html.django - group: HTML - extensions: - - ".jinja" - - ".j2" - - ".jinja2" - - ".njk" - aliases: - - django - - html+django/jinja - - html+jinja - - htmldjango - - njk - - nunjucks - ace_mode: django - codemirror_mode: django - codemirror_mime_type: text/x-django - language_id: 147 -HTML+ECR: - type: markup - tm_scope: text.html.ecr - group: HTML - aliases: - - ecr - extensions: - - ".ecr" - ace_mode: text - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 148 -HTML+EEX: - type: markup - tm_scope: text.html.elixir - group: HTML - aliases: - - eex - extensions: - - ".eex" - ace_mode: text - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 149 -HTML+ERB: - type: markup - tm_scope: text.html.erb - group: HTML - aliases: - - erb - - rhtml - - html+ruby - extensions: - - ".erb" - - ".erb.deface" - - ".rhtml" - ace_mode: text - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-erb - language_id: 150 -HTML+PHP: - type: markup - tm_scope: text.html.php - group: HTML - extensions: - - ".phtml" - ace_mode: php - codemirror_mode: php - codemirror_mime_type: application/x-httpd-php - language_id: 151 -HTML+Razor: - type: markup - tm_scope: text.html.cshtml - group: HTML - aliases: - - razor - extensions: - - ".cshtml" - - ".razor" - ace_mode: razor - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 479039817 -HTTP: - type: data - extensions: - - ".http" - tm_scope: source.httpspec - ace_mode: text - codemirror_mode: http - codemirror_mime_type: message/http - language_id: 152 -HXML: - type: data - ace_mode: text - extensions: - - ".hxml" - tm_scope: source.hxml - language_id: 786683730 -Hack: - type: programming - ace_mode: php - codemirror_mode: php - codemirror_mime_type: application/x-httpd-php - extensions: - - ".hack" - - ".hh" - - ".hhi" - - ".php" - tm_scope: source.hack - color: "#878787" - language_id: 153 -Haml: - type: markup - color: "#ece2a9" - extensions: - - ".haml" - - ".haml.deface" - tm_scope: text.haml - ace_mode: haml - codemirror_mode: haml - codemirror_mime_type: text/x-haml - language_id: 154 -Handlebars: - type: markup - color: "#f7931e" - aliases: - - hbs - - htmlbars - extensions: - - ".handlebars" - - ".hbs" - tm_scope: text.html.handlebars - ace_mode: handlebars - language_id: 155 -Harbour: - type: programming - color: "#0e60e3" - extensions: - - ".hb" - tm_scope: source.harbour - ace_mode: text - language_id: 156 -Haskell: - type: programming - color: "#5e5086" - extensions: - - ".hs" - - ".hs-boot" - - ".hsc" - interpreters: - - runghc - - runhaskell - - runhugs - tm_scope: source.haskell - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 157 -Haxe: - type: programming - ace_mode: haxe - codemirror_mode: haxe - codemirror_mime_type: text/x-haxe - color: "#df7900" - extensions: - - ".hx" - - ".hxsl" - tm_scope: source.hx - language_id: 158 -HiveQL: - type: programming - extensions: - - ".q" - - ".hql" - color: "#dce200" - tm_scope: source.hql - ace_mode: sql - language_id: 931814087 -HolyC: - type: programming - color: "#ffefaf" - extensions: - - ".hc" - tm_scope: source.hc - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 928121743 -Hy: - type: programming - ace_mode: text - color: "#7790B2" - extensions: - - ".hy" - interpreters: - - hy - aliases: - - hylang - tm_scope: source.hy - language_id: 159 -HyPhy: - type: programming - ace_mode: text - extensions: - - ".bf" - tm_scope: none - language_id: 160 -IDL: - type: programming - color: "#a3522f" - extensions: - - ".pro" - - ".dlm" - tm_scope: source.idl - ace_mode: text - codemirror_mode: idl - codemirror_mime_type: text/x-idl - language_id: 161 -IGOR Pro: - type: programming - color: "#0000cc" - extensions: - - ".ipf" - aliases: - - igor - - igorpro - tm_scope: source.igor - ace_mode: text - language_id: 162 -INI: - type: data - extensions: - - ".ini" - - ".cfg" - - ".dof" - - ".lektorproject" - - ".prefs" - - ".pro" - - ".properties" - filenames: - - buildozer.spec - tm_scope: source.ini - aliases: - - dosini - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 163 -IRC log: - type: data - aliases: - - irc - - irc logs - extensions: - - ".irclog" - - ".weechatlog" - tm_scope: none - ace_mode: text - codemirror_mode: mirc - codemirror_mime_type: text/mirc - language_id: 164 -Idris: - type: programming - color: "#b30000" - extensions: - - ".idr" - - ".lidr" - ace_mode: text - tm_scope: source.idris - language_id: 165 -Ignore List: - type: data - group: INI - aliases: - - ignore - - gitignore - - git-ignore - extensions: - - ".gitignore" - filenames: - - ".atomignore" - - ".babelignore" - - ".bzrignore" - - ".coffeelintignore" - - ".cvsignore" - - ".dockerignore" - - ".eslintignore" - - ".gitignore" - - ".nodemonignore" - - ".npmignore" - - ".prettierignore" - - ".stylelintignore" - - ".vscodeignore" - - gitignore-global - - gitignore_global - ace_mode: gitignore - tm_scope: source.gitignore - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 74444240 -Inform 7: - type: programming - wrap: true - extensions: - - ".ni" - - ".i7x" - tm_scope: source.inform7 - aliases: - - i7 - - inform7 - ace_mode: text - language_id: 166 -Inno Setup: - type: programming - extensions: - - ".iss" - - ".isl" - tm_scope: source.inno - ace_mode: text - language_id: 167 -Io: - type: programming - color: "#a9188d" - extensions: - - ".io" - interpreters: - - io - tm_scope: source.io - ace_mode: io - language_id: 168 -Ioke: - type: programming - color: "#078193" - extensions: - - ".ik" - interpreters: - - ioke - tm_scope: source.ioke - ace_mode: text - language_id: 169 -Isabelle: - type: programming - color: "#FEFE00" - extensions: - - ".thy" - tm_scope: source.isabelle.theory - ace_mode: text - language_id: 170 -Isabelle ROOT: - type: programming - group: Isabelle - filenames: - - ROOT - tm_scope: source.isabelle.root - ace_mode: text - language_id: 171 -J: - type: programming - color: "#9EEDFF" - extensions: - - ".ijs" - interpreters: - - jconsole - tm_scope: source.j - ace_mode: text - language_id: 172 -JFlex: - type: programming - color: "#DBCA00" - group: Lex - extensions: - - ".flex" - - ".jflex" - tm_scope: source.jflex - ace_mode: text - language_id: 173 -JSON: - type: data - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - searchable: false - extensions: - - ".json" - - ".avsc" - - ".geojson" - - ".gltf" - - ".har" - - ".ice" - - ".JSON-tmLanguage" - - ".jsonl" - - ".mcmeta" - - ".tfstate" - - ".tfstate.backup" - - ".topojson" - - ".webapp" - - ".webmanifest" - - ".yy" - - ".yyp" - filenames: - - ".arcconfig" - - ".htmlhintrc" - - ".tern-config" - - ".tern-project" - - ".watchmanconfig" - - composer.lock - - mcmod.info - language_id: 174 -JSON with Comments: - type: data - group: JSON - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - aliases: - - jsonc - extensions: - - ".jsonc" - - ".sublime-build" - - ".sublime-commands" - - ".sublime-completions" - - ".sublime-keymap" - - ".sublime-macro" - - ".sublime-menu" - - ".sublime-mousemap" - - ".sublime-project" - - ".sublime-settings" - - ".sublime-theme" - - ".sublime-workspace" - - ".sublime_metrics" - - ".sublime_session" - filenames: - - ".babelrc" - - ".eslintrc.json" - - ".jscsrc" - - ".jshintrc" - - ".jslintrc" - - jsconfig.json - - language-configuration.json - - tsconfig.json - - tslint.json - language_id: 423 -JSON5: - type: data - extensions: - - ".json5" - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 175 -JSONLD: - type: data - extensions: - - ".jsonld" - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 176 -JSONiq: - color: "#40d47e" - type: programming - ace_mode: jsoniq - codemirror_mode: javascript - codemirror_mime_type: application/json - extensions: - - ".jq" - tm_scope: source.jq - language_id: 177 -JSX: - type: programming - group: JavaScript - extensions: - - ".jsx" - tm_scope: source.js.jsx - ace_mode: javascript - codemirror_mode: jsx - codemirror_mime_type: text/jsx - language_id: 178 -Jasmin: - type: programming - ace_mode: java - extensions: - - ".j" - tm_scope: source.jasmin - language_id: 180 -Java: - type: programming - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - color: "#b07219" - extensions: - - ".java" - language_id: 181 -Java Properties: - type: data - extensions: - - ".properties" - tm_scope: source.java-properties - ace_mode: properties - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 519377561 -Java Server Pages: - type: programming - group: Java - aliases: - - jsp - extensions: - - ".jsp" - tm_scope: text.html.jsp - ace_mode: jsp - codemirror_mode: htmlembedded - codemirror_mime_type: application/x-jsp - language_id: 182 -JavaScript: - type: programming - tm_scope: source.js - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - color: "#f1e05a" - aliases: - - js - - node - extensions: - - ".js" - - "._js" - - ".bones" - - ".cjs" - - ".es" - - ".es6" - - ".frag" - - ".gs" - - ".jake" - - ".jsb" - - ".jscad" - - ".jsfl" - - ".jsm" - - ".jss" - - ".mjs" - - ".njs" - - ".pac" - - ".sjs" - - ".ssjs" - - ".xsjs" - - ".xsjslib" - filenames: - - Jakefile - interpreters: - - chakra - - d8 - - gjs - - js - - node - - nodejs - - qjs - - rhino - - v8 - - v8-shell - language_id: 183 -JavaScript+ERB: - type: programming - tm_scope: source.js - group: JavaScript - extensions: - - ".js.erb" - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: application/javascript - language_id: 914318960 -Jison: - type: programming - group: Yacc - extensions: - - ".jison" - tm_scope: source.jison - ace_mode: text - language_id: 284531423 -Jison Lex: - type: programming - group: Lex - extensions: - - ".jisonlex" - tm_scope: source.jisonlex - ace_mode: text - language_id: 406395330 -Jolie: - type: programming - extensions: - - ".ol" - - ".iol" - interpreters: - - jolie - color: "#843179" - ace_mode: text - tm_scope: source.jolie - language_id: 998078858 -Jsonnet: - color: "#0064bd" - type: programming - ace_mode: text - extensions: - - ".jsonnet" - - ".libsonnet" - tm_scope: source.jsonnet - language_id: 664885656 -Julia: - type: programming - extensions: - - ".jl" - interpreters: - - julia - color: "#a270ba" - tm_scope: source.julia - ace_mode: julia - codemirror_mode: julia - codemirror_mime_type: text/x-julia - language_id: 184 -Jupyter Notebook: - type: markup - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - tm_scope: source.json - color: "#DA5B0B" - extensions: - - ".ipynb" - filenames: - - Notebook - aliases: - - IPython Notebook - language_id: 185 -KRL: - type: programming - color: "#28430A" - extensions: - - ".krl" - tm_scope: none - ace_mode: text - language_id: 186 -Kaitai Struct: - type: programming - aliases: - - ksy - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - color: "#773b37" - extensions: - - ".ksy" - tm_scope: source.yaml - language_id: 818804755 -KiCad Layout: - type: data - aliases: - - pcbnew - extensions: - - ".kicad_pcb" - - ".kicad_mod" - - ".kicad_wks" - filenames: - - fp-lib-table - tm_scope: source.pcb.sexp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 187 -KiCad Legacy Layout: - type: data - extensions: - - ".brd" - tm_scope: source.pcb.board - ace_mode: text - language_id: 140848857 -KiCad Schematic: - type: data - aliases: - - eeschema schematic - extensions: - - ".sch" - tm_scope: source.pcb.schematic - ace_mode: text - language_id: 622447435 -Kit: - type: markup - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - extensions: - - ".kit" - tm_scope: text.html.basic - language_id: 188 -Kotlin: - type: programming - color: "#F18E33" - extensions: - - ".kt" - - ".ktm" - - ".kts" - tm_scope: source.kotlin - ace_mode: text - codemirror_mode: clike - codemirror_mime_type: text/x-kotlin - language_id: 189 -LFE: - type: programming - color: "#4C3023" - extensions: - - ".lfe" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 190 -LLVM: - type: programming - extensions: - - ".ll" - tm_scope: source.llvm - ace_mode: text - color: "#185619" - language_id: 191 -LOLCODE: - type: programming - extensions: - - ".lol" - color: "#cc9900" - tm_scope: none - ace_mode: text - language_id: 192 -LSL: - type: programming - tm_scope: source.lsl - ace_mode: lsl - extensions: - - ".lsl" - - ".lslp" - interpreters: - - lsl - color: "#3d9970" - language_id: 193 -LTspice Symbol: - type: data - extensions: - - ".asy" - tm_scope: source.ltspice.symbol - ace_mode: text - codemirror_mode: spreadsheet - codemirror_mime_type: text/x-spreadsheet - language_id: 1013566805 -LabVIEW: - type: programming - extensions: - - ".lvproj" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 194 -Lark: - type: data - group: EBNF - color: "#0b130f" - extensions: - - ".lark" - tm_scope: source.lark - ace_mode: text - codemirror_mode: ebnf - codemirror_mime_type: text/x-ebnf - language_id: 758480799 -Lasso: - type: programming - color: "#999999" - extensions: - - ".lasso" - - ".las" - - ".lasso8" - - ".lasso9" - tm_scope: file.lasso - aliases: - - lassoscript - ace_mode: text - language_id: 195 -Latte: - type: markup - color: "#f2a542" - extensions: - - ".latte" - tm_scope: text.html.smarty - ace_mode: smarty - codemirror_mode: smarty - codemirror_mime_type: text/x-smarty - language_id: 196 -Lean: - type: programming - extensions: - - ".lean" - - ".hlean" - tm_scope: source.lean - ace_mode: text - language_id: 197 -Less: - type: markup - color: "#1d365d" - extensions: - - ".less" - tm_scope: source.css.less - ace_mode: less - codemirror_mode: css - codemirror_mime_type: text/css - language_id: 198 -Lex: - type: programming - color: "#DBCA00" - aliases: - - flex - extensions: - - ".l" - - ".lex" - filenames: - - Lexer.x - - lexer.x - tm_scope: source.lex - ace_mode: text - language_id: 199 -LilyPond: - type: programming - extensions: - - ".ly" - - ".ily" - tm_scope: source.lilypond - ace_mode: text - language_id: 200 -Limbo: - type: programming - extensions: - - ".b" - - ".m" - tm_scope: none - ace_mode: text - language_id: 201 -Linker Script: - type: data - extensions: - - ".ld" - - ".lds" - - ".x" - filenames: - - ld.script - tm_scope: none - ace_mode: text - language_id: 202 -Linux Kernel Module: - type: data - extensions: - - ".mod" - tm_scope: none - ace_mode: text - language_id: 203 -Liquid: - type: markup - extensions: - - ".liquid" - tm_scope: text.html.liquid - ace_mode: liquid - language_id: 204 -Literate Agda: - type: programming - group: Agda - extensions: - - ".lagda" - tm_scope: none - ace_mode: text - language_id: 205 -Literate CoffeeScript: - type: programming - tm_scope: source.litcoffee - group: CoffeeScript - ace_mode: text - wrap: true - aliases: - - litcoffee - extensions: - - ".litcoffee" - - ".coffee.md" - language_id: 206 -Literate Haskell: - type: programming - group: Haskell - aliases: - - lhaskell - - lhs - extensions: - - ".lhs" - tm_scope: text.tex.latex.haskell - ace_mode: text - codemirror_mode: haskell-literate - codemirror_mime_type: text/x-literate-haskell - language_id: 207 -LiveScript: - type: programming - color: "#499886" - aliases: - - live-script - - ls - extensions: - - ".ls" - - "._ls" - filenames: - - Slakefile - tm_scope: source.livescript - ace_mode: livescript - codemirror_mode: livescript - codemirror_mime_type: text/x-livescript - language_id: 208 -Logos: - type: programming - extensions: - - ".xm" - - ".x" - - ".xi" - ace_mode: text - tm_scope: source.logos - language_id: 209 -Logtalk: - type: programming - extensions: - - ".lgt" - - ".logtalk" - tm_scope: source.logtalk - ace_mode: text - language_id: 210 -LookML: - type: programming - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - color: "#652B81" - extensions: - - ".lookml" - - ".model.lkml" - - ".view.lkml" - tm_scope: source.yaml - language_id: 211 -LoomScript: - type: programming - extensions: - - ".ls" - tm_scope: source.loomscript - ace_mode: text - language_id: 212 -Lua: - type: programming - tm_scope: source.lua - ace_mode: lua - codemirror_mode: lua - codemirror_mime_type: text/x-lua - color: "#000080" - extensions: - - ".lua" - - ".fcgi" - - ".nse" - - ".p8" - - ".pd_lua" - - ".rbxs" - - ".rockspec" - - ".wlua" - filenames: - - ".luacheckrc" - interpreters: - - lua - language_id: 213 -M: - type: programming - aliases: - - mumps - extensions: - - ".mumps" - - ".m" - ace_mode: text - codemirror_mode: mumps - codemirror_mime_type: text/x-mumps - language_id: 214 - tm_scope: none -M4: - type: programming - extensions: - - ".m4" - tm_scope: source.m4 - ace_mode: text - language_id: 215 -M4Sugar: - type: programming - group: M4 - aliases: - - autoconf - extensions: - - ".m4" - filenames: - - configure.ac - tm_scope: source.m4 - ace_mode: text - language_id: 216 -MATLAB: - type: programming - color: "#e16737" - aliases: - - octave - extensions: - - ".matlab" - - ".m" - tm_scope: source.matlab - ace_mode: matlab - codemirror_mode: octave - codemirror_mime_type: text/x-octave - language_id: 225 -MAXScript: - type: programming - color: "#00a6a6" - extensions: - - ".ms" - - ".mcr" - tm_scope: source.maxscript - ace_mode: text - language_id: 217 -MLIR: - type: programming - color: "#5EC8DB" - extensions: - - ".mlir" - tm_scope: source.mlir - ace_mode: text - language_id: 448253929 -MQL4: - type: programming - color: "#62A8D6" - extensions: - - ".mq4" - - ".mqh" - tm_scope: source.mql5 - ace_mode: c_cpp - language_id: 426 -MQL5: - type: programming - color: "#4A76B8" - extensions: - - ".mq5" - - ".mqh" - tm_scope: source.mql5 - ace_mode: c_cpp - language_id: 427 -MTML: - type: markup - color: "#b7e1f4" - extensions: - - ".mtml" - tm_scope: text.html.basic - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 218 -MUF: - type: programming - group: Forth - extensions: - - ".muf" - - ".m" - tm_scope: none - ace_mode: forth - codemirror_mode: forth - codemirror_mime_type: text/x-forth - language_id: 219 -Macaulay2: - type: programming - extensions: - - ".m2" - aliases: - - m2 - interpreters: - - M2 - ace_mode: text - tm_scope: source.m2 - color: "#d8ffff" - language_id: 34167825 -Makefile: - type: programming - color: "#427819" - aliases: - - bsdmake - - make - - mf - extensions: - - ".mak" - - ".d" - - ".make" - - ".mk" - - ".mkfile" - filenames: - - BSDmakefile - - GNUmakefile - - Kbuild - - Makefile - - Makefile.am - - Makefile.boot - - Makefile.frag - - Makefile.in - - Makefile.inc - - Makefile.wat - - makefile - - makefile.sco - - mkfile - interpreters: - - make - tm_scope: source.makefile - ace_mode: makefile - codemirror_mode: cmake - codemirror_mime_type: text/x-cmake - language_id: 220 -Mako: - type: programming - extensions: - - ".mako" - - ".mao" - tm_scope: text.html.mako - ace_mode: text - language_id: 221 -Markdown: - type: prose - color: "#083fa1" - aliases: - - pandoc - ace_mode: markdown - codemirror_mode: gfm - codemirror_mime_type: text/x-gfm - wrap: true - extensions: - - ".md" - - ".markdown" - - ".mdown" - - ".mdwn" - - ".mdx" - - ".mkd" - - ".mkdn" - - ".mkdown" - - ".ronn" - - ".workbook" - filenames: - - contents.lr - tm_scope: source.gfm - language_id: 222 -Marko: - type: markup - color: "#42bff2" - tm_scope: text.marko - extensions: - - ".marko" - aliases: - - markojs - ace_mode: text - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - language_id: 932782397 -Mask: - type: markup - color: "#f97732" - ace_mode: mask - extensions: - - ".mask" - tm_scope: source.mask - language_id: 223 -Mathematica: - type: programming - extensions: - - ".mathematica" - - ".cdf" - - ".m" - - ".ma" - - ".mt" - - ".nb" - - ".nbp" - - ".wl" - - ".wlt" - aliases: - - mma - tm_scope: source.mathematica - ace_mode: text - codemirror_mode: mathematica - codemirror_mime_type: text/x-mathematica - language_id: 224 -Maven POM: - type: data - tm_scope: text.xml.pom - filenames: - - pom.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 226 -Max: - type: programming - color: "#c4a79c" - aliases: - - max/msp - - maxmsp - extensions: - - ".maxpat" - - ".maxhelp" - - ".maxproj" - - ".mxt" - - ".pat" - tm_scope: source.json - ace_mode: json - codemirror_mode: javascript - codemirror_mime_type: application/json - language_id: 227 -MediaWiki: - type: prose - wrap: true - extensions: - - ".mediawiki" - - ".wiki" - tm_scope: text.html.mediawiki - ace_mode: text - language_id: 228 -Mercury: - type: programming - color: "#ff2b2b" - ace_mode: prolog - interpreters: - - mmi - extensions: - - ".m" - - ".moo" - tm_scope: source.mercury - language_id: 229 -Meson: - type: programming - color: "#007800" - filenames: - - meson.build - - meson_options.txt - tm_scope: source.meson - ace_mode: text - language_id: 799141244 -Metal: - type: programming - color: "#8f14e9" - extensions: - - ".metal" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 230 -Microsoft Developer Studio Project: - type: data - extensions: - - ".dsp" - tm_scope: none - ace_mode: text - language_id: 800983837 -MiniD: - type: programming - searchable: false - extensions: - - ".minid" - tm_scope: none - ace_mode: text - language_id: 231 -Mirah: - type: programming - color: "#c7a938" - extensions: - - ".druby" - - ".duby" - - ".mirah" - tm_scope: source.ruby - ace_mode: ruby - codemirror_mode: ruby - codemirror_mime_type: text/x-ruby - language_id: 232 -Modelica: - type: programming - extensions: - - ".mo" - tm_scope: source.modelica - ace_mode: text - codemirror_mode: modelica - codemirror_mime_type: text/x-modelica - language_id: 233 -Modula-2: - type: programming - extensions: - - ".mod" - tm_scope: source.modula2 - ace_mode: text - language_id: 234 -Modula-3: - type: programming - extensions: - - ".i3" - - ".ig" - - ".m3" - - ".mg" - color: "#223388" - ace_mode: text - tm_scope: source.modula-3 - language_id: 564743864 -Module Management System: - type: programming - extensions: - - ".mms" - - ".mmk" - filenames: - - descrip.mmk - - descrip.mms - tm_scope: none - ace_mode: text - language_id: 235 -Monkey: - type: programming - extensions: - - ".monkey" - - ".monkey2" - ace_mode: text - tm_scope: source.monkey - language_id: 236 -Moocode: - type: programming - extensions: - - ".moo" - tm_scope: none - ace_mode: text - language_id: 237 -MoonScript: - type: programming - extensions: - - ".moon" - interpreters: - - moon - tm_scope: source.moonscript - ace_mode: text - language_id: 238 -Motorola 68K Assembly: - type: programming - group: Assembly - aliases: - - m68k - extensions: - - ".asm" - - ".i" - - ".inc" - - ".s" - - ".x68" - tm_scope: source.m68k - ace_mode: assembly_x86 - language_id: 477582706 -Muse: - type: prose - extensions: - - ".muse" - tm_scope: text.muse - ace_mode: text - wrap: true - language_id: 474864066 - aliases: - - amusewiki - - emacs muse -Mustache: - type: markup - group: HTML - extensions: - - ".mustache" - tm_scope: text.html.smarty - ace_mode: smarty - codemirror_mode: smarty - codemirror_mime_type: text/x-smarty - language_id: 638334590 -Myghty: - type: programming - extensions: - - ".myt" - tm_scope: none - ace_mode: text - language_id: 239 -NASL: - type: programming - extensions: - - ".nasl" - - ".inc" - tm_scope: source.nasl - ace_mode: text - language_id: 171666519 -NCL: - type: programming - color: "#28431f" - extensions: - - ".ncl" - tm_scope: source.ncl - ace_mode: text - language_id: 240 -NEON: - type: data - extensions: - - ".neon" - tm_scope: source.neon - ace_mode: text - aliases: - - nette object notation - - ne-on - language_id: 481192983 -NL: - type: data - extensions: - - ".nl" - tm_scope: none - ace_mode: text - language_id: 241 -NPM Config: - type: data - group: INI - aliases: - - npmrc - filenames: - - ".npmrc" - tm_scope: source.ini.npmrc - ace_mode: text - language_id: 685022663 -NSIS: - type: programming - extensions: - - ".nsi" - - ".nsh" - tm_scope: source.nsis - ace_mode: text - codemirror_mode: nsis - codemirror_mime_type: text/x-nsis - language_id: 242 -Nearley: - type: programming - ace_mode: text - color: "#990000" - extensions: - - ".ne" - - ".nearley" - tm_scope: source.ne - language_id: 521429430 -Nemerle: - type: programming - color: "#3d3c6e" - extensions: - - ".n" - tm_scope: source.nemerle - ace_mode: text - language_id: 243 -NetLinx: - type: programming - color: "#0aa0ff" - extensions: - - ".axs" - - ".axi" - tm_scope: source.netlinx - ace_mode: text - language_id: 244 -NetLinx+ERB: - type: programming - color: "#747faa" - extensions: - - ".axs.erb" - - ".axi.erb" - tm_scope: source.netlinx.erb - ace_mode: text - language_id: 245 -NetLogo: - type: programming - color: "#ff6375" - extensions: - - ".nlogo" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 246 -NewLisp: - type: programming - color: "#87AED7" - extensions: - - ".nl" - - ".lisp" - - ".lsp" - interpreters: - - newlisp - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 247 -Nextflow: - type: programming - ace_mode: groovy - tm_scope: source.nextflow - color: "#3ac486" - extensions: - - ".nf" - filenames: - - nextflow.config - interpreters: - - nextflow - language_id: 506780613 -Nginx: - type: data - extensions: - - ".nginx" - - ".nginxconf" - - ".vhost" - filenames: - - nginx.conf - tm_scope: source.nginx - aliases: - - nginx configuration file - ace_mode: text - codemirror_mode: nginx - codemirror_mime_type: text/x-nginx-conf - language_id: 248 -Nim: - type: programming - color: "#ffc200" - extensions: - - ".nim" - - ".nim.cfg" - - ".nimble" - - ".nimrod" - - ".nims" - filenames: - - nim.cfg - ace_mode: text - tm_scope: source.nim - language_id: 249 -Ninja: - type: data - tm_scope: source.ninja - extensions: - - ".ninja" - ace_mode: text - language_id: 250 -Nit: - type: programming - color: "#009917" - extensions: - - ".nit" - tm_scope: source.nit - ace_mode: text - language_id: 251 -Nix: - type: programming - color: "#7e7eff" - extensions: - - ".nix" - aliases: - - nixos - tm_scope: source.nix - ace_mode: nix - language_id: 252 -Nu: - type: programming - color: "#c9df40" - aliases: - - nush - extensions: - - ".nu" - filenames: - - Nukefile - tm_scope: source.nu - ace_mode: scheme - codemirror_mode: scheme - codemirror_mime_type: text/x-scheme - interpreters: - - nush - language_id: 253 -NumPy: - type: programming - color: "#9C8AF9" - group: Python - extensions: - - ".numpy" - - ".numpyw" - - ".numsc" - tm_scope: none - ace_mode: text - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 254 -OCaml: - type: programming - ace_mode: ocaml - codemirror_mode: mllike - codemirror_mime_type: text/x-ocaml - color: "#3be133" - extensions: - - ".ml" - - ".eliom" - - ".eliomi" - - ".ml4" - - ".mli" - - ".mll" - - ".mly" - interpreters: - - ocaml - - ocamlrun - - ocamlscript - tm_scope: source.ocaml - language_id: 255 -ObjDump: - type: data - extensions: - - ".objdump" - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - language_id: 256 -Object Data Instance Notation: - type: data - extensions: - - ".odin" - tm_scope: source.odin-ehr - ace_mode: text - language_id: 985227236 -ObjectScript: - type: programming - extensions: - - ".cls" - language_id: 202735509 - tm_scope: source.objectscript - color: "#424893" - ace_mode: text -Objective-C: - type: programming - tm_scope: source.objc - color: "#438eff" - aliases: - - obj-c - - objc - - objectivec - extensions: - - ".m" - - ".h" - ace_mode: objectivec - codemirror_mode: clike - codemirror_mime_type: text/x-objectivec - language_id: 257 -Objective-C++: - type: programming - tm_scope: source.objc++ - color: "#6866fb" - aliases: - - obj-c++ - - objc++ - - objectivec++ - extensions: - - ".mm" - ace_mode: objectivec - codemirror_mode: clike - codemirror_mime_type: text/x-objectivec - language_id: 258 -Objective-J: - type: programming - color: "#ff0c5a" - aliases: - - obj-j - - objectivej - - objj - extensions: - - ".j" - - ".sj" - tm_scope: source.js.objj - ace_mode: text - language_id: 259 -Odin: - type: programming - color: "#60AFFE" - aliases: - - odinlang - - odin-lang - extensions: - - ".odin" - tm_scope: source.odin - ace_mode: text - language_id: 889244082 -Omgrofl: - type: programming - extensions: - - ".omgrofl" - color: "#cabbff" - tm_scope: none - ace_mode: text - language_id: 260 -Opa: - type: programming - extensions: - - ".opa" - tm_scope: source.opa - ace_mode: text - language_id: 261 -Opal: - type: programming - color: "#f7ede0" - extensions: - - ".opal" - tm_scope: source.opal - ace_mode: text - language_id: 262 -Open Policy Agent: - type: programming - ace_mode: text - extensions: - - ".rego" - language_id: 840483232 - tm_scope: source.rego -OpenCL: - type: programming - group: C - extensions: - - ".cl" - - ".opencl" - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 263 -OpenEdge ABL: - type: programming - aliases: - - progress - - openedge - - abl - extensions: - - ".p" - - ".cls" - - ".w" - tm_scope: source.abl - ace_mode: text - language_id: 264 -OpenQASM: - type: programming - extensions: - - ".qasm" - color: "#AA70FF" - tm_scope: source.qasm - ace_mode: text - language_id: 153739399 -OpenRC runscript: - type: programming - group: Shell - aliases: - - openrc - interpreters: - - openrc-run - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 265 -OpenSCAD: - type: programming - extensions: - - ".scad" - tm_scope: source.scad - ace_mode: scad - language_id: 266 -OpenStep Property List: - type: data - extensions: - - ".plist" - tm_scope: source.plist - ace_mode: text - language_id: 598917541 -OpenType Feature File: - type: data - aliases: - - AFDKO - extensions: - - ".fea" - tm_scope: source.opentype - ace_mode: text - language_id: 374317347 -Org: - type: prose - wrap: true - extensions: - - ".org" - tm_scope: none - ace_mode: text - language_id: 267 -Ox: - type: programming - extensions: - - ".ox" - - ".oxh" - - ".oxo" - tm_scope: source.ox - ace_mode: text - language_id: 268 -Oxygene: - type: programming - color: "#cdd0e3" - extensions: - - ".oxygene" - tm_scope: none - ace_mode: text - language_id: 269 -Oz: - type: programming - color: "#fab738" - extensions: - - ".oz" - tm_scope: source.oz - ace_mode: text - codemirror_mode: oz - codemirror_mime_type: text/x-oz - language_id: 270 -P4: - type: programming - color: "#7055b5" - extensions: - - ".p4" - tm_scope: source.p4 - ace_mode: text - language_id: 348895984 -PHP: - type: programming - tm_scope: text.html.php - ace_mode: php - codemirror_mode: php - codemirror_mime_type: application/x-httpd-php - color: "#4F5D95" - extensions: - - ".php" - - ".aw" - - ".ctp" - - ".fcgi" - - ".inc" - - ".php3" - - ".php4" - - ".php5" - - ".phps" - - ".phpt" - filenames: - - ".php" - - ".php_cs" - - ".php_cs.dist" - - Phakefile - interpreters: - - php - aliases: - - inc - language_id: 272 -PLSQL: - type: programming - ace_mode: sql - codemirror_mode: sql - codemirror_mime_type: text/x-plsql - tm_scope: none - color: "#dad8d8" - extensions: - - ".pls" - - ".bdy" - - ".ddl" - - ".fnc" - - ".pck" - - ".pkb" - - ".pks" - - ".plb" - - ".plsql" - - ".prc" - - ".spc" - - ".sql" - - ".tpb" - - ".tps" - - ".trg" - - ".vw" - language_id: 273 -PLpgSQL: - type: programming - ace_mode: pgsql - codemirror_mode: sql - codemirror_mime_type: text/x-sql - tm_scope: source.sql - extensions: - - ".pgsql" - - ".sql" - language_id: 274 -POV-Ray SDL: - type: programming - aliases: - - pov-ray - - povray - extensions: - - ".pov" - - ".inc" - tm_scope: source.pov-ray sdl - ace_mode: text - language_id: 275 -Pan: - type: programming - color: "#cc0000" - extensions: - - ".pan" - tm_scope: source.pan - ace_mode: text - language_id: 276 -Papyrus: - type: programming - color: "#6600cc" - extensions: - - ".psc" - tm_scope: source.papyrus.skyrim - ace_mode: text - language_id: 277 -Parrot: - type: programming - color: "#f3ca0a" - extensions: - - ".parrot" - tm_scope: none - ace_mode: text - language_id: 278 -Parrot Assembly: - group: Parrot - type: programming - aliases: - - pasm - extensions: - - ".pasm" - interpreters: - - parrot - tm_scope: none - ace_mode: text - language_id: 279 -Parrot Internal Representation: - group: Parrot - tm_scope: source.parrot.pir - type: programming - aliases: - - pir - extensions: - - ".pir" - interpreters: - - parrot - ace_mode: text - language_id: 280 -Pascal: - type: programming - color: "#E3F171" - extensions: - - ".pas" - - ".dfm" - - ".dpr" - - ".inc" - - ".lpr" - - ".pascal" - - ".pp" - interpreters: - - instantfpc - tm_scope: source.pascal - ace_mode: pascal - codemirror_mode: pascal - codemirror_mime_type: text/x-pascal - language_id: 281 -Pawn: - type: programming - color: "#dbb284" - extensions: - - ".pwn" - - ".inc" - - ".sma" - tm_scope: source.pawn - ace_mode: text - language_id: 271 -Pep8: - type: programming - color: "#C76F5B" - extensions: - - ".pep" - ace_mode: text - tm_scope: source.pep8 - language_id: 840372442 -Perl: - type: programming - tm_scope: source.perl - ace_mode: perl - codemirror_mode: perl - codemirror_mime_type: text/x-perl - color: "#0298c3" - extensions: - - ".pl" - - ".al" - - ".cgi" - - ".fcgi" - - ".perl" - - ".ph" - - ".plx" - - ".pm" - - ".psgi" - - ".t" - filenames: - - Makefile.PL - - Rexfile - - ack - - cpanfile - interpreters: - - cperl - - perl - aliases: - - cperl - language_id: 282 -Pic: - type: markup - group: Roff - tm_scope: source.pic - extensions: - - ".pic" - - ".chem" - ace_mode: text - codemirror_mode: troff - codemirror_mime_type: text/troff - language_id: 425 -Pickle: - type: data - extensions: - - ".pkl" - tm_scope: none - ace_mode: text - language_id: 284 -PicoLisp: - type: programming - extensions: - - ".l" - interpreters: - - picolisp - - pil - tm_scope: source.lisp - ace_mode: lisp - language_id: 285 -PigLatin: - type: programming - color: "#fcd7de" - extensions: - - ".pig" - tm_scope: source.pig_latin - ace_mode: text - language_id: 286 -Pike: - type: programming - color: "#005390" - extensions: - - ".pike" - - ".pmod" - interpreters: - - pike - tm_scope: source.pike - ace_mode: text - language_id: 287 -PlantUML: - type: data - extensions: - - ".puml" - - ".iuml" - - ".plantuml" - tm_scope: source.wsd - ace_mode: text - language_id: 833504686 -Pod: - type: prose - ace_mode: perl - codemirror_mode: perl - codemirror_mime_type: text/x-perl - wrap: true - extensions: - - ".pod" - interpreters: - - perl - tm_scope: none - language_id: 288 -Pod 6: - type: prose - ace_mode: perl - tm_scope: source.perl6fe - wrap: true - extensions: - - ".pod" - - ".pod6" - interpreters: - - perl6 - language_id: 155357471 -PogoScript: - type: programming - color: "#d80074" - extensions: - - ".pogo" - tm_scope: source.pogoscript - ace_mode: text - language_id: 289 -Pony: - type: programming - extensions: - - ".pony" - tm_scope: source.pony - ace_mode: text - language_id: 290 -PostCSS: - type: markup - tm_scope: source.postcss - group: CSS - extensions: - - ".pcss" - - ".postcss" - ace_mode: text - language_id: 262764437 -PostScript: - type: markup - color: "#da291c" - extensions: - - ".ps" - - ".eps" - - ".epsi" - - ".pfa" - tm_scope: source.postscript - aliases: - - postscr - ace_mode: text - language_id: 291 -PowerBuilder: - type: programming - color: "#8f0f8d" - extensions: - - ".pbt" - - ".sra" - - ".sru" - - ".srw" - tm_scope: none - ace_mode: text - language_id: 292 -PowerShell: - type: programming - color: "#012456" - tm_scope: source.powershell - ace_mode: powershell - codemirror_mode: powershell - codemirror_mime_type: application/x-powershell - aliases: - - posh - - pwsh - extensions: - - ".ps1" - - ".psd1" - - ".psm1" - interpreters: - - pwsh - language_id: 293 -Prisma: - type: data - color: "#0c344b" - extensions: - - ".prisma" - tm_scope: source.prisma - ace_mode: text - language_id: 499933428 -Processing: - type: programming - color: "#0096D8" - extensions: - - ".pde" - tm_scope: source.processing - ace_mode: text - language_id: 294 -Proguard: - type: data - extensions: - - ".pro" - tm_scope: none - ace_mode: text - language_id: 716513858 -Prolog: - type: programming - color: "#74283c" - extensions: - - ".pl" - - ".pro" - - ".prolog" - - ".yap" - interpreters: - - swipl - - yap - tm_scope: source.prolog - ace_mode: prolog - language_id: 295 -Propeller Spin: - type: programming - color: "#7fa2a7" - extensions: - - ".spin" - tm_scope: source.spin - ace_mode: text - language_id: 296 -Protocol Buffer: - type: data - aliases: - - protobuf - - Protocol Buffers - extensions: - - ".proto" - tm_scope: source.protobuf - ace_mode: protobuf - codemirror_mode: protobuf - codemirror_mime_type: text/x-protobuf - language_id: 297 -Public Key: - type: data - extensions: - - ".asc" - - ".pub" - tm_scope: none - ace_mode: text - codemirror_mode: asciiarmor - codemirror_mime_type: application/pgp - language_id: 298 -Pug: - type: markup - color: "#a86454" - extensions: - - ".jade" - - ".pug" - tm_scope: text.jade - ace_mode: jade - codemirror_mode: pug - codemirror_mime_type: text/x-pug - language_id: 179 -Puppet: - type: programming - color: "#302B6D" - extensions: - - ".pp" - filenames: - - Modulefile - ace_mode: text - codemirror_mode: puppet - codemirror_mime_type: text/x-puppet - tm_scope: source.puppet - language_id: 299 -Pure Data: - type: data - extensions: - - ".pd" - tm_scope: none - ace_mode: text - language_id: 300 -PureBasic: - type: programming - color: "#5a6986" - extensions: - - ".pb" - - ".pbi" - tm_scope: none - ace_mode: text - language_id: 301 -PureScript: - type: programming - color: "#1D222D" - extensions: - - ".purs" - tm_scope: source.purescript - ace_mode: haskell - codemirror_mode: haskell - codemirror_mime_type: text/x-haskell - language_id: 302 -Python: - type: programming - tm_scope: source.python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - color: "#3572A5" - extensions: - - ".py" - - ".cgi" - - ".fcgi" - - ".gyp" - - ".gypi" - - ".lmi" - - ".py3" - - ".pyde" - - ".pyi" - - ".pyp" - - ".pyt" - - ".pyw" - - ".rpy" - - ".smk" - - ".spec" - - ".tac" - - ".wsgi" - - ".xpy" - filenames: - - ".gclient" - - DEPS - - SConscript - - SConstruct - - Snakefile - - wscript - interpreters: - - python - - python2 - - python3 - aliases: - - python3 - - rusthon - language_id: 303 -Python console: - type: programming - group: Python - searchable: false - aliases: - - pycon - tm_scope: text.python.console - ace_mode: text - language_id: 428 -Python traceback: - type: data - group: Python - searchable: false - extensions: - - ".pytb" - tm_scope: text.python.traceback - ace_mode: text - language_id: 304 -Q#: - type: programming - extensions: - - ".qs" - aliases: - - qsharp - color: "#fed659" - ace_mode: text - tm_scope: source.qsharp - language_id: 697448245 -QML: - type: programming - color: "#44a51c" - extensions: - - ".qml" - - ".qbs" - tm_scope: source.qml - ace_mode: text - language_id: 305 -QMake: - type: programming - extensions: - - ".pro" - - ".pri" - interpreters: - - qmake - tm_scope: source.qmake - ace_mode: text - language_id: 306 -Qt Script: - type: programming - ace_mode: javascript - codemirror_mode: javascript - codemirror_mime_type: text/javascript - extensions: - - ".qs" - filenames: - - installscript.qs - - toolchain_installscript.qs - color: "#00b841" - tm_scope: source.js - language_id: 558193693 -Quake: - type: programming - filenames: - - m3makefile - - m3overrides - color: "#882233" - ace_mode: text - tm_scope: source.quake - language_id: 375265331 -R: - type: programming - color: "#198CE7" - aliases: - - R - - Rscript - - splus - extensions: - - ".r" - - ".rd" - - ".rsx" - filenames: - - ".Rprofile" - - expr-dist - interpreters: - - Rscript - tm_scope: source.r - ace_mode: r - codemirror_mode: r - codemirror_mime_type: text/x-rsrc - language_id: 307 -RAML: - type: markup - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - tm_scope: source.yaml - color: "#77d9fb" - extensions: - - ".raml" - language_id: 308 -RDoc: - type: prose - ace_mode: rdoc - wrap: true - extensions: - - ".rdoc" - tm_scope: text.rdoc - language_id: 309 -REALbasic: - type: programming - extensions: - - ".rbbas" - - ".rbfrm" - - ".rbmnu" - - ".rbres" - - ".rbtbar" - - ".rbuistate" - tm_scope: source.vbnet - ace_mode: text - language_id: 310 -REXX: - type: programming - aliases: - - arexx - extensions: - - ".rexx" - - ".pprx" - - ".rex" - interpreters: - - regina - - rexx - tm_scope: source.rexx - ace_mode: text - language_id: 311 -RMarkdown: - type: prose - wrap: true - ace_mode: markdown - codemirror_mode: gfm - codemirror_mime_type: text/x-gfm - extensions: - - ".rmd" - tm_scope: source.gfm - language_id: 313 -RPC: - type: programming - aliases: - - rpcgen - - oncrpc - - xdr - ace_mode: c_cpp - extensions: - - ".x" - tm_scope: source.c - language_id: 1031374237 -RPM Spec: - type: data - tm_scope: source.rpm-spec - extensions: - - ".spec" - aliases: - - specfile - ace_mode: text - codemirror_mode: rpm - codemirror_mime_type: text/x-rpm-spec - language_id: 314 -RUNOFF: - type: markup - color: "#665a4e" - extensions: - - ".rnh" - - ".rno" - wrap: true - tm_scope: text.runoff - ace_mode: text - language_id: 315 -Racket: - type: programming - color: "#3c5caa" - extensions: - - ".rkt" - - ".rktd" - - ".rktl" - - ".scrbl" - interpreters: - - racket - tm_scope: source.racket - ace_mode: lisp - language_id: 316 -Ragel: - type: programming - color: "#9d5200" - extensions: - - ".rl" - aliases: - - ragel-rb - - ragel-ruby - tm_scope: none - ace_mode: text - language_id: 317 -Raku: - type: programming - color: "#0000fb" - extensions: - - ".6pl" - - ".6pm" - - ".nqp" - - ".p6" - - ".p6l" - - ".p6m" - - ".pl" - - ".pl6" - - ".pm" - - ".pm6" - - ".t" - interpreters: - - perl6 - - raku - - rakudo - aliases: - - perl6 - - perl-6 - tm_scope: source.perl6fe - ace_mode: perl - codemirror_mode: perl - codemirror_mime_type: text/x-perl - language_id: 283 -Rascal: - type: programming - color: "#fffaa0" - extensions: - - ".rsc" - tm_scope: source.rascal - ace_mode: text - language_id: 173616037 -Raw token data: - type: data - aliases: - - raw - extensions: - - ".raw" - tm_scope: none - ace_mode: text - language_id: 318 -Readline Config: - type: data - group: INI - aliases: - - inputrc - - readline - filenames: - - ".inputrc" - - inputrc - tm_scope: source.inputrc - ace_mode: text - language_id: 538732839 -Reason: - type: programming - color: "#ff5847" - ace_mode: rust - codemirror_mode: rust - codemirror_mime_type: text/x-rustsrc - extensions: - - ".re" - - ".rei" - tm_scope: source.reason - language_id: 869538413 -Rebol: - type: programming - color: "#358a5b" - extensions: - - ".reb" - - ".r" - - ".r2" - - ".r3" - - ".rebol" - ace_mode: text - tm_scope: source.rebol - language_id: 319 -Red: - type: programming - color: "#f50000" - extensions: - - ".red" - - ".reds" - aliases: - - red/system - tm_scope: source.red - ace_mode: text - language_id: 320 -Redcode: - type: programming - extensions: - - ".cw" - tm_scope: none - ace_mode: text - language_id: 321 -Regular Expression: - type: data - extensions: - - ".regexp" - - ".regex" - aliases: - - regexp - - regex - ace_mode: text - tm_scope: source.regexp - language_id: 363378884 -Ren'Py: - type: programming - aliases: - - renpy - color: "#ff7f7f" - extensions: - - ".rpy" - tm_scope: source.renpy - ace_mode: python - language_id: 322 -RenderScript: - type: programming - extensions: - - ".rs" - - ".rsh" - tm_scope: none - ace_mode: text - language_id: 323 -Rich Text Format: - type: markup - extensions: - - ".rtf" - tm_scope: text.rtf - ace_mode: text - language_id: 51601661 -Ring: - type: programming - color: "#2D54CB" - extensions: - - ".ring" - tm_scope: source.ring - ace_mode: text - language_id: 431 -Riot: - type: markup - color: "#A71E49" - ace_mode: html - extensions: - - ".riot" - tm_scope: text.html.riot - language_id: 878396783 -RobotFramework: - type: programming - extensions: - - ".robot" - tm_scope: text.robot - ace_mode: text - language_id: 324 -Roff: - type: markup - color: "#ecdebe" - extensions: - - ".roff" - - ".1" - - ".1in" - - ".1m" - - ".1x" - - ".2" - - ".3" - - ".3in" - - ".3m" - - ".3p" - - ".3pm" - - ".3qt" - - ".3x" - - ".4" - - ".5" - - ".6" - - ".7" - - ".8" - - ".9" - - ".l" - - ".man" - - ".mdoc" - - ".me" - - ".ms" - - ".n" - - ".nr" - - ".rno" - - ".tmac" - filenames: - - eqnrc - - mmn - - mmt - - troffrc - - troffrc-end - tm_scope: text.roff - aliases: - - groff - - man - - manpage - - man page - - man-page - - mdoc - - nroff - - troff - wrap: true - ace_mode: text - codemirror_mode: troff - codemirror_mime_type: text/troff - language_id: 141 -Roff Manpage: - type: markup - group: Roff - extensions: - - ".1" - - ".1in" - - ".1m" - - ".1x" - - ".2" - - ".3" - - ".3in" - - ".3m" - - ".3p" - - ".3pm" - - ".3qt" - - ".3x" - - ".4" - - ".5" - - ".6" - - ".7" - - ".8" - - ".9" - - ".man" - - ".mdoc" - wrap: true - tm_scope: text.roff - ace_mode: text - codemirror_mode: troff - codemirror_mime_type: text/troff - language_id: 612669833 -Rouge: - type: programming - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - color: "#cc0088" - extensions: - - ".rg" - tm_scope: source.clojure - language_id: 325 -Ruby: - type: programming - tm_scope: source.ruby - ace_mode: ruby - codemirror_mode: ruby - codemirror_mime_type: text/x-ruby - color: "#701516" - aliases: - - jruby - - macruby - - rake - - rb - - rbx - extensions: - - ".rb" - - ".builder" - - ".eye" - - ".fcgi" - - ".gemspec" - - ".god" - - ".jbuilder" - - ".mspec" - - ".pluginspec" - - ".podspec" - - ".rabl" - - ".rake" - - ".rbi" - - ".rbuild" - - ".rbw" - - ".rbx" - - ".ru" - - ".ruby" - - ".spec" - - ".thor" - - ".watchr" - interpreters: - - ruby - - macruby - - rake - - jruby - - rbx - filenames: - - ".irbrc" - - ".pryrc" - - ".simplecov" - - Appraisals - - Berksfile - - Brewfile - - Buildfile - - Capfile - - Dangerfile - - Deliverfile - - Fastfile - - Gemfile - - Gemfile.lock - - Guardfile - - Jarfile - - Mavenfile - - Podfile - - Puppetfile - - Rakefile - - Snapfile - - Thorfile - - Vagrantfile - - buildfile - language_id: 326 -Rust: - type: programming - color: "#dea584" - extensions: - - ".rs" - - ".rs.in" - tm_scope: source.rust - ace_mode: rust - codemirror_mode: rust - codemirror_mime_type: text/x-rustsrc - language_id: 327 -SAS: - type: programming - color: "#B34936" - extensions: - - ".sas" - tm_scope: source.sas - ace_mode: text - codemirror_mode: sas - codemirror_mime_type: text/x-sas - language_id: 328 -SCSS: - type: markup - color: "#c6538c" - tm_scope: source.css.scss - ace_mode: scss - codemirror_mode: css - codemirror_mime_type: text/x-scss - extensions: - - ".scss" - language_id: 329 -SMT: - type: programming - extensions: - - ".smt2" - - ".smt" - interpreters: - - boolector - - cvc4 - - mathsat5 - - opensmt - - smtinterpol - - smt-rat - - stp - - verit - - yices2 - - z3 - tm_scope: source.smt - ace_mode: text - language_id: 330 -SPARQL: - type: data - tm_scope: source.sparql - ace_mode: text - codemirror_mode: sparql - codemirror_mime_type: application/sparql-query - extensions: - - ".sparql" - - ".rq" - language_id: 331 -SQF: - type: programming - color: "#3F3F3F" - extensions: - - ".sqf" - - ".hqf" - tm_scope: source.sqf - ace_mode: text - language_id: 332 -SQL: - type: data - tm_scope: source.sql - ace_mode: sql - codemirror_mode: sql - codemirror_mime_type: text/x-sql - extensions: - - ".sql" - - ".cql" - - ".ddl" - - ".inc" - - ".mysql" - - ".prc" - - ".tab" - - ".udf" - - ".viw" - language_id: 333 -SQLPL: - type: programming - ace_mode: sql - codemirror_mode: sql - codemirror_mime_type: text/x-sql - tm_scope: source.sql - extensions: - - ".sql" - - ".db2" - language_id: 334 -SRecode Template: - type: markup - color: "#348a34" - tm_scope: source.lisp - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - extensions: - - ".srt" - language_id: 335 -SSH Config: - type: data - group: INI - filenames: - - ssh-config - - ssh_config - - sshconfig - - sshconfig.snip - - sshd-config - - sshd_config - ace_mode: text - tm_scope: source.ssh-config - language_id: 554920715 -STON: - type: data - group: Smalltalk - extensions: - - ".ston" - tm_scope: source.smalltalk - ace_mode: text - language_id: 336 -SVG: - type: data - color: "#ff9900" - extensions: - - ".svg" - tm_scope: text.xml.svg - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 337 -SWIG: - type: programming - extensions: - - ".i" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 1066250075 -Sage: - type: programming - extensions: - - ".sage" - - ".sagews" - tm_scope: source.python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - language_id: 338 -SaltStack: - type: programming - color: "#646464" - aliases: - - saltstate - - salt - extensions: - - ".sls" - tm_scope: source.yaml.salt - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 339 -Sass: - type: markup - color: "#a53b70" - tm_scope: source.sass - extensions: - - ".sass" - ace_mode: sass - codemirror_mode: sass - codemirror_mime_type: text/x-sass - language_id: 340 -Scala: - type: programming - tm_scope: source.scala - ace_mode: scala - codemirror_mode: clike - codemirror_mime_type: text/x-scala - color: "#c22d40" - extensions: - - ".scala" - - ".kojo" - - ".sbt" - - ".sc" - interpreters: - - scala - language_id: 341 -Scaml: - group: HTML - type: markup - extensions: - - ".scaml" - tm_scope: source.scaml - ace_mode: text - language_id: 342 -Scheme: - type: programming - color: "#1e4aec" - extensions: - - ".scm" - - ".sch" - - ".sld" - - ".sls" - - ".sps" - - ".ss" - interpreters: - - scheme - - guile - - bigloo - - chicken - - csi - - gosh - - r6rs - tm_scope: source.scheme - ace_mode: scheme - codemirror_mode: scheme - codemirror_mime_type: text/x-scheme - language_id: 343 -Scilab: - type: programming - extensions: - - ".sci" - - ".sce" - - ".tst" - tm_scope: source.scilab - ace_mode: text - language_id: 344 -Self: - type: programming - color: "#0579aa" - extensions: - - ".self" - tm_scope: none - ace_mode: text - language_id: 345 -ShaderLab: - type: programming - extensions: - - ".shader" - ace_mode: text - tm_scope: source.shaderlab - language_id: 664257356 -Shell: - type: programming - color: "#89e051" - aliases: - - sh - - shell-script - - bash - - zsh - extensions: - - ".sh" - - ".bash" - - ".bats" - - ".cgi" - - ".command" - - ".env" - - ".fcgi" - - ".ksh" - - ".sh.in" - - ".tmux" - - ".tool" - - ".zsh" - filenames: - - ".bash_aliases" - - ".bash_history" - - ".bash_logout" - - ".bash_profile" - - ".bashrc" - - ".cshrc" - - ".env" - - ".env.example" - - ".flaskenv" - - ".login" - - ".profile" - - ".zlogin" - - ".zlogout" - - ".zprofile" - - ".zshenv" - - ".zshrc" - - 9fs - - PKGBUILD - - bash_aliases - - bash_logout - - bash_profile - - bashrc - - cshrc - - gradlew - - login - - man - - profile - - zlogin - - zlogout - - zprofile - - zshenv - - zshrc - interpreters: - - ash - - bash - - dash - - ksh - - mksh - - pdksh - - rc - - sh - - zsh - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 346 -ShellSession: - type: programming - extensions: - - ".sh-session" - aliases: - - bash session - - console - tm_scope: text.shell-session - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 347 -Shen: - type: programming - color: "#120F14" - extensions: - - ".shen" - tm_scope: source.shen - ace_mode: text - language_id: 348 -Sieve: - type: programming - tm_scope: source.sieve - ace_mode: text - extensions: - - ".sieve" - codemirror_mode: sieve - codemirror_mime_type: application/sieve - language_id: 208976687 -Slash: - type: programming - color: "#007eff" - extensions: - - ".sl" - tm_scope: text.html.slash - ace_mode: text - language_id: 349 -Slice: - type: programming - color: "#003fa2" - tm_scope: source.slice - ace_mode: text - extensions: - - ".ice" - language_id: 894641667 -Slim: - type: markup - color: "#2b2b2b" - extensions: - - ".slim" - tm_scope: text.slim - ace_mode: text - codemirror_mode: slim - codemirror_mime_type: text/x-slim - language_id: 350 -SmPL: - type: programming - extensions: - - ".cocci" - aliases: - - coccinelle - ace_mode: text - tm_scope: source.smpl - color: "#c94949" - language_id: 164123055 -Smali: - type: programming - extensions: - - ".smali" - ace_mode: text - tm_scope: source.smali - language_id: 351 -Smalltalk: - type: programming - color: "#596706" - extensions: - - ".st" - - ".cs" - aliases: - - squeak - tm_scope: source.smalltalk - ace_mode: text - codemirror_mode: smalltalk - codemirror_mime_type: text/x-stsrc - language_id: 352 -Smarty: - type: programming - extensions: - - ".tpl" - ace_mode: smarty - codemirror_mode: smarty - codemirror_mime_type: text/x-smarty - tm_scope: text.html.smarty - language_id: 353 -Solidity: - type: programming - color: "#AA6746" - ace_mode: text - tm_scope: source.solidity - extensions: - - ".sol" - language_id: 237469032 -SourcePawn: - type: programming - color: "#f69e1d" - aliases: - - sourcemod - extensions: - - ".sp" - - ".inc" - tm_scope: source.sourcepawn - ace_mode: text - language_id: 354 -Spline Font Database: - type: data - extensions: - - ".sfd" - tm_scope: text.sfd - ace_mode: yaml - language_id: 767169629 -Squirrel: - type: programming - color: "#800000" - extensions: - - ".nut" - tm_scope: source.c++ - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-c++src - language_id: 355 -Stan: - type: programming - color: "#b2011d" - extensions: - - ".stan" - ace_mode: text - tm_scope: source.stan - language_id: 356 -Standard ML: - type: programming - color: "#dc566d" - aliases: - - sml - extensions: - - ".ml" - - ".fun" - - ".sig" - - ".sml" - tm_scope: source.ml - ace_mode: text - codemirror_mode: mllike - codemirror_mime_type: text/x-ocaml - language_id: 357 -Starlark: - type: programming - tm_scope: source.python - ace_mode: python - codemirror_mode: python - codemirror_mime_type: text/x-python - color: "#76d275" - extensions: - - ".bzl" - filenames: - - BUCK - - BUILD - - BUILD.bazel - - Tiltfile - - WORKSPACE - aliases: - - bazel - - bzl - language_id: 960266174 -Stata: - type: programming - extensions: - - ".do" - - ".ado" - - ".doh" - - ".ihlp" - - ".mata" - - ".matah" - - ".sthlp" - tm_scope: source.stata - ace_mode: text - language_id: 358 -Stylus: - type: markup - color: "#ff6347" - extensions: - - ".styl" - tm_scope: source.stylus - ace_mode: stylus - language_id: 359 -SubRip Text: - type: data - extensions: - - ".srt" - ace_mode: text - tm_scope: text.srt - language_id: 360 -SugarSS: - type: markup - tm_scope: source.css.postcss.sugarss - group: CSS - extensions: - - ".sss" - ace_mode: text - language_id: 826404698 -SuperCollider: - type: programming - color: "#46390b" - extensions: - - ".sc" - - ".scd" - interpreters: - - sclang - - scsynth - tm_scope: source.supercollider - ace_mode: text - language_id: 361 -Svelte: - type: markup - color: "#ff3e00" - tm_scope: source.svelte - ace_mode: html - codemirror_mode: htmlmixed - codemirror_mime_type: text/html - extensions: - - ".svelte" - language_id: 928734530 -Swift: - type: programming - color: "#ffac45" - extensions: - - ".swift" - tm_scope: source.swift - ace_mode: text - codemirror_mode: swift - codemirror_mime_type: text/x-swift - language_id: 362 -SystemVerilog: - type: programming - color: "#DAE1C2" - extensions: - - ".sv" - - ".svh" - - ".vh" - tm_scope: source.systemverilog - ace_mode: verilog - codemirror_mode: verilog - codemirror_mime_type: text/x-systemverilog - language_id: 363 -TI Program: - type: programming - ace_mode: text - color: "#A0AA87" - extensions: - - ".8xp" - - ".8xk" - - ".8xk.txt" - - ".8xp.txt" - language_id: 422 - tm_scope: none -TLA: - type: programming - extensions: - - ".tla" - tm_scope: source.tla - ace_mode: text - language_id: 364 -TOML: - type: data - extensions: - - ".toml" - filenames: - - Cargo.lock - - Gopkg.lock - - poetry.lock - tm_scope: source.toml - ace_mode: toml - codemirror_mode: toml - codemirror_mime_type: text/x-toml - language_id: 365 -TSQL: - type: programming - extensions: - - ".sql" - ace_mode: sql - tm_scope: source.tsql - language_id: 918334941 -TSV: - type: data - ace_mode: text - tm_scope: source.generic-db - extensions: - - ".tsv" - language_id: 1035892117 -TSX: - type: programming - group: TypeScript - extensions: - - ".tsx" - tm_scope: source.tsx - ace_mode: javascript - codemirror_mode: jsx - codemirror_mime_type: text/jsx - language_id: 94901924 -TXL: - type: programming - extensions: - - ".txl" - tm_scope: source.txl - ace_mode: text - language_id: 366 -Tcl: - type: programming - color: "#e4cc98" - extensions: - - ".tcl" - - ".adp" - - ".tm" - filenames: - - owh - - starfield - interpreters: - - tclsh - - wish - tm_scope: source.tcl - ace_mode: tcl - codemirror_mode: tcl - codemirror_mime_type: text/x-tcl - language_id: 367 -Tcsh: - type: programming - group: Shell - extensions: - - ".tcsh" - - ".csh" - interpreters: - - tcsh - - csh - tm_scope: source.shell - ace_mode: sh - codemirror_mode: shell - codemirror_mime_type: text/x-sh - language_id: 368 -TeX: - type: markup - color: "#3D6117" - ace_mode: tex - codemirror_mode: stex - codemirror_mime_type: text/x-stex - tm_scope: text.tex.latex - wrap: true - aliases: - - latex - extensions: - - ".tex" - - ".aux" - - ".bbx" - - ".cbx" - - ".cls" - - ".dtx" - - ".ins" - - ".lbx" - - ".ltx" - - ".mkii" - - ".mkiv" - - ".mkvi" - - ".sty" - - ".toc" - language_id: 369 -Tea: - type: markup - extensions: - - ".tea" - tm_scope: source.tea - ace_mode: text - language_id: 370 -Terra: - type: programming - extensions: - - ".t" - color: "#00004c" - tm_scope: source.terra - ace_mode: lua - codemirror_mode: lua - codemirror_mime_type: text/x-lua - interpreters: - - lua - language_id: 371 -Texinfo: - type: prose - wrap: true - extensions: - - ".texinfo" - - ".texi" - - ".txi" - ace_mode: text - tm_scope: text.texinfo - interpreters: - - makeinfo - language_id: 988020015 -Text: - type: prose - wrap: true - aliases: - - fundamental - extensions: - - ".txt" - - ".fr" - - ".nb" - - ".ncl" - - ".no" - filenames: - - COPYING - - COPYING.regex - - COPYRIGHT.regex - - FONTLOG - - INSTALL - - INSTALL.mysql - - LICENSE - - LICENSE.mysql - - NEWS - - README.1ST - - README.me - - README.mysql - - click.me - - delete.me - - go.mod - - go.sum - - keep.me - - package.mask - - package.use.mask - - package.use.stable.mask - - read.me - - readme.1st - - test.me - - use.mask - - use.stable.mask - tm_scope: none - ace_mode: text - language_id: 372 -Textile: - type: prose - ace_mode: textile - codemirror_mode: textile - codemirror_mime_type: text/x-textile - wrap: true - extensions: - - ".textile" - tm_scope: none - language_id: 373 -Thrift: - type: programming - tm_scope: source.thrift - extensions: - - ".thrift" - ace_mode: text - language_id: 374 -Turing: - type: programming - color: "#cf142b" - extensions: - - ".t" - - ".tu" - tm_scope: source.turing - ace_mode: text - language_id: 375 -Turtle: - type: data - extensions: - - ".ttl" - tm_scope: source.turtle - ace_mode: text - codemirror_mode: turtle - codemirror_mime_type: text/turtle - language_id: 376 -Twig: - type: markup - color: "#c1d026" - extensions: - - ".twig" - tm_scope: text.html.twig - ace_mode: twig - codemirror_mode: twig - codemirror_mime_type: text/x-twig - language_id: 377 -Type Language: - type: data - aliases: - - tl - extensions: - - ".tl" - tm_scope: source.tl - ace_mode: text - language_id: 632765617 -TypeScript: - type: programming - color: "#2b7489" - aliases: - - ts - interpreters: - - deno - - ts-node - extensions: - - ".ts" - tm_scope: source.ts - ace_mode: typescript - codemirror_mode: javascript - codemirror_mime_type: application/typescript - language_id: 378 -Unified Parallel C: - type: programming - color: "#4e3617" - group: C - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - extensions: - - ".upc" - tm_scope: source.c - language_id: 379 -Unity3D Asset: - type: data - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - extensions: - - ".anim" - - ".asset" - - ".mask" - - ".mat" - - ".meta" - - ".prefab" - - ".unity" - tm_scope: source.yaml - language_id: 380 -Unix Assembly: - type: programming - group: Assembly - extensions: - - ".s" - - ".ms" - tm_scope: source.x86 - ace_mode: assembly_x86 - language_id: 120 -Uno: - type: programming - color: "#9933cc" - extensions: - - ".uno" - ace_mode: csharp - codemirror_mode: clike - codemirror_mime_type: text/x-csharp - tm_scope: source.cs - language_id: 381 -UnrealScript: - type: programming - color: "#a54c4d" - extensions: - - ".uc" - tm_scope: source.java - ace_mode: java - codemirror_mode: clike - codemirror_mime_type: text/x-java - language_id: 382 -UrWeb: - type: programming - aliases: - - Ur/Web - - Ur - extensions: - - ".ur" - - ".urs" - tm_scope: source.ur - ace_mode: text - language_id: 383 -V: - type: programming - color: "#4f87c4" - aliases: - - vlang - extensions: - - ".v" - tm_scope: source.v - ace_mode: golang - codemirror_mode: go - codemirror_mime_type: text/x-go - language_id: 603371597 -VBA: - type: programming - color: "#867db1" - extensions: - - ".bas" - - ".cls" - - ".frm" - - ".frx" - - ".vba" - tm_scope: source.vbnet - aliases: - - vb6 - - visual basic 6 - - visual basic for applications - ace_mode: text - codemirror_mode: vb - codemirror_mime_type: text/x-vb - language_id: 399230729 -VBScript: - type: programming - color: "#15dcdc" - extensions: - - ".vbs" - tm_scope: source.vbnet - ace_mode: text - codemirror_mode: vbscript - codemirror_mime_type: text/vbscript - language_id: 408016005 -VCL: - type: programming - color: "#148AA8" - extensions: - - ".vcl" - tm_scope: source.varnish.vcl - ace_mode: text - language_id: 384 -VHDL: - type: programming - color: "#adb2cb" - extensions: - - ".vhdl" - - ".vhd" - - ".vhf" - - ".vhi" - - ".vho" - - ".vhs" - - ".vht" - - ".vhw" - tm_scope: source.vhdl - ace_mode: vhdl - codemirror_mode: vhdl - codemirror_mime_type: text/x-vhdl - language_id: 385 -Vala: - type: programming - color: "#fbe5cd" - extensions: - - ".vala" - - ".vapi" - tm_scope: source.vala - ace_mode: vala - language_id: 386 -Verilog: - type: programming - color: "#b2b7f8" - extensions: - - ".v" - - ".veo" - tm_scope: source.verilog - ace_mode: verilog - codemirror_mode: verilog - codemirror_mime_type: text/x-verilog - language_id: 387 -Vim Help File: - type: prose - aliases: - - vimhelp - extensions: - - ".txt" - tm_scope: text.vim-help - ace_mode: text - language_id: 508563686 -Vim Snippet: - type: markup - aliases: - - SnipMate - - UltiSnip - - UltiSnips - - NeoSnippet - extensions: - - ".snip" - - ".snippet" - - ".snippets" - tm_scope: source.vim-snippet - ace_mode: text - language_id: 81265970 -Vim script: - type: programming - color: "#199f4b" - tm_scope: source.viml - aliases: - - vim - - viml - - nvim - extensions: - - ".vim" - - ".vba" - - ".vmb" - filenames: - - ".exrc" - - ".gvimrc" - - ".nvimrc" - - ".vimrc" - - _vimrc - - gvimrc - - nvimrc - - vimrc - ace_mode: text - language_id: 388 -Visual Basic .NET: - type: programming - color: "#945db7" - extensions: - - ".vb" - - ".vbhtml" - aliases: - - visual basic - - vbnet - - vb .net - - vb.net - tm_scope: source.vbnet - ace_mode: text - codemirror_mode: vb - codemirror_mime_type: text/x-vb - language_id: 389 -Volt: - type: programming - color: "#1F1F1F" - extensions: - - ".volt" - tm_scope: source.d - ace_mode: d - codemirror_mode: d - codemirror_mime_type: text/x-d - language_id: 390 -Vue: - type: markup - color: "#2c3e50" - extensions: - - ".vue" - tm_scope: text.html.vue - ace_mode: html - language_id: 391 -Wavefront Material: - type: data - extensions: - - ".mtl" - tm_scope: source.wavefront.mtl - ace_mode: text - language_id: 392 -Wavefront Object: - type: data - extensions: - - ".obj" - tm_scope: source.wavefront.obj - ace_mode: text - language_id: 393 -Web Ontology Language: - type: data - extensions: - - ".owl" - tm_scope: text.xml - ace_mode: xml - language_id: 394 -WebAssembly: - type: programming - color: "#04133b" - extensions: - - ".wast" - - ".wat" - aliases: - - wast - - wasm - tm_scope: source.webassembly - ace_mode: lisp - codemirror_mode: commonlisp - codemirror_mime_type: text/x-common-lisp - language_id: 956556503 -WebIDL: - type: programming - extensions: - - ".webidl" - tm_scope: source.webidl - ace_mode: text - codemirror_mode: webidl - codemirror_mime_type: text/x-webidl - language_id: 395 -WebVTT: - type: data - wrap: true - extensions: - - ".vtt" - tm_scope: source.vtt - ace_mode: text - language_id: 658679714 -Wget Config: - type: data - group: INI - aliases: - - wgetrc - filenames: - - ".wgetrc" - tm_scope: source.wgetrc - ace_mode: text - language_id: 668457123 -Windows Registry Entries: - type: data - extensions: - - ".reg" - tm_scope: source.reg - ace_mode: ini - codemirror_mode: properties - codemirror_mime_type: text/x-properties - language_id: 969674868 -Wollok: - type: programming - color: "#a23738" - extensions: - - ".wlk" - ace_mode: text - tm_scope: source.wollok - language_id: 632745969 -World of Warcraft Addon Data: - type: data - extensions: - - ".toc" - tm_scope: source.toc - ace_mode: text - language_id: 396 -X BitMap: - type: data - group: C - aliases: - - xbm - extensions: - - ".xbm" - ace_mode: c_cpp - tm_scope: source.c - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 782911107 -X Font Directory Index: - type: data - filenames: - - encodings.dir - - fonts.alias - - fonts.dir - - fonts.scale - tm_scope: source.fontdir - ace_mode: text - language_id: 208700028 -X PixMap: - type: data - group: C - aliases: - - xpm - extensions: - - ".xpm" - - ".pm" - ace_mode: c_cpp - tm_scope: source.c - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 781846279 -X10: - type: programming - aliases: - - xten - ace_mode: text - extensions: - - ".x10" - color: "#4B6BEF" - tm_scope: source.x10 - language_id: 397 -XC: - type: programming - color: "#99DA07" - extensions: - - ".xc" - tm_scope: source.xc - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 398 -XCompose: - type: data - filenames: - - ".XCompose" - - XCompose - - xcompose - tm_scope: config.xcompose - ace_mode: text - language_id: 225167241 -XML: - type: data - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - aliases: - - rss - - xsd - - wsdl - extensions: - - ".xml" - - ".adml" - - ".admx" - - ".ant" - - ".axml" - - ".builds" - - ".ccproj" - - ".ccxml" - - ".clixml" - - ".cproject" - - ".cscfg" - - ".csdef" - - ".csl" - - ".csproj" - - ".ct" - - ".depproj" - - ".dita" - - ".ditamap" - - ".ditaval" - - ".dll.config" - - ".dotsettings" - - ".filters" - - ".fsproj" - - ".fxml" - - ".glade" - - ".gml" - - ".gmx" - - ".grxml" - - ".gst" - - ".iml" - - ".ivy" - - ".jelly" - - ".jsproj" - - ".kml" - - ".launch" - - ".mdpolicy" - - ".mjml" - - ".mm" - - ".mod" - - ".mxml" - - ".natvis" - - ".ncl" - - ".ndproj" - - ".nproj" - - ".nuspec" - - ".odd" - - ".osm" - - ".pkgproj" - - ".pluginspec" - - ".proj" - - ".props" - - ".ps1xml" - - ".psc1" - - ".pt" - - ".rdf" - - ".resx" - - ".rss" - - ".sch" - - ".scxml" - - ".sfproj" - - ".shproj" - - ".srdf" - - ".storyboard" - - ".sublime-snippet" - - ".targets" - - ".tml" - - ".ts" - - ".tsx" - - ".ui" - - ".urdf" - - ".ux" - - ".vbproj" - - ".vcxproj" - - ".vsixmanifest" - - ".vssettings" - - ".vstemplate" - - ".vxml" - - ".wixproj" - - ".workflow" - - ".wsdl" - - ".wsf" - - ".wxi" - - ".wxl" - - ".wxs" - - ".x3d" - - ".xacro" - - ".xaml" - - ".xib" - - ".xlf" - - ".xliff" - - ".xmi" - - ".xml.dist" - - ".xproj" - - ".xsd" - - ".xspec" - - ".xul" - - ".zcml" - filenames: - - ".classpath" - - ".cproject" - - ".project" - - App.config - - NuGet.config - - Settings.StyleCop - - Web.Debug.config - - Web.Release.config - - Web.config - - packages.config - language_id: 399 -XML Property List: - type: data - group: XML - extensions: - - ".plist" - - ".stTheme" - - ".tmCommand" - - ".tmLanguage" - - ".tmPreferences" - - ".tmSnippet" - - ".tmTheme" - tm_scope: text.xml.plist - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 75622871 -XPages: - type: data - extensions: - - ".xsp-config" - - ".xsp.metadata" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 400 -XProc: - type: programming - extensions: - - ".xpl" - - ".xproc" - tm_scope: text.xml - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - language_id: 401 -XQuery: - type: programming - color: "#5232e7" - extensions: - - ".xquery" - - ".xq" - - ".xql" - - ".xqm" - - ".xqy" - ace_mode: xquery - codemirror_mode: xquery - codemirror_mime_type: application/xquery - tm_scope: source.xq - language_id: 402 -XS: - type: programming - extensions: - - ".xs" - tm_scope: source.c - ace_mode: c_cpp - codemirror_mode: clike - codemirror_mime_type: text/x-csrc - language_id: 403 -XSLT: - type: programming - aliases: - - xsl - extensions: - - ".xslt" - - ".xsl" - tm_scope: text.xml.xsl - ace_mode: xml - codemirror_mode: xml - codemirror_mime_type: text/xml - color: "#EB8CEB" - language_id: 404 -Xojo: - type: programming - extensions: - - ".xojo_code" - - ".xojo_menu" - - ".xojo_report" - - ".xojo_script" - - ".xojo_toolbar" - - ".xojo_window" - tm_scope: source.xojo - ace_mode: text - language_id: 405 -Xtend: - type: programming - extensions: - - ".xtend" - tm_scope: source.xtend - ace_mode: text - language_id: 406 -YAML: - type: data - color: "#cb171e" - tm_scope: source.yaml - aliases: - - yml - extensions: - - ".yml" - - ".mir" - - ".reek" - - ".rviz" - - ".sublime-syntax" - - ".syntax" - - ".yaml" - - ".yaml-tmlanguage" - - ".yaml.sed" - - ".yml.mysql" - filenames: - - ".clang-format" - - ".clang-tidy" - - ".gemrc" - - glide.lock - - yarn.lock - ace_mode: yaml - codemirror_mode: yaml - codemirror_mime_type: text/x-yaml - language_id: 407 -YANG: - type: data - extensions: - - ".yang" - tm_scope: source.yang - ace_mode: text - language_id: 408 -YARA: - type: programming - color: "#220000" - ace_mode: text - extensions: - - ".yar" - - ".yara" - tm_scope: source.yara - language_id: 805122868 -YASnippet: - type: markup - aliases: - - snippet - - yas - color: "#32AB90" - extensions: - - ".yasnippet" - tm_scope: source.yasnippet - ace_mode: text - language_id: 378760102 -Yacc: - type: programming - extensions: - - ".y" - - ".yacc" - - ".yy" - tm_scope: source.yacc - ace_mode: text - color: "#4B6C4B" - language_id: 409 -ZAP: - type: programming - color: "#0d665e" - extensions: - - ".zap" - - ".xzap" - tm_scope: source.zap - ace_mode: text - language_id: 952972794 -ZIL: - type: programming - color: "#dc75e5" - extensions: - - ".zil" - - ".mud" - tm_scope: source.zil - ace_mode: text - language_id: 973483626 -Zeek: - type: programming - aliases: - - bro - extensions: - - ".zeek" - - ".bro" - tm_scope: source.zeek - ace_mode: text - language_id: 40 -ZenScript: - type: programming - color: "#00BCD1" - extensions: - - ".zs" - tm_scope: source.zenscript - ace_mode: text - language_id: 494938890 -Zephir: - type: programming - color: "#118f9e" - extensions: - - ".zep" - tm_scope: source.php.zephir - ace_mode: php - language_id: 410 -Zig: - type: programming - color: "#ec915c" - extensions: - - ".zig" - tm_scope: source.zig - ace_mode: text - language_id: 646424281 -Zimpl: - type: programming - extensions: - - ".zimpl" - - ".zmpl" - - ".zpl" - tm_scope: none - ace_mode: text - language_id: 411 -cURL Config: - type: data - group: INI - aliases: - - curlrc - filenames: - - ".curlrc" - - _curlrc - tm_scope: source.curlrc - ace_mode: text - language_id: 992375436 -desktop: - type: data - extensions: - - ".desktop" - - ".desktop.in" - tm_scope: source.desktop - ace_mode: text - language_id: 412 -dircolors: - type: data - extensions: - - ".dircolors" - filenames: - - ".dir_colors" - - ".dircolors" - - DIR_COLORS - - _dir_colors - - _dircolors - - dir_colors - tm_scope: source.dircolors - ace_mode: text - language_id: 691605112 -eC: - type: programming - color: "#913960" - extensions: - - ".ec" - - ".eh" - tm_scope: source.c.ec - ace_mode: text - language_id: 413 -edn: - type: data - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - extensions: - - ".edn" - tm_scope: source.clojure - language_id: 414 -fish: - type: programming - group: Shell - interpreters: - - fish - extensions: - - ".fish" - tm_scope: source.fish - ace_mode: text - language_id: 415 -mIRC Script: - type: programming - color: "#3d57c3" - extensions: - - ".mrc" - tm_scope: source.msl - ace_mode: text - language_id: 517654727 -mcfunction: - type: programming - color: "#E22837" - extensions: - - ".mcfunction" - tm_scope: source.mcfunction - ace_mode: text - language_id: 462488745 -mupad: - type: programming - extensions: - - ".mu" - tm_scope: source.mupad - ace_mode: text - language_id: 416 -nanorc: - type: data - group: INI - extensions: - - ".nanorc" - filenames: - - ".nanorc" - - nanorc - tm_scope: source.nanorc - ace_mode: text - language_id: 775996197 -nesC: - type: programming - color: "#94B0C7" - extensions: - - ".nc" - ace_mode: text - tm_scope: source.nesc - language_id: 417 -ooc: - type: programming - color: "#b0b77e" - extensions: - - ".ooc" - tm_scope: source.ooc - ace_mode: text - language_id: 418 -q: - type: programming - extensions: - - ".q" - tm_scope: source.q - ace_mode: text - color: "#0040cd" - language_id: 970539067 -reStructuredText: - type: prose - wrap: true - aliases: - - rst - extensions: - - ".rst" - - ".rest" - - ".rest.txt" - - ".rst.txt" - tm_scope: text.restructuredtext - ace_mode: text - codemirror_mode: rst - codemirror_mime_type: text/x-rst - language_id: 419 -sed: - type: programming - color: "#64b970" - extensions: - - ".sed" - interpreters: - - gsed - - minised - - sed - - ssed - ace_mode: text - tm_scope: source.sed - language_id: 847830017 -wdl: - type: programming - color: "#42f1f4" - extensions: - - ".wdl" - tm_scope: source.wdl - ace_mode: text - language_id: 374521672 -wisp: - type: programming - ace_mode: clojure - codemirror_mode: clojure - codemirror_mime_type: text/x-clojure - color: "#7582D1" - extensions: - - ".wisp" - tm_scope: source.clojure - language_id: 420 -xBase: - type: programming - color: "#403a40" - aliases: - - advpl - - clipper - - foxpro - extensions: - - ".prg" - - ".ch" - - ".prw" - tm_scope: source.harbour - ace_mode: text - language_id: 421 \ No newline at end of file diff --git a/git-hooks/pre-commit b/git-hooks/pre-commit new file mode 100644 index 0000000..d6481d6 --- /dev/null +++ b/git-hooks/pre-commit @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +### Copy this into .git/hooks and overwrite the empty one. +### This will ensure the bundle and ins-outs verification checks won't fail for you. + +echo "----- Pre-commit -----" +set -ex +npx action-io-generator -o src/generated/inputs-outputs.ts +npm run bundle +git add -v dist/ src/generated \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5c387e2..f3a8dbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,6 +128,28 @@ "fastq": "^1.6.0" } }, + "@redhat-actions/action-io-generator": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@redhat-actions/action-io-generator/-/action-io-generator-1.5.0.tgz", + "integrity": "sha512-zaBZyP0ev5c36j0h8EyvqbD+fhUjDOeme2qzVa+CSWjeGVAsgdZREzE8smE3QA6xXpMHPU5keT+q2iN8/hq5uA==", + "dev": true, + "requires": { + "js-yaml": "^3.14.1", + "minimist": "^1.2.5" + }, + "dependencies": { + "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" + } + } + } + }, "@redhat-actions/eslint-config": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/@redhat-actions/eslint-config/-/eslint-config-1.2.11.tgz", diff --git a/package.json b/package.json index f623a4d..b8b300f 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "language-recognizer": "0.0.1" }, "devDependencies": { + "@redhat-actions/action-io-generator": "^1.5.0", "@redhat-actions/eslint-config": "^1.2.11", "@redhat-actions/tsconfig": "^1.1.1", "@types/node": "^12", diff --git a/src/generated/inputs-outputs.ts b/src/generated/inputs-outputs.ts new file mode 100644 index 0000000..143af70 --- /dev/null +++ b/src/generated/inputs-outputs.ts @@ -0,0 +1,90 @@ +// This file was auto-generated by action-io-generator. Do not edit by hand! +export enum Inputs { + /** + * The base image to use to create a new container image + * Required: true + * Default: None. + */ + BASE_IMAGE = "base-image", + /** + * List of --build-args to pass to buildah + * Required: false + * Default: None. + */ + BUILD_ARGS = "build-args", + /** + * List of files/directories to copy inside the base image + * Required: false + * Default: None. + */ + CONTENT = "content", + /** + * Path of the directory to use as context (default: .) + * Required: false + * Default: "." + */ + CONTEXT = "context", + /** + * List of Dockerfile paths (eg: ./Dockerfile) + * Required: false + * Default: None. + */ + DOCKERFILES = "dockerfiles", + /** + * The entry point to set for containers based on image + * Required: false + * Default: None. + */ + ENTRYPOINT = "entrypoint", + /** + * List of environment variables to be set when running containers based on image + * Required: false + * Default: None. + */ + ENVS = "envs", + /** + * The name (reference) of the image to build + * Required: true + * Default: None. + */ + IMAGE = "image", + /** + * Set to true to build using the OCI image format instead of the Docker image format + * Required: false + * Default: "false" + */ + OCI = "oci", + /** + * The port to expose when running containers based on image + * Required: false + * Default: None. + */ + PORT = "port", + /** + * The tags of the image to build. For multiple tags, seperate by a space. For example, "latest v1". + * Required: false + * Default: "latest" + */ + TAGS = "tags", + /** + * The working directory to use within the container + * Required: false + * Default: None. + */ + WORKDIR = "workdir", +} + +export enum Outputs { + /** + * Name of the image built + * Required: false + * Default: None. + */ + IMAGE = "image", + /** + * List of the tags that were created, separated by spaces + * Required: false + * Default: None. + */ + TAGS = "tags", +} diff --git a/src/index.ts b/src/index.ts index efe6109..971ba96 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import * as core from "@actions/core"; import * as io from "@actions/io"; import * as path from "path"; +import { Inputs, Outputs } from "./generated/inputs-outputs"; import { BuildahCli, BuildahConfigSettings } from "./buildah"; export async function run(): Promise { @@ -13,12 +14,12 @@ export async function run(): Promise { const cli: BuildahCli = new BuildahCli(buildahPath); const workspace = process.env.GITHUB_WORKSPACE || process.cwd(); - const dockerFiles = getInputList("dockerfiles"); - const image = core.getInput("image", { required: true }); - const tags = core.getInput("tags") || "latest"; + const dockerFiles = getInputList(Inputs.DOCKERFILES); + const image = core.getInput(Inputs.IMAGE, { required: true }); + const tags = core.getInput(Inputs.TAGS) || "latest"; const tagsList: string[] = tags.split(" "); const newImage = `${image}:${tagsList[0]}`; - const useOCI = core.getInput("oci") === "true"; + const useOCI = core.getInput(Inputs.OCI) === "true"; if (dockerFiles.length !== 0) { await doBuildUsingDockerFiles(cli, newImage, workspace, dockerFiles, useOCI); @@ -30,8 +31,8 @@ export async function run(): Promise { if (tagsList.length > 1) { await cli.tag(image, tagsList); } - core.setOutput("image", image); - core.setOutput("tags", tags); + core.setOutput(Outputs.IMAGE, image); + core.setOutput(Outputs.TAGS, tags); } async function doBuildUsingDockerFiles( @@ -44,8 +45,8 @@ async function doBuildUsingDockerFiles( core.info(`Performing build from ${dockerFiles.length} Dockerfiles`); } - const context = path.join(workspace, core.getInput("context")); - const buildArgs = getInputList("build-args"); + const context = path.join(workspace, core.getInput(Inputs.CONTEXT)); + const buildArgs = getInputList(Inputs.BUILD_ARGS); const dockerFileAbsPaths = dockerFiles.map((file) => path.join(workspace, file)); await cli.buildUsingDocker(newImage, context, dockerFileAbsPaths, buildArgs, useOCI); } @@ -55,12 +56,12 @@ async function doBuildFromScratch( ): Promise { core.info(`Performing build from scratch`); - const baseImage = core.getInput("base-image", { required: true }); - const content = getInputList("content"); - const entrypoint = getInputList("entrypoint"); - const port = core.getInput("port"); - const workingDir = core.getInput("workdir"); - const envs = getInputList("envs"); + const baseImage = core.getInput(Inputs.BASE_IMAGE, { required: true }); + const content = getInputList(Inputs.CONTENT); + const entrypoint = getInputList(Inputs.ENTRYPOINT); + const port = core.getInput(Inputs.PORT); + const workingDir = core.getInput(Inputs.WORKDIR); + const envs = getInputList(Inputs.ENVS); const container = await cli.from(baseImage); const containerId = container.output.replace("\n", "");