@currents/cmd 1.6.6 → 1.6.8
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 +30 -30
- package/dist/index.js +9 -9
- package/package.json +7 -7
package/dist/bin/index.js
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
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=
|
|
4
|
-
- as environment variable: ${g(T(e,
|
|
5
|
-
- as CLI flag of the command: ${g(
|
|
6
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function
|
|
7
|
-
%o`,r)}).with(429,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{
|
|
8
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function
|
|
9
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var
|
|
2
|
+
"use strict";var ti=Object.create;var We=Object.defineProperty;var ri=Object.getOwnPropertyDescriptor;var oi=Object.getOwnPropertyNames;var ni=Object.getPrototypeOf,ii=Object.prototype.hasOwnProperty;var si=(e,t)=>{for(var r in t)We(e,r,{get:t[r],enumerable:!0})},ai=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of oi(t))!ii.call(e,n)&&n!==r&&We(e,n,{get:()=>t[n],enumerable:!(o=ri(t,n))||o.enumerable});return e};var d=(e,t,r)=>(r=e!=null?ti(ni(e)):{},ai(t||!e||!e.__esModule?We(r,"default",{value:e,enumerable:!0}):r,e));var fg=require("source-map-support/register");var Xn=require("@commander-js/extra-typings");var kt={name:"@currents/cmd",version:"1.6.8",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":"^10.0.0","@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.15","@types/node":"^22.13.0","@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:"^6.0.1",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.9"},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.5",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 pe=kt.version;var xt=require("@commander-js/extra-typings");var mi=[];function Ye(e){mi.push(e)}var y=d(require("chalk")),N=d(require("util"));var ze=require("debug"),pi=d(require("fs-extra")),s=(0,ze.debug)("currents"),ui=null;function Ft(){ze.debug.enable("currents,currents:*")}function Gt(e){ui=e}var Ht=[],jt=[];var ue=(...e)=>{let t=N.default.format(...e);Ye(t),console.log(t)},di=(...e)=>{let t=N.default.format(...e);Ye(t),console.error(t)},b=ue,h=(...e)=>{let t=N.default.format(...e);return jt.push(t),s("WARNING: ",t),ue(y.default.bgYellow.black(" WARNING "),t)},V=(...e)=>{let t=N.default.format(...Kt(e));return s("WARNING: ",N.default.format(...e)),ue(y.default.bgYellow.black(" WARNING "),t)},de=(...e)=>ue(y.default.green.bold(N.default.format(...e))),E=(...e)=>{let t=N.default.format(...Kt(e));return Ht.push(t),s("ERROR: ",N.default.format(...e)),di(y.default.bgRed.white(" ERROR "),t)};var Kt=e=>e.map(t=>t instanceof Error?t.message:t),le=(e=2)=>console.log(Array(e).fill("").join(`
|
|
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=d(require("chalk"));function $t(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function fe(e){return $t(e,["apiKey"])}function _(e){return $t(e,["recordKey","key"])}var ge=class extends Error{};var G=d(require("fs-extra")),Ce=require("path"),Vt=require("uuid");async function J(e){try{return await G.default.readJson(e)}catch(t){throw E("Error while reading JSON file: %s",e,t),E}}async function q(e,t){try{return await G.default.writeFile(e,t,"utf8"),e}catch(r){throw E(`Error writing file at ${e}:`,r),r}}async function he(e,t){try{try{return await G.default.access(e),e}catch{return await G.default.writeFile(e,t,"utf8"),e}}catch(r){throw E(`Error writing file at ${e}:`,r),r}}async function Jt(e,t){if(t){await G.default.ensureDir(e);return}let r=(0,Ce.dirname)(e);await G.default.ensureDir(r)}function fi(){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=(0,Vt.v4)();return`${e}-${t}`}async function qt(e,t){let r=fi(),o=(0,Ce.join)(e,t,r);return Ee(o)}async function Ee(e){try{return await G.default.ensureDir(e),s("Folder created",e),e}catch(t){throw E(`Failed to create folder at ${e}:`,t),t}}var Wt=d(require("crypto"));function Re(e){return Wt.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var Ie={};si(Ie,{getNanoid:()=>gi,userFacingNanoid:()=>Xe});var Qe=require("nanoid"),Yt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",gi=(e=16)=>(0,Qe.customAlphabet)(Yt,e)(),Xe=(0,Qe.customAlphabet)(Yt,12);function zt(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 Ci(e,t){return e[t].cli}function hi(e,t){return e[t].name}function L(e,t,r,o){let n={...zt(o),...zt(r())};return t.forEach(a=>{if(!n[a])throw E(`${hi(e,a)} is required for Currents Reporter. Use the following methods to set the value:
|
|
4
|
+
- as environment variable: ${g(T(e,a))}
|
|
5
|
+
- as CLI flag of the command: ${g(Ci(e,a))}`),new ge("Missing required config variable")}),n}var Ei={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ri={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"}},M={...Ei,...Ri};function Qt(){return{apiKey:process.env[M.apiKey.env],debug:!!process.env[M.debug.env]}}var Ii=s.extend("config"),_i=["apiKey","projectId"],Ze=null;function Xt(e){Ze=L(M,_i,Qt,e),Ii("Resolved config: %o",fe(Ze))}function _e(){return Ze}var Pr=require("fs/promises");var Cr=d(require("lodash"));var sr=d(require("axios")),ar=d(require("axios-retry")),cr=d(require("lodash"));var Zt=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",er=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",tr=()=>3e4;var et=require("axios"),tt=d(require("pretty-ms"));var rr=s.extend("http"),Te=e=>[3*1e3,15*1e3,30*1e3][e-1],or=e=>(rr("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,et.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,et.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),Oe=()=>3;function nr(e,t,r){rr("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,tt.default)(Te(e)),e,Oe()),h("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,tt.default)(Te(e)),e,Oe())}var rt=s.extend("http");var ot={api:null,restApi:null};function Ti(e){let t=e==="api"?Zt():er();rt("client base url: %s",t);let r=sr.default.create({baseURL:t,timeout:tr(),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 a={...cr.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?rt("network request retry: %o",ir({...a,baseURL:t,isRetry:!0})):rt("network request: %o",ir(a)),o}),(0,ar.default)(r,{retries:Oe(),retryCondition:or,retryDelay:Te,shouldResetTimeout:!0,onRetry:nr}),r}function mr(e){return ot[e]===null&&(ot[e]=Ti(e)),ot[e]}function ir(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":Oi(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Oi(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var dr=require("axios"),lr=d(require("lodash")),w=require("ts-pattern");function fr(e){(0,w.match)(e).when(dr.isAxiosError,yi).otherwise(()=>{h("Unexpected error while sending network request: %s",e)})}function yi(e){return(0,w.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:w.P.not(w.P.nullish)},t=>{wi(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{h(`[currents] Unexpected network error: %s
|
|
6
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function wi(e,{status:t,data:r}){(0,w.match)(t).with(401,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
|
|
7
|
+
%o`,r)}).with(429,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Pi(e,r)}).otherwise(()=>{h(`[currents] Unexpected network response: %s
|
|
8
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function Pi(e,t){(0,w.match)(t).with({code:pr.MISSING_SUITE,message:w.P.string,errors:w.P.array(w.P.string)},async r=>{let{message:o,errors:n}=r;le(1),E(...ur(o,n))}).with({code:pr.RUN_EXPIRED,message:w.P.string},r=>{h(r.message)}).with({message:w.P.string,errors:w.P.array(w.P.string)},r=>{let{message:o,errors:n}=r;le(1),h(...ur(o,n)),le(1)}).otherwise(()=>{h(`[currents] Unexpected network response: %s
|
|
9
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var pr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function ur(e,t){return lr.default.isString(e)?t?.length===0?[e]:[e,`
|
|
10
10
|
${(t??[]).map(r=>` - ${r}`).join(`
|
|
11
11
|
`)}
|
|
12
|
-
`]:["Unexpected network error"]}var ur=a.extend("http");async function W(e,t,r=ir){try{let o=await r(e).request(t);return ur("network response: %o",{...dr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw ur("network error: %o",{code:n.code,message:n.message,url:n.config?.url,method:n.config?.method,status:n.response?.status,headers:n.response?.headers,data:n.response?.data}),pr(n),n}}var _e=a.extend("api");async function fr(e){try{return _e("Request params: %o",_(e)),W("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw _e("Failed to create cache:",t),t}}async function gr(e){try{return _e("Request params: %o",e),W("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw _e("Failed to retrieve cache:",t),t}}var hr=require("util"),Er=require("zlib");var Cr=a.extend("api"),Pi=(0,hr.promisify)(Er.gzip);async function Rr(e){try{Cr("Run params: %o",_(e));let t=await wi(JSON.stringify(e));return W("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Cr("Failed to create the run:",t),t}}async function wi(e){try{return await Pi(e)}catch(t){throw C("Failed to compress run payload:",t),t}}var Ir=a.extend("api");async function _r(e,t){try{return Ir("Run params: %o",t),W("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw Ir("Failed to obtain run data:",r),r}}async function rt(){try{let e=Ee();if(!e)throw new Error("Config is missing!");let t=e.ciBuildId?{projectId:e.projectId,ciBuildId:e.ciBuildId,pwLastRun:e.pwLastRun}:{projectId:e.projectId,branch:e.branch,tag:e.tag,pwLastRun:e.pwLastRun},r=await _r(e.apiKey,t);await xi(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function xi(e,t){let r=JSON.stringify(e,null,2);t.output?(await jt(t.output),await(0,Tr.writeFile)(t.output,r,"utf-8")):x(r)}var co=require("axios"),ht=u(require("path"));var w=require("@commander-js/extra-typings");var bi={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ai={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},presetOutput:{name:"Preset output path",cli:"--preset-output"},path:{name:"Paths to cache",cli:"--path"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue when upload path missing",cli:"--continue"}},Si={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue on cache miss",cli:"--continue"}},H={...bi,...Ai,...Si};function ot(){return{recordKey:process.env[H.recordKey.env],debug:process.env[H.debug.env]}}var Or=a.extend("config"),yr=["recordKey"],Y;function Pr(e){Y={type:"SET_COMMAND_CONFIG",values:M(H,yr,ot,e)},Or("Resolved config: %o",{...Y,values:_(Y.values)})}function wr(e){Y={type:"GET_COMMAND_CONFIG",values:M(H,yr,ot,e)},Or("Resolved config: %o",{...Y,values:_(Y.values)})}function j(){return Y}function xr(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,presetOutput:e.presetOutput,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}function br(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,path:e.path,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}var Ar=require("@commander-js/extra-typings");function X(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function D(e,t){try{t.debug&&Lt(),await e(t),process.exit(0)}catch(r){C(r.message);let o=r instanceof Ar.CommanderError?r.exitCode:1;process.exit(o)}}var nt=new w.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(T(H,"recordKey")),it=new w.Option("--debug","Enable debug logging").env(T(H,"debug")).default(!1),st=new w.Option("--id <id>","The ID the data is saved under in the cache"),Sr=new w.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(X),Te=(t=>(t.lastRun="last-run",t))(Te||{}),at=new w.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(Te)),Ur=new w.Option("--output-dir <dir>","Path to the directory where output will be written"),vr=new w.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),oe=".currents_env",Dr=new w.Option("--preset-output <path>","Path to the file containing the preset output").default(oe),ct=new w.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(Nr),mt=new w.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(Nr);function Nr(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new w.InvalidArgumentError("A positive integer is expected.");return t}var Lr=new w.Option("--continue","Continue the script execution if the cache is not found").default(!1),Mr=new w.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var R=require("lodash");var Oe=a.extend("ci"),Ui=(e,...t)=>(0,R.chain)(t).compact().join(e).value(),vi=(e,t)=>(0,R.set)(e,(0,R.camelCase)(t),process.env[t]),E=e=>(0,R.transform)(e,vi,{}),Di=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Ni=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Li=()=>(0,R.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Mi=()=>process.env.bamboo_buildNumber,Bi=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,ki=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Fi=()=>(0,R.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Gi=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Hi=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,ji=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Ki=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,$i={appveyor:"APPVEYOR",azure:Ni,awsCodeBuild:Li,bamboo:Mi,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Bi,codeshipPro:ki,concourse:Fi,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Gi,goCD:"GO_JOB_NAME",googleCloud:Hi,jenkins:ji,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Di,travis:"TRAVIS",wercker:Ki,netlify:"NETLIFY",layerci:"LAYERCI"};function Vi(){let{env:e}=process;return(0,R.findKey)($i,t=>{if((0,R.isString)(t))return e[t];if((0,R.isFunction)(t))return t()})}var Br=()=>({appveyor:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:E(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:E(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:E(["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:E(["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:E(["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:E(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:E(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:E(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:E(["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:E(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:E(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:E(["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:E(["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:E(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:E(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:E(["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:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:E(["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:E(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:E(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Ji=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Ui(`
|
|
13
|
-
`,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}}},
|
|
14
|
-
EXTRA_PWCP_FLAGS="${
|
|
12
|
+
`]:["Unexpected network error"]}var gr=s.extend("http");async function W(e,t,r=mr){try{let o=await r(e).request(t);return gr("network response: %o",{...Cr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw gr("network error: %o",{code:n.code,message:n.message,url:n.config?.url,method:n.config?.method,status:n.response?.status,headers:n.response?.headers,data:n.response?.data}),fr(n),n}}var ye=s.extend("api");async function Er(e){try{return ye("Request params: %o",_(e)),W("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ye("Failed to create cache:",t),t}}async function Rr(e){try{return ye("Request params: %o",e),W("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ye("Failed to retrieve cache:",t),t}}var _r=require("util"),Tr=require("zlib");var Ir=s.extend("api"),bi=(0,_r.promisify)(Tr.gzip);async function Or(e){try{Ir("Run params: %o",_(e));let t=await xi(JSON.stringify(e));return W("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Ir("Failed to create the run:",t),t}}async function xi(e){try{return await bi(e)}catch(t){throw E("Failed to compress run payload:",t),t}}var yr=s.extend("api");async function wr(e,t){try{return yr("Run params: %o",t),W("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw yr("Failed to obtain run data:",r),r}}async function nt(){try{let e=_e();if(!e)throw new Error("Config is missing!");let t=e.ciBuildId?{projectId:e.projectId,ciBuildId:e.ciBuildId,pwLastRun:e.pwLastRun}:{projectId:e.projectId,branch:e.branch,tag:e.tag,pwLastRun:e.pwLastRun},r=await wr(e.apiKey,t);await Si(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw s("Failed to get run data"),e}}async function Si(e,t){let r=JSON.stringify(e,null,2);t.output?(await Jt(t.output),await(0,Pr.writeFile)(t.output,r,"utf-8")):b(r)}var lo=require("axios"),Rt=d(require("path"));var P=require("@commander-js/extra-typings");var Ai={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ui={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},presetOutput:{name:"Preset output path",cli:"--preset-output"},path:{name:"Paths to cache",cli:"--path"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue when upload path missing",cli:"--continue"}},vi={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue on cache miss",cli:"--continue"}},H={...Ai,...Ui,...vi};function it(){return{recordKey:process.env[H.recordKey.env],debug:process.env[H.debug.env]}}var br=s.extend("config"),xr=["recordKey"],Y;function Sr(e){Y={type:"SET_COMMAND_CONFIG",values:L(H,xr,it,e)},br("Resolved config: %o",{...Y,values:_(Y.values)})}function Ar(e){Y={type:"GET_COMMAND_CONFIG",values:L(H,xr,it,e)},br("Resolved config: %o",{...Y,values:_(Y.values)})}function j(){return Y}function Ur(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,presetOutput:e.presetOutput,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}function vr(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,path:e.path,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}var Dr=require("@commander-js/extra-typings");function X(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function v(e,t){try{t.debug&&Ft(),await e(t),process.exit(0)}catch(r){E(r.message);let o=r instanceof Dr.CommanderError?r.exitCode:1;process.exit(o)}}var st=new P.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(T(H,"recordKey")),at=new P.Option("--debug","Enable debug logging").env(T(H,"debug")).default(!1),ct=new P.Option("--id <id>","The ID the data is saved under in the cache"),Nr=new P.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(X),we=(t=>(t.lastRun="last-run",t))(we||{}),mt=new P.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(we)),Lr=new P.Option("--output-dir <dir>","Path to the directory where output will be written"),Mr=new P.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),ne=".currents_env",Br=new P.Option("--preset-output <path>","Path to the file containing the preset output").default(ne),pt=new P.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(kr),ut=new P.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(kr);function kr(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new P.InvalidArgumentError("A positive integer is expected.");return t}var Fr=new P.Option("--continue","Continue the script execution if the cache is not found").default(!1),Gr=new P.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var I=require("lodash");var Pe=s.extend("ci"),Di=(e,...t)=>(0,I.chain)(t).compact().join(e).value(),Ni=(e,t)=>(0,I.set)(e,(0,I.camelCase)(t),process.env[t]),R=e=>(0,I.transform)(e,Ni,{}),Li=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Mi=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Bi=()=>(0,I.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),ki=()=>process.env.bamboo_buildNumber,Fi=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,Gi=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Hi=()=>(0,I.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),ji=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Ki=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,$i=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Vi=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Ji={appveyor:"APPVEYOR",azure:Mi,awsCodeBuild:Bi,bamboo:ki,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Fi,codeshipPro:Gi,concourse:Hi,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:ji,goCD:"GO_JOB_NAME",googleCloud:Ki,jenkins:$i,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Li,travis:"TRAVIS",wercker:Vi,netlify:"NETLIFY",layerci:"LAYERCI"};function qi(){let{env:e}=process;return(0,I.findKey)(Ji,t=>{if((0,I.isString)(t))return e[t];if((0,I.isFunction)(t))return t()})}var Hr=()=>({appveyor:R(["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:R(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:R(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:R(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:R(["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:R(["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:R(["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:R(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:R(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:R(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:R(["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:R(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:R(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:R(["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:R(["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:R(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:R(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:R(["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:R(["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:R(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:R(["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:R(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:R(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Wi=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Di(`
|
|
13
|
+
`,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}}},jr=e=>{let t=Kr();return t?(0,I.chain)(e()).get(t).value():{}};function Yi(){return(0,I.chain)(Hr()).omitBy(I.isNull).keys().value()}function zi(e){return e&&Yi().includes(e)}function Kr(){let e=qi();return Pe("detected CI provider name: %s",e),e||null}function Qi(){return jr(Hr)}function $r(){return jr(Wi)}function Z(e){let t=Qi(),r=Kr(),o=Xi(e,r);return Pe("detected CI provider: %s",r),Pe("detected CI params: %O",t),Pe("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Xi(e,t){return e?{source:"user",value:e}:zi(t)?{source:"server",value:null}:{source:"random",value:`auto:${Xe()}`}}var Vr=d(require("archiver")),Jr=d(require("fs-extra")),dt=d(require("path")),qr=d(require("unzipper"));var Zi=50*1024*1024;async function Wr(e,t=Zi){return new Promise((r,o)=>{let n=(0,Vr.default)("zip",{zlib:{level:9}}),a=[],c=0;n.on("data",u=>{a.push(u),c+=u.length,c>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",u=>{u.code==="ENOENT"?h(u):o(u)}),n.on("error",u=>o(u)),n.on("end",()=>{let u=Buffer.concat(a);r(u)});let p=async u=>{let l=process.cwd(),f=dt.default.normalize(u),C=dt.default.relative(l,f),x=await Jr.default.stat(u);x.isDirectory()?n.directory(u,C):n.file(u,{name:C,stats:x})};(async u=>{for(let l of u)await p(l);await n.finalize()})(e).catch(o)})}async function Yr(e,t){return qr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}var eo=d(require("async-retry")),to=require("axios");var zr=d(require("axios")),Qr=require("https-proxy-agent"),Xr=d(require("proxy-from-env"));var es=s.extend("axios");function lt(e={}){let t=zr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),a=Xr.default.getProxyForUrl(n);return a&&(es("Using HTTP proxy %s for %s ",a,n),o.proxy=!1,o.httpsAgent=ts(a)),o}),t}var be=null;function ts(e){return be||(be=new Qr.HttpsProxyAgent(e),be)}var Se=s.extend("upload"),xe=5;async function ft(e,t,r){return Se("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),os(e.buffer,e.uploadUrl,t,r)}async function rs(e,t,r,o){return lt().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function gt(e,t){try{let r=await lt().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,to.isAxiosError)(r)&&Se("Failed to download %s: %s",e,r.message),r}}async function os(...e){await(0,eo.default)(async()=>{await rs(...e)},{retries:xe,onRetry:(t,r)=>{if(Se("Upload failed %d out of %d attempts: %s",r,xe,t.message),r===xe){E(`Cannot upload after ${r} times: ${t.message}`);return}h(`Upload failed ${r} out of ${xe} attempts: ${t.message}`)}})}var Ct=e=>({total:t,loaded:r})=>{};function Zr(e){return e/1e3/1e3}var Et=d(require("lodash"));var K=d(require("path")),ht=require("glob");var ro=require("lodash");function oo({config:e,cacheId:t,orgId:r,path:o,ci:n}){let a={id:t,orgId:r,config:(0,ro.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(a))}function no(e,t){e instanceof Error?V("%s. %s.",t,e.message):V("%s. %s.",t,"Unknown error")}var io=async e=>{let t=K.default.resolve(e??"./test-results"),r=[K.default.resolve(t,"**/.last-run.json"),K.default.resolve(t,".last-run.json")];return(0,ht.glob)(r)},so=async(e=[])=>{let t=ns(e),r=[];return t.length>0&&r.push(...await(0,ht.glob)(e)),r};function ns(e){let t=process.cwd();return e.filter(r=>{let o=K.default.resolve(r),n=K.default.relative(t,o);return r.startsWith("..")||K.default.isAbsolute(n)?(no(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function Ae(e){return e?e.path.some(t=>K.default.basename(t)===".last-run.json"):!1}async function ao(e,t){switch(t.provider){case"githubActions":await po(e,t);break;case"gitlab":await mo(e,t);break;case"circle":await uo(e,t);break;default:break}}async function co(e,t,r){switch(t.provider){case"githubActions":await po(e,t,r);break;case"gitlab":await mo(e,t,r);break;case"circle":await uo(e,t,r);break;default:break}}async function mo(e,t,r=null){let o=t.params,n=r?.ci.params,c=(n?ee(n.runAttempt,0):0)+1,p=ee(o.ciNodeIndex,1),m=ee(o.ciNodeTotal,1),u=Ae(r),l=c>1&&u,f=l?"--last-failed":"",C="";m>1&&(C=l?"--shard=1/1":`--shard=${p}/${m}`);let x=[f,C].filter(Boolean).join(" ");await q(e.presetOutput??ne,`EXTRA_PW_FLAGS="${x}"
|
|
14
|
+
EXTRA_PWCP_FLAGS="${f}"
|
|
15
15
|
RUN_ATTEMPT="${c}"
|
|
16
|
-
`)}async function
|
|
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=>`
|
|
16
|
+
`)}async function po(e,t,r=null){let{matrixIndex:o,matrixTotal:n}=e,a=t.params,c=ee(a.githubRunAttempt,1),p=Ae(r),m=c>1&&p,u=m?"--last-failed":"",l="";n>1&&(l=m?"--shard=1/1":`--shard=${o}/${n}`);let f=[u,l].filter(Boolean).join(" "),C=e.presetOutput??ne;await q(C,f),s('Dumped PW config: "%s" for GHA to %s',f,C)}async function uo(e,t,r=null){let o=t.params,n=r?.ci.params,a=n?.circleWorkflowId,c=n?.circleWorkflowWorkspaceId,p=ee(o.circleNodeIndex,0),m=ee(o.circleNodeTotal,1),u=c==o.circleWorkflowWorkspaceId&&a!==o.circleWorkflowId,l=Ae(r),f=u&&l,C=f?"--last-failed":"",x="";m>1&&(x=f?"--shard=1/1":`--shard=${p+1}/${m}`);let A=[C,x].filter(Boolean).join(" "),S=e.presetOutput??ne;await q(S,A),s('Dumped PW config: "%s" for Circle to %s',A,S)}var ee=(e,t)=>{let r=Et.default.toNumber(e);return Et.default.isNaN(r)?t:r};async function It(){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:a,continue:c}=e.values,p=e.values.outputDir,m=Z();o==="last-run"&&await ao(e.values,m);let u=await Rr({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:a}});try{let l=await is({readUrl:u.readUrl,outputDir:p}),f=await as(u.metaReadUrl);o==="last-run"&&await co(e.values,m,f),b(g("- restoring cache to"),l),de("Cache restored. Cache ID: %s",u.cacheId)}catch(l){if((0,lo.isAxiosError)(l)&&(l.response?.status===403||l.response?.status===404)){let f=`Cache with ID "${u.cacheId}" not found`;if(c){V(f);return}throw new Error(f)}throw l}}async function is({readUrl:e,outputDir:t}){let r=await gt(e),o=ss(t);return await Yr(r,o),s("Cache downloaded"),o}function ss(e){let t=e??process.cwd();return Rt.default.isAbsolute(t)?t:Rt.default.resolve(process.cwd(),t)}async function as(e){let t=await gt(e),r=JSON.parse(t.toString("utf-8"));return s("Meta file: %O",r),r}async function _t(){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:a,matrixTotal:c,continue:p}=e.values,m=await so(e.values.path),u=e.values.path||[],l=Z();if(o==="last-run"&&(u.push(n),m.push(...await io(n))),m.length===0){let C=`No files available to upload: ${u.filter(Boolean).join(",")}`;if(!p)throw new Error(C);V(C)}let f=await Er({recordKey:t,ci:l,id:r,config:{matrixIndex:a,matrixTotal:c}});s("Cache upload url created",{result:f}),m.length>0&&(await cs({archive:await Wr(m),cacheId:f.cacheId,uploadUrl:f.uploadUrl}),b(m.map(C=>`${g("- uploading")} ${C}`).join(`
|
|
17
|
+
`))),await ms({meta:oo({cacheId:f.cacheId,config:e.values,ci:l,orgId:f.orgId,path:m}),cacheId:f.cacheId,uploadUrl:f.metaUploadUrl}),de("Cache uploaded. Cache ID: %s",f.cacheId)}async function cs({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await ft({buffer:e,contentType:o,name:t,uploadUrl:r},o,Ct(t)),s("Cache archive uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache archive",o),o}}async function ms({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await ft({buffer:e,contentType:n,name:o,uploadUrl:r},n,Ct(o)),s("Cache meta uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache meta",o),o}}var go=require("@currents/commit-info"),Co=require("lodash");var Ue=require("lodash");var Tt=s.extend("ci-git");function fo(e){Tt("git commit existing info: %O",e);let t=$r();Tt("commit info from provider environment variables: %O",t);let r=(0,Ue.transform)(e,(o,n,a)=>{let c=n||(t?t[a]:null);return o[a]=(0,Ue.defaultTo)(c,null)});return Tt("combined git and environment variables from provider: %O",r),r}var ps=async()=>{let e=await(0,go.commitInfo)();return fo({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},ho=(0,Co.memoize)(ps);var Eo=d(require("getos")),Ro=require("lodash"),U=require("os"),Io=require("util"),us=async()=>{if((0,U.platform)()==="linux")try{let e=await(0,Io.promisify)(Eo.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,U.release)()}catch{return(0,U.release)()}return(0,U.release)()},ds=async()=>{let e=await us();return{osName:(0,U.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,U.freemem)(),total:(0,U.totalmem)()}}},_o=(0,Ro.memoize)(ds);var Pt=d(require("path")),qo=d(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 To(){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 ls=s.extend("config"),fs=["projectId","recordKey"],Ot=null;function Oo(e){Ot=L(O,fs,To,e),ls("Resolved Currents config: %o",Ot)}function ve(){return Ot}function yo(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 Lo=d(require("fs-extra")),Mo=require("jest-cli"),Bo=d(require("tmp"));var Do=require("lodash");function wo(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 Po=require("lodash"),gs=["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 bo(e){return(0,Po.omit)(e,...gs)}var Ao=d(require("fs")),Uo=require("jest-config"),yt=require("lodash"),wt=d(require("path"));function De(e,t){return(...r)=>new Promise((o,n)=>{let a=0,c=()=>{a++;try{let p=e(...r);o(p)}catch(p){if(a>=t.length)n(p);else{let m=t[a-1];setTimeout(c,m)}}};c()})}var xo=d(require("fs-extra")),Cs=d(require("path"));async function Ne(e){let t=await xo.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var So=s.extend("jest-discovery");async function vo(e){try{let{config:t,configPath:r}=await(0,Uo.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"],a=(0,yt.omit)(t,o);if(a.projects&&(a.projects=a.projects.map(m=>typeof m!="string"?(0,yt.omit)(m,n):m)),a.rootDir&&Object.keys(a).length===1)return null;let c=wt.default.resolve(r?wt.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(a,null,2)}`;return So("configFileContent: %O",p),Ao.default.writeFileSync(c,p),await De(Ne,[200,200,200,200,200,1e3])(c),c}catch(t){return E("Failed to recreate the config file"),So("error %o",t),null}}async function No(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=bo(r),n=wo(o),a=r.config,c=await vo(a);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,Do.isEmpty)(m)),configFilePath:c}}var hs=s.extend("jest-discovery");async function ko(e,t){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await No(t);try{let n=Bo.default.fileSync({postfix:".json"});return hs("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Mo.run)(r.concat(["--openHandlesTimeout=0"])),await De(Ne,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await J(n.name)}catch(n){return E("Failed to obtain the jest full test suite:",n),[]}finally{o&&Lo.default.unlinkSync(o)}}var Le=class extends ${constructor(t){super(t)}async getFullTestSuite(){return ko(this.config.frameworkConfig,this.config.cliArgs)}};var Go=d(require("fs-extra"));var Fo=d(require("path"));function te(e){return Fo.default.join(e,"fullTestSuite.json")}var Es=s.extend("junit-discovery");async function Ho(e){console.time(g("@currents/junit:fullTestSuite-ready"));try{Es("running scanner: %o",e);let t=te(e);process.env.CURRENTS_DISCOVERY_PATH=t;let r=Go.default.readFileSync(t,"utf-8");return JSON.parse(r)}catch(t){return E("Failed to obtain the junit full test suite:",t),[]}}var Me=class extends ${constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Ho(this.reportDir)}};function jo(e,t){switch(e.framework){case"jest":return new Le(e);case"junit":return new Me(e,t);default:return new $(e)}}var re=d(require("fs-extra")),B=d(require("path"));async function Ko(e){let t=await Rs(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??B.default.join(t,"config.json")}}async function Rs(e){return e?(await Be(e),e):Is((0,B.join)(process.cwd(),".currents"))}async function Is(e){let t=await re.default.readdir(e),r=null;for(let o of t){let n=B.default.join(e,o),a=await re.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,B.resolve)(e,r.name):null}async function Be(e){try{return await re.default.pathExists(e)}catch{return E("Error checking if path exists:",E),!1}}async function $o(e){let t=B.default.join(e,"instances");return _s(t)}async function _s(e){let t=await re.default.readdir(e),r=[];for(let o of t){let n=B.default.join(e,o);(await re.default.stat(n)).isFile()&&r.push(n)}return r}var Ts=e=>Buffer.byteLength(JSON.stringify(e),"utf8"),Vo=(e,t=1048576)=>{let r=[],o=[],n=0;for(let a of e){let c=Ts(a);n+c>t&&(r.push(o),o=[],n=0),o.push(a),n+=c}return o.length>0&&r.push(o),r};async function bt(){let e=ve();if(!e)throw new Error("Currents config is missing!");let t=await Ko(e);Gt(ys(t.reportDir)),s("Reporter options: %o",t),b("Report directory: %s",t.reportDir);let r=await J(t.configFilePath);s("Report config: %o",r);let o=await $o(t.reportDir);s("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Os(t.reportDir),a=await Be(n),c=te(t.reportDir),p=null;if(a){let A=await J(n);h("Marker file detected. The report was already uploaded: %o",{runUrl:A.response.runUrl,isoDate:A.isoDate}),await Be(c)&&(p=await J(c),s("Full test suite file detected: %s",c))}if(p)s("The discovery stage was skipped");else{if(p=await jo(r,t.reportDir).getFullTestSuite(),ws(p))throw new Error("Failed to discover the full test suite!");await q(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,u={currents:e},l={type:r.framework,version:r.frameworkVersion,clientVersion:pe,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},f=Ie.userFacingNanoid(),C=Z(e.ciBuildId),x={};for await(let A of o){let S=await J(A);x[S.groupId]||(x[S.groupId]=[]),x[S.groupId].push(S)}for await(let A of Object.keys(x)){let S=x[A],me=A;m&&(s("Default group found: %s, overwriting the group in the results",m),me=m,S=S.map(Q=>({...Q,groupId:m})));try{let Q=Vo(S),Je=await Jo({ci:C,group:me,instances:[],fullTestSuite:p,config:u,machineId:f,framework:l});for(let qe=0;qe<Q.length;qe++)await Jo({ci:C,group:me,instances:Q[qe],fullTestSuite:[],config:u,machineId:f,framework:l});s("Api response: %o",Je),b("[%s] Run created: %s",me,Je.runUrl);let ei={response:Je,isoDate:new Date().toISOString()};await q(n,JSON.stringify(ei)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(Q){throw s("Failed to upload the results to the dashboard"),Q}}}async function Jo({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:a,framework:c}){let p=await ho(),m=await _o(),u={browserName:"node",browserVersion:qo.default.coerce(process.version)?.version},{currents:l}=n,C={platform:{...u,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:l.projectId,recordKey:l.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:l.tag??[],machineId:l.machineId??a,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return s("Creating run: %o",_(C)),Or(C)}function Os(e){return Pt.default.join(e,"upload.marker.json")}function ys(e){return Pt.default.join(e,`.debug-${new Date().toISOString()}.log`)}function ws(e){return e.length===0||e.some(t=>t.tests.length===0)}var Ps=s.extend("cli");async function Wo(e){await v(async t=>{Xt(t);let r=_e();Ps("Config: %o",fe(r)),await nt()},e)}var k=require("@commander-js/extra-typings");var Yo=new k.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(T(M,"apiKey")),zo=new k.Option("-o, --output <path>","Path to the file where output will be written").env(T(M,"output")),Qo=new k.Option("--ci-build-id <id>","Unique identifier for the run"),Xo=new k.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(T(M,"projectId")),Zo=new k.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(X),en=new k.Option("--debug","Enable debug logging").env(T(M,"debug")).default(!1),tn=new k.Option("-b, --branch <branch>","Branch name for the recorded run"),rn=new k.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var ke="api",bs=e=>`
|
|
18
18
|
|
|
19
19
|
${on.default.bold("Examples")}
|
|
20
20
|
|
|
21
21
|
Obtain run data by --ci-build-id:
|
|
22
|
-
${g(`${e} ${
|
|
22
|
+
${g(`${e} ${ke} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
|
|
23
23
|
|
|
24
24
|
Obtain most recent run data by filters:
|
|
25
|
-
${g(`${e} ${
|
|
25
|
+
${g(`${e} ${ke} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
|
|
26
26
|
|
|
27
27
|
Obtain last run data that matches the Playwright "test-results/.last-run.json":
|
|
28
|
-
${g(`${e} ${
|
|
28
|
+
${g(`${e} ${ke} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
|
|
29
29
|
|
|
30
|
-
`,nn=e=>new
|
|
30
|
+
`,nn=e=>new xt.Command().command(ke).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(xs(e)),xs=e=>new xt.Command().name("get-run").description(`Receive information from Currents API ${bs(e)}`).allowUnknownOption().addOption(Yo).addOption(en).addOption(Qo).addOption(Xo).addOption(tn).addOption(Zo).addOption(zo).addOption(rn).action(Wo);var Fe=require("@commander-js/extra-typings");var cn=d(require("chalk"));var Ss=s.extend("cli");async function sn(e){await v(async t=>{Ar(Ur(t));let r=j();Ss("Config: %o",_(r.values)),await It()},e)}var As=s.extend("cli");async function an(e){await v(async t=>{Sr(vr(t));let r=j();As("Config: %o",_(r.values)),await _t()},e)}var oe="cache",Us=e=>`
|
|
31
31
|
|
|
32
32
|
${cn.default.bold("Examples")}
|
|
33
33
|
|
|
34
34
|
Save files to the cache under a specific ID:
|
|
35
|
-
${g(`${e} ${
|
|
35
|
+
${g(`${e} ${oe} set --key <record-key> --id <id> --path <path-1,path-2,...path-n>`)}
|
|
36
36
|
|
|
37
37
|
Retrieve files from the cache saved under a specific ID:
|
|
38
|
-
${g(`${e} ${
|
|
38
|
+
${g(`${e} ${oe} get --key <record-key> --id <id>`)}
|
|
39
39
|
|
|
40
40
|
Store the last run data in the cache:
|
|
41
|
-
${g(`${e} ${
|
|
41
|
+
${g(`${e} ${oe} set --key <record-key> --preset last-run`)}
|
|
42
42
|
|
|
43
43
|
Retrieve the last run data from the cache:
|
|
44
|
-
${g(`${e} ${
|
|
44
|
+
${g(`${e} ${oe} get --key <record-key> --preset last-run`)}
|
|
45
45
|
|
|
46
46
|
Retrieve the last run data from the cache and save it to a custom directory:
|
|
47
|
-
${g(`${e} ${
|
|
47
|
+
${g(`${e} ${oe} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
|
|
48
48
|
|
|
49
|
-
`,mn=e=>new
|
|
49
|
+
`,mn=e=>new Fe.Command().command(oe).description(`Cache data to Currents ${Us(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(vs()).addCommand(Ds()),vs=()=>new Fe.Command().name("set").allowUnknownOption().addOption(st).addOption(ct).addOption(mt).addOption(Nr).addOption(at).addOption(Mr).addOption(pt).addOption(ut).addOption(Gr).action(an),Ds=()=>new Fe.Command().name("get").allowUnknownOption().addOption(st).addOption(ct).addOption(mt).addOption(Lr).addOption(Br).addOption(at).addOption(pt).addOption(ut).addOption(Fr).action(sn);var On=require("@commander-js/extra-typings"),yn=d(require("chalk"));var D=require("@commander-js/extra-typings");var pn=new D.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(T(O,"ciBuildId")),un=new D.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(T(O,"recordKey")),dn=new D.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(T(O,"projectId")),ln=new D.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(X),fn=new D.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),gn=new D.Option("--disable-title-tags","disable parsing tags from test title, e.g. `Test name @smoke` would not be tagged with `smoke` in the dashboard").default(!1),Cn=new D.Option("--machine-id <string>","unique identifier of the machine running the tests. If not provided, it will be generated automatically. See: https://docs.currents.dev/?q=machineId").env(T(O,"machineId")),hn=new D.Option("--report-dir <string>","explicit path to the report directory").env(T(O,"reportDir")),En=new D.Option("--debug","enable debug logs").env(T(O,"debug")).default(!1);var _n=d(require("fs"));var Rn=require("tmp-promise"),In=async()=>{let{path:e}=await(0,Rn.file)();return e};var St=s.extend("cli"),Ge=class{constructor(t){this.configFilePath=null;this.cliOptions=t,St("CLI options: %o",_(this.cliOptions)),this.parsedConfig=yo(this.cliOptions),St("Parsed config from CLI options: %o",_(this.parsedConfig))}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await In();return _n.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),St("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function Tn(e){await v(async t=>{let r=new Ge(t);Oo(r.parsedConfig);let o=ve();b("Currents config: %o",_(o)),await bt()},e)}var ie="upload",Ns=e=>`
|
|
50
50
|
|
|
51
51
|
${yn.default.bold("Examples")}
|
|
52
52
|
|
|
@@ -59,19 +59,19 @@ ${g(`${e} ${ie} --key <record-key> --project-id <id> --ci-build-id <build-id> --
|
|
|
59
59
|
Provide a custom path to the reports directory:
|
|
60
60
|
${g(`${e} ${ie} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
|
|
61
61
|
|
|
62
|
-
`,
|
|
63
|
-
${
|
|
62
|
+
`,wn=e=>new On.Command().name(ie).command(ie).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
|
|
63
|
+
${Ns(e)}`).addOption(pn).addOption(un).addOption(dn).addOption(ln).addOption(fn).addOption(gn).addOption(Cn).addOption(En).addOption(hn).action(r=>Tn(r));var Yn=require("@commander-js/extra-typings");var zn=d(require("chalk"));var se={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},inputFormat:{name:"Input Format",cli:"--input-format"},inputFiles:{name:"Input File",cli:"--input-file"},outputDir:{name:"Output Dir",cli:"--output-dir"},framework:{name:"Framework",cli:"--framework"},frameworkVersion:{name:"Framework Version",cli:"--framework-version"}};function Pn(){return{debug:process.env[se.debug.env]}}var Ls=s.extend("config"),Ms=["inputFormat","inputFiles","framework"],At=null;function bn(e){At=L(se,Ms,Pn,e),Ls("Resolved config: %o",At)}function He(){return At}function xn(e){return{inputFiles:e.inputFile,inputFormat:e.inputFormat,outputDir:e.outputDir,framework:e.framework,frameworkVersion:e.frameworkVersion,debug:e.debug}}var Ve=require("path");var Sn=require("lodash"),An=d(require("crypto"));function Un(e,t,r,o){let n=z(e.failure),a=n.length>0,c=t?.timestamp??"",p="skipped"in e,m=p?"pending":a?"failed":"passed";return{_t:je(c),testId:Dt(ae(e.name,o).join(", "),o),title:ae(e.name,o),state:m,isFlaky:Bs(),expectedStatus:"passed",timeout:ks(),location:Fs(t?.file??""),retries:Gs(n),attempts:Hs(e,n,Nt(c),r,p)}}function Dt(e,t){let r=`${e}${t}`;return An.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function je(e){return vn(e)?new Date(e).getTime():new Date().getTime()}function Nt(e){return vn(e)?new Date(e).toISOString():new Date().toISOString()}function vn(e){let t=new Date(e);return!isNaN(t.getTime())}function ae(e,t){return[t,e].filter(Boolean)}function Bs(){return!1}function ks(){return 0}function Fs(e){return{column:1,file:e,line:1}}function Gs(e){let t=0;return e.forEach(r=>{typeof r!="string"&&t++}),t}function Hs(e,t,r,o,n){let a=e.time?Ke(e.time):0;return n?[{_s:"pending",attempt:0,startTime:r,steps:[],duration:a,status:"skipped",stdout:Ut(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.length===0?[{_s:"passed",attempt:0,startTime:r,steps:[],duration:a,status:"passed",stdout:Ut(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.reduce((c,p,m)=>{if(p!=="true"&&p!=="false"){let u=Ks(p);c.push({_s:"failed",attempt:m,startTime:$s(o,r),steps:[],duration:a,status:"failed",stdout:Ut(e?.["system-out"]),stderr:js(e?.["system-err"]),errors:u,error:u[0]})}return c},[])}function Ut(e){return e?[e]:[]}function js(e){return e?[e]:[]}function Ks(e){return e==="true"||e==="false"?[]:[typeof e=="string"?{message:e}:{message:e.message,stack:e._,value:e.type}]}function $s(e,t){let r=je(t)+e;return new Date(r).toISOString()}function z(e){return e?Array.isArray(e)?e:[e]:[]}function Vs(e){return Math.round(e*1e3)}function Ke(e){let t=parseFloat(e);return isNaN(t)?0:Vs(t)}function $e(e,t,r){let o=(0,Sn.isNumber)(r)&&r>0,n=!!e.id&&vt(t,"id",e.id);if(e.file){let a=vt(t,"file",e.file);return a&&!n?`${e.file} - ${e.id}`:a&&o?`${e.file} - ${r}`:e.file}if(e.name){let a=vt(t,"name",e.name);return a&&!n?`${e.name} - ${e.id}`:a&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function vt(e,t,r){return e.filter(n=>n[t]===r).length>1}function Dn(e){let t=[];return e.forEach(r=>{let o=z(r.testsuites?.testsuite),n={name:r.testsuites?.name??"No name",tags:[],tests:[]};o?.forEach(a=>{let c=$e(a,o);z(a?.testcase)?.forEach(m=>{let u={title:ae(m.name,c),spec:c,tags:[],testId:Dt(ae(m.name,c).join(", "),c)};n.tests.push(u)})}),t.push(n)}),t}var F=require("@commander-js/extra-typings"),Nn=require("glob");var Ln=new F.Option("--debug","Enable debug logging").env(T(se,"debug")).default(!1),Lt=(t=>(t.junit="junit",t))(Lt||{}),Mn=new F.Option("--input-format <string>","the format of the input test reports").choices(Object.values(Lt)),Bn=new F.Option("--input-file <patterns>",'comma-separated glob patterns to match report file paths (e.g., "report1.xml,report2.xml")').argParser(Js),kn=new F.Option("-o, --output-dir <string>","the directory to save the converted test reports"),Fn=(r=>(r.postman="postman",r.vitest="vitest",r))(Fn||{}),Gn=new F.Option("--framework <string>","the testing framework used to generate the test reports").choices(Object.values(Fn)),Hn=new F.Option("--framework-version <string>","the version of the testing framework used to generate the test reports");function Js(e){let t=e.split(",").map(o=>o.trim()),r=Nn.glob.globSync(t);if(r.length===0)throw new F.InvalidArgumentError("No files found with the provided patterns");return r}async function Mt(e){let t=new Map;return e.forEach(r=>{let o=z(r.testsuites?.testsuite),n=r.testsuites?.name??"No name";o.forEach((a,c)=>{let p=$e(a,o,c),m=qs(a,n,p),u=Re(n+p);m.results.tests.length!==0&&t.set(u,m)})}),t}function qs(e,t,r){let o=Nt(e.timestamp??""),n=e.time?Ke(e.time):0,a=new Date(je(e.timestamp??"")+n),c=z(e.testcase),p=0,m=c.filter(C=>"failure"in C).length,u=c.filter(C=>"skipped"in C).length,l=c.length-m-u;return{groupId:t,spec:r,startTime:o,results:{stats:{suites:1,tests:c.length,passes:l,pending:u,skipped:0,failures:m,flaky:0,wallClockStartedAt:o,wallClockEndedAt:a.toISOString(),wallClockDuration:n},tests:c?.map(C=>(c[0]?.time&&(p+=Ke(c[0].time)),Un(C,e,p,r)))}}}async function jn({inputFormat:e,framework:t,parsedXMLArray:r}){return e==="junit"?Ws(t,r):new Map}async function Ws(e,t){switch(e){case"postman":return Mt(t);case"vitest":return Mt(t);default:return h("Unsupported framework: %s",e),new Map}}var Kn=require("fs-extra"),$n=require("xml2js");async function Vn(e){let t=await Promise.all(e.map(o=>(0,Kn.readFile)(o,"utf-8"))),r=(await Promise.all(t.map(Ys))).filter(Boolean);return t.length!==r.length&&h("Some files could not be parsed. Enable debug logging for more details"),r}async function Ys(e){let t=e.trim();if(!t)return null;try{return await(0,$n.parseStringPromise)(t,{explicitArray:!1,mergeAttrs:!0})||null}catch(r){return s("Error parsing XML input",r),null}}function Jn(e){return{framework:e.inputFormat,frameworkVersion:e.frameworkVersion??null,frameworkConfig:{originFramework:e.framework,originFrameworkVersion:e.frameworkVersion}}}async function qn(){try{let e=He();if(!e)throw new Error("Config is missing!");let t=e.outputDir?await Ee(e.outputDir):await qt(process.cwd(),".currents"),r=await Ee((0,Ve.join)(t,"instances")),o=Jn(e);s("Report config:",o),b("[currents] Convertion files: %s",e.inputFiles.join(", ")),await he((0,Ve.join)(t,"config.json"),JSON.stringify(o));let n=await Vn(e.inputFiles);if(n.length===0)throw new Error("No valid XML JUnit report was found.");let a=Dn(n);await he(te(t),JSON.stringify(a));let c=await jn({inputFormat:e.inputFormat,framework:e.framework,parsedXMLArray:n});await Promise.all(Array.from(c.entries()).map(([p,m])=>he((0,Ve.join)(r,`${Re(p)}.json`),JSON.stringify(m)))),b("[currents] Conversion completed, report saved to: %s",t)}catch(e){throw s("Failed to convert: %o",e),e}}var zs=s.extend("cli");async function Wn(e){await v(async t=>{bn(xn(t));let r=He();zs("Config: %o",r),await qn()},e)}var Bt="convert",Qs=e=>`
|
|
64
64
|
|
|
65
|
-
${
|
|
65
|
+
${zn.default.bold("Examples")}
|
|
66
66
|
|
|
67
67
|
Convert JUnit test reports to Currents format:
|
|
68
|
-
${g(`${e} ${
|
|
69
|
-
`,
|
|
70
|
-
${Qs(e)}`).addOption(
|
|
68
|
+
${g(`${e} ${Bt} --input-format junit --input-file ./*.xml --framework postman`)}
|
|
69
|
+
`,Qn=e=>new Yn.Command().name(Bt).command(Bt).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Convert test reports to Currents format
|
|
70
|
+
${Qs(e)}`).addOption(Ln).addOption(Mn).addOption(Bn).addOption(kn).addOption(Gn).addOption(Hn).action(r=>Wn(r));var Xs=`
|
|
71
71
|
----------------------------------------------------
|
|
72
72
|
\u{1F4D6} Documentation: https://docs.currents.dev
|
|
73
73
|
\u{1F919} Support: support@currents.dev
|
|
74
74
|
----------------------------------------------------
|
|
75
|
-
`,
|
|
75
|
+
`,ce="currents",Zn=()=>new Xn.Command(ce).version(pe).description(`Currents CLI ${Xs}`).addCommand(wn(ce),{isDefault:!0}).addCommand(mn(ce)).addCommand(nn(ce)).addCommand(Qn(ce));import("dotenv/config");function Zs(){Zn().parse()}Zs();
|
|
76
76
|
/*! For license information please see index.js.LEGAL.txt */
|
|
77
77
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var
|
|
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}}},
|
|
3
|
-
`)),
|
|
4
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function
|
|
5
|
-
%o`,
|
|
6
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function
|
|
7
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var
|
|
8
|
-
${(
|
|
1
|
+
"use strict";var Dr=Object.create;var x=Object.defineProperty;var Nr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var br=Object.getPrototypeOf,xr=Object.prototype.hasOwnProperty;var pe=(e,r)=>{for(var t in r)x(e,t,{get:r[t],enumerable:!0})},le=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Br(r))!xr.call(e,n)&&n!==t&&x(e,n,{get:()=>r[n],enumerable:!(o=Nr(r,n))||o.enumerable});return e};var c=(e,r,t)=>(t=e!=null?Dr(br(e)):{},le(r||!e||!e.__esModule?x(t,"default",{value:e,enumerable:!0}):t,e)),vr=e=>le(x({},"__esModule",{value:!0}),e);var vt={};pe(vt,{handleCurrentsReport:()=>Lr});module.exports=vr(vt);var Ee=require("debug"),Mr=c(require("fs-extra")),i=(0,Ee.debug)("currents"),wr=null;function ge(e){wr=e}var v={};pe(v,{getNanoid:()=>Fr,userFacingNanoid:()=>X});var z=require("nanoid"),de="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Fr=(e=16)=>(0,z.customAlphabet)(de,e)(),X=(0,z.customAlphabet)(de,12);var p=require("lodash");var M=i.extend("ci"),kr=(e,...r)=>(0,p.chain)(r).compact().join(e).value(),Hr=(e,r)=>(0,p.set)(e,(0,p.camelCase)(r),process.env[r]),u=e=>(0,p.transform)(e,Hr,{}),Gr=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,jr=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Vr=()=>(0,p.some)(process.env,(e,r)=>/^CODEBUILD_/.test(r)),Kr=()=>process.env.bamboo_buildNumber,Jr=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,$r=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Yr=()=>(0,p.some)(process.env,(e,r)=>/^CONCOURSE_/.test(r)),qr=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Qr=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Wr=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,zr=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Xr={appveyor:"APPVEYOR",azure:jr,awsCodeBuild:Vr,bamboo:Kr,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Jr,codeshipPro:$r,concourse:Yr,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:qr,goCD:"GO_JOB_NAME",googleCloud:Qr,jenkins:Wr,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Gr,travis:"TRAVIS",wercker:zr,netlify:"NETLIFY",layerci:"LAYERCI"};function Zr(){let{env:e}=process;return(0,p.findKey)(Xr,r=>{if((0,p.isString)(r))return e[r];if((0,p.isFunction)(r))return r()})}var _e=()=>({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"])}),et=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:kr(`
|
|
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}}},Re=e=>{let r=fe();return r?(0,p.chain)(e()).get(r).value():{}};function rt(){return(0,p.chain)(_e()).omitBy(p.isNull).keys().value()}function tt(e){return e&&rt().includes(e)}function fe(){let e=Zr();return M("detected CI provider name: %s",e),e||null}function ot(){return Re(_e)}function Ie(){return Re(et)}function Ce(e){let r=ot(),t=fe(),o=nt(e,t);return M("detected CI provider: %s",t),M("detected CI params: %O",r),M("detected CI build ID: %o",o),{params:r,provider:t,ciBuildId:o}}function nt(e,r){return e?{source:"user",value:e}:tt(r)?{source:"server",value:null}:{source:"random",value:`auto:${X()}`}}var he=require("@currents/commit-info"),Oe=require("lodash");var w=require("lodash");var Z=i.extend("ci-git");function Te(e){Z("git commit existing info: %O",e);let r=Ie();Z("commit info from provider environment variables: %O",r);let t=(0,w.transform)(e,(o,n,a)=>{let m=n||(r?r[a]:null);return o[a]=(0,w.defaultTo)(m,null)});return Z("combined git and environment variables from provider: %O",t),t}var st=async()=>{let e=await(0,he.commitInfo)();return Te({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Pe=(0,Oe.memoize)(st);var Ue=c(require("getos")),Ae=require("lodash"),f=require("os"),Se=require("util"),it=async()=>{if((0,f.platform)()==="linux")try{let e=await(0,Se.promisify)(Ue.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,f.release)()}catch{return(0,f.release)()}return(0,f.release)()},at=async()=>{let e=await it();return{osName:(0,f.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,f.freemem)(),total:(0,f.totalmem)()}}},Le=(0,Ae.memoize)(at);var ye={name:"@currents/cmd",version:"1.6.8",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":"^10.0.0","@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.15","@types/node":"^22.13.0","@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:"^6.0.1",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.9"},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.5",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 De=ye.version;function ut(e,r){if(!e)return e;let t={...e};return r.forEach(o=>{t.hasOwnProperty(o)&&(t[o]="*****")}),t}function N(e){return ut(e,["recordKey","key"])}var mt=[];function ee(e){mt.push(e)}var R=c(require("chalk")),A=c(require("util"));var Ne=[],Be=[];var be=(...e)=>{let r=A.default.format(...e);ee(r),console.log(r)},pt=(...e)=>{let r=A.default.format(...e);ee(r),console.error(r)},re=be,E=(...e)=>{let r=A.default.format(...e);return Be.push(r),i("WARNING: ",r),be(R.default.bgYellow.black(" WARNING "),r)};var g=(...e)=>{let r=A.default.format(...lt(e));return Ne.push(r),i("ERROR: ",A.default.format(...e)),pt(R.default.bgRed.white(" ERROR "),r)};var lt=e=>e.map(r=>r instanceof Error?r.message:r),F=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
|
+
`)),fo=R.default.cyan,Io=R.default.blueBright,Co=R.default.red,To=R.default.yellow,ho=R.default.green,Oo=R.default.gray,Po=R.default.white,Uo=R.default.black,Ao=R.default.magenta,S=R.default.dim,So=R.default.bold;var te=c(require("fs-extra")),xe=require("path"),gt=require("uuid");async function P(e){try{return await te.default.readJson(e)}catch(r){throw g("Error while reading JSON file: %s",e,r),g}}async function oe(e,r){try{return await te.default.writeFile(e,r,"utf8"),e}catch(t){throw g(`Error writing file at ${e}:`,t),t}}var dt=c(require("crypto"));var me=c(require("path")),Sr=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 ne=require("axios"),se=c(require("pretty-ms"));var Fe=i.extend("http"),k=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,ne.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,ne.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),H=()=>3;function He(e,r,t){Fe("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${t.method?.toUpperCase()} ${t.url}`,r.message,(0,se.default)(k(e)),e,H()),E("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${t.method?.toUpperCase()} ${t.url}`,r.message,(0,se.default)(k(e)),e,H())}var ie=i.extend("http");var ae={api:null,restApi:null};function _t(e){let r=e==="api"?ve():Me();ie("client base url: %s",r);let t=je.default.create({baseURL:r,timeout:we(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let a={...Ke.default.pick(o,"method","url","headers"),baseURL:r,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?ie("network request retry: %o",Ge({...a,baseURL:r,isRetry:!0})):ie("network request: %o",Ge(a)),o}),(0,Ve.default)(t,{retries:H(),retryCondition:ke,retryDelay:k,shouldResetTimeout:!0,onRetry:He}),t}function Je(e){return ae[e]===null&&(ae[e]=_t(e)),ae[e]}function Ge(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":Rt(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Rt(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var qe=require("axios"),Qe=c(require("lodash")),d=require("ts-pattern");function We(e){(0,d.match)(e).when(qe.isAxiosError,ft).otherwise(()=>{E("Unexpected error while sending network request: %s",e)})}function ft(e){return(0,d.match)(e).with({code:"ECONNABORTED"},()=>{E("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{E("Network connection aborted")}).with({code:"ECONNRESET"},()=>{E("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{E("Network connection timeout")}).with({response:d.P.not(d.P.nullish)},r=>{It(r,{status:r.response.status,data:r.response.data})}).otherwise(r=>{E(`[currents] Unexpected network error: %s
|
|
4
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function It(e,{status:r,data:t}){(0,d.match)(r).with(401,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
|
|
5
|
+
%o`,t)}).with(429,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Ct(e,t)}).otherwise(()=>{E(`[currents] Unexpected network response: %s
|
|
6
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function Ct(e,r){(0,d.match)(r).with({code:$e.MISSING_SUITE,message:d.P.string,errors:d.P.array(d.P.string)},async t=>{let{message:o,errors:n}=t;F(1),g(...Ye(o,n))}).with({code:$e.RUN_EXPIRED,message:d.P.string},t=>{E(t.message)}).with({message:d.P.string,errors:d.P.array(d.P.string)},t=>{let{message:o,errors:n}=t;F(1),E(...Ye(o,n)),F(1)}).otherwise(()=>{E(`[currents] Unexpected network response: %s
|
|
7
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var $e={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Ye(e,r){return Qe.default.isString(e)?r?.length===0?[e]:[e,`
|
|
8
|
+
${(r??[]).map(t=>` - ${t}`).join(`
|
|
9
9
|
`)}
|
|
10
|
-
`]:["Unexpected network error"]}var ze=a.extend("http");async function k(e,t,r=$e){try{let o=await r(e).request(t);return ze("network response: %o",{...Xe.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw ze("network error: %o",{code:n.code,message:n.message,url:n.config?.url,method:n.config?.method,status:n.response?.status,headers:n.response?.headers,data:n.response?.data}),We(n),n}}var Dn=a.extend("api");var tt=require("util"),rt=require("zlib");var et=a.extend("api"),Sr=(0,tt.promisify)(rt.gzip);async function ot(e){try{et("Run params: %o",y(e));let t=await Pr(JSON.stringify(e));return k("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw et("Failed to create the run:",t),t}}async function Pr(e){try{return await Sr(e)}catch(t){throw d("Failed to compress run payload:",t),t}}var Gn=a.extend("api");var cs=a.extend("config");var Ur=null;function nt(){return Ur}var h=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Et=c(require("fs-extra")),ft=require("jest-cli"),_t=c(require("tmp"));var gt=require("lodash");function st(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 it=require("lodash"),Ar=["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 at(e){return(0,it.omit)(e,...Ar)}var mt=c(require("fs")),pt=require("jest-config"),se=require("lodash"),ie=c(require("path"));function H(e,t){return(...r)=>new Promise((o,n)=>{let i=0,l=()=>{i++;try{let m=e(...r);o(m)}catch(m){if(i>=t.length)n(m);else{let E=t[i-1];setTimeout(l,E)}}};l()})}var ct=c(require("fs-extra")),Dr=c(require("path"));async function G(e){let t=await ct.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var ut=a.extend("jest-discovery");async function lt(e){try{let{config:t,configPath:r}=await(0,pt.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"],i=(0,se.omit)(t,o);if(i.projects&&(i.projects=i.projects.map(E=>typeof E!="string"?(0,se.omit)(E,n):E)),i.rootDir&&Object.keys(i).length===1)return null;let l=ie.default.resolve(r?ie.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(i,null,2)}`;return ut("configFileContent: %O",m),mt.default.writeFileSync(l,m),await H(G,[200,200,200,200,200,1e3])(l),l}catch(t){return d("Failed to recreate the config file"),ut("error %o",t),null}}async function dt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=at(r),n=st(o),i=r.config,l=await lt(i);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",l?`--config=${l}`:"",...e.args].filter(E=>!(0,gt.isEmpty)(E)),configFilePath:l}}var Nr=a.extend("jest-discovery");async function Rt(e,t){console.time(A("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await dt(t);try{let n=_t.default.fileSync({postfix:".json"});return Nr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,ft.run)(r.concat(["--openHandlesTimeout=0"])),await H(G,Array.from({length:300},()=>100))(n.name),console.timeEnd(A("@currents/jest:fullTestSuite-ready")),await S(n.name)}catch(n){return d("Failed to obtain the jest full test suite:",n),[]}finally{o&&Et.default.unlinkSync(o)}}var j=class extends h{constructor(t){super(t)}async getFullTestSuite(){return Rt(this.config.frameworkConfig,this.config.cliArgs)}};var Ot=c(require("fs-extra"));var St=require("path"),Pt=require("xml2js");var It=require("lodash"),Tt=c(require("crypto"));function Ct(e,t){let r=`${e}${t}`;return Tt.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function ce(e,t){return[t,e].filter(Boolean)}function ue(e){return e?Array.isArray(e)?e:[e]:[]}function ht(e,t,r){let o=(0,It.isNumber)(r)&&r>0,n=!!e.id&&ae(t,"id",e.id);if(e.file){let i=ae(t,"file",e.file);return i&&!n?`${e.file} - ${e.id}`:i&&o?`${e.file} - ${r}`:e.file}if(e.name){let i=ae(t,"name",e.name);return i&&!n?`${e.name} - ${e.id}`:i&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function ae(e,t,r){return e.filter(n=>n[t]===r).length>1}var yr=a.extend("junit-discovery");async function Ut(e){console.time(A("@currents/junit:fullTestSuite-ready"));try{yr("running scanner: %o",e);let t=(0,St.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=Ot.default.readFileSync(t,"utf-8"),o=await(0,Pt.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return Lr(o)}catch(t){return d("Failed to obtain the junit full test suite:",t),[]}}function Lr(e){let t=[],r=ue(e.testsuites?.testsuite),o={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(n=>{let i=ht(n,r);ue(n?.testcase)?.forEach(m=>{let E={title:ce(m.name,i),spec:i,tags:[],testId:Ct(ce(m.name,i).join(", "),i)};o.tests.push(E)})}),t.push(o),t}var V=class extends h{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Ut(this.reportDir)}};function At(e,t){switch(e.framework){case"jest":return new j(e);case"junit":return new V(e,t);default:return new h(e)}}var D=c(require("fs-extra")),T=c(require("path"));async function Dt(e){let t=await Br(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??T.default.join(t,"config.json")}}async function Br(e){return e?(await K(e),e):br((0,T.join)(process.cwd(),".currents"))}async function br(e){let t=await D.default.readdir(e),r=null;for(let o of t){let n=T.default.join(e,o),i=await D.default.stat(n);i.isDirectory()&&(!r||i.birthtime>r.birthtime)&&(r={name:o,birthtime:i.birthtime})}return r?(0,T.resolve)(e,r.name):null}async function K(e){try{return await D.default.pathExists(e)}catch{return d("Error checking if path exists:",d),!1}}async function Nt(e){let t=T.default.join(e,"instances");return xr(t)}async function xr(e){let t=await D.default.readdir(e),r=[];for(let o of t){let n=T.default.join(e,o);(await D.default.stat(n)).isFile()&&r.push(n)}return r}async function Lt(){let e=nt();if(!e)throw new Error("Currents config is missing!");let t=await Dt(e);de(Fr(t.reportDir)),a("Reporter options: %o",t),X("Report directory: %s",t.reportDir);let r=await S(t.configFilePath);a("Report config: %o",r);let o=await Nt(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Mr(t.reportDir),i=await K(n),l=wr(t.reportDir),m=null;if(i){let C=await S(n);g("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate}),await K(l)&&(m=await S(l),a("Full test suite file detected: %s",l))}if(m)a("The discovery stage was skipped");else{if(m=await At(r,t.reportDir).getFullTestSuite(),kr(m))throw new Error("Failed to discover the full test suite!");await ee(l,JSON.stringify(m))}let E=m.length===1?m[0].name:null,J={currents:e},P={type:r.framework,version:r.frameworkVersion,clientVersion:ye,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},me=b.userFacingNanoid(),L=Te(e.ciBuildId),N={};for await(let C of o){let I=await S(C);N[I.groupId]||(N[I.groupId]=[]),N[I.groupId].push(I)}for await(let C of Object.keys(N)){let I=N[C],Y=C;E&&(a("Default group found: %s, overwriting the group in the results",E),Y=E,I=I.map(O=>({...O,groupId:E})));try{let O=await vr({ci:L,group:Y,instances:I,fullTestSuite:m,config:J,machineId:me,framework:P});a("Api response: %o",O),X("[%s] Run created: %s",Y,O.runUrl);let Bt={response:O,isoDate:new Date().toISOString()};await ee(n,JSON.stringify(Bt)),a("Marker file %s: %s",i?"overwritten":"created",n)}catch(O){throw a("Failed to upload the results to the dashboard"),O}}}async function vr({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:i,framework:l}){let m=await Se(),E=await De(),J={browserName:"node",browserVersion:yt.default.coerce(process.version)?.version},{currents:P}=n,L={platform:{...J,...E},ci:e,commit:m,group:t,fullTestSuite:o,config:n,projectId:P.projectId,recordKey:P.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:P.tag??[],machineId:P.machineId??i,framework:l,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",y(L)),ot(L)}function Mr(e){return $.default.join(e,"upload.marker.json")}function wr(e){return $.default.join(e,"fullTestSuite.json")}function Fr(e){return $.default.join(e,`.debug-${new Date().toISOString()}.log`)}function kr(e){return e.length===0||e.some(t=>t.tests.length===0)}0&&(module.exports={handleCurrentsReport});
|
|
10
|
+
`]:["Unexpected network error"]}var ze=i.extend("http");async function G(e,r,t=Je){try{let o=await t(e).request(r);return ze("network response: %o",{...Xe.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw ze("network error: %o",{code:n.code,message:n.message,url:n.config?.url,method:n.config?.method,status:n.response?.status,headers:n.response?.headers,data:n.response?.data}),We(n),n}}var On=i.extend("api");var rr=require("util"),tr=require("zlib");var er=i.extend("api"),Tt=(0,rr.promisify)(tr.gzip);async function or(e){try{er("Run params: %o",N(e));let r=await ht(JSON.stringify(e));return G("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:r}).then(t=>t.data)}catch(r){throw er("Failed to create the run:",r),r}}async function ht(e){try{return await Tt(e)}catch(r){throw g("Failed to compress run payload:",r),r}}var Mn=i.extend("api");var os=i.extend("config");var Ot=null;function nr(){return Ot}var h=class{constructor(r){this.config=r}async getFullTestSuite(){return[]}};var dr=c(require("fs-extra")),_r=require("jest-cli"),Rr=c(require("tmp"));var Er=require("lodash");function sr(e){let r=[];for(let[t,o]of Object.entries(e))t==="_"||t==="$0"||t.includes("-")||(typeof o=="boolean"?o&&r.push(`--${t}`):Array.isArray(o)?o.forEach(n=>{r.push(`--${t}=${n}`)}):r.push(`--${t}=${o}`));return r.join(" ")}var ir=require("lodash"),Pt=["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 ar(e){return(0,ir.omit)(e,...Pt)}var mr=c(require("fs")),pr=require("jest-config"),ce=require("lodash"),ue=c(require("path"));function j(e,r){return(...t)=>new Promise((o,n)=>{let a=0,m=()=>{a++;try{let l=e(...t);o(l)}catch(l){if(a>=r.length)n(l);else{let _=r[a-1];setTimeout(m,_)}}};m()})}var cr=c(require("fs-extra")),Ut=c(require("path"));async function V(e){let r=await cr.default.pathExists(e);if(!r)throw new Error("File does not exist");return r}var ur=i.extend("jest-discovery");async function lr(e){try{let{config:r,configPath:t}=await(0,pr.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"],a=(0,ce.omit)(r,o);if(a.projects&&(a.projects=a.projects.map(_=>typeof _!="string"?(0,ce.omit)(_,n):_)),a.rootDir&&Object.keys(a).length===1)return null;let m=ue.default.resolve(t?ue.default.dirname(t):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),l=`module.exports=${JSON.stringify(a,null,2)}`;return ur("configFileContent: %O",l),mr.default.writeFileSync(m,l),await j(V,[200,200,200,200,200,1e3])(m),m}catch(r){return g("Failed to recreate the config file"),ur("error %o",r),null}}async function gr(e){let r="!!##ThisPatternWillNotMatchAnyTestName##!!",t=e.options,o=ar(t),n=sr(o),a=t.config,m=await lr(a);return{cliArgs:[n,"--testNamePattern",r,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",m?`--config=${m}`:"",...e.args].filter(_=>!(0,Er.isEmpty)(_)),configFilePath:m}}var At=i.extend("jest-discovery");async function fr(e,r){console.time(S("@currents/jest:fullTestSuite-ready"));let{cliArgs:t,configFilePath:o}=await gr(r);try{let n=Rr.default.fileSync({postfix:".json"});return At("running scanner: %o",t),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,_r.run)(t.concat(["--openHandlesTimeout=0"])),await j(V,Array.from({length:300},()=>100))(n.name),console.timeEnd(S("@currents/jest:fullTestSuite-ready")),await P(n.name)}catch(n){return g("Failed to obtain the jest full test suite:",n),[]}finally{o&&dr.default.unlinkSync(o)}}var K=class extends h{constructor(r){super(r)}async getFullTestSuite(){return fr(this.config.frameworkConfig,this.config.cliArgs)}};var Cr=c(require("fs-extra"));var Ir=c(require("path"));function J(e){return Ir.default.join(e,"fullTestSuite.json")}var St=i.extend("junit-discovery");async function Tr(e){console.time(S("@currents/junit:fullTestSuite-ready"));try{St("running scanner: %o",e);let r=J(e);process.env.CURRENTS_DISCOVERY_PATH=r;let t=Cr.default.readFileSync(r,"utf-8");return JSON.parse(t)}catch(r){return g("Failed to obtain the junit full test suite:",r),[]}}var $=class extends h{constructor(r,t){super(r),this.reportDir=t}async getFullTestSuite(){return Tr(this.reportDir)}};function hr(e,r){switch(e.framework){case"jest":return new K(e);case"junit":return new $(e,r);default:return new h(e)}}var L=c(require("fs-extra")),C=c(require("path"));async function Or(e){let r=await Lt(e?.reportDir);if(!r)throw new Error("Failed to find the report dir");return{reportDir:r,configFilePath:e?.configFilePath??C.default.join(r,"config.json")}}async function Lt(e){return e?(await Y(e),e):yt((0,C.join)(process.cwd(),".currents"))}async function yt(e){let r=await L.default.readdir(e),t=null;for(let o of r){let n=C.default.join(e,o),a=await L.default.stat(n);a.isDirectory()&&(!t||a.birthtime>t.birthtime)&&(t={name:o,birthtime:a.birthtime})}return t?(0,C.resolve)(e,t.name):null}async function Y(e){try{return await L.default.pathExists(e)}catch{return g("Error checking if path exists:",g),!1}}async function Pr(e){let r=C.default.join(e,"instances");return Dt(r)}async function Dt(e){let r=await L.default.readdir(e),t=[];for(let o of r){let n=C.default.join(e,o);(await L.default.stat(n)).isFile()&&t.push(n)}return t}var Nt=e=>Buffer.byteLength(JSON.stringify(e),"utf8"),Ur=(e,r=1048576)=>{let t=[],o=[],n=0;for(let a of e){let m=Nt(a);n+m>r&&(t.push(o),o=[],n=0),o.push(a),n+=m}return o.length>0&&t.push(o),t};async function Lr(){let e=nr();if(!e)throw new Error("Currents config is missing!");let r=await Or(e);ge(bt(r.reportDir)),i("Reporter options: %o",r),re("Report directory: %s",r.reportDir);let t=await P(r.configFilePath);i("Report config: %o",t);let o=await Pr(r.reportDir);i("Found %d instance results in the reportDir: %s",o.length,r.reportDir);let n=Bt(r.reportDir),a=await Y(n),m=J(r.reportDir),l=null;if(a){let T=await P(n);E("Marker file detected. The report was already uploaded: %o",{runUrl:T.response.runUrl,isoDate:T.isoDate}),await Y(m)&&(l=await P(m),i("Full test suite file detected: %s",m))}if(l)i("The discovery stage was skipped");else{if(l=await hr(t,r.reportDir).getFullTestSuite(),xt(l))throw new Error("Failed to discover the full test suite!");await oe(m,JSON.stringify(l))}let _=l.length===1?l[0].name:null,B={currents:e},O={type:t.framework,version:t.frameworkVersion,clientVersion:De,frameworkConfig:{originFramework:t.frameworkConfig?.originFramework,originFrameworkVersion:t.frameworkConfig?.originFrameworkVersion}},q=v.userFacingNanoid(),y=Ce(e.ciBuildId),D={};for await(let T of o){let I=await P(T);D[I.groupId]||(D[I.groupId]=[]),D[I.groupId].push(I)}for await(let T of Object.keys(D)){let I=D[T],b=T;_&&(i("Default group found: %s, overwriting the group in the results",_),b=_,I=I.map(U=>({...U,groupId:_})));try{let U=Ur(I),Q=await Ar({ci:y,group:b,instances:[],fullTestSuite:l,config:B,machineId:q,framework:O});for(let W=0;W<U.length;W++)await Ar({ci:y,group:b,instances:U[W],fullTestSuite:[],config:B,machineId:q,framework:O});i("Api response: %o",Q),re("[%s] Run created: %s",b,Q.runUrl);let yr={response:Q,isoDate:new Date().toISOString()};await oe(n,JSON.stringify(yr)),i("Marker file %s: %s",a?"overwritten":"created",n)}catch(U){throw i("Failed to upload the results to the dashboard"),U}}}async function Ar({ci:e,group:r,instances:t,fullTestSuite:o,config:n,machineId:a,framework:m}){let l=await Pe(),_=await Le(),B={browserName:"node",browserVersion:Sr.default.coerce(process.version)?.version},{currents:O}=n,y={platform:{...B,..._},ci:e,commit:l,group:r,fullTestSuite:o,config:n,projectId:O.projectId,recordKey:O.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:O.tag??[],machineId:O.machineId??a,framework:m,instances:t,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return i("Creating run: %o",N(y)),or(y)}function Bt(e){return me.default.join(e,"upload.marker.json")}function bt(e){return me.default.join(e,`.debug-${new Date().toISOString()}.log`)}function xt(e){return e.length===0||e.some(r=>r.tests.length===0)}0&&(module.exports={handleCurrentsReport});
|
|
11
11
|
/*! For license information please see index.js.LEGAL.txt */
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@currents/cmd",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.8",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Currents Software Inc",
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@jest/reporters": "^29.7.0",
|
|
23
23
|
"@jest/types": "^29.6.3",
|
|
24
|
-
"@release-it/conventional-changelog": "^
|
|
24
|
+
"@release-it/conventional-changelog": "^10.0.0",
|
|
25
25
|
"@types/archiver": "^6.0.3",
|
|
26
26
|
"@types/async-retry": "^1.4.9",
|
|
27
27
|
"@types/debug": "^4.1.12",
|
|
28
28
|
"@types/fs-extra": "^11.0.4",
|
|
29
29
|
"@types/getos": "^3.0.4",
|
|
30
|
-
"@types/lodash": "^4.17.
|
|
31
|
-
"@types/node": "^22.
|
|
30
|
+
"@types/lodash": "^4.17.15",
|
|
31
|
+
"@types/node": "^22.13.0",
|
|
32
32
|
"@types/proxy-from-env": "^1.0.4",
|
|
33
33
|
"@types/semver": "^7.5.8",
|
|
34
34
|
"@types/tmp": "^0.2.6",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"@types/uuid": "^10.0.0",
|
|
37
37
|
"@types/xml2js": "^0.4.14",
|
|
38
38
|
"jest": "^29.7.0",
|
|
39
|
-
"rimraf": "^
|
|
39
|
+
"rimraf": "^6.0.1",
|
|
40
40
|
"tsup": "^8.3.5",
|
|
41
41
|
"typescript": "^5.7.2",
|
|
42
|
-
"vitest": "^2.1.
|
|
42
|
+
"vitest": "^2.1.9"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@commander-js/extra-typings": "^12.1.0",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"tmp-promise": "^3.0.3",
|
|
70
70
|
"ts-pattern": "^5.6.0",
|
|
71
71
|
"unzipper": "^0.12.3",
|
|
72
|
-
"uuid": "^11.0.
|
|
72
|
+
"uuid": "^11.0.5",
|
|
73
73
|
"xml2js": "^0.6.2"
|
|
74
74
|
},
|
|
75
75
|
"bin": {
|