@currents/cmd 1.6.5 → 1.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/index.js +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/bin/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var Zn=Object.create;var Je=Object.defineProperty;var ei=Object.getOwnPropertyDescriptor;var ti=Object.getOwnPropertyNames;var ri=Object.getPrototypeOf,oi=Object.prototype.hasOwnProperty;var ni=(e,t)=>{for(var r in t)Je(e,r,{get:t[r],enumerable:!0})},ii=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ti(t))!oi.call(e,n)&&n!==r&&Je(e,n,{get:()=>t[n],enumerable:!(o=ei(t,n))||o.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Zn(ri(e)):{},ii(t||!e||!e.__esModule?Je(r,"default",{value:e,enumerable:!0}):r,e));var og=require("source-map-support/register");var zn=require("@commander-js/extra-typings");var Nt={name:"@currents/cmd",version:"1.6.
|
|
2
|
+
"use strict";var Zn=Object.create;var Je=Object.defineProperty;var ei=Object.getOwnPropertyDescriptor;var ti=Object.getOwnPropertyNames;var ri=Object.getPrototypeOf,oi=Object.prototype.hasOwnProperty;var ni=(e,t)=>{for(var r in t)Je(e,r,{get:t[r],enumerable:!0})},ii=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ti(t))!oi.call(e,n)&&n!==r&&Je(e,n,{get:()=>t[n],enumerable:!(o=ei(t,n))||o.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Zn(ri(e)):{},ii(t||!e||!e.__esModule?Je(r,"default",{value:e,enumerable:!0}):r,e));var og=require("source-map-support/register");var zn=require("@commander-js/extra-typings");var Nt={name:"@currents/cmd",version:"1.6.6",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^9.0.3","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.13","@types/node":"^22.10.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.8"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.9","axios-retry":"^4.5.0",chalk:"^4.1.2",commander:"^12.1.0",debug:"^4.4.0",dotenv:"^16.4.7",execa:"^9.5.1","fs-extra":"^11.2.0",getos:"^3.2.1",glob:"^11.0.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.6.0",unzipper:"^0.12.3",uuid:"^11.0.3",xml2js:"^0.6.2"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var ce=Nt.version;var bt=require("@commander-js/extra-typings");var ai=[];function qe(e){ai.push(e)}var y=u(require("chalk")),L=u(require("util"));var We=require("debug"),ci=u(require("fs-extra")),a=(0,We.debug)("currents"),mi=null;function Lt(){We.debug.enable("currents,currents:*")}function Mt(e){mi=e}var Bt=[],kt=[];var me=(...e)=>{let t=L.default.format(...e);qe(t),console.log(t)},pi=(...e)=>{let t=L.default.format(...e);qe(t),console.error(t)},x=me,h=(...e)=>{let t=L.default.format(...e);return kt.push(t),a("WARNING: ",t),me(y.default.bgYellow.black(" WARNING "),t)},J=(...e)=>{let t=L.default.format(...Ft(e));return a("WARNING: ",L.default.format(...e)),me(y.default.bgYellow.black(" WARNING "),t)},pe=(...e)=>me(y.default.green.bold(L.default.format(...e))),C=(...e)=>{let t=L.default.format(...Ft(e));return Bt.push(t),a("ERROR: ",L.default.format(...e)),pi(y.default.bgRed.white(" ERROR "),t)};var Ft=e=>e.map(t=>t instanceof Error?t.message:t),ue=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
3
|
`)),ga=y.default.cyan,Ca=y.default.blueBright,ha=y.default.red,Ea=y.default.yellow,Ra=y.default.green,Ia=y.default.gray,_a=y.default.white,Ta=y.default.black,Oa=y.default.magenta,g=y.default.dim,ya=y.default.bold;var on=u(require("chalk"));function Gt(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function de(e){return Gt(e,["apiKey"])}function _(e){return Gt(e,["recordKey","key"])}var le=class extends Error{};var Q=u(require("fs-extra")),fe=require("path"),Ht=require("uuid");async function q(e){try{return await Q.default.readJson(e)}catch(t){throw C("Error while reading JSON file: %s",e,t),C}}async function S(e,t){try{return await Q.default.writeFile(e,t,"utf8"),e}catch(r){throw C(`Error writing file at ${e}:`,r),r}}async function jt(e,t){if(t){await Q.default.ensureDir(e);return}let r=(0,fe.dirname)(e);await Q.default.ensureDir(r)}function di(){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=(0,Ht.v4)();return`${e}-${t}`}async function Kt(e,t){let r=di(),o=(0,fe.join)(e,t,r);return ge(o)}async function ge(e){try{return await Q.default.ensureDir(e),a("Folder created",e),e}catch(t){throw C(`Failed to create folder at ${e}:`,t),t}}var $t=u(require("crypto"));function Ce(e){return $t.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var he={};ni(he,{getNanoid:()=>li,userFacingNanoid:()=>ze});var Ye=require("nanoid"),Vt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",li=(e=16)=>(0,Ye.customAlphabet)(Vt,e)(),ze=(0,Ye.customAlphabet)(Vt,12);function Jt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function T(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function fi(e,t){return e[t].cli}function gi(e,t){return e[t].name}function M(e,t,r,o){let n={...Jt(o),...Jt(r())};return t.forEach(s=>{if(!n[s])throw C(`${gi(e,s)} is required for Currents Reporter. Use the following methods to set the value:
|
|
4
4
|
- as environment variable: ${g(T(e,s))}
|
|
5
5
|
- as CLI flag of the command: ${g(fi(e,s))}`),new le("Missing required config variable")}),n}var Ci={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},hi={branch:{name:"Run Branch",cli:"--branch"},output:{name:"Output Path",env:"CURRENTS_OUTPUT",cli:"--output"},ciBuildId:{name:"CI Build ID",cli:"--ci-build-id"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},tag:{name:"Run Tag",cli:"--tag"}},B={...Ci,...hi};function qt(){return{apiKey:process.env[B.apiKey.env],debug:!!process.env[B.debug.env]}}var Ei=a.extend("config"),Ri=["apiKey","projectId"],Qe=null;function Wt(e){Qe=M(B,Ri,qt,e),Ei("Resolved config: %o",de(Qe))}function Ee(){return Qe}var Tr=require("fs/promises");var dr=u(require("lodash"));var rr=u(require("axios")),or=u(require("axios-retry")),nr=u(require("lodash"));var Yt=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",zt=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Qt=()=>3e4;var Xe=require("axios"),Ze=u(require("pretty-ms"));var Xt=a.extend("http"),Re=e=>[3*1e3,15*1e3,30*1e3][e-1],Zt=e=>(Xt("isRetriableError: %o",{message:e.message,code:"code"in e?e.code:void 0,status:"response"in e?e.response?.status:void 0,headers:"response"in e?e.response?.headers:void 0,data:"response"in e?e.response?.data:void 0,isAxiosError:(0,Xe.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,Xe.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),Ie=()=>3;function er(e,t,r){Xt("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ze.default)(Re(e)),e,Ie()),h("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ze.default)(Re(e)),e,Ie())}var et=a.extend("http");var tt={api:null,restApi:null};function Ii(e){let t=e==="api"?Yt():zt();et("client base url: %s",t);let r=rr.default.create({baseURL:t,timeout:Qt(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let s={...nr.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?et("network request retry: %o",tr({...s,baseURL:t,isRetry:!0})):et("network request: %o",tr(s)),o}),(0,or.default)(r,{retries:Ie(),retryCondition:Zt,retryDelay:Re,shouldResetTimeout:!0,onRetry:er}),r}function ir(e){return tt[e]===null&&(tt[e]=Ii(e)),tt[e]}function tr(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":_i(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function _i(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var cr=require("axios"),mr=u(require("lodash")),P=require("ts-pattern");function pr(e){(0,P.match)(e).when(cr.isAxiosError,Ti).otherwise(()=>{h("Unexpected error while sending network request: %s",e)})}function Ti(e){return(0,P.match)(e).with({code:"ECONNABORTED"},()=>{h("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{h("Network connection aborted")}).with({code:"ECONNRESET"},()=>{h("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{h("Network connection timeout")}).with({response:P.P.not(P.P.nullish)},t=>{Oi(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{h(`[currents] Unexpected network error: %s
|
|
@@ -14,7 +14,7 @@ ${(t??[]).map(r=>` - ${r}`).join(`
|
|
|
14
14
|
EXTRA_PWCP_FLAGS="${l}"
|
|
15
15
|
RUN_ATTEMPT="${c}"
|
|
16
16
|
`)}async function so(e,t,r=null){let{matrixIndex:o,matrixTotal:n}=e,s=t.params,c=ee(s.githubRunAttempt,1),p=xe(r),m=c>1&&p,d=m?"--last-failed":"",f="";n>1&&(f=m?"--shard=1/1":`--shard=${o}/${n}`);let l=[d,f].filter(Boolean).join(" "),I=e.presetOutput??oe;await S(I,l),a('Dumped PW config: "%s" for GHA to %s',l,I)}async function ao(e,t,r=null){let o=t.params,n=r?.ci.params,s=n?.circleWorkflowId,c=n?.circleWorkflowWorkspaceId,p=ee(o.circleNodeIndex,0),m=ee(o.circleNodeTotal,1),d=c==o.circleWorkflowWorkspaceId&&s!==o.circleWorkflowId,f=xe(r),l=d&&f,I=l?"--last-failed":"",b="";m>1&&(b=l?"--shard=1/1":`--shard=${p+1}/${m}`);let U=[I,b].filter(Boolean).join(" "),A=e.presetOutput??oe;await S(A,U),a('Dumped PW config: "%s" for Circle to %s',U,A)}var ee=(e,t)=>{let r=Ct.default.toNumber(e);return Ct.default.isNaN(r)?t:r};async function Et(){let e=j();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s,continue:c}=e.values,p=e.values.outputDir,m=Z();o==="last-run"&&await oo(e.values,m);let d=await gr({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:s}});try{let f=await os({readUrl:d.readUrl,outputDir:p}),l=await is(d.metaReadUrl);o==="last-run"&&await no(e.values,m,l),x(g("- restoring cache to"),f),pe("Cache restored. Cache ID: %s",d.cacheId)}catch(f){if((0,co.isAxiosError)(f)&&(f.response?.status===403||f.response?.status===404)){let l=`Cache with ID "${d.cacheId}" not found`;if(c){J(l);return}throw new Error(l)}throw f}}async function os({readUrl:e,outputDir:t}){let r=await lt(e),o=ns(t);return await Vr(r,o),a("Cache downloaded"),o}function ns(e){let t=e??process.cwd();return ht.default.isAbsolute(t)?t:ht.default.resolve(process.cwd(),t)}async function is(e){let t=await lt(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}async function Rt(){let e=j();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,pwOutputDir:n,matrixIndex:s,matrixTotal:c,continue:p}=e.values,m=await ro(e.values.path),d=e.values.path||[],f=Z();if(o==="last-run"&&(d.push(n),m.push(...await to(n))),m.length===0){let I=`No files available to upload: ${d.filter(Boolean).join(",")}`;if(!p)throw new Error(I);J(I)}let l=await fr({recordKey:t,ci:f,id:r,config:{matrixIndex:s,matrixTotal:c}});a("Cache upload url created",{result:l}),m.length>0&&(await ss({archive:await $r(m),cacheId:l.cacheId,uploadUrl:l.uploadUrl}),x(m.map(I=>`${g("- uploading")} ${I}`).join(`
|
|
17
|
-
`))),await as({meta:Zr({cacheId:l.cacheId,config:e.values,ci:f,orgId:l.orgId,path:m}),cacheId:l.cacheId,uploadUrl:l.metaUploadUrl}),pe("Cache uploaded. Cache ID: %s",l.cacheId)}async function ss({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await dt({buffer:e,contentType:o,name:t,uploadUrl:r},o,ft(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function as({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await dt({buffer:e,contentType:n,name:o,uploadUrl:r},n,ft(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var po=require("@currents/commit-info"),uo=require("lodash");var be=require("lodash");var It=a.extend("ci-git");function mo(e){It("git commit existing info: %O",e);let t=Gr();It("commit info from provider environment variables: %O",t);let r=(0,be.transform)(e,(o,n,s)=>{let c=n||(t?t[s]:null);return o[s]=(0,be.defaultTo)(c,null)});return It("combined git and environment variables from provider: %O",r),r}var cs=async()=>{let e=await(0,po.commitInfo)();return mo({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},lo=(0,uo.memoize)(cs);var fo=u(require("getos")),go=require("lodash"),v=require("os"),Co=require("util"),ms=async()=>{if((0,v.platform)()==="linux")try{let e=await(0,Co.promisify)(fo.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,v.release)()}catch{return(0,v.release)()}return(0,v.release)()},ps=async()=>{let e=await ms();return{osName:(0,v.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,v.freemem)(),total:(0,v.totalmem)()}}},ho=(0,go.memoize)(ps);var ke=u(require("path")),qo=u(require("semver"));var O={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},ciBuildId:{name:"CI Build ID",env:"CURRENTS_CI_BUILD_ID",cli:"--ci-build-id"},recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},tag:{name:"Currents Tag",env:"CURRENTS_TAG",cli:"--tag"},disableTitleTags:{name:"Disable Title Tags",env:"CURRENTS_DISABLE_TITLE_TAGS",cli:"--disable-title-tags"},removeTitleTags:{name:"Remove Title Tags",env:"CURRENTS_REMOVE_TITLE_TAGS",cli:"--remove-title-tags"},machineId:{name:"Machine ID",env:"CURRENTS_MACHINE_ID",cli:"--machine-id"},reportDir:{name:"Report Directory",env:"CURRENTS_REPORT_DIR",cli:"--report-dir"}};function Eo(){return{projectId:process.env[O.projectId.env],recordKey:process.env[O.recordKey.env],ciBuildId:process.env[O.ciBuildId.env],tag:process.env[O.tag.env]?process.env[O.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:process.env[O.disableTitleTags.env],removeTitleTags:process.env[O.removeTitleTags.env],debug:process.env[O.debug.env],machineId:process.env[O.machineId.env]}}var us=a.extend("config"),ds=["projectId","recordKey"],_t=null;function Ro(e){_t=M(O,ds,Eo,e),us("Resolved Currents config: %o",_t)}function Ae(){return _t}function Io(e){return{ciBuildId:e.ciBuildId,projectId:e.projectId,recordKey:e.key,tag:e.tag,removeTitleTags:e.removeTitleTags,disableTitleTags:e.disableTitleTags,debug:e.debug,machineId:e.machineId,reportDir:e.reportDir}}var $=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Uo=u(require("fs-extra")),vo=require("jest-cli"),Do=u(require("tmp"));var Ao=require("lodash");function _o(e){let t=[];for(let[r,o]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&t.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{t.push(`--${r}=${n}`)}):t.push(`--${r}=${o}`));return t.join(" ")}var To=require("lodash"),ls=["bail","clearCache","collectCoverage","collectCoverageFrom","color","colors","config","coverage","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","debug","detectLeaks","detectOpenHandles","errorOnDeprecated","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","notify","notifyMode","openHandlesTimeout","outputFile","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function Oo(e){return(0,To.omit)(e,...ls)}var wo=u(require("fs")),xo=require("jest-config"),Tt=require("lodash"),Ot=u(require("path"));function Se(e,t){return(...r)=>new Promise((o,n)=>{let s=0,c=()=>{s++;try{let p=e(...r);o(p)}catch(p){if(s>=t.length)n(p);else{let m=t[s-1];setTimeout(c,m)}}};c()})}var yo=u(require("fs-extra")),fs=u(require("path"));async function Ue(e){let t=await yo.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Po=a.extend("jest-discovery");async function bo(e){try{let{config:t,configPath:r}=await(0,xo.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],s=(0,Tt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(m=>typeof m!="string"?(0,Tt.omit)(m,n):m)),s.rootDir&&Object.keys(s).length===1)return null;let c=Ot.default.resolve(r?Ot.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(s,null,2)}`;return Po("configFileContent: %O",p),wo.default.writeFileSync(c,p),await Se(Ue,[200,200,200,200,200,1e3])(c),c}catch(t){return C("Failed to recreate the config file"),Po("error %o",t),null}}async function So(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Oo(r),n=_o(o),s=r.config,c=await bo(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,Ao.isEmpty)(m)),configFilePath:c}}var gs=a.extend("jest-discovery");async function No(e,t){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await So(t);try{let n=Do.default.fileSync({postfix:".json"});return gs("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,vo.run)(r.concat(["--openHandlesTimeout=0"])),await Se(Ue,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await q(n.name)}catch(n){return C("Failed to obtain the jest full test suite:",n),[]}finally{o&&Uo.default.unlinkSync(o)}}var ve=class extends ${constructor(t){super(t)}async getFullTestSuite(){return No(this.config.frameworkConfig,this.config.cliArgs)}};var Go=u(require("fs-extra"));var Ho=require("path"),jo=require("xml2js");var Mo=require("lodash"),Bo=u(require("crypto"));function ko(e,t,r,o){let n=z(e.failure),s=n.length>0,c=t?.timestamp??"";return{_t:De(c),testId:Pt(ne(e.name,o).join(", "),o),title:ne(e.name,o),state:s?"failed":"passed",isFlaky:Cs(),expectedStatus:s?"skipped":"passed",timeout:hs(),location:Es(t?.file??""),retries:Rs(n),attempts:Is(e,n,wt(c),r)}}function Pt(e,t){let r=`${e}${t}`;return Bo.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function De(e){return Fo(e)?new Date(e).getTime():new Date().getTime()}function wt(e){return Fo(e)?new Date(e).toISOString():new Date().toISOString()}function Fo(e){let t=new Date(e);return!isNaN(t.getTime())}function ne(e,t){return[t,e].filter(Boolean)}function Cs(){return!1}function hs(){return 0}function Es(e){return{column:1,file:e,line:1}}function Rs(e){let t=0;return e.forEach(r=>{typeof r!="string"&&t++}),t}function Is(e,t,r,o){let n=e.time?Ne(e.time):0;return t.length===0?[{_s:"passed",attempt:0,workerIndex:1,parallelIndex:1,startTime:r,steps:[],duration:n,status:"passed",stdout:Lo(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.reduce((s,c,p)=>{if(c!=="true"&&c!=="false"){let m=Ts(c);s.push({_s:"failed",attempt:p,workerIndex:1,parallelIndex:1,startTime:Os(o,r),steps:[],duration:n,status:"passed",stdout:Lo(e?.["system-out"]),stderr:_s(e?.["system-err"]),errors:m,error:m[0]})}return s},[])}function Lo(e){return e?[e]:[]}function _s(e){return e?[e]:[]}function Ts(e){return e==="true"||e==="false"?[]:[typeof e=="string"?{message:e}:{message:e.message,stack:e._,value:e.type}]}function Os(e,t){let r=De(t)+e;return new Date(r).toISOString()}function z(e){return e?Array.isArray(e)?e:[e]:[]}function ys(e){return Math.round(e*1e3)}function Ne(e){let t=parseFloat(e);return isNaN(t)?0:ys(t)}function Le(e,t,r){let o=(0,Mo.isNumber)(r)&&r>0,n=!!e.id&&yt(t,"id",e.id);if(e.file){let s=yt(t,"file",e.file);return s&&!n?`${e.file} - ${e.id}`:s&&o?`${e.file} - ${r}`:e.file}if(e.name){let s=yt(t,"name",e.name);return s&&!n?`${e.name} - ${e.id}`:s&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function yt(e,t,r){return e.filter(n=>n[t]===r).length>1}var Ps=a.extend("junit-discovery");async function Ko(e){console.time(g("@currents/junit:fullTestSuite-ready"));try{Ps("running scanner: %o",e);let t=(0,Ho.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=Go.default.readFileSync(t,"utf-8"),o=await(0,jo.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return ws(o)}catch(t){return C("Failed to obtain the junit full test suite:",t),[]}}function ws(e){let t=[],r=z(e.testsuites?.testsuite),o={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(n=>{let s=Le(n,r);z(n?.testcase)?.forEach(p=>{let m={title:ne(p.name,s),spec:s,tags:[],testId:Pt(ne(p.name,s).join(", "),s)};o.tests.push(m)})}),t.push(o),t}var Me=class extends ${constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Ko(this.reportDir)}};function $o(e,t){switch(e.framework){case"jest":return new ve(e);case"junit":return new Me(e,t);default:return new $(e)}}var te=u(require("fs-extra")),k=u(require("path"));async function Vo(e){let t=await xs(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??k.default.join(t,"config.json")}}async function xs(e){return e?(await Be(e),e):bs((0,k.join)(process.cwd(),".currents"))}async function bs(e){let t=await te.default.readdir(e),r=null;for(let o of t){let n=k.default.join(e,o),s=await te.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,k.resolve)(e,r.name):null}async function Be(e){try{return await te.default.pathExists(e)}catch{return C("Error checking if path exists:",C),!1}}async function Jo(e){let t=k.default.join(e,"instances");return As(t)}async function As(e){let t=await te.default.readdir(e),r=[];for(let o of t){let n=k.default.join(e,o);(await te.default.stat(n)).isFile()&&r.push(n)}return r}async function xt(){let e=Ae();if(!e)throw new Error("Currents config is missing!");let t=await Vo(e);Mt(Ds(t.reportDir)),a("Reporter options: %o",t),x("Report directory: %s",t.reportDir);let r=await q(t.configFilePath);a("Report config: %o",r);let o=await Jo(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Us(t.reportDir),s=await Be(n),c=vs(t.reportDir),p=null;if(s){let U=await q(n);h("Marker file detected. The report was already uploaded: %o",{runUrl:U.response.runUrl,isoDate:U.isoDate}),await Be(c)&&(p=await q(c),a("Full test suite file detected: %s",c))}if(p)a("The discovery stage was skipped");else{if(p=await $o(r,t.reportDir).getFullTestSuite(),Ns(p))throw new Error("Failed to discover the full test suite!");await S(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,d={currents:e},f={type:r.framework,version:r.frameworkVersion,clientVersion:ce,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},l=he.userFacingNanoid(),I=Z(e.ciBuildId),b={};for await(let U of o){let A=await q(U);b[A.groupId]||(b[A.groupId]=[]),b[A.groupId].push(A)}for await(let U of Object.keys(b)){let A=b[U],Ve=U;m&&(a("Default group found: %s, overwriting the group in the results",m),Ve=m,A=A.map(V=>({...V,groupId:m})));try{let V=await Ss({ci:I,group:Ve,instances:A,fullTestSuite:p,config:d,machineId:l,framework:f});a("Api response: %o",V),x("[%s] Run created: %s",Ve,V.runUrl);let Xn={response:V,isoDate:new Date().toISOString()};await S(n,JSON.stringify(Xn)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(V){throw a("Failed to upload the results to the dashboard"),V}}}async function Ss({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:c}){let p=await lo(),m=await ho(),d={browserName:"node",browserVersion:qo.default.coerce(process.version)?.version},{currents:f}=n,I={platform:{...d,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:f.projectId,recordKey:f.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:f.tag??[],machineId:f.machineId??s,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",_(I)),Rr(I)}function Us(e){return ke.default.join(e,"upload.marker.json")}function vs(e){return ke.default.join(e,"fullTestSuite.json")}function Ds(e){return ke.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Ns(e){return e.length===0||e.some(t=>t.tests.length===0)}var Ls=a.extend("cli");async function Wo(e){await D(async t=>{Wt(t);let r=Ee();Ls("Config: %o",de(r)),await rt()},e)}var F=require("@commander-js/extra-typings");var Yo=new F.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(T(B,"apiKey")),zo=new F.Option("-o, --output <path>","Path to the file where output will be written").env(T(B,"output")),Qo=new F.Option("--ci-build-id <id>","Unique identifier for the run"),Xo=new F.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(T(B,"projectId")),Zo=new F.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(X),en=new F.Option("--debug","Enable debug logging").env(T(B,"debug")).default(!1),tn=new F.Option("-b, --branch <branch>","Branch name for the recorded run"),rn=new F.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Fe="api",Ms=e=>`
|
|
17
|
+
`))),await as({meta:Zr({cacheId:l.cacheId,config:e.values,ci:f,orgId:l.orgId,path:m}),cacheId:l.cacheId,uploadUrl:l.metaUploadUrl}),pe("Cache uploaded. Cache ID: %s",l.cacheId)}async function ss({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await dt({buffer:e,contentType:o,name:t,uploadUrl:r},o,ft(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function as({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await dt({buffer:e,contentType:n,name:o,uploadUrl:r},n,ft(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var po=require("@currents/commit-info"),uo=require("lodash");var be=require("lodash");var It=a.extend("ci-git");function mo(e){It("git commit existing info: %O",e);let t=Gr();It("commit info from provider environment variables: %O",t);let r=(0,be.transform)(e,(o,n,s)=>{let c=n||(t?t[s]:null);return o[s]=(0,be.defaultTo)(c,null)});return It("combined git and environment variables from provider: %O",r),r}var cs=async()=>{let e=await(0,po.commitInfo)();return mo({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},lo=(0,uo.memoize)(cs);var fo=u(require("getos")),go=require("lodash"),v=require("os"),Co=require("util"),ms=async()=>{if((0,v.platform)()==="linux")try{let e=await(0,Co.promisify)(fo.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,v.release)()}catch{return(0,v.release)()}return(0,v.release)()},ps=async()=>{let e=await ms();return{osName:(0,v.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,v.freemem)(),total:(0,v.totalmem)()}}},ho=(0,go.memoize)(ps);var ke=u(require("path")),qo=u(require("semver"));var O={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},ciBuildId:{name:"CI Build ID",env:"CURRENTS_CI_BUILD_ID",cli:"--ci-build-id"},recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},tag:{name:"Currents Tag",env:"CURRENTS_TAG",cli:"--tag"},disableTitleTags:{name:"Disable Title Tags",env:"CURRENTS_DISABLE_TITLE_TAGS",cli:"--disable-title-tags"},removeTitleTags:{name:"Remove Title Tags",env:"CURRENTS_REMOVE_TITLE_TAGS",cli:"--remove-title-tags"},machineId:{name:"Machine ID",env:"CURRENTS_MACHINE_ID",cli:"--machine-id"},reportDir:{name:"Report Directory",env:"CURRENTS_REPORT_DIR",cli:"--report-dir"}};function Eo(){return{projectId:process.env[O.projectId.env],recordKey:process.env[O.recordKey.env],ciBuildId:process.env[O.ciBuildId.env],tag:process.env[O.tag.env]?process.env[O.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:process.env[O.disableTitleTags.env],removeTitleTags:process.env[O.removeTitleTags.env],debug:process.env[O.debug.env],machineId:process.env[O.machineId.env]}}var us=a.extend("config"),ds=["projectId","recordKey"],_t=null;function Ro(e){_t=M(O,ds,Eo,e),us("Resolved Currents config: %o",_t)}function Ae(){return _t}function Io(e){return{ciBuildId:e.ciBuildId,projectId:e.projectId,recordKey:e.key,tag:e.tag,removeTitleTags:e.removeTitleTags,disableTitleTags:e.disableTitleTags,debug:e.debug,machineId:e.machineId,reportDir:e.reportDir}}var $=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Uo=u(require("fs-extra")),vo=require("jest-cli"),Do=u(require("tmp"));var Ao=require("lodash");function _o(e){let t=[];for(let[r,o]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&t.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{t.push(`--${r}=${n}`)}):t.push(`--${r}=${o}`));return t.join(" ")}var To=require("lodash"),ls=["bail","clearCache","collectCoverage","collectCoverageFrom","color","colors","config","coverage","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","debug","detectLeaks","detectOpenHandles","errorOnDeprecated","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","notify","notifyMode","openHandlesTimeout","outputFile","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function Oo(e){return(0,To.omit)(e,...ls)}var wo=u(require("fs")),xo=require("jest-config"),Tt=require("lodash"),Ot=u(require("path"));function Se(e,t){return(...r)=>new Promise((o,n)=>{let s=0,c=()=>{s++;try{let p=e(...r);o(p)}catch(p){if(s>=t.length)n(p);else{let m=t[s-1];setTimeout(c,m)}}};c()})}var yo=u(require("fs-extra")),fs=u(require("path"));async function Ue(e){let t=await yo.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Po=a.extend("jest-discovery");async function bo(e){try{let{config:t,configPath:r}=await(0,xo.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],s=(0,Tt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(m=>typeof m!="string"?(0,Tt.omit)(m,n):m)),s.rootDir&&Object.keys(s).length===1)return null;let c=Ot.default.resolve(r?Ot.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(s,null,2)}`;return Po("configFileContent: %O",p),wo.default.writeFileSync(c,p),await Se(Ue,[200,200,200,200,200,1e3])(c),c}catch(t){return C("Failed to recreate the config file"),Po("error %o",t),null}}async function So(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Oo(r),n=_o(o),s=r.config,c=await bo(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,Ao.isEmpty)(m)),configFilePath:c}}var gs=a.extend("jest-discovery");async function No(e,t){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await So(t);try{let n=Do.default.fileSync({postfix:".json"});return gs("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,vo.run)(r.concat(["--openHandlesTimeout=0"])),await Se(Ue,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await q(n.name)}catch(n){return C("Failed to obtain the jest full test suite:",n),[]}finally{o&&Uo.default.unlinkSync(o)}}var ve=class extends ${constructor(t){super(t)}async getFullTestSuite(){return No(this.config.frameworkConfig,this.config.cliArgs)}};var Go=u(require("fs-extra"));var Ho=require("path"),jo=require("xml2js");var Mo=require("lodash"),Bo=u(require("crypto"));function ko(e,t,r,o){let n=z(e.failure),s=n.length>0,c=t?.timestamp??"";return{_t:De(c),testId:Pt(ne(e.name,o).join(", "),o),title:ne(e.name,o),state:s?"failed":"passed",isFlaky:Cs(),expectedStatus:s?"skipped":"passed",timeout:hs(),location:Es(t?.file??""),retries:Rs(n),attempts:Is(e,n,wt(c),r)}}function Pt(e,t){let r=`${e}${t}`;return Bo.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function De(e){return Fo(e)?new Date(e).getTime():new Date().getTime()}function wt(e){return Fo(e)?new Date(e).toISOString():new Date().toISOString()}function Fo(e){let t=new Date(e);return!isNaN(t.getTime())}function ne(e,t){return[t,e].filter(Boolean)}function Cs(){return!1}function hs(){return 0}function Es(e){return{column:1,file:e,line:1}}function Rs(e){let t=0;return e.forEach(r=>{typeof r!="string"&&t++}),t}function Is(e,t,r,o){let n=e.time?Ne(e.time):0;return t.length===0?[{_s:"passed",attempt:0,workerIndex:1,parallelIndex:1,startTime:r,steps:[],duration:n,status:"passed",stdout:Lo(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.reduce((s,c,p)=>{if(c!=="true"&&c!=="false"){let m=Ts(c);s.push({_s:"failed",attempt:p,workerIndex:1,parallelIndex:1,startTime:Os(o,r),steps:[],duration:n,status:"failed",stdout:Lo(e?.["system-out"]),stderr:_s(e?.["system-err"]),errors:m,error:m[0]})}return s},[])}function Lo(e){return e?[e]:[]}function _s(e){return e?[e]:[]}function Ts(e){return e==="true"||e==="false"?[]:[typeof e=="string"?{message:e}:{message:e.message,stack:e._,value:e.type}]}function Os(e,t){let r=De(t)+e;return new Date(r).toISOString()}function z(e){return e?Array.isArray(e)?e:[e]:[]}function ys(e){return Math.round(e*1e3)}function Ne(e){let t=parseFloat(e);return isNaN(t)?0:ys(t)}function Le(e,t,r){let o=(0,Mo.isNumber)(r)&&r>0,n=!!e.id&&yt(t,"id",e.id);if(e.file){let s=yt(t,"file",e.file);return s&&!n?`${e.file} - ${e.id}`:s&&o?`${e.file} - ${r}`:e.file}if(e.name){let s=yt(t,"name",e.name);return s&&!n?`${e.name} - ${e.id}`:s&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function yt(e,t,r){return e.filter(n=>n[t]===r).length>1}var Ps=a.extend("junit-discovery");async function Ko(e){console.time(g("@currents/junit:fullTestSuite-ready"));try{Ps("running scanner: %o",e);let t=(0,Ho.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=Go.default.readFileSync(t,"utf-8"),o=await(0,jo.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return ws(o)}catch(t){return C("Failed to obtain the junit full test suite:",t),[]}}function ws(e){let t=[],r=z(e.testsuites?.testsuite),o={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(n=>{let s=Le(n,r);z(n?.testcase)?.forEach(p=>{let m={title:ne(p.name,s),spec:s,tags:[],testId:Pt(ne(p.name,s).join(", "),s)};o.tests.push(m)})}),t.push(o),t}var Me=class extends ${constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Ko(this.reportDir)}};function $o(e,t){switch(e.framework){case"jest":return new ve(e);case"junit":return new Me(e,t);default:return new $(e)}}var te=u(require("fs-extra")),k=u(require("path"));async function Vo(e){let t=await xs(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??k.default.join(t,"config.json")}}async function xs(e){return e?(await Be(e),e):bs((0,k.join)(process.cwd(),".currents"))}async function bs(e){let t=await te.default.readdir(e),r=null;for(let o of t){let n=k.default.join(e,o),s=await te.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,k.resolve)(e,r.name):null}async function Be(e){try{return await te.default.pathExists(e)}catch{return C("Error checking if path exists:",C),!1}}async function Jo(e){let t=k.default.join(e,"instances");return As(t)}async function As(e){let t=await te.default.readdir(e),r=[];for(let o of t){let n=k.default.join(e,o);(await te.default.stat(n)).isFile()&&r.push(n)}return r}async function xt(){let e=Ae();if(!e)throw new Error("Currents config is missing!");let t=await Vo(e);Mt(Ds(t.reportDir)),a("Reporter options: %o",t),x("Report directory: %s",t.reportDir);let r=await q(t.configFilePath);a("Report config: %o",r);let o=await Jo(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Us(t.reportDir),s=await Be(n),c=vs(t.reportDir),p=null;if(s){let U=await q(n);h("Marker file detected. The report was already uploaded: %o",{runUrl:U.response.runUrl,isoDate:U.isoDate}),await Be(c)&&(p=await q(c),a("Full test suite file detected: %s",c))}if(p)a("The discovery stage was skipped");else{if(p=await $o(r,t.reportDir).getFullTestSuite(),Ns(p))throw new Error("Failed to discover the full test suite!");await S(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,d={currents:e},f={type:r.framework,version:r.frameworkVersion,clientVersion:ce,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},l=he.userFacingNanoid(),I=Z(e.ciBuildId),b={};for await(let U of o){let A=await q(U);b[A.groupId]||(b[A.groupId]=[]),b[A.groupId].push(A)}for await(let U of Object.keys(b)){let A=b[U],Ve=U;m&&(a("Default group found: %s, overwriting the group in the results",m),Ve=m,A=A.map(V=>({...V,groupId:m})));try{let V=await Ss({ci:I,group:Ve,instances:A,fullTestSuite:p,config:d,machineId:l,framework:f});a("Api response: %o",V),x("[%s] Run created: %s",Ve,V.runUrl);let Xn={response:V,isoDate:new Date().toISOString()};await S(n,JSON.stringify(Xn)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(V){throw a("Failed to upload the results to the dashboard"),V}}}async function Ss({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:c}){let p=await lo(),m=await ho(),d={browserName:"node",browserVersion:qo.default.coerce(process.version)?.version},{currents:f}=n,I={platform:{...d,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:f.projectId,recordKey:f.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:f.tag??[],machineId:f.machineId??s,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",_(I)),Rr(I)}function Us(e){return ke.default.join(e,"upload.marker.json")}function vs(e){return ke.default.join(e,"fullTestSuite.json")}function Ds(e){return ke.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Ns(e){return e.length===0||e.some(t=>t.tests.length===0)}var Ls=a.extend("cli");async function Wo(e){await D(async t=>{Wt(t);let r=Ee();Ls("Config: %o",de(r)),await rt()},e)}var F=require("@commander-js/extra-typings");var Yo=new F.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(T(B,"apiKey")),zo=new F.Option("-o, --output <path>","Path to the file where output will be written").env(T(B,"output")),Qo=new F.Option("--ci-build-id <id>","Unique identifier for the run"),Xo=new F.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(T(B,"projectId")),Zo=new F.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(X),en=new F.Option("--debug","Enable debug logging").env(T(B,"debug")).default(!1),tn=new F.Option("-b, --branch <branch>","Branch name for the recorded run"),rn=new F.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Fe="api",Ms=e=>`
|
|
18
18
|
|
|
19
19
|
${on.default.bold("Examples")}
|
|
20
20
|
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";var bt=Object.create;var B=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var Mt=Object.getPrototypeOf,wt=Object.prototype.hasOwnProperty;var pe=(e,t)=>{for(var r in t)B(e,r,{get:t[r],enumerable:!0})},le=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vt(t))!wt.call(e,n)&&n!==r&&B(e,n,{get:()=>t[n],enumerable:!(o=xt(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?bt(Mt(e)):{},le(t||!e||!e.__esModule?B(r,"default",{value:e,enumerable:!0}):r,e)),Ft=e=>le(B({},"__esModule",{value:!0}),e);var Hr={};pe(Hr,{handleCurrentsReport:()=>Lt});module.exports=Ft(Hr);var ge=require("debug"),kt=c(require("fs-extra")),a=(0,ge.debug)("currents"),Ht=null;function de(e){Ht=e}var b={};pe(b,{getNanoid:()=>Gt,userFacingNanoid:()=>Q});var q=require("nanoid"),Ee="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Gt=(e=16)=>(0,q.customAlphabet)(Ee,e)(),Q=(0,q.customAlphabet)(Ee,12);var p=require("lodash");var x=a.extend("ci"),jt=(e,...t)=>(0,p.chain)(t).compact().join(e).value(),Vt=(e,t)=>(0,p.set)(e,(0,p.camelCase)(t),process.env[t]),u=e=>(0,p.transform)(e,Vt,{}),Kt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,$t=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Jt=()=>(0,p.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Yt=()=>process.env.bamboo_buildNumber,qt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,Qt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Wt=()=>(0,p.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),zt=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Xt=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Zt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,er=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,tr={appveyor:"APPVEYOR",azure:$t,awsCodeBuild:Jt,bamboo:Yt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:qt,codeshipPro:Qt,concourse:Wt,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:zt,goCD:"GO_JOB_NAME",googleCloud:Xt,jenkins:Zt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Kt,travis:"TRAVIS",wercker:er,netlify:"NETLIFY",layerci:"LAYERCI"};function rr(){let{env:e}=process;return(0,p.findKey)(tr,t=>{if((0,p.isString)(t))return e[t];if((0,p.isFunction)(t))return t()})}var fe=()=>({appveyor:u(["APPVEYOR_JOB_ID","APPVEYOR_ACCOUNT_NAME","APPVEYOR_PROJECT_SLUG","APPVEYOR_BUILD_NUMBER","APPVEYOR_BUILD_VERSION","APPVEYOR_PULL_REQUEST_NUMBER","APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH"]),azure:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:u(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:u(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:u(["BITBUCKET_REPO_SLUG","BITBUCKET_REPO_OWNER","BITBUCKET_BUILD_NUMBER","BITBUCKET_PARALLEL_STEP","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT"]),buildkite:u(["BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH"]),circle:u(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:u(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:u(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:u(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:u(["CF_BUILD_ID","CF_BUILD_URL","CF_CURRENT_ATTEMPT","CF_STEP_NAME","CF_PIPELINE_NAME","CF_PIPELINE_TRIGGER_ID","CF_PULL_REQUEST_ID","CF_PULL_REQUEST_IS_FORK","CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_TARGET"]),drone:u(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:u(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:u(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT"]),goCD:u(["GO_SERVER_URL","GO_ENVIRONMENT_NAME","GO_PIPELINE_NAME","GO_PIPELINE_COUNTER","GO_PIPELINE_LABEL","GO_STAGE_NAME","GO_STAGE_COUNTER","GO_JOB_NAME","GO_TRIGGER_USER","GO_REVISION","GO_TO_REVISION","GO_FROM_REVISION","GO_MATERIAL_HAS_CHANGED"]),googleCloud:u(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:u(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:u(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:u(["SHIPPABLE_BUILD_ID","SHIPPABLE_BUILD_NUMBER","SHIPPABLE_COMMIT_RANGE","SHIPPABLE_CONTAINER_NAME","SHIPPABLE_JOB_ID","SHIPPABLE_JOB_NUMBER","SHIPPABLE_REPO_SLUG","IS_FORK","IS_GIT_TAG","IS_PRERELEASE","IS_RELEASE","REPOSITORY_URL","REPO_FULL_NAME","REPO_NAME","BUILD_URL","BASE_BRANCH","HEAD_BRANCH","IS_PULL_REQUEST","PULL_REQUEST","PULL_REQUEST_BASE_BRANCH","PULL_REQUEST_REPO_FULL_NAME"]),teamcity:null,teamfoundation:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:u(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:u(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:u(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),or=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:jt(`
|
|
2
|
-
`,e.APPVEYOR_REPO_COMMIT_MESSAGE,e.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:e.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:e.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:e.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:e.CODEBUILD_SOURCE_REPO_URL},azure:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR,authorEmail:e.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:e.bamboo_planRepository_revision,branch:e.bamboo_planRepository_branch,authorName:e.bamboo_planRepository_username,remoteOrigin:e.bamboo_planRepository_repositoryURL},bitbucket:{sha:e.BITBUCKET_COMMIT,branch:e.BITBUCKET_BRANCH},buildkite:{sha:e.BUILDKITE_COMMIT,branch:e.BUILDKITE_BRANCH,message:e.BUILDKITE_MESSAGE,authorName:e.BUILDKITE_BUILD_CREATOR,authorEmail:e.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:e.BUILDKITE_REPO,defaultBranch:e.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:e.CIRCLE_SHA1,branch:e.CIRCLE_BRANCH,authorName:e.CIRCLE_USERNAME,remoteOrigin:e.CIRCLE_REPOSITORY_URL},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeFresh:{sha:e.CF_REVISION,branch:e.CF_BRANCH,message:e.CF_COMMIT_MESSAGE,authorName:e.CF_COMMIT_AUTHOR},drone:{sha:e.DRONE_COMMIT_SHA,branch:e.DRONE_SOURCE_BRANCH,message:e.DRONE_COMMIT_MESSAGE,authorName:e.DRONE_COMMIT_AUTHOR,authorEmail:e.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:e.DRONE_GIT_HTTP_URL,defaultBranch:e.DRONE_REPO_BRANCH},githubActions:{sha:e.GITHUB_SHA,branch:e.GH_BRANCH||e.GITHUB_REF,defaultBranch:e.GITHUB_BASE_REF,remoteBranch:e.GITHUB_HEAD_REF,runAttempt:e.GITHUB_RUN_ATTEMPT},gitlab:{sha:e.CI_COMMIT_SHA,branch:e.CI_COMMIT_REF_NAME,message:e.CI_COMMIT_MESSAGE,authorName:e.GITLAB_USER_NAME,authorEmail:e.GITLAB_USER_EMAIL,remoteOrigin:e.CI_REPOSITORY_URL,defaultBranch:e.CI_DEFAULT_BRANCH},googleCloud:{sha:e.COMMIT_SHA,branch:e.BRANCH_NAME},jenkins:{sha:e.GIT_COMMIT,branch:e.GIT_BRANCH},semaphore:{sha:e.SEMAPHORE_GIT_SHA,branch:e.SEMAPHORE_GIT_BRANCH,remoteOrigin:e.SEMAPHORE_GIT_REPO_SLUG},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},_e=e=>{let t=Re();return t?(0,p.chain)(e()).get(t).value():{}};function nr(){return(0,p.chain)(fe()).omitBy(p.isNull).keys().value()}function sr(e){return e&&nr().includes(e)}function Re(){let e=rr();return x("detected CI provider name: %s",e),e||null}function ir(){return _e(fe)}function Ie(){return _e(or)}function Te(e){let t=ir(),r=Re(),o=ar(e,r);return x("detected CI provider: %s",r),x("detected CI params: %O",t),x("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function ar(e,t){return e?{source:"user",value:e}:sr(t)?{source:"server",value:null}:{source:"random",value:`auto:${Q()}`}}var he=require("@currents/commit-info"),Oe=require("lodash");var v=require("lodash");var W=a.extend("ci-git");function Ce(e){W("git commit existing info: %O",e);let t=Ie();W("commit info from provider environment variables: %O",t);let r=(0,v.transform)(e,(o,n,i)=>{let l=n||(t?t[i]:null);return o[i]=(0,v.defaultTo)(l,null)});return W("combined git and environment variables from provider: %O",r),r}var cr=async()=>{let e=await(0,he.commitInfo)();return Ce({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Se=(0,Oe.memoize)(cr);var Pe=c(require("getos")),Ue=require("lodash"),R=require("os"),Ae=require("util"),ur=async()=>{if((0,R.platform)()==="linux")try{let e=await(0,Ae.promisify)(Pe.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,R.release)()}catch{return(0,R.release)()}return(0,R.release)()},mr=async()=>{let e=await ur();return{osName:(0,R.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,R.freemem)(),total:(0,R.totalmem)()}}},De=(0,Ue.memoize)(mr);var Ne={name:"@currents/cmd",version:"1.6.
|
|
2
|
+
`,e.APPVEYOR_REPO_COMMIT_MESSAGE,e.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:e.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:e.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:e.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:e.CODEBUILD_SOURCE_REPO_URL},azure:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR,authorEmail:e.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:e.bamboo_planRepository_revision,branch:e.bamboo_planRepository_branch,authorName:e.bamboo_planRepository_username,remoteOrigin:e.bamboo_planRepository_repositoryURL},bitbucket:{sha:e.BITBUCKET_COMMIT,branch:e.BITBUCKET_BRANCH},buildkite:{sha:e.BUILDKITE_COMMIT,branch:e.BUILDKITE_BRANCH,message:e.BUILDKITE_MESSAGE,authorName:e.BUILDKITE_BUILD_CREATOR,authorEmail:e.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:e.BUILDKITE_REPO,defaultBranch:e.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:e.CIRCLE_SHA1,branch:e.CIRCLE_BRANCH,authorName:e.CIRCLE_USERNAME,remoteOrigin:e.CIRCLE_REPOSITORY_URL},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeFresh:{sha:e.CF_REVISION,branch:e.CF_BRANCH,message:e.CF_COMMIT_MESSAGE,authorName:e.CF_COMMIT_AUTHOR},drone:{sha:e.DRONE_COMMIT_SHA,branch:e.DRONE_SOURCE_BRANCH,message:e.DRONE_COMMIT_MESSAGE,authorName:e.DRONE_COMMIT_AUTHOR,authorEmail:e.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:e.DRONE_GIT_HTTP_URL,defaultBranch:e.DRONE_REPO_BRANCH},githubActions:{sha:e.GITHUB_SHA,branch:e.GH_BRANCH||e.GITHUB_REF,defaultBranch:e.GITHUB_BASE_REF,remoteBranch:e.GITHUB_HEAD_REF,runAttempt:e.GITHUB_RUN_ATTEMPT},gitlab:{sha:e.CI_COMMIT_SHA,branch:e.CI_COMMIT_REF_NAME,message:e.CI_COMMIT_MESSAGE,authorName:e.GITLAB_USER_NAME,authorEmail:e.GITLAB_USER_EMAIL,remoteOrigin:e.CI_REPOSITORY_URL,defaultBranch:e.CI_DEFAULT_BRANCH},googleCloud:{sha:e.COMMIT_SHA,branch:e.BRANCH_NAME},jenkins:{sha:e.GIT_COMMIT,branch:e.GIT_BRANCH},semaphore:{sha:e.SEMAPHORE_GIT_SHA,branch:e.SEMAPHORE_GIT_BRANCH,remoteOrigin:e.SEMAPHORE_GIT_REPO_SLUG},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},_e=e=>{let t=Re();return t?(0,p.chain)(e()).get(t).value():{}};function nr(){return(0,p.chain)(fe()).omitBy(p.isNull).keys().value()}function sr(e){return e&&nr().includes(e)}function Re(){let e=rr();return x("detected CI provider name: %s",e),e||null}function ir(){return _e(fe)}function Ie(){return _e(or)}function Te(e){let t=ir(),r=Re(),o=ar(e,r);return x("detected CI provider: %s",r),x("detected CI params: %O",t),x("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function ar(e,t){return e?{source:"user",value:e}:sr(t)?{source:"server",value:null}:{source:"random",value:`auto:${Q()}`}}var he=require("@currents/commit-info"),Oe=require("lodash");var v=require("lodash");var W=a.extend("ci-git");function Ce(e){W("git commit existing info: %O",e);let t=Ie();W("commit info from provider environment variables: %O",t);let r=(0,v.transform)(e,(o,n,i)=>{let l=n||(t?t[i]:null);return o[i]=(0,v.defaultTo)(l,null)});return W("combined git and environment variables from provider: %O",r),r}var cr=async()=>{let e=await(0,he.commitInfo)();return Ce({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Se=(0,Oe.memoize)(cr);var Pe=c(require("getos")),Ue=require("lodash"),R=require("os"),Ae=require("util"),ur=async()=>{if((0,R.platform)()==="linux")try{let e=await(0,Ae.promisify)(Pe.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,R.release)()}catch{return(0,R.release)()}return(0,R.release)()},mr=async()=>{let e=await ur();return{osName:(0,R.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,R.freemem)(),total:(0,R.totalmem)()}}},De=(0,Ue.memoize)(mr);var Ne={name:"@currents/cmd",version:"1.6.6",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^9.0.3","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.13","@types/node":"^22.10.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.8"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.9","axios-retry":"^4.5.0",chalk:"^4.1.2",commander:"^12.1.0",debug:"^4.4.0",dotenv:"^16.4.7",execa:"^9.5.1","fs-extra":"^11.2.0",getos:"^3.2.1",glob:"^11.0.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.6.0",unzipper:"^0.12.3",uuid:"^11.0.3",xml2js:"^0.6.2"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var ye=Ne.version;function lr(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function y(e){return lr(e,["recordKey","key"])}var gr=[];function z(e){gr.push(e)}var _=c(require("chalk")),U=c(require("util"));var Le=[],Be=[];var be=(...e)=>{let t=U.default.format(...e);z(t),console.log(t)},dr=(...e)=>{let t=U.default.format(...e);z(t),console.error(t)},X=be,g=(...e)=>{let t=U.default.format(...e);return Be.push(t),a("WARNING: ",t),be(_.default.bgYellow.black(" WARNING "),t)};var d=(...e)=>{let t=U.default.format(...Er(e));return Le.push(t),a("ERROR: ",U.default.format(...e)),dr(_.default.bgRed.white(" ERROR "),t)};var Er=e=>e.map(t=>t instanceof Error?t.message:t),M=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
3
|
`)),Oo=_.default.cyan,So=_.default.blueBright,Po=_.default.red,Uo=_.default.yellow,Ao=_.default.green,Do=_.default.gray,No=_.default.white,yo=_.default.black,Lo=_.default.magenta,A=_.default.dim,Bo=_.default.bold;var Z=c(require("fs-extra")),xe=require("path"),_r=require("uuid");async function S(e){try{return await Z.default.readJson(e)}catch(t){throw d("Error while reading JSON file: %s",e,t),d}}async function ee(e,t){try{return await Z.default.writeFile(e,t,"utf8"),e}catch(r){throw d(`Error writing file at ${e}:`,r),r}}var Rr=c(require("crypto"));var $=c(require("path")),yt=c(require("semver"));var Xe=c(require("lodash"));var je=c(require("axios")),Ve=c(require("axios-retry")),Ke=c(require("lodash"));var ve=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Me=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",we=()=>3e4;var te=require("axios"),re=c(require("pretty-ms"));var Fe=a.extend("http"),w=e=>[3*1e3,15*1e3,30*1e3][e-1],ke=e=>(Fe("isRetriableError: %o",{message:e.message,code:"code"in e?e.code:void 0,status:"response"in e?e.response?.status:void 0,headers:"response"in e?e.response?.headers:void 0,data:"response"in e?e.response?.data:void 0,isAxiosError:(0,te.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,te.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),F=()=>3;function He(e,t,r){Fe("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(w(e)),e,F()),g("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(w(e)),e,F())}var oe=a.extend("http");var ne={api:null,restApi:null};function Ir(e){let t=e==="api"?ve():Me();oe("client base url: %s",t);let r=je.default.create({baseURL:t,timeout:we(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let i={...Ke.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?oe("network request retry: %o",Ge({...i,baseURL:t,isRetry:!0})):oe("network request: %o",Ge(i)),o}),(0,Ve.default)(r,{retries:F(),retryCondition:ke,retryDelay:w,shouldResetTimeout:!0,onRetry:He}),r}function $e(e){return ne[e]===null&&(ne[e]=Ir(e)),ne[e]}function Ge(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":Tr(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Tr(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var qe=require("axios"),Qe=c(require("lodash")),f=require("ts-pattern");function We(e){(0,f.match)(e).when(qe.isAxiosError,Cr).otherwise(()=>{g("Unexpected error while sending network request: %s",e)})}function Cr(e){return(0,f.match)(e).with({code:"ECONNABORTED"},()=>{g("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{g("Network connection aborted")}).with({code:"ECONNRESET"},()=>{g("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{g("Network connection timeout")}).with({response:f.P.not(f.P.nullish)},t=>{hr(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{g(`[currents] Unexpected network error: %s
|
|
4
4
|
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function hr(e,{status:t,data:r}){(0,f.match)(t).with(401,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
|
|
5
5
|
%o`,r)}).with(429,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Or(e,r)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
|