UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

1 lines โ€ข 1.07 MB
(()=>{var __webpack_modules__={6965:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const r=a(5264);const n=a(4975);const i=a(4770);const s=a(8800);const o=a(603);t["default"]=async e=>{var t;const a=await(0,r.getProjectConfig)();if(!a){return}await Promise.all([(0,o.generatePipelineFiles)(a,(t=a.pipelineType)!==null&&t!==void 0?t:"gitlab"),(0,i.writeDotEnvFiles)(a,e),(0,s.writeDTsFiles)(a,e),(0,n.printVariables)(a,e)])}},4975:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.printVariables=void 0;const r=a(5264);const n=a(4560);const getAllVariablesToPrint=async(e,t)=>{var a;const{env:i,currentComponent:s}=await(0,n.getCurrentComponentAndEnvFromChoice)(e,t);if(s){if((a=e.components[s].dotEnv)!==null&&a!==void 0?a:true){return{}}return await(0,r.getEnvVarsResolved)(null,i,s)}else{return await Object.keys(e.components).reduce((async(t,a)=>{var s;if((s=e.components[a].dotEnv)!==null&&s!==void 0?s:true){return await t}const o=await(0,r.getEnvVarsResolved)(null,i,a);delete o["_ALL_ENV_VAR_KEYS"];return{...await t,...o,...Object.fromEntries(Object.entries(o).map((([e,t])=>[`${(0,n.sanitizeEnvVarName)(a.toUpperCase())}_${e}`,t])))}}),Promise.resolve({}))}};const printVariables=async(e,t)=>{const a=await getAllVariablesToPrint(e,t);console.log(makeExportKeyValuestring(a))};t.printVariables=printVariables;const makeExportKeyValuestring=e=>(0,n.makeKeyValueString)(e,{keyPrefix:"export ",escapeOptions:{quoteMode:"always"}})},4560:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.sanitizeEnvVarName=t.makeKeyValueString=t.getCurrentComponentAndEnvFromChoice=t.getComponentFullPath=void 0;const r=a(1017);const n=a(9011);const i=a(603);const getComponentFullPath=(e,t,a)=>(0,r.join)(e,t.components[a].dir);t.getComponentFullPath=getComponentFullPath;const getCurrentComponentName=async e=>{const a=await(0,n.getGitRoot)();const r=process.cwd();return Object.keys(e.components).find((n=>r.startsWith((0,t.getComponentFullPath)(a,e,n))))};const getCurrentComponentAndEnvFromChoice=async(e,t)=>{var a,r;const n=(a=t===null||t===void 0?void 0:t.env)!==null&&a!==void 0?a:"local";const i=(r=t===null||t===void 0?void 0:t.componentName)!==null&&r!==void 0?r:await getCurrentComponentName(e);return{currentComponent:i,env:n}};t.getCurrentComponentAndEnvFromChoice=getCurrentComponentAndEnvFromChoice;const makeKeyValueString=(e,{keyPrefix:t,escapeOptions:a}={keyPrefix:""})=>Object.entries(e).map((([e,r])=>`${t}${e}=${(0,i.escapeForDotEnv)(r,a)}`)).join("\n");t.makeKeyValueString=makeKeyValueString;const sanitizeEnvVarName=e=>e.replace(/[\s\-.]+/g,"_");t.sanitizeEnvVarName=sanitizeEnvVarName},4770:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeDotEnvFiles=void 0;const r=a(603);const n=a(1017);const i=a(5264);const s=a(9011);const o=a(4560);const writeDotEnvFiles=async(e,t)=>{const{env:a,currentComponent:p}=await(0,o.getCurrentComponentAndEnvFromChoice)(e,t);const d=Object.entries(e.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 l=p?d.includes(p)?[p]:[]:d;const c=await(0,s.getGitRoot)();for(const t of l){const s=await(0,i.getEnvVarsResolved)(null,a,t);delete s["_ALL_ENV_VAR_KEYS"];const p=(0,o.getComponentFullPath)(c,e,t);const d=(0,n.join)(p,".env");await(0,r.writeGeneratedFile)(d,(0,o.makeKeyValueString)(s),{commentChar:"#"})}};t.writeDotEnvFiles=writeDotEnvFiles},8800:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeDTsFiles=void 0;const r=a(603);const n=a(1017);const i=a(5264);const s=a(9011);const o=a(4560);const writeDTsFiles=async(e,t)=>{const{env:a,currentComponent:i}=await(0,o.getCurrentComponentAndEnvFromChoice)(e,t);const p=Object.entries(e.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 d=i?p.includes(i)?[i]:[]:p;const l=await(0,s.getGitRoot)();for(const t of d){const i=await getEnvsForDTs(a,t);const s=createEnvDTsContent(i);const p=(0,o.getComponentFullPath)(l,e,t);const d=(0,n.join)(p,"env.d.ts");await(0,r.writeGeneratedFile)(d,s,{commentChar:"//"})}};t.writeDTsFiles=writeDTsFiles;async function getEnvsForDTs(e,t){const a=await(0,i.getEnvironment)(e,t);const r=Object.keys(a.envVars);const n=new Set(a.secretEnvVarKeys.filter((e=>e.hidden)).map((e=>e.key)).concat(["_ALL_ENV_VAR_KEYS"]));const s=r.filter((e=>!n.has(e)));return s}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`}},8900:function(e,t,a){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});const n=r(a(6965));const i=a(3941);const s=process.argv.slice(2);const o=["--help","-h","help"];if(s.some((e=>o.includes(e)))){const e="https://git.panter.ch/catladder/catladder/-/blob/main/docs/1_VARS.md";console.log(`\nUsage: catenv [env|env:component]\n\nEnv variable and catenv documentation:\n${e}`);process.exit(0)}(0,n.default)(s[0]?(0,i.parseChoice)(s[0]):null).then((()=>{process.exit()}))},5264:(e,t,a)=>{"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 r=a(603);const n=a(2927);const i=a(9011);const s=a(7147);var o=a(3941);Object.defineProperty(t,"parseChoice",{enumerable:true,get:function(){return o.parseChoice}});let p=null;const reloadConfigAndObserve=async()=>{const e=await(0,i.getGitRoot)();if(!e){return}const t=await(0,r.readConfig)(e);if(!t){return}const{config:a,path:n}=t;const o=(0,s.watch)(n,(()=>{o.close();reloadConfigAndObserve()}));p=a};const getProjectConfig=async()=>{if(!p){await reloadConfigAndObserve()}return p};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,a)=>{const n=await(0,t.getProjectConfig)();return await(0,r.createComponentContext)({config:n,componentName:a,env:e})};t.getPipelineContextByChoice=getPipelineContextByChoice;const getAllComponentsWithAllEnvsFlat=async()=>{const e=await(0,t.getProjectConfig)();if(!e){return[]}return Object.keys(e.components).flatMap((t=>(0,r.getAllEnvs)(e,t).map((e=>({env:e,componentName:t})))))};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,r.getAllEnvs)(e,t)])))};t.getAllComponentsWithAllEnvsHierarchical=getAllComponentsWithAllEnvsHierarchical;const getAllPipelineContexts=async e=>{const a=e?Array.isArray(e)?e:[e]:null;return Promise.all((await(0,t.getAllComponentsWithAllEnvsFlat)()).filter((e=>e.env!=="local")).filter((e=>!a||a.includes(e.componentName))).map((({env:e,componentName:a})=>(0,t.getPipelineContextByChoice)(e,a))))};t.getAllPipelineContexts=getAllPipelineContexts;const getEnvironment=async(e,a)=>{const n=await(0,t.getProjectConfig)();return(0,r.getEnvironment)({config:n,componentName:a,env:e})};t.getEnvironment=getEnvironment;const getGitlabVar=async(e,t,a,i)=>{const s=(0,r.getSecretVarName)(t,a,i);return await(0,n.getVariableValueByRawName)(e,s)};t.getGitlabVar=getGitlabVar;const resolveSecrets=async(e,t)=>{const a=await(0,n.getAllVariables)(e);return Object.fromEntries(t.flatMap((({envVars:e,secretEnvVarKeys:t})=>Object.entries(e).filter((([e,a])=>{var r;return a!==undefined&&a!==null&&!((r=t.find((t=>t.key===e)))===null||r===void 0?void 0:r.hidden)})).map((([e,t])=>[e,a.reduce(((e,t)=>e.replace(new RegExp("\\$"+t.key,"g"),t.value)),`${t}`)])))))};const getEnvVarsResolved=async(e,a,r)=>{if(!r){return{}}const n=await(0,t.getEnvironment)(a,r);return resolveSecrets(e,[{envVars:n.envVars,secretEnvVarKeys:n.secretEnvVarKeys}])};t.getEnvVarsResolved=getEnvVarsResolved;const getJobOnlyEnvVarsResolved=async(e,a,r)=>{const n=await(0,t.getEnvironment)(a,r);return resolveSecrets(e,[n.jobOnlyVars.build,n.jobOnlyVars.deploy])};t.getJobOnlyEnvVarsResolved=getJobOnlyEnvVarsResolved},3941:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.parseChoice=void 0;const parseChoice=e=>{const[t,a]=e.split(":").map((e=>e||null));return{env:t,componentName:a}};t.parseChoice=parseChoice},2745:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.gitConfigSet=t.gitConfigGet=void 0;const r=a(5763);const argsJoin=e=>e.filter(Boolean).join(" ");async function gitConfigGet(e,{location:t}={}){const{stdout:a}=await(0,r.exec)(`git config --get ${argsJoin([t?`--${t}`:undefined])} ${e}`);return a.trim()}t.gitConfigGet=gitConfigGet;const gitConfigSet=(e,t,{location:a,comment:n}={})=>(0,r.exec)(`git config --set ${argsJoin([a?`--${a}`:undefined,n?`--comment=${n}`:undefined])} ${e} ${t}`);t.gitConfigSet=gitConfigSet},8329:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.gitProjectInformation=t.getGitRemoteHostAndPath=t.getProjectRootPath=void 0;const r=a(2745);const n=a(5763);const getProjectRootPath=async()=>{const{stdout:e}=await(0,n.exec)(`git rev-parse --show-toplevel`);return e.trim()};t.getProjectRootPath=getProjectRootPath;const getGitRemoteHostAndPath=async()=>{var e;const t=await(0,r.gitConfigGet)("remote.origin.url");const a=/(https:\/\/|git@)([^:/]+)[:/]([^.]*)(\.git)?/;const n=(e=t.match(a))!==null&&e!==void 0?e:[];const[,,i,s]=n;if(!(i===null||i===void 0?void 0:i.length)||!(s===null||s===void 0?void 0:s.length)){throw new Error(`Failed to parse git remote hostname and path from git configs remote.origin.url! ${t}`)}return{gitRemoteHost:i,gitRemotePath:s}};t.getGitRemoteHostAndPath=getGitRemoteHostAndPath;const gitProjectInformation=async()=>{const[{gitRemoteHost:e,gitRemotePath:a},r]=await Promise.all([(0,t.getGitRemoteHostAndPath)(),(0,t.getProjectRootPath)()]);return{gitRemoteHost:e,gitRemotePath:a,projectRootPath:r}};t.gitProjectInformation=gitProjectInformation},9863:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.readFileOrError=void 0;const r=a(5501);const readFile=e=>(0,r.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},2927:function(e,t,a){"use strict";var r=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 n=a(603);const i=a(3255);const s=r(a(5839));const o=r(a(6372));const p=r(a(4247));const d=a(3511);const l=a(8329);const c="gitlab-personal-access-token";const hasGitlabToken=async()=>await(0,d.hasPreference)(c);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[{shouldContinue:t},{gitRemoteHost:a}]=await Promise.all([e.prompt({default:true,message:"Ok",name:"shouldContinue",type:"prompt"}),(0,l.getGitRemoteHostAndPath)()]);(0,p.default)(`https://${a}/-/user_settings/personal_access_tokens`);e.log("Please type in gitlab's personal access token");const{personalToken:r}=await e.prompt({type:"string",name:"personalToken",default:"",message:"Your personal access token "});if(r){await(0,d.setPreference)(c,r)}};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,d.getPreference)(c)};t.getGitlabToken=getGitlabToken;const doGitlabRequest=async(e,a,r=undefined,n="GET")=>{const[i,{gitRemoteHost:s}]=await Promise.all([(0,t.getGitlabToken)(e),(0,l.getGitRemoteHostAndPath)()]);const p=await(0,o.default)(`https://${s}/api/v4/${a}`,{method:n,headers:{"Content-Type":"application/json","Private-Token":i},body:r?JSON.stringify(r):undefined});if(p.status>=200&&p.status<400){if(p.headers.get("content-type")==="application/json"){return p.json()}return null}if(p.status===404){throw new Error("not found")}throw new Error(`Could not send request to gitlab api ${a}: ${p.status} "${p.statusText}".\nResponse: ${JSON.stringify(await p.json(),null,2)}`)};t.doGitlabRequest=doGitlabRequest;const getProjectInfo=async e=>{const{gitRemotePath:a}=await(0,l.getGitRemoteHostAndPath)();const r=await(0,t.doGitlabRequest)(e,`projects/${encodeURIComponent(a)}`);return r};t.getProjectInfo=getProjectInfo;t.getAllVariables=(0,s.default)((async(e,a=5)=>{const{id:r}=await(0,t.getProjectInfo)(e);let n=[];let i=[];let s=1;do{const o=Array.from({length:a},((a,n)=>(0,t.doGitlabRequest)(e,`projects/${r}/variables?per_page=100&page=${s+n}`)));i=await Promise.all(o);s+=a;n=[...n,...i.flat()]}while(i.length>0&&i[i.length-1].length>0);return n}),{promise:true});const getVariableValueByRawName=async(e,a)=>{var r;const n=await(0,t.getAllVariables)(e);return(r=n.find((e=>e.key===a)))===null||r===void 0?void 0:r.value};t.getVariableValueByRawName=getVariableValueByRawName;const u=new RegExp("^[a-zA-Z0-9_+=/@:.~-]{8,}$");const isMaskable=e=>u.test(e);const createVariable=async(e,a,r,n,i=true,s="*")=>await(0,t.doGitlabRequest)(e,`projects/${a}/variables`,{key:r,value:n,masked:i&&isMaskable(n),environment_scope:s},"POST");const updateVariable=async(e,a,r,n,i=true)=>await(0,t.doGitlabRequest)(e,`projects/${a}/variables/${r}`,{value:n,masked:i&&isMaskable(n)},"PUT");const deleteVariable=async(e,a,r)=>await(0,t.doGitlabRequest)(e,`projects/${a}/variables/${r}`,undefined,"DELETE");const getAllCatladderEnvVarsInGitlab=async e=>{const a=await(0,t.getAllVariables)(e).then((e=>e.reduce(((e,t)=>{var a,r,n,i;const{key:s}=t;if(s.startsWith("CL_")){const o=s.match(/(CL_.*)_backup_([0-9]+)/);if(o){const t=o[1];const i=Number(o[2]);const s=[...(r=(a=e[t])===null||a===void 0?void 0:a.backups)!==null&&r!==void 0?r:[],i];return{...e,[t]:{...(n=e[t])!==null&&n!==void 0?n:{},backups:s}}}return{...e,[s]:{backups:[],...(i=e[s])!==null&&i!==void 0?i:{},value:t.value}}}return e}),{})));return a};const getBackupKey=(e,t)=>`${e}_backup_${t}`;const clearBackups=async(e,a)=>{const r=await getAllCatladderEnvVarsInGitlab(e);const{id:n}=await(0,t.getProjectInfo)(e);for(const[t,{backups:i}]of Object.entries(r)){const r=i.sort(((e,t)=>t-e));const s=r.slice(a);for(const a of s){await deleteVariable(e,n,getBackupKey(t,a))}}};t.clearBackups=clearBackups;const upsertAllVariables=async(e,a,r,s,o=true,p=true)=>{var d;const{id:l}=await(0,t.getProjectInfo)(e);const c=await getAllCatladderEnvVarsInGitlab(e);for(const[t,u]of Object.entries(a!==null&&a!==void 0?a:{})){const a=(0,n.getSecretVarName)(r,s,t);const f=(0,i.isObject)(u)?JSON.stringify(u):`${u}`;const m=(0,i.has)(c,a);const h=(d=c[a])===null||d===void 0?void 0:d.value;const v=h!==f;if(v){if(m){e.log(`changed: ${t}`);await updateVariable(e,l,a,f,p);if(o){await createVariable(e,l,getBackupKey(a,(new Date).getTime()),h,p,"_backup")}}else{e.log(`new : ${t}`);await createVariable(e,l,a,f,p)}}else{e.log(`skip : ${t}`)}}t.getAllVariables.clear()};t.upsertAllVariables=upsertAllVariables},3511:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.setPreference=t.getPreference=t.hasPreference=t.getPreferences=void 0;const r=a(3292);const n=a(7147);const i=a(1017);const s=a(2037);const o=a(8033);const p=(0,i.join)((0,s.homedir)(),".catladder/preferences.yml");const d=(0,i.join)((0,s.homedir)(),".config/catladder/preferences.yml");const ensurePreferencesFile=async()=>{if((0,n.existsSync)(d)){return}await(0,r.mkdir)((0,i.dirname)(d),{recursive:true,mode:448});if(!(0,n.existsSync)(p)){return(0,r.writeFile)(d,"---\n{}",{encoding:"utf-8",mode:384})}await(0,r.cp)(p,d);await(0,r.chmod)(d,384);await(0,r.cp)(d,(0,i.join)((0,i.dirname)(d),"old_preferences_backup.yml"))};const loadPreferences=async()=>{await ensurePreferencesFile();return(0,r.readFile)(d,{encoding:"utf-8"})};const getPreferences=async()=>{var e;const t=await loadPreferences();return(e=(0,o.parse)(t))!==null&&e!==void 0?e:{}};t.getPreferences=getPreferences;const hasPreference=async e=>{const a=await(0,t.getPreferences)();return e in a};t.hasPreference=hasPreference;const getPreference=async e=>{const a=await(0,t.getPreferences)();return a[e]};t.getPreference=getPreference;const setPreference=async(e,a)=>{const n=await(0,t.getPreferences)();const i={...n,[e]:a};await(0,r.writeFile)(d,(0,o.stringify)(i),{encoding:"utf-8",mode:384})};t.setPreference=setPreference},9011:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getProjectNamespace=t.hasGitlabCiFile=t.readRootGitlabCiFile=t.getRootGitlabCiFile=t.getGitRoot=void 0;const r=a(1017);const n=a(5264);const i=a(9863);const s=a(5763);const getGitRoot=async()=>{try{return(await(0,s.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,r.join)(e,".gitlab-ci.yml")};t.getRootGitlabCiFile=getRootGitlabCiFile;const readRootGitlabCiFile=async()=>(0,i.readFileOrError)(await(0,t.getRootGitlabCiFile)());t.readRootGitlabCiFile=readRootGitlabCiFile;const hasGitlabCiFile=async()=>{const[e,a]=await(0,t.readRootGitlabCiFile)();if(e){return false}return true};t.hasGitlabCiFile=hasGitlabCiFile;const getProjectNamespace=async e=>{const{env:t}=(0,n.parseChoice)(e);const a=await(0,n.getProjectConfig)();return`${a.customerName}-${a.appName}-${t}`};t.getProjectNamespace=getProjectNamespace},2376:(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 a=e.some((e=>e instanceof BashExpression));if(a){return new BashExpression(e.map((e=>e instanceof BashExpression?e.toString():e)).join(t))}else{return e.join(t)}};t.joinBashExpressions=joinBashExpressions},2463:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.escapeForDotEnv=t.escapeSingleQuotes=t.escapeDoubleQuotes=t.escapeBashExpression=t.escapeString=t.bashEscape=void 0;const r=a(2912);const n=a(1592);const i=a(2376);const bashEscape=(e,a={quotes:"double"})=>{if(e instanceof i.BashExpression){return(0,t.escapeBashExpression)(e,a)}if(e instanceof n.VariableValueContainingReferences){return e.toString(a)}return(0,t.escapeString)(e,a)};t.bashEscape=bashEscape;const escapeString=(e,{quotes:a}={quotes:"double"})=>{const r=a?a==="single"?(0,t.escapeSingleQuotes)(e):(0,t.escapeDoubleQuotes)(e):e;return r};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 escapeForDotEnv=(e,a={quoteMode:"auto"})=>{if(e===undefined||e===null){return""}if(typeof e==="string"){if(a.quoteMode==="always"||e.includes("\n")){const t=e.replace(/\n/g,"\\n");const a=e.includes(`"`)?e.includes(`'`)?e.includes("`")?'"':"`":"'":'"';return`${a}${t}${a}`}else{return e}}else if(e instanceof i.BashExpression){return escapeBashExpressionForDotEnv(e)}else if(e instanceof n.VariableValueContainingReferences){const a=e.parts.some((e=>e instanceof i.BashExpression));if(!a){return(0,t.escapeForDotEnv)(e.toString({quotes:"double"}))}else{const t=escapeBashExpressionForDotEnv(new i.BashExpression(e.toString({quotes:"double"})));return t}}else{return e}};t.escapeForDotEnv=escapeForDotEnv;const s=(0,r.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(s.name).toString()},612:(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},4660:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.writeBashYamlToFileScript=t.yamlBashString=void 0;const r=a(8033);const n=a(2376);const i=a(1592);const s={tag:"",resolve:e=>new n.BashExpression(e),stringify(e,t){return"|-\n"+t.indent+indentNewlinesInBashExpression(e.value,t.indent)},identify:e=>e instanceof n.BashExpression};const indentNewlinesInBashExpression=(e,t)=>e.transformWithCommand(`sed '1!s/^/${t}/'`);const o={tag:"",resolve:e=>new i.VariableValueContainingReferences(e),stringify(e,t){const a=e.value;const r=a.parts.map((e=>e instanceof n.BashExpression?indentNewlinesInBashExpression(e,t.indent):e.toString().replace(/\n/g,`\n${t.indent}`))).join("");return"|-\n"+t.indent+r},identify:e=>e instanceof i.VariableValueContainingReferences};const yamlBashString=e=>(0,r.stringify)(e,{defaultStringType:"BLOCK_LITERAL",defaultKeyType:"PLAIN",customTags:[s,o],aliasDuplicateObjects:false,lineWidth:0});t.yamlBashString=yamlBashString;const writeBashYamlToFileScript=(e,a)=>[`cat > ${a} <<EOF\n${(0,t.yamlBashString)(e)}\nEOF\n`];t.writeBashYamlToFileScript=writeBashYamlToFileScript},8133:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getInjectVarsScript=void 0;const r=a(3255);const n=a(2463);const getInjectVarsScript=e=>{if(!e)return[];return Object.entries(e).filter((([,e])=>!(0,r.isNil)(e))).map((([e,t])=>`export ${e}="${t?(0,n.bashEscape)(t,{quotes:"double"}):""}"`))};t.getInjectVarsScript=getInjectVarsScript},2990:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){if(r===undefined)r=a;var n=Object.getOwnPropertyDescriptor(t,a);if(!n||("get"in n?!t.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return t[a]}}}Object.defineProperty(e,r,n)}:function(e,t,a,r){if(r===undefined)r=a;e[r]=t[a]});var n=this&&this.__exportStar||function(e,t){for(var a in e)if(a!=="default"&&!Object.prototype.hasOwnProperty.call(t,a))r(t,e,a)};Object.defineProperty(t,"__esModule",{value:true});n(a(2463),t);n(a(2376),t)},8774:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createBuildJobArtifacts=void 0;const r=a(1017);const n=a(1853);const i=a(3255);const s=a(8052);const createBuildJobArtifacts=e=>{var t,a;const s=e.type==="workspace"?e.components.flatMap((e=>getArtifactsPathForComponent(e))):getArtifactsPathForComponent(e,["__build_info.json"]);const o=e.type==="workspace"?e.components.flatMap((e=>getDotEnvPathsForComponent(e))):getDotEnvPathsForComponent(e);return{paths:(0,i.uniq)(s).sort(((e,t)=>e.localeCompare(t))),...o.length>0?{exclude:o}:{},expire_in:"1 day",when:"always",reports:e.type==="component"&&(0,n.componentContextIsStandaloneBuild)(e)?{junit:(a=(t=e.build.config.artifactsReports)===null||t===void 0?void 0:t.junit)===null||a===void 0?void 0:a.map((t=>(0,r.join)(e.build.dir,t)))}:{}}};t.createBuildJobArtifacts=createBuildJobArtifacts;const getArtifactsPathForComponent=(e,t)=>{var a,n;return(n=[...e.build.type!=="disabled"?(a=e.build.config.artifactsPaths)!==null&&a!==void 0?a:[]:[],...t!==null&&t!==void 0?t:[]])===null||n===void 0?void 0:n.flatMap((t=>e.build.getComponentDirs("all").flatMap((e=>(0,r.join)(e,t)))))};const getDotEnvPathsForComponent=e=>{if((0,s.componentContextNeedsBuildTimeDotEnv)(e)){return[(0,r.join)(e.build.dir,".env")]}return[]}},2786:(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"}},7801:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createAppBuildJob=void 0;const r=a(3255);const n=a(603);const i=a(2497);const s=a(8774);const o=a(340);const p=a(5043);const d=a(2786);const l=a(9578);const c=a(8052);const createAppBuildJob=(e,{script:t,variables:a,runnerVariables:u,cache:f,...m})=>{var h;return(0,r.merge)({name:d.APP_BUILD_JOB_NAME,envMode:"jobPerEnv",stage:"build",image:(0,n.getRunnerImage)("jobs-default"),needs:[],cache:f?(0,o.createJobCacheFromCacheConfigs)(e,f):undefined,variables:{...a!==null&&a!==void 0?a:{},...e.type==="component"?{...e.environment.envVars,...e.environment.jobOnlyVars.build.envVars}:{}},runnerVariables:{...d.RUNNER_BUILD_RESOURCE_VARIABLES,...u!==null&&u!==void 0?u:{},...(h=e.build.config.runnerVariables)!==null&&h!==void 0?h:{}},script:[...e.type==="component"?(0,c.componentContextNeedsBuildTimeDotEnv)(e)?(0,c.writeDotEnv)(e):[]:e.type==="workspace"?e.components.filter((e=>(0,c.componentContextNeedsBuildTimeDotEnv)(e))).flatMap((e=>(0,c.writeDotEnv)(e))):[],...e.type==="component"?(0,l.writeBuildInfo)(e):[],...(0,p.ensureNodeVersion)(e),`cd ${e.build.dir}`,...(0,i.ensureArray)(t)],artifacts:(0,s.createBuildJobArtifacts)(e)},m)};t.createAppBuildJob=createAppBuildJob},2820:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createArtifactsConfig=void 0;const r=a(1017);const createArtifactsConfig=(e,t,a)=>{var n,i,s,o;return t||a?{artifacts:{paths:[],...a,reports:{...a===null||a===void 0?void 0:a.reports,junit:[t===null||t===void 0?void 0:t.junit,Array.isArray((n=a===null||a===void 0?void 0:a.reports)===null||n===void 0?void 0:n.junit)&&((i=a===null||a===void 0?void 0:a.reports)===null||i===void 0?void 0:i.junit),typeof((s=a===null||a===void 0?void 0:a.reports)===null||s===void 0?void 0:s.junit)==="string"&&[(o=a===null||a===void 0?void 0:a.reports)===null||o===void 0?void 0:o.junit]].filter(Array.isArray).reduce(((t,a)=>[...t,...a.map((t=>(0,r.join)(e,t)))]),[])}}}:undefined};t.createArtifactsConfig=createArtifactsConfig},6354:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createBuildJobDefinition=void 0;const r=a(4058);const n=a(2497);const i=a(673);const s=a(1765);const createBuildJobDefinition=(e,t,a={})=>{var o,p,d,l;if(t.buildCommand===null)return undefined;const c=(0,r.getRunnerImage)("jobs-default");return{image:(o=t.jobImage)!==null&&o!==void 0?o:c,runnerVariables:s.NODE_RUNNER_BUILD_VARIABLES,cache:[...(p=a.cache)!==null&&p!==void 0?p:[],...(0,i.getAllCacheConfigsFromConfig)(e,t)],services:"jobServices"in t?t.jobServices:undefined,script:[...(d=a.prescript)!==null&&d!==void 0?d:[],...(0,n.ensureArray)(t.buildCommand),...(l=a.postscript)!==null&&l!==void 0?l:[]],jobTags:t.jobTags}};t.createBuildJobDefinition=createBuildJobDefinition},9366:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createWorkspaceBuildJobs=t.createComponentBuildJobs=void 0;const r=a(4986);const n=a(1724);const i=a(9641);const s=a(7038);const o=a(2786);const p=a(7801);const createComponentBuildJobs=(e,t)=>{var a;return[...t.appBuild&&(0,n.componentContextIsStandaloneBuild)(e)?[(0,p.createAppBuildJob)(e,t.appBuild)]:[],...(0,i.requiresDockerBuild)(e)?[(0,i.createDockerBuildJobBase)(e,{...t.dockerBuild,needs:[...(a=t.dockerBuild.needs)!==null&&a!==void 0?a:[],...t.appBuild&&(0,n.componentContextIsStandaloneBuild)(e)?[o.APP_BUILD_JOB_NAME]:(0,n.componentContextHasWorkspaceBuild)(e)?[{job:o.APP_BUILD_JOB_NAME,artifacts:true,workspaceName:e.build.workspaceName}]:[]]})]:[],...(0,r.sbomDeactivated)(e)?[]:[(0,s.createSbomBuildJob)(e)]]};t.createComponentBuildJobs=createComponentBuildJobs;const createWorkspaceBuildJobs=(e,t)=>t.appBuild?[(0,p.createAppBuildJob)(e,t.appBuild)]:[];t.createWorkspaceBuildJobs=createWorkspaceBuildJobs},9578:(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},8052:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.componentContextNeedsBuildTimeDotEnv=t.writeDotEnv=void 0;const r=a(3255);const n=a(2463);const i=a(7827);const s=a(8490);const writeDotEnv=e=>{const t=e.environment.envVars;const a=Object.entries(t).filter((([,e])=>!(0,r.isNil)(e))).filter((([e])=>!i.ALL_BUILD_VARIABLES.includes(e))).map((([e,t])=>`${e}=${(0,n.escapeForDotEnv)(t)}`)).join("\n");return(0,s.collapseableSection)("write-dotenv-"+e.name,"write dot env for "+e.name)([`cat <<EOF > ${e.build.dir}/.env\n${a}\nEOF`])};t.writeDotEnv=writeDotEnv;const componentContextNeedsBuildTimeDotEnv=e=>{var t;return((t=e.componentConfig.dotEnv)!==null&&t!==void 0?t:true)===true};t.componentContextNeedsBuildTimeDotEnv=componentContextNeedsBuildTimeDotEnv},340:function(e,t,a){"use strict";var r=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 n=a(1017);const i=a(673);const s=r(a(4035));const createJobCacheFromCacheConfigs=(e,t)=>{if(t.length===0)return undefined;const a=t.filter((e=>!("key"in e)));const r=t.filter((e=>"key"in e));const i=a.length>0?[{key:e.name+"-default",policy:"pull-push",paths:a.flatMap((t=>t.paths.map((a=>{var r;const i=t.pathMode==="absolute"?"":(r=t.baseDir)!==null&&r!==void 0?r:e.build.dir;return(0,n.join)(i,a)}))))}]:[];const o=r.map((({key:t,paths:a,policy:r,scope:i,pathMode:o,buildDir:p,...d})=>{var l;const c=o==="absolute"?"":p!==null&&p!==void 0?p:e.build.dir;const u=i==="global"?t:typeof t==="string"?(i==="buildDir"?(0,s.default)(c):e.name)+"-"+t:{...t,files:(l=t.files)===null||l===void 0?void 0:l.map((e=>o==="absolute"?e:(0,n.join)(c,e)))};return{key:u,policy:r!==null&&r!==void 0?r:"pull-push",paths:o==="absolute"?a:a===null||a===void 0?void 0:a.map((e=>(0,n.join)(c,e))),...d}}));return[...o,...i]};t.createJobCacheFromCacheConfigs=createJobCacheFromCacheConfigs;const createJobCacheFromConfig=(e,a)=>(0,t.createJobCacheFromCacheConfigs)(e,(0,i.getAllCacheConfigsFromConfig)(e,a));t.createJobCacheFromConfig=createJobCacheFromConfig},673:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getAllCacheConfigsFromConfig=void 0;const r=a(2497);const n=a(6673);const getAllCacheConfigsFromConfig=(e,t)=>[..."jobCache"in t?(0,n.transformLegacyJobCache)(t.jobCache):[],...(0,r.ensureArray)(t.cache),...e.type==="workspace"?e.components.flatMap((e=>{var t;return e.build.type!=="disabled"?(t=(0,r.ensureArray)(e.build.config.cache).map((t=>({...t,baseDir:e.build.dir}))))!==null&&t!==void 0?t:[]:[]})):[]];t.getAllCacheConfigsFromConfig=getAllCacheConfigsFromConfig},6673:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.transformLegacyJobCache=void 0;const r=a(2497);function transformLegacyJobCache(e){return(0,r.ensureArray)(e).map((e=>{var t,a;return{pathMode:"absolute",...e,key:(t=e.key)!==null&&t!==void 0?t:"default",paths:(a=e.paths)!==null&&a!==void 0?a:[]}}))}t.transformLegacyJobCache=transformLegacyJobCache},1637:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createCustomBuildJobs=void 0;const r=a(9641);const n=a(4466);const i=a(9366);const s=a(6354);const createCustomBuildJobs=e=>{const t=e.build.config;if(!(0,n.isOfBuildType)(t,"custom")){throw new Error("deploy config is not custom")}return(0,i.createComponentBuildJobs)(e,{appBuild:t.buildCommand!==null?(0,s.createBuildJobDefinition)(e,t):undefined,dockerBuild:{script:(0,r.getDockerBuildScriptWithBuiltInDockerFile)(e),variables:{}}})};t.createCustomBuildJobs=createCustomBuildJobs},1183:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createCustomJobs=void 0;const r=a(1637);const n=a(390);const createCustomJobs=e=>[...(0,n.createCustomTestJobs)(e),...(0,r.createCustomBuildJobs)(e)];t.createCustomJobs=createCustomJobs},390:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createCustomTestJobs=void 0;const r=a(2497);const n=a(2820);const i=a(340);const s=a(4466);const o={KUBERNETES_CPU_REQUEST:"0.45",KUBERNETES_MEMORY_REQUEST:"1Gi",KUBERNETES_MEMORY_LIMIT:"4Gi"};const createCustomTestJobs=e=>{var t,a,p,d,l,c,u,f,m,h,v,g,y,b,w;if(e.trigger==="taggedRelease"){return[]}const _=e.build.config;if(!(0,s.isOfBuildType)(_,"custom")){throw new Error("deploy config is not custom")}const S={variables:{APP_PATH:e.build.dir,...e.environment.jobOnlyVars.build.envVars},runnerVariables:o,services:_.jobServices,cache:(0,i.createJobCacheFromConfig)(e,_),stage:"test",needs:[],envMode:"none"};const N=_.audit?{name:"๐Ÿ›ก audit",...S,image:(a=(t=_.audit)===null||t===void 0?void 0:t.jobImage)!==null&&a!==void 0?a:_.jobImage,cache:undefined,script:[...(0,r.ensureArray)((p=_.audit)===null||p===void 0?void 0:p.command)],allow_failure:true,...(0,n.createArtifactsConfig)(e.build.dir,(d=_.audit)===null||d===void 0?void 0:d.artifactsReports,(l=_.audit)===null||l===void 0?void 0:l.artifacts)}:null;const C=_.lint?{name:"๐Ÿ‘ฎ lint",...S,image:(u=(c=_.lint)===null||c===void 0?void 0:c.jobImage)!==null&&u!==void 0?u:_.jobImage,script:[...(0,r.ensureArray)((f=_.lint)===null||f===void 0?void 0:f.command)],...(0,n.createArtifactsConfig)(e.build.dir,(m=_.lint)===null||m===void 0?void 0:m.artifactsReports,(h=_.lint)===null||h===void 0?void 0:h.artifacts)}:null;const O=_.test?{name:"๐Ÿงช test",...S,image:(g=(v=_.test)===null||v===void 0?void 0:v.jobImage)!==null&&g!==void 0?g:_.jobImage,script:[...(0,r.ensureArray)((y=_.test)===null||y===void 0?void 0:y.command)],...(0,n.createArtifactsConfig)(e.build.dir,(b=_.test)===null||b===void 0?void 0:b.artifactsReports,(w=_.test)===null||w===void 0?void 0:w.artifacts)}:null;return[N,C,O].filter(r.notNil)};t.createCustomTestJobs=createCustomTestJobs},9641:function(e,t,a){"use strict";var r=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 n=a(7147);const i=a(3255);const s=r(a(1017));const o=a(8483);const p=a(4963);const d=a(6320);const l=a(4058);const c=a(8490);const u=a(340);const f={KUBERNETES_CPU_REQUEST:"0.45",KUBERNETES_MEMORY_REQUEST:"1Gi",KUBERNETES_MEMORY_LIMIT:"2Gi"};const getDockerImageVariables=e=>{var t;const a=(t=e.deploy)===null||t===void 0?void 0:t.config;return{...(0,o.isOfDeployType)(a,"google-cloudrun")?{DOCKER_REGISTRY:(0,p.getArtifactsRegistryHost)(e),DOCKER_IMAGE:(0,p.getArtifactsRegistryImageName)(e),DOCKER_CACHE_IMAGE:(0,p.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 a=(t=e.deploy)===null||t===void 0?void 0:t.config;return(0,o.isOfDeployType)(a,"kubernetes","google-cloudrun","dockerTag")||(0,o.isOfDeployType)(a,"custom")&&a.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,a;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?(a=e.docker.additionsEnd)===null||a===void 0?void 0:a.join("\n"):undefined}};const getDockerBuildVariables=e=>{var a;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&&((a=e.build.config.docker)===null||a===void 0?void 0:a.buildContextLocation)==="component"?e.build.dir:".",...(0,t.getDockerImageVariables)(e)}};t.getDockerBuildVariables=getDockerBuildVariables;t.DOCKER_BUILD_JOB_NAME="๐Ÿ”จ docker";const getDockerJobBaseProps=()=>({image:(0,l.getRunnerImage)("docker-build"),services:[{name:"docker:24.0.6-dind",command:["--tls=false","--registry-mirror=https://mirror.gcr.io"]}],variables:{},runnerVariables:getDockerBuildRunnerVariables()});t.getDockerJobBaseProps=getDockerJobBaseProps;const createDockerBuildJobBase=(e,{script:a,cache:r,...n})=>(0,i.merge)({name:t.DOCKER_BUILD_JOB_NAME,envMode:"jobPerEnv",stage:"build",cache:r?(0,u.createJobCacheFromCacheConfigs)(e,r):undefined,...(0,t.getDockerJobBaseProps)(),script:a||[]},{variables:(0,t.getDockerBuildVariables)(e),runnerVariables:{...f,...getDockerBuildRunnerVariables()}},n);t.createDockerBuildJobBase=createDockerBuildJobBase;const gitlabDockerLogin=e=>e.deploy&&(0,o.isOfDeployType)(e.deploy.config,"google-cloudrun")?[...(0,d.gcloudServiceAccountLoginCommands)(e),`gcloud auth configure-docker ${(0,p.getArtifactsRegistryHost)(e)}`]:["docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY"];t.gitlabDockerLogin=gitlabDockerLogin;const m={meteor:"ensureMeteorDockerfile",node:"ensureNodeDockerfile",nginx:"ensureNginxDockerfile",custom:null};const getDockerBuildScriptWithBuiltInDockerFile=(e,a)=>{var r;const n="docker"in e.build.config&&e.build.config.docker&&"type"in e.build.config.docker?(r=e.build.config.docker)===null||r===void 0?void 0:r.type:a;return(0,t.getDockerBuildDefaultScript)(e,n?m[n]:null)};t.getDockerBuildScriptWithBuiltInDockerFile=getDockerBuildScriptWithBuiltInDockerFile;const getDockerBuildDefaultScript=(e,a)=>[a!==null&&a!==void 0?a:undefined,...(0,c.collapseableSection)("docker-login","Docker Login")((0,t.gitlabDockerLogin)(e)),...(0,c.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,c.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,n.existsSync)(s.default.join(e.build.dir,"Dockerfile"));t.hasDockerfile=hasDockerfile},7862:function(e,t,a){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,a,r){if(r===undefined)r=a;var n=Object.getOwnPropertyDescriptor(t,a);if(!n||("get"in n?!t.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return t[a]}}}Object.defineProperty(e,r,n)}:function(e,t,a,r){if(r===undefined)r=a;e[r]=t[a]});var n=this&&this.__exportStar||function(e,t){for(var a in e)if(a!=="default"&&!Object.prototype.hasOwnProperty.call(t,a))r(t,e,a)};Object.defineProperty(t,"__esModule",{value:true});t.WORKSPACE_BUILD_TYPES=t.BUILD_TYPES=void 0;const i=a(1183);const s=a(5734);const o=a(8513);n(a(5734),t);n(a(4466),t);t.BUILD_TYPES={node:{jobs:s.createNodeJobs,defaults:()=>({buildCommand:"yarn build",startCommand:"yarn start",artifactsPaths:["dist",".next"]})},"node-static":{jobs:s.createNodeJobs,defaults:()=>({buildCommand:"yarn build",artifactsPaths:["dist"]})},storybook:{jobs:s.createStorybookJobs,defaults:()=>({buildCommand:["yarn build-storybook --quiet -o ./dist"],artifactsPaths:["dist"]})},meteor:{jobs:s.createMeteorJobs,defaults:()=>({startCommand:"node main.js",artifactsPaths:["dist"]})},custom:{jobs:i.createCustomJobs,defaults:()=>({artifactsPaths:["dist"]})},rails:{jobs:o.createRailsJobs,defaults:()=>({cnbBuilder:{image:"heroku/builder:24",packVersion:"0.36.4"}})}};t.WORKSPACE_BUILD_TYPES={node:{jobs:s.createNodeJobs,defaults:()=>({buildCommand:"yarn build",lint:{command:"yarn lint"},test:{command:"yarn test"}})}}},8530:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createNodeDockerJobDefinition=t.createNodeBuildJobDefinition=t.createNodeBuildJobs=void 0;const r=a(1724);const n=a(9366);const i=a(6354);const s=a(9641);const o=a(2026);const p=a(5043);const createNodeBuildJobs=e=>{if(e.type==="workspace"){return(0,n.createWorkspaceBuildJobs)(e,{appBuild:(0,t.createNodeBuildJobDefinition)(e)})}return(0,n.createComponentBuildJobs)(e,{appBuild:(0,r.componentContextIsStandaloneBuild)(e)?(0,t.createNodeBuildJobDefinition)(e):undefined,dockerBuild:(0,t.createNodeDockerJobDefinition)(e)})};t.createNodeBuildJobs=createNodeBuildJobs;const createNodeBuildJobDefinition=e=>{const t=e.build.config;const a=(0,p.getYarnInstall)(e);return(0,i.createBuildJobDefinition)(e,t,{prescript:a,cache:(0,o.getNodeCache)(e)})};t.createNodeBuildJobDefinition=createNodeBuildJobDefinition;const createNodeDockerJobDefinition=e=>{var t,a;const r=e.build.buildType==="node-static"||e.build.buildType==="storybook"?"nginx":"node";return{script:(0,s.getDockerBuildScriptWithBuiltInDockerFile)(e,r),cache:[...(0,o.getYarnCache)(e,"pull")],variables:{DOCKER_COPY_AND_INSTALL_APP:(0,p.getDockerAppCopyAndBuildScript)(e),DOCKER_COPY_WORKSPACE_FILES:(a=(t=e.packageManagerInfo)===null||t===void 0?void 0:t.pathsToCopyInDocker.map((e=>`COPY --chown=node:node ${e} /app/${e}`)))===null||a===void 0?void 0:a.join("\n")}}};t.createNodeDockerJobDefinition=createNodeDockerJobDefinition},2026:function(e,t,a){"use strict";var r=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 n=a(3255);const i=a(1017);const s=r(a(4035));const getYarnCache=(e,t="pull-push")=>{const a=e.type==="component"&&e.packageManagerInfo.componentIsInWorkspace;return[{scope:a?"global":"buildDir",pathMode:a?"absolute":"relative",key:"yarn",policy:t,paths:[".yarn"]}]};t.getYarnCache=getYarnCache;const getNodeModulesCache=(e,t="pull-push")=>{var a;const r=e.type==="component"&&e.packageManagerInfo.componentIsInWorkspace;return[{scope:"global",pathMode:"absolute",key:r?"node-modules-workspace":(0,s.default)(e.build.dir)+"-node-modules",policy:t,paths:[...r?(0,n.uniq)(["node_modules",...(a=e.packageManagerInfo.workspaces.map((e=>(0,i.join)(e.location,"node_modules"))))!==null&&a!==void 0?a:[]]):[(0,i.join)(e.build.dir,"node_modules")]]}]};t.getNodeModulesCache=getNodeModulesCache;const getNodeCache=(e,a="pull-push")=>[...(0,t.getYarnCache)(e,a),...(0,t.getNodeModulesCache)(e,a)];t.getNodeCache=getNodeCache},1765:(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"}},5734:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createMeteorJobs=t.createStorybookJobs=t.createNodeJobs=void 0;const r=a(8530);const n=a(1089);const i=a(8630);const createNodeJobs=e=>[...(0,i.createNodeTestJobs)(e),...(0,r.createNodeBuildJobs)(e)];t.createNodeJobs=createNodeJobs;const createStorybookJobs=e=>[...(0,r.createNodeBuildJobs)(e)];t.createStorybookJobs=createStorybookJobs;const createMeteorJobs=e=>[...(0,i.createNodeTestJobs)(e),...(0,n.createMeteorBuildJobs)(e)];t.createMeteorJobs=createMeteorJobs},1089:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createMeteorBuildJobs=void 0;const r=a(4058);const n=a(9366);const i=a(9641);const s=a(4466);const o=a(2026);const p=a(5043);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 createMeteorBuildJobs=e=>{const t=e.build.config;if(!(0,s.isOfBuildType)(t,"meteor")){throw new Error("deploy config is not meteor")}const a=(0,p.getYarnInstall)(e);return(0,n.createComponentBuildJobs)(e,{appBuild:t.buildCommand!==null?{cache:[...(0,o.getNodeCache)(e),...getMeteorCache(e)],image:(0,r.getRunnerImage)("jobs-meteor"),variables:{METEOR_DISABLE_OPTIMISTIC_CACHING:"1"},script:[...a,'echo "add healthcheck package"',"meteor add panter:healthroute --allow-superuser","meteor add qualia:prod-shell --allow-superuser",'TOOL_NODE_FLAGS="--max_old_space_size=3584 --min_semi_space_size=8 --max_semi_space_size=256 --optimize_for_size" meteor build ./dist --architecture os.linux.x86_64 --allow-superuser --server-only --directory',"cp ./__build_info.json ./dist/bundle/programs/server"]}:undefined,dockerBuild:{script:(0,i.getDockerBuildScriptWithBuiltInDockerFile)(e,"meteor"),variables:{METEOR_INSTALL_SCRIPTS:t.installScripts?"true":""}}})};t.createMeteorBuildJobs=createMeteorBuildJobs},8630:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createNodeTestJobs=void 0;const r=a(4058);const n=a(1724);const i=a(2497);const s=a(2820);const o=a(2026);const p=a(1765);const d=a(5043);const l=a(340);const createNodeTestJobs=e=>{var t,a,c,u,f,m,h,v,g,y,b,w,_,S,N,C,O,A;if(e.trigger==="taggedRelease"){return[]}if(e.type==="component"&&!(0,n.componentContextIsStandaloneBuild)(e)){return[]}const D=(0,r.getRunnerImage)("jobs-default");const k={variables:{APP_PATH:e.build.dir,...e.type==="component"?{...e.environment.jobOnlyVars.build.envVars}:{}},runnerVariables:p.NODE_RUNNER_BUILD_VARIABLES,stage:"test",needs:[],envMode:"none"};const T=e.build.config;const I=(0,d.getYarnInstall)(e);const P=T.audit!==false?{name:"๐Ÿ›ก audit",...k,image:(a=(t=T.audit)===null||t===void 0?void 0:t.jobImage)!==null&&a!==void 0?a:D,cache:undefined,script:[`cd ${e.build.dir}`,...(u=(0,i.ensureArrayOrNull)((c=T.audit)===null||c===void 0?void 0:c.command))!==null&&u!==void 0?u:[e.packageManagerInfo.isClassic?"yarn audit":"yarn npm audit --environment production"]],allow_failure:true,...(0,s.createArtifactsConfig)(e.build.dir,(f=T.audit)===null||f===void 0?void 0:f.artifactsReports,(m=T.audit)===null||m===void 0?void 0:m.artifacts)}:null;const R=T.lint!==false?{name:"๐Ÿ‘ฎ lint",...k,image:(v=(h=T.lint)===null||h===void 0?void 0:h.jobImage)!==null&&v!==void 0?v:D,cache:(0,l.createJobCacheFromCacheConfigs)(e,(0,o.getNodeCache)(e)),script:[...(0,d.ensureNodeVersion)(e),`cd ${e.build.dir}`,...I,...(y=(0,i.ensureArrayOrNull)((g=T.lint)===null||g===void 0?void 0:g.command))!==null&&y!==void 0?y:["yarn lint"]],...(0,s.createArtifactsConfig)(e.build.dir,(b=T.lint)===null||b===void 0?void 0:b.artifactsReports,(w=T.lint)===null||w===void 0?void 0:w.artifacts)}:null;const L=T.test!==false?{name:"๐Ÿงช test",...k,image:(S=(_=T.test)===null||_===void 0?void 0:_.jobImage)!==null&&S!==void 0?S:(0,r.getRunnerImage)("jobs-testing-chrome"),cache:(0,l.createJobCacheFromCacheConfigs)(e,(0,o.getNodeCache)(e)),script:[...(0,d.ensureNodeVersion)(e),`cd ${e.build.dir}`,...I,...(C=(0,i.ensureArrayOrNull)((N=T.test)===null||N===void 0?void 0:N.command))!==null&&C!==void 0?C:["yarn test"]],...(0,s.createArtifactsConfig)(e.build.dir,(O=T.test)===null||O===void 0?void 0:O.artifactsReports,(A=T.test)===null||A===void 0?void 0:A.artifacts)}:null;return[P,R,L].filter(i.notNil)};t.createNodeTestJobs=createNodeTestJobs},5043:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.getDockerAppCopyAndBuildScript=t.getYarnInstall=t.ensureNodeVersion=void 0;const r=a(2376);const n=a(2497);const i=a(8490);const s=`yarn install --frozen-lockfile`;const o=`yarn workspaces focus --production && yarn rebuild`;const getYarnInstallCommand=e=>{if(e.packageManagerInfo.isClassic){return s}return`yarn install --immutable`};const ensureNodeVersion=e=>(0,i.collapseableSection)("nodeinstall","Ensure node version")(["if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi","if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi"]);t.ensureNodeVersion=ensureNodeVersion;const getYarnInstall=(e,a)=>{const r=e.type!=="workspace"&&e.build.type!=="disabled"&&"postInstall"in e.build.config?e.build.config.postInstall:null;return[...(0,t.ensureNodeVersion)(e),...(0,i.collapseableSection)("yarninstall","Yarn install")([getYarnInstallCommand(e