@catladder/cli
Version:
Panter cli tool for cloud CI/CD and DevOps
1 lines โข 2.88 MB
JavaScript
(()=>{var __webpack_modules__={6057:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const i=n(1);const a=n(5110);const l=n(5472);const c=n(5614);const y=n(8832);const S=n(241);t["default"]=async(e,t)=>{var n;const w=await(0,i.getProjectConfig)();if(!w){return}const C=(0,S.createCatenvContext)(w);if(t===null||t===void 0?void 0:t.verbose){(0,l.printVerboseBanner)()}await Promise.all([(0,S.generatePipelineFiles)(C,(n=w.pipelineType)!==null&&n!==void 0?n:"gitlab"),(0,c.writeDotEnvFiles)(C,e),(0,y.writeDTsFiles)(C,e),(t===null||t===void 0?void 0:t.printVariables)?(0,a.printVariables)(C,e):Promise.resolve()])}},5110:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.printVariables=void 0;const i=n(1);const a=n(1909);const getAllVariablesToPrint=async(e,t)=>{const{env:n,currentComponent:l}=await(0,a.getCurrentComponentAndEnvFromChoice)(e,t);if(l){return await(0,i.getEnvVarsResolved)(null,n,l)}else{return await Object.keys(e.components).reduce((async(e,t)=>{const l=await(0,i.getEnvVarsResolved)(null,n,t);delete l["_ALL_ENV_VAR_KEYS"];return{...await e,...l,...Object.fromEntries(Object.entries(l).map((([e,n])=>[`${(0,a.sanitizeEnvVarName)(t.toUpperCase())}_${e}`,n])))}}),Promise.resolve({}))}};const printVariables=async(e,t)=>{const n=await getAllVariablesToPrint(e.config,t);console.log(makeExportKeyValuestring(n))};t.printVariables=printVariables;const makeExportKeyValuestring=e=>(0,a.makeKeyValueString)(e,{keyPrefix:"export ",escapeOptions:{quoteMode:"always"}})},1909:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.sanitizeEnvVarName=t.makeKeyValueString=t.getCurrentComponentAndEnvFromChoice=t.getComponentFullPath=void 0;const i=n(6928);const a=n(7414);const l=n(241);const getComponentFullPath=(e,t,n)=>(0,i.join)(e,t.components[n].dir);t.getComponentFullPath=getComponentFullPath;const getCurrentComponentName=async e=>{const n=await(0,a.getGitRoot)();const i=process.cwd();return Object.keys(e.components).find((a=>i.startsWith((0,t.getComponentFullPath)(n,e,a))))};const getCurrentComponentAndEnvFromChoice=async(e,t)=>{var n,i;const a=(n=t===null||t===void 0?void 0:t.env)!==null&&n!==void 0?n:"local";const l=(i=t===null||t===void 0?void 0:t.componentName)!==null&&i!==void 0?i:await getCurrentComponentName(e);return{currentComponent:l,env:a}};t.getCurrentComponentAndEnvFromChoice=getCurrentComponentAndEnvFromChoice;const makeKeyValueString=(e,{keyPrefix:t,escapeOptions:n}={keyPrefix:""})=>Object.entries(e).map((([e,i])=>`${t}${e}=${(0,l.escapeForDotEnv)(i,n)}`)).join("\n");t.makeKeyValueString=makeKeyValueString;const sanitizeEnvVarName=e=>e.replace(/[\s\-.]+/g,"_");t.sanitizeEnvVarName=sanitizeEnvVarName},5472:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.printVerboseBanner=void 0;const i=n(1);const printVerboseBanner=async()=>{const e=await(0,i.getProjectConfig)();if(!e){return}const t=await Promise.all(Object.keys(e.components).map((async e=>{const t=await(0,i.getEnvironment)("local",e);const n=t.envVars.PORT;if(!n){return null}return`${e}: http://localhost:${n}`}))).then((e=>e.filter(Boolean)));const n=["catenv","-------","running on:","",...t];for(const e of n){console.log(e)}};t.printVerboseBanner=printVerboseBanner},5614:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeDotEnvFiles=void 0;const i=n(6928);const a=n(1);const l=n(7414);const c=n(1909);const writeDotEnvFiles=async(e,t)=>{const{env:n,currentComponent:y}=await(0,c.getCurrentComponentAndEnvFromChoice)(e.config,t);const S=Object.entries(e.config.components).filter((([,e])=>{var t;return(t=e===null||e===void 0?void 0:e.dotEnv)!==null&&t!==void 0?t:true})).map((([e])=>e));const w=y?S.includes(y)?[y]:[]:S;const C=await(0,l.getGitRoot)();for(const t of w){const l=await(0,a.getEnvVarsResolved)(null,n,t);delete l["_ALL_ENV_VAR_KEYS"];const y=(0,c.getComponentFullPath)(C,e.config,t);const S=(0,i.join)(y,".env");await e.fileWriter.writeGeneratedFile(S,(0,c.makeKeyValueString)(l),{commentChar:"#"})}};t.writeDotEnvFiles=writeDotEnvFiles},8832:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeDTsFiles=void 0;const i=n(6928);const a=n(1);const l=n(7414);const c=n(1909);const writeDTsFiles=async(e,t)=>{const{env:n,currentComponent:a}=await(0,c.getCurrentComponentAndEnvFromChoice)(e.config,t);const y=Object.entries(e.config.components).filter((([,e])=>{var t;return(t=e===null||e===void 0?void 0:e.envDTs)!==null&&t!==void 0?t:true})).map((([e])=>e));const S=a?y.includes(a)?[a]:[]:y;const w=await(0,l.getGitRoot)();for(const t of S){const a=await getEnvsForDTs(n,t);const l=createEnvDTsContent(a);const y=(0,c.getComponentFullPath)(w,e.config,t);const S=(0,i.join)(y,"env.d.ts");await e.fileWriter.writeGeneratedFile(S,l,{commentChar:"//"})}};t.writeDTsFiles=writeDTsFiles;async function getEnvsForDTs(e,t){const n=await(0,a.getEnvironment)(e,t);const i=Object.keys(n.envVars);const l=new Set(n.secretEnvVarKeys.filter((e=>e.hidden)).map((e=>e.key)).concat(["_ALL_ENV_VAR_KEYS"]));const c=i.filter((e=>!l.has(e)));return c}function createEnvDTsContent(e){return`/* tslint:disable prettier/prettier */\n/* eslint-disable prettier/prettier */\n/* prettier-ignore */\n\nexport {}\n\ndeclare global {\n namespace NodeJS {\n interface ProcessEnv {\n${e.map((e=>` ${e}: string`)).join("\n")}\n }\n }\n}\n`}},2994:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});const a=n(395);const l=i(n(6057));const c=n(4272);const y=i(n(3568));const S=new a.Command;S.name("catenv").description("Environment variable and pipeline generation via direnv").version(y.default.version).argument("[envComponent]","env or env:component").option("-v, --verbose","verbose output").option("-p, --print-variables","print variables").action(((e,t)=>{var n,i;(0,l.default)(e?(0,c.parseChoice)(e):null,{verbose:(n=t.verbose)!==null&&n!==void 0?n:false,printVariables:(i=t.printVariables)!==null&&i!==void 0?i:false}).then((()=>{process.exit()}))}));process.on("uncaughtException",(e=>{var t;console.error((t=e.stack)!==null&&t!==void 0?t:`${e.name}: ${e.message}`);process.exit(1)}));process.on("unhandledRejection",(e=>{var t;if(e instanceof Error){console.error((t=e.stack)!==null&&t!==void 0?t:`${e.name}: ${e.message}`)}else{console.error(e)}process.exit(1)}));S.parse()},1:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getJobOnlyEnvVarsResolved=t.getEnvVarsResolved=t.getGitlabVar=t.getEnvironment=t.getAllPipelineContexts=t.getAllComponentsWithAllEnvsHierarchical=t.getAllComponentsWithAllEnvsFlat=t.getPipelineContextByChoice=t.getProjectComponents=t.getProjectConfig=t.parseChoice=void 0;const i=n(241);const a=n(4508);const l=n(7414);var c=n(4272);Object.defineProperty(t,"parseChoice",{enumerable:true,get:function(){return c.parseChoice}});let y=null;const loadConfig=async()=>{const e=await(0,l.getGitRoot)();if(!e){return}const t=await(0,i.readConfig)(e);if(!t){return}y=t.config};const getProjectConfig=async()=>{if(!y){await loadConfig()}return y};t.getProjectConfig=getProjectConfig;const getProjectComponents=async()=>{const e=await(0,t.getProjectConfig)();if(!e)return[];return Object.keys(e.components)};t.getProjectComponents=getProjectComponents;const getPipelineContextByChoice=async(e,n)=>{const a=await(0,t.getProjectConfig)();return await(0,i.createComponentContext)({config:a,componentName:n,env:e})};t.getPipelineContextByChoice=getPipelineContextByChoice;const getAllComponentsWithAllEnvsFlat=async()=>{const e=await(0,t.getProjectConfig)();if(!e){return[]}return getAllComponentsWithAllEnvsFlatFromConfig(e)};t.getAllComponentsWithAllEnvsFlat=getAllComponentsWithAllEnvsFlat;const getAllComponentsWithAllEnvsHierarchical=async()=>{const e=await(0,t.getProjectConfig)();if(!e){return{}}return Object.fromEntries(Object.keys(e.components).map((t=>[t,(0,i.getAllEnvs)(e,t)])))};t.getAllComponentsWithAllEnvsHierarchical=getAllComponentsWithAllEnvsHierarchical;const getAllPipelineContexts=async(e,{includeLocal:n=false}={})=>{const i=e?Array.isArray(e)?e:[e]:null;return Promise.all((await(0,t.getAllComponentsWithAllEnvsFlat)()).filter((e=>n||e.env!=="local")).filter((e=>!i||i.includes(e.componentName))).map((({env:e,componentName:n})=>(0,t.getPipelineContextByChoice)(e,n))))};t.getAllPipelineContexts=getAllPipelineContexts;const getEnvironment=async(e,n)=>{const a=await(0,t.getProjectConfig)();return(0,i.getEnvironment)({config:a,componentName:n,env:e})};t.getEnvironment=getEnvironment;const getGitlabVar=async(e,t,n,l)=>{const c=(0,i.getSecretVarName)(t,n,l);return await(0,a.getVariableValueByRawName)(e,c)};t.getGitlabVar=getGitlabVar;const resolveSecrets=async(e,t)=>{const n=await(0,a.getAllVariables)(e);return Object.fromEntries(t.flatMap((({envVars:e,secretEnvVarKeys:t})=>Object.entries(e).filter((([e,n])=>{var i;return n!==undefined&&n!==null&&!((i=t.find((t=>t.key===e)))===null||i===void 0?void 0:i.hidden)})).map((([e,t])=>[e,n.reduce(((e,t)=>e.replace(new RegExp("\\$"+t.key,"g"),t.value)),`${t}`)])))))};const getEnvVarsResolved=async(e,n,i)=>{if(!i){return{}}const a=await(0,t.getEnvironment)(n,i);return resolveSecrets(e,[{envVars:a.envVars,secretEnvVarKeys:a.secretEnvVarKeys}])};t.getEnvVarsResolved=getEnvVarsResolved;const getJobOnlyEnvVarsResolved=async(e,n,i)=>{const a=await(0,t.getEnvironment)(n,i);return resolveSecrets(e,[a.jobOnlyVars.build,a.jobOnlyVars.deploy])};t.getJobOnlyEnvVarsResolved=getJobOnlyEnvVarsResolved;function getAllComponentsWithAllEnvsFlatFromConfig(e){return Object.keys(e.components).flatMap((t=>(0,i.getAllEnvs)(e,t).map((e=>({env:e,componentName:t})))))}},4272:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.parseChoice=void 0;const parseChoice=e=>{const[t,n]=e.split(":").map((e=>e||null));return{env:t,componentName:n}};t.parseChoice=parseChoice},6636:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.gitConfigSet=t.gitConfigGet=void 0;const i=n(1748);const argsJoin=e=>e.filter(Boolean).join(" ");async function gitConfigGet(e,{location:t}={}){const{stdout:n}=await(0,i.exec)(`git config --get ${argsJoin([t?`--${t}`:undefined])} ${e}`);return n.trim()}t.gitConfigGet=gitConfigGet;const gitConfigSet=(e,t,{location:n,comment:a}={})=>(0,i.exec)(`git config --set ${argsJoin([n?`--${n}`:undefined,a?`--comment=${a}`:undefined])} ${e} ${t}`);t.gitConfigSet=gitConfigSet},1111:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.gitProjectInformation=t.getGitRemoteHostAndPath=t.getProjectRootPath=void 0;const i=n(6636);const a=n(1748);const getProjectRootPath=async()=>{const{stdout:e}=await(0,a.exec)(`git rev-parse --show-toplevel`);return e.trim()};t.getProjectRootPath=getProjectRootPath;const getGitRemoteHostAndPath=async()=>{var e;const t=await(0,i.gitConfigGet)("remote.origin.url");const n=/(https:\/\/|git@)([^:/]+)[:/]([^.]*)(\.git)?/;const a=(e=t.match(n))!==null&&e!==void 0?e:[];const[,,l,c]=a;if(!(l===null||l===void 0?void 0:l.length)||!(c===null||c===void 0?void 0:c.length)){throw new Error(`Failed to parse git remote hostname and path from git configs remote.origin.url! ${t}`)}return{gitRemoteHost:l,gitRemotePath:c}};t.getGitRemoteHostAndPath=getGitRemoteHostAndPath;const gitProjectInformation=async()=>{const[{gitRemoteHost:e,gitRemotePath:n},i]=await Promise.all([(0,t.getGitRemoteHostAndPath)(),(0,t.getProjectRootPath)()]);return{gitRemoteHost:e,gitRemotePath:n,projectRootPath:i}};t.gitProjectInformation=gitProjectInformation},3568:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:true});const i=((n=require.main)===null||n===void 0?void 0:n.path)+"/../package.json";const a=require(i);t["default"]=a},6172:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.readFileOrError=void 0;const i=n(6954);const readFile=e=>(0,i.readFile)(e,{encoding:"utf-8"});const readFileOrError=async e=>{try{const t=await readFile(e);return[null,t]}catch(e){return[e]}};t.readFileOrError=readFileOrError},4508:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.upsertAllVariables=t.clearBackups=t.getVariableValueByRawName=t.getAllVariables=t.getProjectInfo=t.doGitlabRequest=t.getGitlabToken=t.setupGitlabToken=t.hasGitlabToken=void 0;const a=n(241);const l=n(4284);const c=i(n(7009));const y=i(n(1479));const S=i(n(5186));const w=n(6261);const C=n(1111);const I="gitlab-personal-access-token";const hasGitlabToken=async()=>await(0,w.hasPreference)(I);t.hasGitlabToken=hasGitlabToken;const setupGitlabToken=async e=>{e.log("");e.log("โ in order to access the api, we need a personal access token");e.log("Its best to create one specifically for catladder");e.log("Scopes needed: api");e.log("");e.log("โ we open up the settings page for you!");e.log("");const[t,{gitRemoteHost:n}]=await Promise.all([e.confirm("Ok"),(0,C.getGitRemoteHostAndPath)()]);(0,S.default)(`https://${n}/-/user_settings/personal_access_tokens`);e.log("Please type in gitlab's personal access token");const i=await e.promptDirect({type:"string",name:"personalToken",default:"",message:"Your personal access token "});if(i){await(0,w.setPreference)(I,i)}};t.setupGitlabToken=setupGitlabToken;const getGitlabToken=async e=>{if(!await(0,t.hasGitlabToken)()){if(!e){console.error("โ ๏ธ gitlab token missing, please run catladder to set it up");process.exit(1)}await(0,t.setupGitlabToken)(e)}return(0,w.getPreference)(I)};t.getGitlabToken=getGitlabToken;const doGitlabRequest=async(e,n,i=undefined,a="GET")=>{const[l,{gitRemoteHost:c}]=await Promise.all([(0,t.getGitlabToken)(e),(0,C.getGitRemoteHostAndPath)()]);const S=await(0,y.default)(`https://${c}/api/v4/${n}`,{method:a,headers:{"Content-Type":"application/json","Private-Token":l},body:i?JSON.stringify(i):undefined});if(S.status>=200&&S.status<400){if(S.headers.get("content-type")==="application/json"){return S.json()}return null}if(S.status===404){throw new Error("not found")}throw new Error(`Could not send request to gitlab api ${n}: ${S.status} "${S.statusText}".\nResponse: ${JSON.stringify(await S.json(),null,2)}`)};t.doGitlabRequest=doGitlabRequest;const getProjectInfo=async e=>{const{gitRemotePath:n}=await(0,C.getGitRemoteHostAndPath)();const i=await(0,t.doGitlabRequest)(e,`projects/${encodeURIComponent(n)}`);return i};t.getProjectInfo=getProjectInfo;t.getAllVariables=(0,c.default)((async(e,n=5)=>{const{id:i}=await(0,t.getProjectInfo)(e);let a=[];let l=[];let c=1;do{const y=Array.from({length:n},((n,a)=>(0,t.doGitlabRequest)(e,`projects/${i}/variables?per_page=100&page=${c+a}`)));l=await Promise.all(y);c+=n;a=[...a,...l.flat()]}while(l.length>0&&l[l.length-1].length>0);return a}),{promise:true});const getVariableValueByRawName=async(e,n)=>{var i;const a=await(0,t.getAllVariables)(e);return(i=a.find((e=>e.key===n)))===null||i===void 0?void 0:i.value};t.getVariableValueByRawName=getVariableValueByRawName;const N=new RegExp("^[a-zA-Z0-9_+=/@:.~-]{8,}$");const isMaskable=e=>N.test(e);const createVariable=async(e,n,i,a,l=true,c="*")=>await(0,t.doGitlabRequest)(e,`projects/${n}/variables`,{key:i,value:a,masked:l&&isMaskable(a),environment_scope:c},"POST");const updateVariable=async(e,n,i,a,l=true)=>await(0,t.doGitlabRequest)(e,`projects/${n}/variables/${i}`,{value:a,masked:l&&isMaskable(a)},"PUT");const deleteVariable=async(e,n,i)=>await(0,t.doGitlabRequest)(e,`projects/${n}/variables/${i}`,undefined,"DELETE");const getAllCatladderEnvVarsInGitlab=async e=>{const n=await(0,t.getAllVariables)(e).then((e=>e.reduce(((e,t)=>{var n,i,a,l;const{key:c}=t;if(c.startsWith("CL_")){const y=c.match(/(CL_.*)_backup_([0-9]+)/);if(y){const t=y[1];const l=Number(y[2]);const c=[...(i=(n=e[t])===null||n===void 0?void 0:n.backups)!==null&&i!==void 0?i:[],l];return{...e,[t]:{...(a=e[t])!==null&&a!==void 0?a:{},backups:c}}}return{...e,[c]:{backups:[],...(l=e[c])!==null&&l!==void 0?l:{},value:t.value}}}return e}),{})));return n};const getBackupKey=(e,t)=>`${e}_backup_${t}`;const clearBackups=async(e,n)=>{const i=await getAllCatladderEnvVarsInGitlab(e);const{id:a}=await(0,t.getProjectInfo)(e);for(const[t,{backups:l}]of Object.entries(i)){const i=l.sort(((e,t)=>t-e));const c=i.slice(n);for(const n of c){await deleteVariable(e,a,getBackupKey(t,n))}}};t.clearBackups=clearBackups;const upsertAllVariables=async(e,n,i,c,y=true,S=true)=>{var w;const{id:C}=await(0,t.getProjectInfo)(e);const I=await getAllCatladderEnvVarsInGitlab(e);for(const[t,N]of Object.entries(n!==null&&n!==void 0?n:{})){const n=(0,a.getSecretVarName)(i,c,t);const O=(0,l.isObject)(N)?JSON.stringify(N):`${N}`;const j=(0,l.has)(I,n);const B=(w=I[n])===null||w===void 0?void 0:w.value;const $=B!==O;if($){if(j){e.log(`changed: ${t}`);await updateVariable(e,C,n,O,S);if(y){await createVariable(e,C,getBackupKey(n,(new Date).getTime()),B,S,"_backup")}}else{e.log(`new : ${t}`);await createVariable(e,C,n,O,S)}}else{e.log(`skip : ${t}`)}}t.getAllVariables.clear()};t.upsertAllVariables=upsertAllVariables},6261:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.setPreference=t.getPreference=t.hasPreference=t.getPreferences=void 0;const i=n(1943);const a=n(9896);const l=n(6928);const c=n(857);const y=n(6637);const S=(0,l.join)((0,c.homedir)(),".catladder/preferences.yml");const w=(0,l.join)((0,c.homedir)(),".config/catladder/preferences.yml");const ensurePreferencesFile=async()=>{if((0,a.existsSync)(w)){return}await(0,i.mkdir)((0,l.dirname)(w),{recursive:true,mode:448});if(!(0,a.existsSync)(S)){return(0,i.writeFile)(w,"---\n{}",{encoding:"utf-8",mode:384})}await(0,i.cp)(S,w);await(0,i.chmod)(w,384);await(0,i.cp)(w,(0,l.join)((0,l.dirname)(w),"old_preferences_backup.yml"))};const loadPreferences=async()=>{await ensurePreferencesFile();return(0,i.readFile)(w,{encoding:"utf-8"})};const getPreferences=async()=>{var e;const t=await loadPreferences();return(e=(0,y.parse)(t))!==null&&e!==void 0?e:{}};t.getPreferences=getPreferences;const hasPreference=async e=>{const n=await(0,t.getPreferences)();return e in n};t.hasPreference=hasPreference;const getPreference=async e=>{const n=await(0,t.getPreferences)();return n[e]};t.getPreference=getPreference;const setPreference=async(e,n)=>{const a=await(0,t.getPreferences)();const l={...a,[e]:n};await(0,i.writeFile)(w,(0,y.stringify)(l),{encoding:"utf-8",mode:384})};t.setPreference=setPreference},7414:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getProjectNamespace=t.hasGitlabCiFile=t.readRootGitlabCiFile=t.getRootGitlabCiFile=t.getGitRoot=void 0;const i=n(6928);const a=n(1);const l=n(6172);const c=n(1748);const getGitRoot=async()=>{try{return(await(0,c.exec)(`git rev-parse --show-toplevel`)).stdout.trim()}catch(e){return null}};t.getGitRoot=getGitRoot;const getRootGitlabCiFile=async()=>{const e=await(0,t.getGitRoot)();return(0,i.join)(e,".gitlab-ci.yml")};t.getRootGitlabCiFile=getRootGitlabCiFile;const readRootGitlabCiFile=async()=>(0,l.readFileOrError)(await(0,t.getRootGitlabCiFile)());t.readRootGitlabCiFile=readRootGitlabCiFile;const hasGitlabCiFile=async()=>{const[e,n]=await(0,t.readRootGitlabCiFile)();if(e){return false}return true};t.hasGitlabCiFile=hasGitlabCiFile;const getProjectNamespace=async e=>{const{env:t}=(0,a.parseChoice)(e);const n=await(0,a.getProjectConfig)();return`${n.customerName}-${n.appName}-${t}`};t.getProjectNamespace=getProjectNamespace},5354:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.joinBashExpressions=t.getBashVariable=t.BashExpression=void 0;class BashExpression{constructor(e){this.value=e}toJSON(){return this.toString()}toString(){return this.value.toString()}replace(e,t){return new BashExpression(this.value.toString().replace(e,t))}toLowerCase(){return this.transformWithCommand("awk '{print tolower($0)}'")}concat(...e){return new BashExpression(this.toString().concat(...e.map((e=>e.toString()))))}transformWithCommand(e){return new BashExpression(`$(printf %s "${this.toString()}" | ${e})`)}}t.BashExpression=BashExpression;const getBashVariable=e=>new BashExpression(`$${e}`);t.getBashVariable=getBashVariable;const joinBashExpressions=(e,t="")=>{const n=e.some((e=>e instanceof BashExpression));if(n){return new BashExpression(e.map((e=>e instanceof BashExpression?e.toString():e)).join(t))}else{return e.join(t)}};t.joinBashExpressions=joinBashExpressions},8127:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.escapeForDotEnv=t.escapeNewlines=t.escapeBackTicks=t.escapeSingleQuotes=t.escapeDoubleQuotes=t.escapeBashExpression=t.escapeString=t.bashEscape=void 0;const i=n(3891);const a=n(4396);const l=n(5354);const bashEscape=(e,n={quotes:"double"})=>{if(e instanceof l.BashExpression){return(0,t.escapeBashExpression)(e,n)}if(e instanceof a.VariableValueContainingReferences){return e.toString(n)}return(0,t.escapeString)(e,n)};t.bashEscape=bashEscape;const escapeString=(e,{quotes:n}={quotes:"double"})=>{const i=n?n==="single"?(0,t.escapeSingleQuotes)(e):(0,t.escapeDoubleQuotes)(e):e;return i};t.escapeString=escapeString;const escapeBashExpression=(e,t)=>e;t.escapeBashExpression=escapeBashExpression;const escapeDoubleQuotes=e=>e===null||e===void 0?void 0:e.toString().replace(/"/g,'\\"');t.escapeDoubleQuotes=escapeDoubleQuotes;const escapeSingleQuotes=e=>e===null||e===void 0?void 0:e.toString().replace(/'/g,"\\'");t.escapeSingleQuotes=escapeSingleQuotes;const escapeBackTicks=e=>e===null||e===void 0?void 0:e.toString().replace(/`/g,"\\`");t.escapeBackTicks=escapeBackTicks;const escapeNewlines=e=>e===null||e===void 0?void 0:e.toString().replace(/\n/g,"\\n");t.escapeNewlines=escapeNewlines;const escapeForDotEnv=(e,n={quoteMode:"auto"})=>{if(e===undefined||e===null){return""}if(typeof e==="string"){if(n.quoteMode==="always"||e.includes("\n")){const t=e.replace(/\n/g,"\\n");const n=e.includes(`"`)?e.includes(`'`)?e.includes("`")?'"':"`":"'":'"';return`${n}${t}${n}`}else{return e}}else if(e instanceof l.BashExpression){return escapeBashExpressionForDotEnv(e)}else if(e instanceof a.VariableValueContainingReferences){const n=e.parts.some((e=>e instanceof l.BashExpression));if(!n){return(0,t.escapeForDotEnv)(e.toString({quotes:"double"}))}else{const t=escapeBashExpressionForDotEnv(new l.BashExpression(e.toString({quotes:"double"})));return t}}else{return e}};t.escapeForDotEnv=escapeForDotEnv;const c=(0,i.registerGlobalScriptFunction)("escapeForDotEnv",`\n input="\${1:-$(cat)}"\n input="\${input//$'\\n'/\\\\n}"\n if [[ "$input" == *\\\\n* ]]; then\n if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then\n printf "\\"%s\\"\\n" "$input" ${""}\n elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then\n printf "\`%s\`\\n" "$input"\n elif [[ "$input" == *\\"* ]]; then\n printf "'%s'\\n" "$input"\n else\n printf "\\"%s\\"\\n" "$input"\n fi\n else\n printf "%s\\n" "$input"\n fi\n `);const escapeBashExpressionForDotEnv=e=>e.transformWithCommand(c.name).toString()},1945:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getBashExpressionPerPipelineType=void 0;const getBashExpressionPerPipelineType=(e,t)=>{if(!t)return e.default;return e[t]||e.default};t.getBashExpressionPerPipelineType=getBashExpressionPerPipelineType},5103:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeBashYamlToFileScript=t.yamlBashString=void 0;const i=n(6637);const a=n(5354);const l=n(4396);const c={tag:"",resolve:e=>new a.BashExpression(e),stringify(e,t){return"|-\n"+t.indent+indentNewlinesInBashExpression(e.value,t.indent)},identify:e=>e instanceof a.BashExpression};const indentNewlinesInBashExpression=(e,t)=>e.transformWithCommand(`sed '1!s/^/${t}/'`);const y={tag:"",resolve:e=>new l.VariableValueContainingReferences(e),stringify(e,t){const n=e.value;const i=n.parts.map((e=>e instanceof a.BashExpression?indentNewlinesInBashExpression(e,t.indent):e.toString().replace(/\n/g,`\n${t.indent}`))).join("");return"|-\n"+t.indent+i},identify:e=>e instanceof l.VariableValueContainingReferences};const yamlBashString=e=>(0,i.stringify)(e,{defaultStringType:"BLOCK_LITERAL",defaultKeyType:"PLAIN",customTags:[c,y],aliasDuplicateObjects:false,lineWidth:0});t.yamlBashString=yamlBashString;const writeBashYamlToFileScript=(e,n)=>[`cat > ${n} <<EOF\n${(0,t.yamlBashString)(e)}\nEOF\n`];t.writeBashYamlToFileScript=writeBashYamlToFileScript},436:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getInjectVarsScript=void 0;const i=n(4284);const a=n(8127);const getInjectVarsScript=e=>{if(!e)return[];return Object.entries(e).filter((([,e])=>!(0,i.isNil)(e))).map((([e,t])=>`export ${e}="${t?(0,a.bashEscape)(t,{quotes:"double"}):""}"`))};t.getInjectVarsScript=getInjectVarsScript},8016:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){if(i===undefined)i=n;var a=Object.getOwnPropertyDescriptor(t,n);if(!a||("get"in a?!t.__esModule:a.writable||a.configurable)){a={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,i,a)}:function(e,t,n,i){if(i===undefined)i=n;e[i]=t[n]});var a=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))i(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});a(n(8127),t);a(n(5354),t)},7677:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createBuildJobArtifacts=void 0;const i=n(6928);const a=n(5063);const l=n(4284);const c=n(7652);const uniqueAndAlphabeticalSort=e=>(0,l.uniq)(e).sort(((e,t)=>e.localeCompare(t)));const createBuildJobArtifacts=async e=>{var t,n;const l=e.type==="workspace"?(await Promise.all(e.components.map((e=>getArtifactsPathForComponent(e))))).flat():await getArtifactsPathForComponent(e,["__build_info.json"]);const c=e.type==="workspace"?(await Promise.all(e.components.map((e=>getAllArtifactExcludePathsForComponent(e))))).flat():await getAllArtifactExcludePathsForComponent(e);return{paths:uniqueAndAlphabeticalSort(l),...c.length>0?{exclude:uniqueAndAlphabeticalSort(c)}:{},expire_in:"1 day",when:"always",reports:e.type==="component"&&(0,a.componentContextIsStandaloneBuild)(e)?{junit:(n=(t=e.build.config.artifactsReports)===null||t===void 0?void 0:t.junit)===null||n===void 0?void 0:n.map((t=>(0,i.join)(e.build.dir,t)))}:{}}};t.createBuildJobArtifacts=createBuildJobArtifacts;const _getArtifactPathsForComponent=async(e,t,n)=>{var a,l;const c=await e.build.getComponentDirs("all");return(l=[...e.build.type!=="disabled"?(a=e.build.config[t])!==null&&a!==void 0?a:[]:[],...n!==null&&n!==void 0?n:[]])===null||l===void 0?void 0:l.flatMap((e=>c.flatMap((t=>(0,i.join)(t,e)))))};const getArtifactsPathForComponent=(e,t)=>_getArtifactPathsForComponent(e,"artifactsPaths",t);const getAllArtifactExcludePathsForComponent=async e=>[...getDotEnvPathsForComponent(e),...await getArtifactExcludePathsForComponent(e)];const getArtifactExcludePathsForComponent=(e,t)=>_getArtifactPathsForComponent(e,"artifactsExcludePaths",t);const getDotEnvPathsForComponent=e=>{if((0,c.componentContextNeedsBuildTimeDotEnv)(e)){return[(0,i.join)(e.build.dir,".env")]}return[]}},2727:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.RUNNER_BUILD_RESOURCE_VARIABLES=t.APP_BUILD_JOB_NAME=void 0;t.APP_BUILD_JOB_NAME="๐จ app";t.RUNNER_BUILD_RESOURCE_VARIABLES={KUBERNETES_CPU_REQUEST:"0.45",KUBERNETES_MEMORY_REQUEST:"1Gi",KUBERNETES_MEMORY_LIMIT:"4Gi"}},1950:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createAppBuildJob=void 0;const i=n(4284);const a=n(241);const l=n(595);const c=n(7677);const y=n(5644);const S=n(8897);const w=n(2727);const C=n(2877);const I=n(7652);const createAppBuildJob=async(e,{script:t,variables:n,runnerVariables:N,cache:O,...j})=>{var B;return(0,i.merge)({name:w.APP_BUILD_JOB_NAME,envMode:"jobPerEnv",stage:"build",image:(0,a.getRunnerImage)("jobs-default"),needs:[],cache:O?(0,y.createJobCacheFromCacheConfigs)(e,O):undefined,variables:{...n!==null&&n!==void 0?n:{},...e.type==="component"?{...e.environment.envVars,...e.environment.jobOnlyVars.build.envVars}:{}},runnerVariables:{...w.RUNNER_BUILD_RESOURCE_VARIABLES,...N!==null&&N!==void 0?N:{},...(B=e.build.config.runnerVariables)!==null&&B!==void 0?B:{}},script:[...e.type==="component"?(0,I.componentContextNeedsBuildTimeDotEnv)(e)?(0,I.writeDotEnv)(e):[]:e.type==="workspace"?e.components.filter((e=>(0,I.componentContextNeedsBuildTimeDotEnv)(e))).flatMap((e=>(0,I.writeDotEnv)(e))):[],...e.type==="component"?(0,C.writeBuildInfo)(e):[],...(0,S.ensureNodeVersion)(e),`cd ${e.build.dir}`,...(0,l.ensureArray)(t)],artifacts:await(0,c.createBuildJobArtifacts)(e)},j)};t.createAppBuildJob=createAppBuildJob},3983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createArtifactsConfig=void 0;const i=n(6928);const createArtifactsConfig=(e,t,n)=>{var a,l,c,y;return t||n?{artifacts:{paths:[],...n,reports:{...n===null||n===void 0?void 0:n.reports,junit:[t===null||t===void 0?void 0:t.junit,Array.isArray((a=n===null||n===void 0?void 0:n.reports)===null||a===void 0?void 0:a.junit)&&((l=n===null||n===void 0?void 0:n.reports)===null||l===void 0?void 0:l.junit),typeof((c=n===null||n===void 0?void 0:n.reports)===null||c===void 0?void 0:c.junit)==="string"&&[(y=n===null||n===void 0?void 0:n.reports)===null||y===void 0?void 0:y.junit]].filter(Array.isArray).reduce(((t,n)=>[...t,...n.map((t=>(0,i.join)(e,t)))]),[])}}}:undefined};t.createArtifactsConfig=createArtifactsConfig},6254:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createBuildJobDefinition=void 0;const i=n(2348);const a=n(595);const l=n(1255);const c=n(5497);const createBuildJobDefinition=(e,t,n={})=>{var y,S,w,C;if(t.buildCommand===null||t.buildCommand===false)return undefined;const I=(0,i.getRunnerImage)("jobs-default");return{image:(y=t.jobImage)!==null&&y!==void 0?y:I,runnerVariables:c.NODE_RUNNER_BUILD_VARIABLES,cache:[...(S=n.cache)!==null&&S!==void 0?S:[],...(0,l.getAllCacheConfigsFromConfig)(e,t)],services:"jobServices"in t?t.jobServices:undefined,script:[...(w=n.prescript)!==null&&w!==void 0?w:[],...(0,a.ensureArray)(t.buildCommand),...(C=n.postscript)!==null&&C!==void 0?C:[]],jobTags:t.jobTags}};t.createBuildJobDefinition=createBuildJobDefinition},8121:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createWorkspaceBuildJobs=t.createComponentBuildJobs=void 0;const i=n(3660);const a=n(2764);const l=n(2727);const c=n(1950);const createComponentBuildJobs=async(e,t)=>{var n;return[...t.appBuild&&(0,i.componentContextIsStandaloneBuild)(e)?[await(0,c.createAppBuildJob)(e,t.appBuild)]:[],...(0,a.requiresDockerBuild)(e)?[(0,a.createDockerBuildJobBase)(e,{...t.dockerBuild,needs:[...(n=t.dockerBuild.needs)!==null&&n!==void 0?n:[],...t.appBuild&&(0,i.componentContextIsStandaloneBuild)(e)?[l.APP_BUILD_JOB_NAME]:(0,i.componentContextHasWorkspaceBuild)(e)?[{job:l.APP_BUILD_JOB_NAME,artifacts:true,workspaceName:e.build.workspaceName}]:[]]})]:[]]};t.createComponentBuildJobs=createComponentBuildJobs;const createWorkspaceBuildJobs=async(e,t)=>t.appBuild?[await(0,c.createAppBuildJob)(e,t.appBuild)]:[];t.createWorkspaceBuildJobs=createWorkspaceBuildJobs},2877:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeBuildInfo=void 0;const writeBuildInfo=e=>[`echo '{"id":"${e.environment.envVars.BUILD_INFO_BUILD_ID}","time":"${e.environment.envVars.BUILD_INFO_BUILD_TIME}"}' > ${e.build.dir}/__build_info.json`];t.writeBuildInfo=writeBuildInfo},7652:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.componentContextNeedsBuildTimeDotEnv=t.writeDotEnv=void 0;const i=n(4284);const a=n(8127);const l=n(52);const c=n(3468);const writeDotEnv=e=>{const t=e.environment.envVars;const n=Object.entries(t).filter((([,e])=>!(0,i.isNil)(e))).filter((([e])=>!l.ALL_BUILD_VARIABLES.includes(e))).map((([e,t])=>`${e}=${(0,a.escapeForDotEnv)(t)}`)).join("\n");return(0,c.collapseableSection)("write-dotenv-"+e.name,"write dot env for "+e.name)([`cat <<EOF > ${e.build.dir}/.env\n${n}\nEOF`])};t.writeDotEnv=writeDotEnv;const componentContextNeedsBuildTimeDotEnv=e=>{var t;return((t=e.componentConfig.dotEnv)!==null&&t!==void 0?t:true)===true};t.componentContextNeedsBuildTimeDotEnv=componentContextNeedsBuildTimeDotEnv},5644:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.createJobCacheFromConfig=t.createJobCacheFromCacheConfigs=void 0;const a=n(6928);const l=n(1255);const c=i(n(4206));const createJobCacheFromCacheConfigs=(e,t)=>{if(t.length===0)return undefined;const n=t.filter((e=>!("key"in e)));const i=t.filter((e=>"key"in e));const l=n.length>0?[{key:e.name+"-default",policy:"pull-push",paths:n.flatMap((t=>t.paths.map((n=>{var i;const l=t.pathMode==="absolute"?"":(i=t.baseDir)!==null&&i!==void 0?i:e.build.dir;return(0,a.join)(l,n)}))))}]:[];const y=i.map((({key:t,paths:n,policy:i,scope:l,pathMode:y,buildDir:S,...w})=>{var C;const I=y==="absolute"?"":S!==null&&S!==void 0?S:e.build.dir;const N=l==="global"?t:typeof t==="string"?(l==="buildDir"?(0,c.default)(I):e.name)+"-"+t:{...t,files:(C=t.files)===null||C===void 0?void 0:C.map((e=>y==="absolute"?e:(0,a.join)(I,e)))};return{key:N,policy:i!==null&&i!==void 0?i:"pull-push",paths:y==="absolute"?n:n===null||n===void 0?void 0:n.map((e=>(0,a.join)(I,e))),...w}}));return[...y,...l]};t.createJobCacheFromCacheConfigs=createJobCacheFromCacheConfigs;const createJobCacheFromConfig=(e,n)=>(0,t.createJobCacheFromCacheConfigs)(e,(0,l.getAllCacheConfigsFromConfig)(e,n));t.createJobCacheFromConfig=createJobCacheFromConfig},1255:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getAllCacheConfigsFromConfig=void 0;const i=n(595);const a=n(3507);const getAllCacheConfigsFromConfig=(e,t)=>[..."jobCache"in t?(0,a.transformLegacyJobCache)(t.jobCache):[],...(0,i.ensureArray)(t.cache),...e.type==="workspace"?e.components.flatMap((e=>{var t;return e.build.type!=="disabled"?(t=(0,i.ensureArray)(e.build.config.cache).map((t=>({...t,baseDir:e.build.dir}))))!==null&&t!==void 0?t:[]:[]})):[]];t.getAllCacheConfigsFromConfig=getAllCacheConfigsFromConfig},3507:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.transformLegacyJobCache=void 0;const i=n(595);function transformLegacyJobCache(e){return(0,i.ensureArray)(e).map((e=>{var t,n;return{pathMode:"absolute",...e,key:(t=e.key)!==null&&t!==void 0?t:"default",paths:(n=e.paths)!==null&&n!==void 0?n:[]}}))}t.transformLegacyJobCache=transformLegacyJobCache},985:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createCustomBuildJobs=void 0;const i=n(2764);const a=n(9851);const l=n(8121);const c=n(6254);const createCustomBuildJobs=async e=>{const t=e.build.config;if(!(0,a.isOfBuildType)(t,"custom")){throw new Error("deploy config is not custom")}return(0,l.createComponentBuildJobs)(e,{appBuild:t.buildCommand!==null&&t.buildCommand!==false?(0,c.createBuildJobDefinition)(e,t):undefined,dockerBuild:{script:(0,i.getDockerBuildScriptWithBuiltInDockerFile)(e),variables:{}}})};t.createCustomBuildJobs=createCustomBuildJobs},2924:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createCustomJobs=void 0;const i=n(985);const a=n(7039);const createCustomJobs=async e=>[...(0,a.createCustomTestJobs)(e),...await(0,i.createCustomBuildJobs)(e)];t.createCustomJobs=createCustomJobs},7039:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createCustomTestJobs=void 0;const i=n(595);const a=n(3983);const l=n(5644);const c=n(9851);const y={KUBERNETES_CPU_REQUEST:"0.45",KUBERNETES_MEMORY_REQUEST:"1Gi",KUBERNETES_MEMORY_LIMIT:"4Gi"};const createCustomTestJobs=e=>{var t,n,S,w,C,I,N,O,j,B,$,W,q,K,H,Y,X,Q,Z,te,ne,re,ie,se,ae;if(e.trigger==="taggedRelease"){return[]}const oe=e.build.config;if(!(0,c.isOfBuildType)(oe,"custom")){throw new Error("deploy config is not custom")}const le={variables:{APP_PATH:e.build.dir,...e.environment.jobOnlyVars.build.envVars},services:oe.jobServices,cache:(0,l.createJobCacheFromConfig)(e,oe),stage:"test",needs:[]};const pe=oe.audit?{name:"๐ก audit",...le,runnerVariables:{...y,...(n=(t=oe.audit)===null||t===void 0?void 0:t.runnerVariables)!==null&&n!==void 0?n:{}},image:(w=(S=oe.audit)===null||S===void 0?void 0:S.jobImage)!==null&&w!==void 0?w:oe.jobImage,cache:undefined,script:[...(0,i.ensureArray)((C=oe.audit)===null||C===void 0?void 0:C.command)],allow_failure:(N=(I=oe.audit)===null||I===void 0?void 0:I.allowFailure)!==null&&N!==void 0?N:true,...(0,a.createArtifactsConfig)(e.build.dir,(O=oe.audit)===null||O===void 0?void 0:O.artifactsReports,(j=oe.audit)===null||j===void 0?void 0:j.artifacts)}:null;const ce=oe.lint?{name:"๐ฎ lint",...le,runnerVariables:{...y,...($=(B=oe.lint)===null||B===void 0?void 0:B.runnerVariables)!==null&&$!==void 0?$:{}},image:(q=(W=oe.lint)===null||W===void 0?void 0:W.jobImage)!==null&&q!==void 0?q:oe.jobImage,script:[...(0,i.ensureArray)((K=oe.lint)===null||K===void 0?void 0:K.command)],allow_failure:(H=oe.lint)===null||H===void 0?void 0:H.allowFailure,...(0,a.createArtifactsConfig)(e.build.dir,(Y=oe.lint)===null||Y===void 0?void 0:Y.artifactsReports,(X=oe.lint)===null||X===void 0?void 0:X.artifacts)}:null;const de=oe.test?{name:"๐งช test",...le,runnerVariables:{...y,...(Z=(Q=oe.test)===null||Q===void 0?void 0:Q.runnerVariables)!==null&&Z!==void 0?Z:{}},image:(ne=(te=oe.test)===null||te===void 0?void 0:te.jobImage)!==null&&ne!==void 0?ne:oe.jobImage,script:[...(0,i.ensureArray)((re=oe.test)===null||re===void 0?void 0:re.command)],allow_failure:(ie=oe.test)===null||ie===void 0?void 0:ie.allowFailure,...(0,a.createArtifactsConfig)(e.build.dir,(se=oe.test)===null||se===void 0?void 0:se.artifactsReports,(ae=oe.test)===null||ae===void 0?void 0:ae.artifacts)}:null;return[pe,ce,de].filter(i.notNil)};t.createCustomTestJobs=createCustomTestJobs},2764:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.hasDockerfile=t.getDockerBuildDefaultScript=t.getDockerBuildScriptWithBuiltInDockerFile=t.gitlabDockerLogin=t.createDockerBuildJobBase=t.getDockerJobBaseProps=t.DOCKER_BUILD_JOB_NAME=t.getDockerBuildVariables=t.requiresDockerBuild=t.getDockerImageVariables=void 0;const a=n(9896);const l=n(4284);const c=i(n(6928));const y=n(8025);const S=n(4316);const w=n(1201);const C=n(2348);const I=n(3468);const N=n(5644);const O={KUBERNETES_CPU_REQUEST:"0.45",KUBERNETES_MEMORY_REQUEST:"1Gi",KUBERNETES_MEMORY_LIMIT:"2Gi"};const getDockerImageVariables=e=>{var t;const n=(t=e.deploy)===null||t===void 0?void 0:t.config;return{...(0,y.isOfDeployType)(n,"google-cloudrun")?{DOCKER_REGISTRY:(0,S.getArtifactsRegistryHost)(e),DOCKER_IMAGE:(0,S.getArtifactsRegistryImageName)(e),DOCKER_CACHE_IMAGE:(0,S.getArtifactsRegistryBuildCacheImage)(e)}:{DOCKER_REGISTRY:"$CI_REGISTRY",DOCKER_CACHE_IMAGE:"$CI_REGISTRY_IMAGE/caches/"+e.name,DOCKER_IMAGE_NAME:e.env+"/"+e.name,DOCKER_IMAGE:"$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"},DOCKER_IMAGE_TAG:"$CI_COMMIT_SHA"}};t.getDockerImageVariables=getDockerImageVariables;const requiresDockerBuild=e=>{var t;const n=(t=e.deploy)===null||t===void 0?void 0:t.config;return(0,y.isOfDeployType)(n,"kubernetes","google-cloudrun","dockerTag")||(0,y.isOfDeployType)(n,"custom")&&n.requiresDocker};t.requiresDockerBuild=requiresDockerBuild;const getDockerBuildRunnerVariables=()=>({DOCKER_HOST:"tcp://docker:2375",DOCKER_TLS_CERTDIR:"",DOCKER_DRIVER:"overlay2",DOCKER_BUILDKIT:"1"});const getDockerAdditions=e=>{var t,n;if(!("docker"in e))return{};if(!e.docker)return{};return{DOCKERFILE_ADDITIONS:"additionsBegin"in e.docker?(t=e.docker.additionsBegin)===null||t===void 0?void 0:t.join("\n"):undefined,DOCKERFILE_ADDITIONS_END:"additionsEnd"in e.docker?(n=e.docker.additionsEnd)===null||n===void 0?void 0:n.join("\n"):undefined}};const getDockerBuildVariables=e=>{var n;return{...getDockerAdditions(e.build.config),APP_DIR:e.build.dir,DOCKER_BUILD_CONTEXT:"docker"in e.build.config&&e.build.config.docker&&"buildContextLocation"in e.build.config.docker&&((n=e.build.config.docker)===null||n===void 0?void 0:n.buildContextLocation)==="component"?e.build.dir:".",...(0,t.getDockerImageVariables)(e)}};t.getDockerBuildVariables=getDockerBuildVariables;t.DOCKER_BUILD_JOB_NAME="๐จ docker";const getDockerJobBaseProps=()=>({image:(0,C.getRunnerImage)("docker-build"),services:[{name:"docker:29.5.1-dind",command:["--tls=false","--registry-mirror=https://mirror.gcr.io"]}],variables:{},runnerVariables:getDockerBuildRunnerVariables()});t.getDockerJobBaseProps=getDockerJobBaseProps;const createDockerBuildJobBase=(e,{script:n,cache:i,...a})=>(0,l.merge)({name:t.DOCKER_BUILD_JOB_NAME,envMode:"jobPerEnv",stage:"build",cache:i?(0,N.createJobCacheFromCacheConfigs)(e,i):undefined,...(0,t.getDockerJobBaseProps)(),script:n||[]},{variables:(0,t.getDockerBuildVariables)(e),runnerVariables:{...O,...getDockerBuildRunnerVariables()}},a);t.createDockerBuildJobBase=createDockerBuildJobBase;const gitlabDockerLogin=e=>e.deploy&&(0,y.isOfDeployType)(e.deploy.config,"google-cloudrun")?[...(0,w.gcloudServiceAccountLoginCommands)(e),`gcloud auth configure-docker ${(0,S.getArtifactsRegistryHost)(e)}`]:["docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY"];t.gitlabDockerLogin=gitlabDockerLogin;const j={meteor:"ensureMeteorDockerfile",node:"ensureNodeDockerfile",nginx:"ensureNginxDockerfile",custom:null};const getEnsureDockerFileScript=(e,t)=>{var n,i,a,l,c,y;if("docker"in e.build.config&&e.build.config.docker&&"type"in e.build.config.docker){if(((n=e.build.config.docker)===null||n===void 0?void 0:n.type)==="custom"){if((i=e.build.config.docker)===null||i===void 0?void 0:i.dockerfileContent){return`\necho "Creating Dockerfile"\ncat >$APP_DIR/Dockerfile <<EOF\n${(l=(a=e.build.config.docker)===null||a===void 0?void 0:a.dockerfileContent)===null||l===void 0?void 0:l.join("\n")}\nEOF`}}const S=(y=(c=e.build.config.docker)===null||c===void 0?void 0:c.type)!==null&&y!==void 0?y:t;return S?j[S]:null}return t?j[t]:null};const getDockerBuildScriptWithBuiltInDockerFile=(e,n)=>(0,t.getDockerBuildDefaultScript)(e,getEnsureDockerFileScript(e,n));t.getDockerBuildScriptWithBuiltInDockerFile=getDockerBuildScriptWithBuiltInDockerFile;const getDockerBuildDefaultScript=(e,n)=>[n!==null&&n!==void 0?n:undefined,...(0,I.collapseableSection)("docker-login","Docker Login")((0,t.gitlabDockerLogin)(e)),...(0,I.collapseableSection)("docker-build","Docker build")(["docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1"]),...(0,I.collapseableSection)("docker-push","Docker push and tag")(["docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG","docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE","docker push $DOCKER_CACHE_IMAGE"])].filter(Boolean);t.getDockerBuildDefaultScript=getDockerBuildDefaultScript;const hasDockerfile=e=>(0,a.existsSync)(c.default.join(e.build.dir,"Dockerfile"));t.hasDockerfile=hasDockerfile},1398:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){if(i===undefined)i=n;var a=Object.getOwnPropertyDescriptor(t,n);if(!a||("get"in a?!t.__esModule:a.writable||a.configurable)){a={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,i,a)}:function(e,t,n,i){if(i===undefined)i=n;e[i]=t[n]});var a=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))i(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});t.WORKSPACE_BUILD_TYPES=t.BUILD_TYPES=void 0;const l=n(2924);const c=n(7667);const y=n(3260);a(n(7667),t);a(n(9851),t);t.BUILD_TYPES={node:{jobs:c.createNodeJobs,defaults:()=>({buildCommand:"yarn build",startCommand:"yarn start",artifactsPaths:["dist",".next"],artifactsExcludePaths:[".next/cache/**/*"]})},"node-static":{jobs:c.createNodeJobs,defaults:()=>({buildCommand:"yarn build",artifactsPaths:["dist"]})},storybook:{jobs:c.createStorybookJobs,defaults:()=>({buildCommand:["yarn build-storybook --quiet -o ./dist"],artifactsPaths:["dist"]})},meteor:{jobs:c.createMeteorJobs,defaults:()=>({startCommand:"node main.js",artifactsPaths:["dist"]})},custom:{jobs:l.createCustomJobs,defaults:()=>({artifactsPaths:["dist"]})},rails:{jobs:y.createRailsJobs,defaults:()=>({cnbBuilder:{image:"heroku/builder:24",packVersion:"0.36.4"}})}};t.WORKSPACE_BUILD_TYPES={node:{jobs:c.createNodeJobs,defaults:()=>({buildCommand:"yarn build",lint:{command:"yarn lint"},test:{command:"yarn test"}})}}},5464:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createNodeDockerJobDefinition=t.createNodeBuildJobDefinition=t.createNodeBuildJobs=void 0;const i=n(3660);const a=n(8121);const l=n(6254);const c=n(2764);const y=n(4189);const S=n(8897);const createNodeBuildJobs=async e=>{if(e.type==="workspace"){return(0,a.createWorkspaceBuildJobs)(e,{appBuild:await(0,t.createNodeBuildJobDefinition)(e)})}return(0,a.createComponentBuildJobs)(e,{appBuild:(0,i.componentContextIsStandaloneBuild)(e)?await(0,t.createNodeBuildJobDefinition)(e):undefined,dockerBuild:await(0,t.createNodeDockerJobDefinition)(e)})};t.createNodeBuildJobs=createNodeBuildJobs;const createNodeBuildJobDefinition=async e=>{const t=e.build.config;const[n,i]=await Promise.all([(0,S.getYarnInstall)(e),(0,y.getNodeCache)(e)]);return(0,l.createBuildJobDefinition)(e,t,{prescript:n,cache:i})};t.createNodeBuildJobDefinition=createNodeBuildJobDefinition;const createNodeDockerJobDefinition=async e=>{var t;const n=e.build.buildType==="node-static"||e.build.buildType==="storybook"?"nginx":"node";const[i,a,l]=await Promise.all([(0,y.getYarnCache)(e,"pull"),(0,S.getDockerAppCopyAndBuildScript)(e),e.packageManagerInfo]);return{script:(0,c.getDockerBuildScriptWithBuiltInDockerFile)(e,n),cache:[...i],variables:{DOCKER_COPY_AND_INSTALL_APP:a,DOCKER_COPY_WORKSPACE_FILES:(t=l===null||l===void 0?void 0:l.pathsToCopyInDocker.map((e=>`COPY --chown=node:node ${e} /app/${e}`)))===null||t===void 0?void 0:t.join("\n")}}};t.createNodeDockerJobDefinition=createNodeDockerJobDefinition},4189:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.getNodeCache=t.getNodeModulesCache=t.getYarnCache=void 0;const a=n(4284);const l=n(6928);const c=i(n(4206));const getYarnCache=async(e,t="pull-push")=>{const n=await e.packageManagerInfo;const i=e.type==="component"&&"componentIsInWorkspace"in n&&n.componentIsInWorkspace;return[{scope:i?"global":"buildDir",pathMode:i?"absolute":"relative",key:"yarn",policy:t,paths:[".yarn"]}]};t.getYarnCache=getYarnCache;const getNodeModulesCache=async(e,t="pull-push")=>{var n,i;const y=await e.packageManagerInfo;const S=e.type==="component"&&"componentIsInWorkspace"in y&&y.componentIsInWorkspace;const{isClassic:w,workspaces:C}=y;return[{scope:"global",pathMode:"absolute",key:S?"node-modules-workspace":(0,c.default)(e.build.dir)+"-node-modules",policy:t,paths:[...S?(0,a.uniq)(["node_modules",...(n=C.map((e=>(0,l.join)(e.location,"node_modules"))))!==null&&n!==void 0?n:[],...!w?[".yarn/install-state.gz",...(i=C.map((e=>(0,l.join)(e.location,".yarn/install-state.gz"))))!==null&&i!==void 0?i:[]]:[]]):[(0,l.join)(e.build.dir,"node_modules"),...!w?[(0,l.join)(e.build.dir,".yarn/install-state.gz")]:[]]]}]};t.getNodeModulesCache=getNodeModulesCache;const getNodeCache=async(e,n="pull-push")=>[...await(0,t.getYarnCache)(e,n),...await(0,t.getNodeModulesCache)(e,n)];t.getNodeCache=getNodeCache},5497:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.NODE_RUNNER_BUILD_VARIABLES=void 0;t.NODE_RUNNER_BUILD_VARIABLES={KUBERNETES_CPU_REQUEST:"0.45",KUBERNETES_MEMORY_REQUEST:"1Gi",KUBERNETES_MEMORY_LIMIT:"4Gi"}},7667:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createMeteorJobs=t.createStorybookJobs=t.createNodeJobs=void 0;const i=n(5464);const a=n(6055);const l=n(9884);const createNodeJobs=async e=>{const[t,n]=await Promise.all([(0,l.createNodeTestJobs)(e),(0,i.createNodeBuildJobs)(e)]);return[...t,...n]};t.createNodeJobs=createNodeJobs;const createStorybookJobs=async e=>[...await(0,i.createNodeBuildJobs)(e)];t.createStorybookJobs=createStorybookJobs;const createMeteorJobs=async e=>{const[t,n]=await Promise.all([(0,l.createNodeTestJobs)(e),(0,a.createMeteorBuildJobs)(e)]);return[...t,...n]};t.createMeteorJobs=createMeteorJobs},6055:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createMeteorBuildJobs=void 0;const i=n(5354);const a=n(2348);const l=n(8121);const c=n(2764);const y=n(9851);const S=n(4189);const w=n(8897);const getMeteorCache=e=>[{key:"meteor-build-cache",policy:"pull-push",paths:[".meteor/local/resolver-result-cache.json",".meteor/local/plugin-cache",".meteor/local/isopacks",".meteor/local/bundler-cache/scanner"]}];const getMeteorDockerInstallScripts=async e=>{const t=await e.packageManagerInfo;if(t.isClassic){return new i.BashExpression(`\nCOPY $APP_DIR/package.json $APP_DIR/yarn.lock ./\n\nRUN yarn --frozen-lockfile --production=true --ignore-scripts --ignore-engines\nCOPY $APP_DIR .\nRUN yarn --frozen-lockfile --production=true --ignore-engines\n `.trim())}const n=["2","3"].some((e=>t.version.startsWith(e)));const a=n?"RUN yarn plugin import workspace-tools":"";return new i.BashExpression(`\nENV YARN_ENABLE_INLINE_BUILDS=1\nCOPY $APP_DIR .\n${a}\nRUN yarn workspaces focus --production\n `.trim())};const createMeteorBuildJobs=async e=>{const t=e.build.config;if(!(0,y.isOfBuildType)(t,"meteor")){throw ne