@omer-x/buttler
Version:
automates CI/CD workflows using Docker and GitHub webhooks
1 lines • 12.9 kB
JavaScript
(()=>{var e={};e.id=609,e.ids=[609],e.modules={5894:(e,t,r)=>{"use strict";r.r(t),r.d(t,{patchFetch:()=>v,routeModule:()=>d,serverHooks:()=>f,workAsyncStorage:()=>p,workUnitAsyncStorage:()=>m});var n={};r.r(n),r.d(n,{POST:()=>u});var i=r(96559),s=r(48088),a=r(37719),o=r(22989),l=r(37144),c=r(67262);async function u(e){for(let e of(await (0,c.A)(l.A,["id"])))await (0,o._)(e.id);return Response.json({success:!0})}let d=new i.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/db/backup/route",pathname:"/api/db/backup",filename:"route",bundlePath:"app/api/db/backup/route"},resolvedPagePath:"/home/runner/work/buttler/buttler/src/app/api/db/backup/route.ts",nextConfigOutput:"standalone",userland:n}),{workAsyncStorage:p,workUnitAsyncStorage:m,serverHooks:f}=d;function v(){return(0,a.patchFetch)({workAsyncStorage:p,workUnitAsyncStorage:m})}},8774:(e,t,r)=>{"use strict";function n(e,t){return e.map(e=>e[t])}function i(e){return e.reduce((e,t)=>Object.assign(e,t),{})}r.d(t,{E:()=>n,r:()=>i})},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},12284:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(70762);let i=n.Ay.object({CURRENT_WORKING_DIRECTORY:n.Ay.string().default(process.cwd()),DEBUG_MODE:n.Ay.enum(["yes"]).optional()}).parse(process.env)},13057:(e,t,r)=>{"use strict";r.d(t,{X:()=>c,z:()=>u});var n=r(56013),i=r(89283),s=r(70932),a=r(77301),o=r(28234),l=r(31465);let c=(0,o.D)("ports",{serviceId:(0,i.Qq)().notNull().references(()=>l.$.id,{onDelete:"cascade",onUpdate:"restrict"}),external:(0,s.nd)({mode:"number"}).notNull(),internal:(0,s.nd)({mode:"number"}).notNull()},e=>({pk:(0,a.ie)({columns:[e.serviceId,e.external]})})),u=(0,n.K1)(c,({one:e})=>({service:e(l.$,{fields:[c.serviceId],references:[l.$.id]})}))},22989:(e,t,r)=>{"use strict";r.d(t,{_:()=>c});var n=r(66926),i=r(59643),s=r(37144),a=r(86167),o=r(50277);async function l(e,t,r,n){let i=await new o.wc({email:e,password:t}).ready,s=Buffer.from(n);return await i.upload({name:r,size:s.length},s).complete}async function c(e){let t=await s.A.query.globalVariables.findMany({}),r=t.find(e=>"mega-username"===e.key)?.value,o=t.find(e=>"mega-password"===e.key)?.value;if(!r||!o)throw Error("Mega username or password is missing!");let c=await (0,a.A)(s.A,e);if(c&&"database"===c.kind&&c.containerId)for(let e of c.clients){let t=(0,n.LW)(e.name),s=await (0,i.Nc)(c.containerId,["pg_dump","-U","postgres",t]),a=new Date().toISOString(),u=`${t}_${a.slice(0,10)}_${a.slice(11,19)}.sql`;await l(r,o,u,s)}}},27910:e=>{"use strict";e.exports=require("stream")},28354:e=>{"use strict";e.exports=require("util")},29021:e=>{"use strict";e.exports=require("fs")},29100:(e,t,r)=>{"use strict";r.d(t,{h:()=>u,r:()=>c});var n=r(51707),i=r(56013),s=r(89283),a=r(8030),o=r(28234),l=r(31465);let c=(0,o.D)("build_images",{id:(0,s.Qq)().primaryKey(),serviceId:(0,s.Qq)().notNull().references(()=>l.$.id,{onDelete:"restrict",onUpdate:"restrict"}),status:(0,s.Qq)({enum:["pending","canceled","failed","ready"]}).notNull().default("pending"),errorCode:(0,s.Qq)({enum:["REPO_NOT_FOUND","BUILD_FAILED"]}),createdAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`),updatedAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`)},e=>({createdAtIdx:(0,a.Pe)("build_image_created_at_index").on(e.createdAt)})),u=(0,i.K1)(c,({one:e})=>({service:e(l.$,{fields:[c.serviceId],references:[l.$.id]})}))},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31465:(e,t,r)=>{"use strict";r.d(t,{$:()=>f,d:()=>v});var n=r(51707),i=r(56013),s=r(89283),a=r(8030),o=r(28234),l=r(29100),c=r(78444),u=r(39362),d=r(13057),p=r(99710),m=r(86398);let f=(0,o.D)("services",{id:(0,s.Qq)().primaryKey(),kind:(0,s.Qq)({enum:["git","database"]}).notNull(),name:(0,s.Qq)().notNull(),repo:(0,s.Qq)().notNull(),status:(0,s.Qq)({enum:["idle","running"]}).notNull().default("idle"),imageId:(0,s.Qq)(),containerId:(0,s.Qq)(),createdAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`),updatedAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`)},e=>({createdAtIdx:(0,a.Pe)("service_created_at_index").on(e.createdAt)})),v=(0,i.K1)(f,({many:e})=>({environmentVariables:e(c.r),ports:e(d.X),buildImages:e(l.r),volumes:e(m.o),networks:e(u.o),providerlinks:e(p.b,{relationName:"client"}),clientLinks:e(p.b,{relationName:"provider"})}))},33873:e=>{"use strict";e.exports=require("path")},37144:(e,t,r)=>{"use strict";r.d(t,{A:()=>k});var n={};r.r(n),r.d(n,{buildImages:()=>f.r,environmentVariables:()=>p.r,globalVariables:()=>u.v,networks:()=>w.o,ports:()=>m.X,relationsOfBuildImages:()=>f.h,relationsOfEnvironmentVariables:()=>p.z,relationsOfNetworks:()=>w.e,relationsOfPorts:()=>m.z,relationsOfServiceLinks:()=>g.n,relationsOfServices:()=>d.d,relationsOfVolumes:()=>v.a,serviceLinks:()=>g.b,services:()=>d.$,volumes:()=>v.o});var i=r(76760),s=r.n(i),a=r(87550),o=r.n(a),l=r(88314),c=r(12284),u=r(86598),d=r(31465),p=r(78444),m=r(13057),f=r(29100),v=r(86398),w=r(39362),g=r(99710);let b=new(o())(s().resolve(c.A.CURRENT_WORKING_DIRECTORY,"buttler.db")),k=(0,l.f)({schema:n,client:b,casing:"snake_case"})},39362:(e,t,r)=>{"use strict";r.d(t,{e:()=>l,o:()=>o});var n=r(56013),i=r(89283),s=r(28234),a=r(31465);let o=(0,s.D)("networks",{id:(0,i.Qq)().primaryKey(),kind:(0,i.Qq)({enum:["provider","custom"]}).notNull(),serviceId:(0,i.Qq)().notNull().references(()=>a.$.id,{onDelete:"cascade",onUpdate:"restrict"})}),l=(0,n.K1)(o,({one:e})=>({service:e(a.$,{fields:[o.serviceId],references:[a.$.id]})}))},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:e=>{"use strict";e.exports=require("crypto")},55591:e=>{"use strict";e.exports=require("https")},58624:(e,t,r)=>{"use strict";function n(e,t,r){return e.reduce((e,n)=>({...e,[n[t]]:n[r]}),{})}r.d(t,{A:()=>n})},59643:(e,t,r)=>{"use strict";r.d(t,{B8:()=>w,Lp:()=>k,Nc:()=>v,VS:()=>b,ZP:()=>d,_w:()=>u,aH:()=>p,g$:()=>m,od:()=>f,pb:()=>g});var n=r(76760),i=r.n(n),s=r(66400),a=r.n(s),o=r(49629);let l=new(a()),c={};function u(e,t,r,n,s){let a=i().join(t,"Dockerfile"),u=o.pack(i().dirname(a));return new Promise((t,i)=>{l.buildImage(u,{t:`${e}:latest`,buildargs:r,networkmode:n},(r,n)=>r?i(r):n?void(n.on("data",e=>{if(!s)return;let t=JSON.parse(e.toString("utf-8").trim());"stream"in t&&console.log(t.stream)}),n.on("end",()=>{l.getImage(`${e}:latest`).inspect().then(()=>t(!0)).catch(()=>t(!1))}),n.on("error",e=>{"UPDATE"===e?t(!1):i(e)}),c[e]=n):i(Error("no stream")))})}function d(e){return new Promise((t,r)=>{l.pull(`${e}:latest`,(e,n)=>{if(e)return r(e);l.modem.followProgress(n,(e,n)=>{if(e)return r(e);t(n)})})})}async function p(e){try{let t=l.getImage(e);await t.remove()}catch{}}async function m(e,t,r,n,i,s){let a=await l.createContainer({name:e,Image:t,Env:Object.entries(r).map(([e,t])=>`${e}=${t}`),HostConfig:{PortBindings:Object.fromEntries(Object.entries(n).map(([e,t])=>[`${t}/tcp`,[{HostPort:e}]])),RestartPolicy:{Name:"always"},Binds:Object.entries(i).map(([e,t])=>`${e}:${t}`)},Tty:!0});return await Promise.all(s.map(e=>y(a.id,e))),await a.start(),a.id}async function f(e){await l.getContainer(e).remove({force:!0})}function v(e,t){return new Promise((r,n)=>{l.getContainer(e).exec({Cmd:t,AttachStdout:!0,AttachStderr:!0,Tty:!0},(e,t)=>{if(e||!t)return n(e);t.start({Tty:!0},(e,t)=>{if(e||!t)return n(e);let i="";t.on("data",e=>{i+=e.toString()}),t.on("end",()=>{r(i)})})})})}function w(e,t){let r=l.getContainer(e);return new Promise((e,n)=>{r.logs({follow:!1,stdout:!0,stderr:!0,tail:t},(t,r)=>t?n(t):r?void e(r.toString()):n(Error("stream is undefined")))})}async function g(e){await l.createVolume({Name:e,Driver:"local"})}async function b(e,t=[]){let r=await l.createNetwork({Name:e,Driver:"bridge",CheckDuplicate:!0,Internal:!1,Attachable:!0});return await Promise.all(t.map(e=>y(e,r.id))),r}async function k(e,t=[]){let r=l.getNetwork(e);await Promise.all(t.map(e=>q(e,r.id))),await r.remove()}async function y(e,t){let r=l.getNetwork(t);await r.connect({Container:e})}async function q(e,t){let r=l.getNetwork(t);await r.disconnect({Container:e})}},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},66400:e=>{"use strict";e.exports=require("dockerode")},66926:(e,t,r)=>{"use strict";r.d(t,{LW:()=>p,kW:()=>d});let n=/([\p{Ll}\d])(\p{Lu})/gu,i=/(\p{Lu})([\p{Lu}][\p{Ll}])/gu,s=/(\d)\p{Ll}|(\p{L})\d/u,a=/[^\p{L}\d]+/giu,o="$1\0$2";function l(e){let t=e.trim();t=(t=t.replace(n,o).replace(i,o)).replace(a,"\0");let r=0,s=t.length;for(;"\0"===t.charAt(r);)r++;if(r===s)return[];for(;"\0"===t.charAt(s-1);)s--;return t.slice(r,s).split(/\0/g)}function c(e){let t=l(e);for(let e=0;e<t.length;e++){let r=t[e],n=s.exec(r);if(n){let i=n.index+(n[1]??n[2]).length;t.splice(e,1,r.slice(0,i),r.slice(i))}}return t}function u(e,t){let[r,n,i]=f(e,t);return r+n.map(m(t?.locale)).join(t?.delimiter??" ")+i}function d(e,t){return u(e,{delimiter:"-",...t})}function p(e,t){return u(e,{delimiter:"_",...t})}function m(e){return!1===e?e=>e.toLowerCase():t=>t.toLocaleLowerCase(e)}function f(e,t={}){let r=t.split??(t.separateNumbers?c:l),n=t.prefixCharacters??"",i=t.suffixCharacters??"",s=0,a=e.length;for(;s<e.length;){let t=e.charAt(s);if(!n.includes(t))break;s++}for(;a>s;){let t=a-1,r=e.charAt(t);if(!i.includes(r))break;a=t}return[e.slice(0,s),r(e.slice(s,a)),e.slice(a)]}},67262:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(96715);async function i(e,t){return await e.query.services.findMany({with:{environmentVariables:{columns:{key:!0,value:!0}},ports:{columns:{external:!0,internal:!0}}},columns:(0,n.G)(t),orderBy:(e,{asc:t})=>[t(e.createdAt)]})}},76760:e=>{"use strict";e.exports=require("node:path")},78335:()=>{},78444:(e,t,r)=>{"use strict";r.d(t,{r:()=>l,z:()=>c});var n=r(56013),i=r(89283),s=r(77301),a=r(28234),o=r(31465);let l=(0,a.D)("environment_variables",{serviceId:(0,i.Qq)().notNull().references(()=>o.$.id,{onDelete:"cascade",onUpdate:"restrict"}),key:(0,i.Qq)().notNull(),value:(0,i.Qq)().notNull()},e=>({pk:(0,s.ie)({columns:[e.serviceId,e.key]})})),c=(0,n.K1)(l,({one:e})=>({service:e(o.$,{fields:[l.serviceId],references:[o.$.id]})}))},79428:e=>{"use strict";e.exports=require("buffer")},81630:e=>{"use strict";e.exports=require("http")},86167:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(8774),i=r(58624);async function s(e,t){let r=await e.query.services.findFirst({with:{environmentVariables:{columns:{key:!0,value:!0}},ports:{columns:{external:!0,internal:!0}},volumes:{columns:{id:!0,containerPath:!0}},networks:{columns:{id:!0}},providerlinks:{columns:{},with:{provider:{columns:{id:!0,name:!0,repo:!0,containerId:!0},with:{networks:{columns:{id:!0}},environmentVariables:{columns:{key:!0,value:!0}}}}}},clientLinks:{columns:{},with:{client:{columns:{id:!0,name:!0}}}}},where:(e,{eq:r})=>r(e.id,t)});if(!r)return null;let{ports:s,environmentVariables:a,volumes:o,networks:l,providerlinks:c,clientLinks:u,...d}=r;return{...d,environmentVariables:(0,i.A)(a,"key","value"),ports:Object.fromEntries(s.map(({external:e,internal:t})=>[e,t.toString()])),volumes:(0,i.A)(o,"id","containerPath"),networkIds:(0,n.E)(l,"id"),providers:(0,n.E)(c,"provider").map(({networks:e,environmentVariables:t,...r})=>({...r,networkIds:(0,n.E)(e,"id"),variables:(0,i.A)(t,"key","value")})),clients:(0,n.E)(u,"client")}}},86398:(e,t,r)=>{"use strict";r.d(t,{a:()=>l,o:()=>o});var n=r(56013),i=r(89283),s=r(28234),a=r(31465);let o=(0,s.D)("volumes",{id:(0,i.Qq)().primaryKey(),serviceId:(0,i.Qq)().notNull().references(()=>a.$.id,{onDelete:"cascade",onUpdate:"restrict"}),containerPath:(0,i.Qq)().notNull()}),l=(0,n.K1)(o,({one:e})=>({service:e(a.$,{fields:[o.serviceId],references:[a.$.id]})}))},86598:(e,t,r)=>{"use strict";r.d(t,{v:()=>i});var n=r(89283);let i=(0,r(28234).D)("global_variables",{key:(0,n.Qq)().primaryKey(),value:(0,n.Qq)().notNull()})},87550:e=>{"use strict";e.exports=require("better-sqlite3")},94735:e=>{"use strict";e.exports=require("events")},96487:()=>{},96559:(e,t,r)=>{"use strict";e.exports=r(44870)},96715:(e,t,r)=>{"use strict";function n(e){if(e.length)return e.reduce((e,t)=>({...e,[t]:!0}),{})}r.d(t,{G:()=>n})},99710:(e,t,r)=>{"use strict";r.d(t,{b:()=>l,n:()=>c});var n=r(56013),i=r(89283),s=r(77301),a=r(28234),o=r(31465);let l=(0,a.D)("service_links",{clientId:(0,i.Qq)().notNull().references(()=>o.$.id,{onDelete:"cascade",onUpdate:"restrict"}),providerId:(0,i.Qq)().notNull().references(()=>o.$.id,{onDelete:"cascade",onUpdate:"restrict"})},e=>({pk:(0,s.ie)({columns:[e.clientId,e.providerId]})})),c=(0,n.K1)(l,({one:e})=>({client:e(o.$,{fields:[l.clientId],references:[o.$.id],relationName:"client"}),provider:e(o.$,{fields:[l.providerId],references:[o.$.id],relationName:"provider"})}))}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[719,474,629,277],()=>r(5894));module.exports=n})();