buildstamp
Version:
Buildstamp JS/TS API
21 lines (18 loc) • 3.17 kB
JavaScript
var I=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(s,r)=>(typeof require<"u"?require:s)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});import{createRequire as U}from"node:module";import T from"minimist";import*as _ from"node:child_process";import*as g from"node:fs/promises";import*as f from"node:path";import*as l from"node:process";var h=({cwd:t=l.cwd(),output:s="buildstamp.json",ci:r=!0,git:o=!0,date:n=!0,safe:a=!1,extra:u={}}={})=>({ci:r,cwd:t,output:s,git:o,date:n,extra:u,safe:a}),b=async t=>{let{ci:s,git:r,date:o,cwd:n,output:a,extra:u,safe:c}=h(t),p={...u},i=c?x:e=>e;if(o&&(p.date=new Date().toISOString()),r&&Object.assign(p,await i(O)(n,l.env)),s&&Object.assign(p,i(w)(l.env)),a){let e=i(f.resolve)(n,a);await i(g.mkdir)(i(f.dirname)(e),{recursive:!0}),await i(g.writeFile)(e,JSON.stringify(p,null,2))}return p},y=async(t,s)=>s.CI_COMMIT_BRANCH||s.GITHUB_REF_NAME||(await d("git",["rev-parse","--abbrev-ref","HEAD"],t)).stdout,O=async(t,s)=>{let{stdout:r}=await d("git",["rev-parse","HEAD"],t),o=await R(t),n=await y(t,s),a=(o.match(/([^./:]+\/[^./]+)(\.git)?$/)||[])[1];return{git_commit_branch:n,git_commit_id:r,git_repo_url:o,git_repo_name:a}},R=async t=>{let s=(await d("git",["remote","show"],t)).stdout.split(`
`)[0],{stdout:r}=await d("git",["config","--get",`remote.${s}.url`],t);return r},w=t=>({ci_run_id:t.BUILD_NUMBER||t.CI_JOB_ID||t.GITHUB_RUN_ID,ci_run_url:t.BUILD_URL||t.CI_JOB_URL||t.GITHUB_RUN_ID&&`${t.GITHUB_SERVER_URL}/${t.GITHUB_REPOSITORY}/actions/runs/${t.GITHUB_RUN_ID}`}),d=(t,s,r)=>new Promise((o,n)=>{let a=0,u=Date.now(),c=[],p=[],i=_.spawn(t,s,{cwd:r});i.stdout.on("data",e=>p.push(e.toString())),i.stderr.on("data",e=>c.push(e.toString())),i.on("error",e=>c.push(e.toString())).on("exit",e=>{a=e}).on("close",()=>{(a?n:o)({stderr:c.join("").trim(),stdout:p.join("").trim(),status:a,signalCode:i.signalCode,duration:Date.now()-u})})}),x=(t,s={})=>(...r)=>{try{let o=t(...r);return o?.then(n=>n,()=>s)||o}catch{return s}};import*as m from"node:process";var C=t=>t.replace(/-./g,s=>s[1].toUpperCase()),D=(t={})=>Object.fromEntries(Object.entries(t).map(([s,r])=>[C(s),r==="false"?!1:r])),{cwd:j,git:S,date:N,output:E,version:G,help:H,extra:B,safe:P}=D(T(m.argv.slice(2),{alias:{help:["h"],version:["v"],output:["o"]}}));(async()=>{if(H){console.log(`
Usage:
$ buildstamp [opts]
Options:
--output Specify the output file. Defaults to 'buildstamp.json'
--git Inject git info. True by default
--date Inject date. True by default
--extra JSON to mixin
--safe Suppress any errors. Defaults to false
--help, -h Print help digest
--version, -v Print version
Examples:
$ buildstamp --output=stamp.json
$ buildstamp --extra='{"foo": "bar"}'
`);return}if(G){console.log((import.meta.url?U(import.meta.url):I)("../../package.json").version);return}try{await b({cwd:j,date:N,git:S,output:E,safe:P,extra:B?JSON.parse(B):{}}),m.exit(0)}catch(t){console.error(t),m.exit(1)}})();
//# sourceMappingURL=cli.mjs.map