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) • 4.6 kB
JavaScript
import{defineCommand as t,runMain as i}from"citty";import o,{consola as e}from"consola";import*as n from"@sentry/node";import{createStorage as r}from"unstorage";import s from"unstorage/drivers/fs";import a from"os";import{stringifyYAML as d,parseYAML as c}from"confbox";import{mkdir as p,readFile as m,writeFile as l}from"fs/promises";import{writeFile as u}from"unstorage/drivers/utils/node-fs";import f from"joi";import{ofetch as h}from"ofetch";import{v4 as g}from"uuid";import{fileURLToPath as v}from"url";import{dirname as y}from"path";import b from"fs";import*as j from"node:path";function S(t,i,o,e){return new(o||(o=Promise))((function(n,r){function s(t){try{d(e.next(t))}catch(t){r(t)}}function a(t){try{d(e.throw(t))}catch(t){r(t)}}function d(t){var i;t.done?n(t.value):(i=t.value,i instanceof o?i:new o((function(t){t(i)}))).then(s,a)}d((e=e.apply(t,i||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const w=a.homedir();let C;const I=()=>(C||o.error("Storage not initialized"),C),k=".bit-ship";let D={};const x=()=>({getConfig:()=>D,getConfigPath:(t,i)=>function(t,i,o){const e=Array.isArray(i)?i:i.match(/[^.[\]]+/g)||[],n=e.reduce(((t,i)=>t&&void 0!==t[i]?t[i]:void 0),t);return void 0===n?o:n}(D,t,i),setConfig:$,loadConfig:R});function $(t){return S(this,void 0,void 0,(function*(){o.start("Updating bit-ship.yml"),D=Object.assign(Object.assign({},D),t),yield p("path",{recursive:!0}),u(`${k}/bit-ship.yml`,d(D))}))}function R(){return S(this,void 0,void 0,(function*(){try{const t=yield m(`${k}/bit-ship.yml`,"utf8");D=c(t);const i=q.validate(D);if(i.error)return void o.error("Invalid bit-ship.yml file",i.error)}catch(t){o.warn("No bit-ship.yml file found. Create it with analyse command")}}))}const U=f.object({on:f.object({commit:f.object({on:f.string().valid("pre-commit","post-commit")})}).required(),tasks:f.array().items(f.string()).required()}),F=f.object({script:f.string().required(),location:f.string().optional(),env:f.object().optional(),volumes:f.array().items(f.string()).optional()}).optional(),O=f.object({name:f.string().required(),dependencies:f.object().optional()}).optional(),q=f.object({version:f.string().optional(),name:f.string().optional(),images:f.object({}).pattern(f.string(),O).optional(),tasks:f.object({}).pattern(f.string(),F).optional(),jobs:f.object().pattern(f.string(),U).optional()}),L=()=>({apiURL:process.env.API_URL||"https://app.bit-ship.dev/api"}),{apiURL:P}=L();function A(t,i){return S(this,void 0,void 0,(function*(){try{yield h(`${P}/analytics/cli/${t}`,{method:"POST",body:i,headers:{"Content-Type":"application/json"}})}catch(t){o.log("Failed to send analytics event",t)}}))}const M=t=>{const i=new Date(t),o=new Date;return i.getDate()===o.getDate()&&i.getMonth()===o.getMonth()&&i.getFullYear()===o.getFullYear()};!function(){S(this,void 0,void 0,(function*(){const a=yield function(){return S(this,void 0,void 0,(function*(){const t=v(import.meta.url),i=y(t),o=yield m(j.join(i,"..","package.json"),"utf8");return JSON.parse(o).version||"0.0.0"}))}();yield S(void 0,void 0,void 0,(function*(){C=yield r({driver:s({base:`${w}/.bit-ship/data`})})})),S(void 0,void 0,void 0,(function*(){const t=I();(yield t.hasItem("isSentryDisabled"))||(n.init({dsn:"https://41b66ad2d847d5fbc79561d55988ddee@o4507703272996864.ingest.de.sentry.io/4507793192124496",integrations:[],tracesSampleRate:.5,profilesSampleRate:1}),e.addReporter({log:t=>{0===t.level&&n.captureMessage(t.args)}}))})),yield S(void 0,void 0,void 0,(function*(){try{const t=I();let i=yield t.getItem("lastUsageDate"),o=yield t.getItem("uuid");o||(o=g(),t.setItem("uuid",o),A("install",{uuid:o}),i=(new Date).toISOString(),yield t.setItem("lastUsageDate",i)),M(i)||A("usage-ping",{uuid:o})}catch(t){o.error("Failed to init analytics",t)}})),yield S(void 0,void 0,void 0,(function*(){yield R()})),yield S(void 0,void 0,void 0,(function*(){const t=x().getConfig(),i=".git/hooks";b.existsSync(i)&&t&&(yield l(`${i}/pre-commit`,"#!/bin/sh\n\nbit-ship hook --name=pre-commit"),yield l(`${i}/post-commit`,"#!/bin/sh\n\nbit-ship hook --name=post-commit"))}));const d=t({meta:{name:"bit-ship",version:a,description:"Bit-Ship CLI https://bit-ship.dev/"},subCommands:{init:()=>import("./init-yxiHY27Z.js").then((t=>t.default)),image:()=>import("./image-C4qqOIbb.js").then((t=>t.default)),run:()=>import("./run-CbTqX1XB.js").then((t=>t.run)),exec:()=>import("./run-CbTqX1XB.js").then((t=>t.exec)),hook:()=>import("./run-CbTqX1XB.js").then((t=>t.hook)),settings:()=>import("./settings-DShmv2iv.js").then((t=>t.default))}});i(d)}))}();export{S as _,L as a,I as b,x as u};