UNPKG

bit-ship

Version:

Bit-Ship CLI is tool that analyses your code and generates a custom environment for your needs You can use if to local development, CI/CD or even production.

2 lines (1 loc) 3.26 kB
import{_ as o,u as t}from"./index.js";import e from"consola";import{defineCommand as r}from"citty";import{spawn as n}from"child_process";import{writeFile as i}from"fs/promises";import s from"fs";import"@sentry/node";import"unstorage";import"unstorage/drivers/fs";import"os";import"confbox";import"unstorage/drivers/utils/node-fs";import"joi";import"ofetch";import"uuid";import"url";import"path";import"node:path";const a=t=>o(void 0,void 0,void 0,(function*(){return new Promise((o=>{const r=["run","--rm",...t.containerName?["--name",t.containerName]:"","-w","/app",...(null==t?void 0:t.env)?["-e",...u(t.env)]:[],...(null==t?void 0:t.volumes)?["-v",...t.volumes]:[],...t.platform?["--platform",t.platform]:[],t.image,...t.script.split(" ")],a=n("docker",r);let m="";const d=t.detouched?(o,t,e=!0)=>{e&&(m+="\n"+o)}:(o,t,r=!0)=>{r&&(m+="\n"+o),e[t](o)};if(d("-------------------------- Running task","start",!1),a.stdout.on("data",(o=>d(`${o}`,"log"))),a.stderr.on("data",(o=>d(`${o}`,"log"))),a.on("close",(t=>{o(!0),d(`--------------------------/ Task finished code: ${t}`,"success",!1)})),t.storeLogs){const o=new Date,e=`${o.getFullYear()}-${o.getMonth()+1}-${o.getDate()}_${o.getHours()}-${o.getMinutes()}`,r=".bit-ship/logs";s.existsSync(r)||s.mkdirSync(r,{recursive:!0}),i(`${r}/${e}_${t.taskName}.log`,m)}}))}));function u(o){return Object.entries(o).map((([o,t])=>`${o}=${t}`))}const{runContainer:m}={runContainer:a},d="test",{getConfig:c}=t(),p=r({meta:{name:"run",description:"Run your tasks and jobs"},args:{task:{description:"Name of the task or job",type:"positional",required:!0}},run({args:o}){const t=o.task,r=f(t);if(r)return r();const n=function(o){const t=c(),r=null==t?void 0:t.jobs[o],n=r.tasks;if(!r)return void e.error(`Job '${o}' not found`);const i=n.reduce(((o,t)=>{const e=f(t);return e&&o.push(e),o}),[]);if(!i.length)return void e.error("Job does not include any valid tasks");return()=>{e.log(`Running job ${o} with ${n.length} tasks`),i.forEach((o=>o()))}}(t);n&&n()}}),l=r({meta:{name:"exec",description:"Execute a script"},args:{script:{description:"script to execute",type:"positional",required:!0},image:{type:"string",required:!1,description:"Image to use",default:"default"}},run(t){return o(this,arguments,void 0,(function*({args:o}){if(!o.image)return e.error("No image was provided and default image was not found");const t=c(),r=o.script,n=t.images[o.image].name;yield m({containerName:d,image:n,script:r,volumes:["./:/app"]})}))}}),g=r({meta:{name:"hook",description:"Internal command used as entry point for the hooks"},args:{name:{type:"string",description:"hook ",required:!0}},run(t){return o(this,arguments,void 0,(function*({args:o}){var t,e,r;const n=c();if(n.jobs)for(const i in n.jobs)(null===(r=null===(e=null===(t=n.jobs[i])||void 0===t?void 0:t.on)||void 0===e?void 0:e.commit)||void 0===r?void 0:r.on)===o.name&&p.run({args:{task:i}})}))}});function f(o){var t;const r=c(),n=null==r?void 0:r.tasks[o],i=(null==n?void 0:n.script)||"";if(!n)return;const s=n.image||"default",a=null===(t=r.images[s])||void 0===t?void 0:t.name;return a?()=>{m({taskName:o,containerName:d,image:a,script:i,volumes:["./:/app"],storeLogs:!0})}:e.error(`No image found for task '${n}'`)}export{l as exec,g as hook,p as run};