UNPKG

@omer-x/buttler

Version:

automates CI/CD workflows using Docker and GitHub webhooks

1 lines 9.64 kB
"use strict";exports.id=54,exports.ids=[54],exports.modules={38102:(e,a,t)=>{t.d(a,{A:()=>i});var r=t(96715);async function i(e,a,t){return await e.query.buildImages.findMany({columns:(0,r.G)(t),where:(e,{eq:t})=>t(e.serviceId,a),orderBy:(e,{desc:a})=>[a(e.createdAt)]})}},48930:(e,a,t)=>{t.d(a,{A:()=>n});var r=t(94634),i=t(31465);async function n(e,a,t){return(await e.update(i.$).set({...t,updatedAt:new Date().toISOString()}).where((0,r.eq)(i.$.id,a)).returning()).shift()}},49543:(e,a,t)=>{t.d(a,{p:()=>D});var r=t(66926),i=t(32190),n=t(73802),s=t(59643),d=t(51455),c=t.n(d),o=t(76760),l=t.n(o),u=t(12284);function f(e){return l().resolve(u.A.CURRENT_WORKING_DIRECTORY,"storage/repos",e)}async function w(e,a){await p(a);let t=f(a);await c().mkdir(t,{recursive:!0});let r=(0,n.Ay)({baseDir:t,binary:"git",maxConcurrentProcesses:6});return await r.clone(e,t,{"--depth":"1","--single-branch":null,"--branch":"main"}),await r.cwd(t),await r.fetch(["--tags"]),t}async function p(e){await c().rm(f(e),{recursive:!0,force:!0})}var y=t(37144),A=t(77598),v=t.n(A),b=t(29100);async function g(e,a){let[t]=await e.insert(b.r).values({id:v().randomUUID(),...a}).returning({id:b.r.id});return t}var m=t(94634);async function I(e,a,t){return(await e.update(b.r).set(t).where((0,m.eq)(b.r.id,a)).returning()).shift()}var h=t(48930),O=t(8774),S=t(58986);async function D(e){let a=await g(y.A,{serviceId:e.id});return(0,i.after)(async()=>{let t=(0,O.E)(e.providers,"containerId").filter(e=>null!==e),i=await (0,s.VS)(`build-${a.id}`,t);try{let t=await w(e.repo,e.id),n=(0,O.r)(e.providers.map(a=>(0,S.N)(e.name,a.name,a.repo,a.variables))),d=await (0,s._w)(a.id,t,{...n,...e.environmentVariables},i.id,"yes"===u.A.DEBUG_MODE);if(await p(e.id),d?await I(y.A,a.id,{status:"ready"}):await I(y.A,a.id,{status:"failed",errorCode:"BUILD_FAILED"}),d&&e.containerId){await (0,s.od)(e.containerId),await (0,h.A)(y.A,e.id,{status:"idle",containerId:null,imageId:null});let t=await (0,s.g$)((0,r.kW)(e.name),a.id,{...n,...e.environmentVariables},e.ports,e.volumes,[...e.networkIds,...e.providers.map(e=>e.networkIds).flat()]);await (0,h.A)(y.A,e.id,{status:"running",containerId:t,imageId:a.id})}}catch(e){e instanceof n.XS&&e.message.includes("Repository not found")?await I(y.A,a.id,{status:"failed",errorCode:"REPO_NOT_FOUND"}):await I(y.A,a.id,{status:"failed"})}finally{await (0,s.Lp)(i.id,t)}}),a}},58986:(e,a,t)=>{t.d(a,{N:()=>i});var r=t(66926);function i(e,a,t,i){switch(t){case"postgres":return{POSTGRES_HOST:(0,r.kW)(a),POSTGRES_PORT:"5432",POSTGRES_USER:"postgres",POSTGRES_PASSWORD:i.POSTGRES_PASSWORD,POSTGRES_DATABASE:(0,r.LW)(e)};case"redis":return{REDIS_HOST:(0,r.kW)(a),REDIS_PORT:"6379"};default:return{}}}},86054:(e,a,t)=>{t.d(a,{x_:()=>V,jq:()=>M,vt:()=>x,zr:()=>W,PE:()=>X,ni:()=>C,ds:()=>L,yo:()=>G});var r=t(67218);t(79130);var i=t(77598),n=t.n(i),s=t(66926),d=t(39916),c=t(49543),o=t(59643),l=t(58986),u=t(37144),f=t(37021),w=t(20072),p=t(31465);let y=(0,f.r)(p.$,{id:e=>e.id.readonly().describe("Unique identifier of the service"),name:e=>e.name.describe("Name of the service"),createdAt:e=>e.createdAt.readonly().describe("Creation date of the service as an ISO 8601 date string"),updatedAt:e=>e.updatedAt.readonly().describe("Modification date of the service as an ISO 8601 date string")}).extend({environmentVariables:w.Ay.record(w.Ay.string(),w.Ay.string()),ports:w.Ay.record(w.Ay.string(),w.Ay.string()),volumes:w.Ay.record(w.Ay.string(),w.Ay.string()),networkIds:w.Ay.string().array(),providers:w.Ay.object({id:w.Ay.string(),name:w.Ay.string(),repo:w.Ay.string(),containerId:w.Ay.string().nullable(),networkIds:w.Ay.string().array(),variables:w.Ay.record(w.Ay.string(),w.Ay.string())}).array(),clients:w.Ay.object({id:w.Ay.string(),name:w.Ay.string()}).array()});y.required().describe("Represents a service running in the system");let A=y.omit({id:!0,environmentVariables:!0,ports:!0,volumes:!0,networkIds:!0,providers:!0,clients:!0,createdAt:!0,updatedAt:!0}).describe("Data Transfer Object for creating a new service"),v=A.partial().omit({}).describe("Data Transfer Object for updating an existing service");var b=t(76356);async function g(e,a){let[t]=await e.insert(p.$).values({id:crypto.randomUUID(),...a}).returning({id:p.$.id});return t}var m=t(42389),I=t(86398);async function h(e,a){let[t]=await e.insert(I.o).values({id:n().randomUUID(),...a}).returning({id:I.o.id});return t}(0,f.r)(I.o,{id:e=>e.id.readonly().describe("Unique identifier of the volume"),serviceId:e=>e.serviceId.describe("Service ID of the volume"),containerPath:e=>e.containerPath.describe("Container path of the volume")}).omit({id:!0}).describe("Data Transfer Object for creating a new volume");var O=t(94634);async function S(e,a){return(await e.delete(p.$).where((0,O.eq)(p.$.id,a)).returning({id:p.$.id})).shift()}var D=t(99710);async function R(e,a,t){await e.delete(D.b).where((0,O.Uo)((0,O.eq)(D.b.clientId,a),(0,O.eq)(D.b.providerId,t)))}var T=t(38102),k=t(86167),E=t(51707),_=t(78444);async function P(e,a,t){let r=[(0,O.eq)(_.r.serviceId,a)];Object.keys(t).length&&r.push((0,O.KL)(_.r.key,Object.keys(t))),await e.delete(_.r).where((0,O.Uo)(...r)),Object.keys(t).length&&await e.insert(_.r).values(Object.keys(t).map(e=>({serviceId:a,key:e,value:t[e]}))).onConflictDoUpdate({target:[_.r.serviceId,_.r.key],set:{value:(0,E.ll)`excluded.value`}})}var U=t(13057);async function j(e,a,t){let r=[(0,O.eq)(U.X.serviceId,a)];Object.keys(t).length&&r.push((0,O.KL)(U.X.external,Object.keys(t).map(e=>parseInt(e)))),await e.delete(U.X).where((0,O.Uo)(...r)),Object.keys(t).length&&await e.insert(U.X).values(Object.keys(t).map(e=>({serviceId:a,external:parseInt(e),internal:parseInt(t[e])}))).onConflictDoUpdate({target:[U.X.serviceId,U.X.external],set:{internal:(0,E.ll)`excluded.internal`}})}var $=t(48930);function q(e){return Array.from(e.keys()).reduce((a,t)=>({...a,[t.replace(/\[\]$/,"").replace(/-([a-z])/g,(e,a)=>a.toUpperCase())]:t.endsWith("[]")?e.getAll(t):e.get(t)}),{})}var N=t(8774);async function x(e){let a=A.parse(q(e));try{await u.A.transaction(async e=>{let t=await g(e,a);if("database"===a.kind){let r=[],i=[];if("postgres"===a.repo){r.push(["POSTGRES_PASSWORD",n().randomUUID()]);let a=await h(e,{containerPath:"/var/lib/postgresql/data",serviceId:t.id});await (0,o.pb)(a.id)}if("mysql"===a.repo){r.push(["MYSQL_ROOT_PASSWORD","example"]),i.push(["3306","3306"]);let a=await h(e,{containerPath:"/var/lib/mysql",serviceId:t.id});await (0,o.pb)(a.id)}if("mongo"===a.repo){r.push(["MONGO_INITDB_ROOT_USERNAME","root"]),r.push(["MONGO_INITDB_ROOT_PASSWORD","example"]),i.push(["27017","27017"]);let a=await h(e,{containerPath:"/data/db",serviceId:t.id});await (0,o.pb)(a.id)}if("redis"===a.repo){r.push(["REDIS_ARGS","--appendonly yes"]);let a=await h(e,{containerPath:"/data",serviceId:t.id});await (0,o.pb)(a.id)}r.length&&await P(e,t.id,Object.fromEntries(r)),i.length&&await j(e,t.id,Object.fromEntries(i));let s=await (0,b.A)(e,t.id,"provider");await (0,o.VS)(s.id)}})}catch(e){if(e&&"object"==typeof e&&"message"in e&&"Transaction function cannot return a promise"===e.message);else throw e}(0,d.redirect)("/services")}async function G(e,a,t){let r=JSON.parse(t.get("env")),i=JSON.parse(t.get("ports")),n=v.omit({repo:!0}).parse(q(t)),s=await (0,k.A)(u.A,e);if(!s)throw Error("Invalid Service");s.containerId&&(await (0,o.od)(s.containerId),n.containerId=null,n.imageId=null),"running"===s.status&&(n.status="idle");try{await u.A.transaction(async a=>{await (0,$.A)(a,e,n),await P(a,e,r),await j(a,e,i)})}catch(e){if(e&&"object"==typeof e&&"message"in e&&"Transaction function cannot return a promise"===e.message);else throw e}(0,d.redirect)("/services")}async function W(e,a){let t=await (0,k.A)(u.A,e);t&&await Promise.all(t.networkIds.map(e=>(0,o.Lp)(e))),await S(u.A,e),(0,d.redirect)("/services")}async function C(e,a){let t=await (0,k.A)(u.A,e);if(!t)throw Error("Invalid Service");let r=async()=>{let a=(await (0,T.A)(u.A,e,["id","status","createdAt"])).filter(e=>"ready"===e.status);return a.reduce((e,a)=>{let t=new Date(e.createdAt).getTime();return new Date(a.createdAt).getTime()>t?a:e},a[0]).id},i=async()=>{switch(t.kind){case"git":return await r();case"database":return await (0,o.ZP)(t.repo),t.repo}},n=await i(),c=(0,N.r)(t.providers.map(e=>(0,l.N)(t.name,e.name,e.repo,e.variables))),f=await (0,o.g$)((0,s.kW)(t.name),n,{...c,...t.environmentVariables},t.ports,t.volumes,[...t.networkIds,...t.providers.map(e=>e.networkIds).flat()]);await (0,$.A)(u.A,t.id,{status:"running",containerId:f,imageId:n}),(0,d.redirect)(`/services/${e}`)}async function L(e,a,t){if(a)try{await (0,o.od)(a)}catch{}finally{await (0,$.A)(u.A,e,{status:"idle",containerId:null,imageId:null})}(0,d.redirect)(`/services/${e}`)}async function M(e,a){let t=await (0,k.A)(u.A,e);t&&await (0,c.p)(t),(0,d.redirect)(`/services/${e}`)}async function V(e,a,t){await (0,m.A)(u.A,e,a),(0,d.redirect)(`/services/${e}/databases`)}async function X(e,a,t){await R(u.A,e,a),(0,d.redirect)(`/services/${e}/databases`)}(0,t(17478).D)([x,G,W,C,L,M,V,X]),(0,r.A)(x,"40f22e54ba9a08711268b385da3f68ae3b90044a4a",null),(0,r.A)(G,"7065b7c773ba57e5e1fe201cc244dbe22793e8b678",null),(0,r.A)(W,"60cfb4f24c6db9621c176bf670f1b1417fb2523bcd",null),(0,r.A)(C,"6032cd5870eab2b5f6fccd7b003517b968abf89e81",null),(0,r.A)(L,"70b08ba9bf2e80865785fcbf027063fa6bef35601a",null),(0,r.A)(M,"60fb82210a2086ee63ca1943b5fb73c633928dbad4",null),(0,r.A)(V,"702d4e84f562d777c4dfb904e7f15c6952f8e1025b",null),(0,r.A)(X,"705a644af0a2f680f8b27c77708f8d52eeedd813f6",null)},96715:(e,a,t)=>{t.d(a,{G:()=>r});function r(e){if(e.length)return e.reduce((e,a)=>({...e,[a]:!0}),{})}}};