@currents/cmd
Version:
Currents CLI tools
18 lines • 67.8 kB
JavaScript
#! /usr/bin/env node
"use strict";var Ii=Object.create;var re=Object.defineProperty;var _i=Object.getOwnPropertyDescriptor;var Ri=Object.getOwnPropertyNames;var Ti=Object.getPrototypeOf,hi=Object.prototype.hasOwnProperty;var Oi=(t,e)=>{for(var r in e)re(t,r,{get:e[r],enumerable:!0})},Ui=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ri(e))!hi.call(t,n)&&n!==r&&re(t,n,{get:()=>e[n],enumerable:!(o=_i(e,n))||o.enumerable});return t};var l=(t,e,r)=>(r=t!=null?Ii(Ti(t)):{},Ui(e||!t||!t.__esModule?re(r,"default",{value:t,enumerable:!0}):r,t));var rE=require("source-map-support/register");var gi=require("@commander-js/extra-typings");var We={name:"@currents/cmd",version:"1.9.9",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",repository:{type:"git",url:"https://github.com/currents-dev/currents-reporter"},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.1","release-it":"^19.2.4","@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.16","@types/node":"^25.5.0","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14","@types/xxhashjs":"^0.2.4",jest:"^29.7.0",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.9.3",vitest:"^2.1.9"},dependencies:{"@commander-js/extra-typings":"^13.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"1.15.0","axios-retry":"4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^17.2.3",execa:"^9.5.1","fs-extra":"^11.3.4",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^30.2.0","jest-config":"^30.3.0",lodash:"^4.18.1",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.7.1","source-map-support":"^0.5.21",tmp:"^0.2.5","tmp-promise":"^3.0.3","ts-pattern":"^5.8.0",unzipper:"^0.12.3",uuid:"11.1.0",xml2js:"^0.6.2",xxhashjs:"^0.2.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 at=We.version;var ve=require("@commander-js/extra-typings");var Ai=[];function oe(t){Ai.push(t)}var y=l(require("chalk")),H=l(require("util"));var ne=require("debug"),Si=l(require("fs-extra")),s=(0,ne.debug)("currents"),Pi=null;function qe(){ne.debug.enable("currents,currents:*")}function Qe(t){Pi=t}var ze=[],Xe=[];var Ot=(...t)=>{let e=H.default.format(...t);oe(e),console.log(e)},Di=(...t)=>{let e=H.default.format(...t);oe(e),console.error(e)},A=Ot,g=(...t)=>{let e=H.default.format(...t);return Xe.push(e),s("WARNING: ",e),Ot(y.default.bgYellow.black(" WARNING "),e)},Z=(...t)=>{let e=H.default.format(...Ze(t));return s("WARNING: ",H.default.format(...t)),Ot(y.default.bgYellow.black(" WARNING "),e)},Ut=(...t)=>Ot(y.default.green.bold(H.default.format(...t))),E=(...t)=>{let e=H.default.format(...Ze(t));return ze.push(e),s("ERROR: ",H.default.format(...t)),Di(y.default.bgRed.white(" ERROR "),e)};var Ze=t=>t.map(e=>e instanceof Error?e.message:e),yt=(t=2)=>console.log(Array(t).fill("").join(`
`)),Ns=y.default.cyan,Ls=y.default.blueBright,Bs=y.default.red,Ms=y.default.yellow,vs=y.default.green,Fs=y.default.gray,Gs=y.default.white,ks=y.default.black,Hs=y.default.magenta,C=y.default.dim,Ks=y.default.bold;var In=l(require("chalk"));function tr(t,e){if(!t)return t;let r={...t};return e.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function At(t){return tr(t,["apiKey"])}function T(t){return tr(t,["recordKey","key"])}var st=class extends Error{};var F=l(require("fs-extra")),gt=require("path"),er=require("uuid");async function tt(t){try{return await F.default.readJson(t)}catch(e){throw E("Error while reading JSON file: %s",t,e),E}}async function et(t,e){try{return await F.default.writeFile(t,e,"utf8"),t}catch(r){throw E(`Error writing file at ${t}:`,r),r}}async function Et(t,e){try{try{return await F.default.access(t),t}catch{return await F.default.writeFile(t,e,"utf8"),t}}catch(r){throw E(`Error writing file at ${t}:`,r),r}}async function rr(t,e){if(e){await F.default.ensureDir(t);return}let r=(0,gt.dirname)(t);await F.default.ensureDir(r)}function bi(){let t=new Date().toISOString().replace(/[:.]/g,"-"),e=(0,er.v4)();return`${t}-${e}`}async function or(t,e){let r=bi(),o=(0,gt.join)(t,e,r);return Ct(o)}async function Ct(t){try{return await F.default.ensureDir(t),s("Folder created",t),t}catch(e){throw E(`Failed to create folder at ${t}:`,e),e}}async function nr(t,e){try{return await F.default.ensureDir((0,gt.dirname)(e)),await F.default.copy(t,e),s("File copied from %s to %s",t,e),e}catch(r){throw E(`Failed to copy file from ${t} to ${e}:`,r),r}}var ir=l(require("crypto"));function rt(t){return ir.createHash("sha256").update(t).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var St={};Oi(St,{getNanoid:()=>xi,userFacingNanoid:()=>ae});var ie=require("nanoid"),ar="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",xi=(t=16)=>(0,ie.customAlphabet)(ar,t)(),ae=(0,ie.customAlphabet)(ar,12);function sr(t){return Object.entries(t??{}).reduce((e,[r,o])=>o===void 0?e:{...e,[r]:o},{})}function h(t,e){return"env"in t[e]&&t[e].env?t[e].env:""}function Ni(t,e){return t[e].cli}function Li(t,e){return t[e].name}function K(t,e,r,o,n){let a={...sr(o),...sr(r())};return e.forEach(c=>{if(!a[c])throw E(`${Li(t,c)} is required for Currents Reporter. Use the following methods to set the value:
- as environment variable: ${C(h(t,c))}
- as CLI flag of the command: ${C(Ni(t,c))}`),new st("Missing required config variable")}),typeof n=="function"&&n(a),a}var Bi={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Mi={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"}},j={...Bi,...Mi};function cr(){return{apiKey:process.env[j.apiKey.env],debug:!!process.env[j.debug.env]}}var vi=s.extend("config"),Fi=["apiKey","projectId"],Gi=t=>{let{ciBuildId:e,tag:r,branch:o}=t;if(!([e,r,o].filter(Boolean).length===1||r&&o&&!e))throw E('"ciBuildId", "tag", "branch" or a combination of "tag" and "branch" are expected to be provided'),new st("Missing or invalid parameters")},se=null;function pr(t){se=K(j,Fi,cr,t,Gi),vi("Resolved config: %o",At(se))}function Pt(){return se}var Fr=require("fs/promises");var Sr=l(require("lodash"));var Cr=l(require("axios")),Ir=l(require("axios-retry")),_r=l(require("lodash"));var mr=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ur=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",dr=()=>3e4;var ce=require("axios"),pe=l(require("pretty-ms"));var lr=s.extend("http"),Dt=t=>[3*1e3,15*1e3,30*1e3][t-1],fr=t=>(lr("isRetriableError: %o",{message:t.message,code:"code"in t?t.code:void 0,status:"response"in t?t.response?.status:void 0,headers:"response"in t?t.response?.headers:void 0,data:"response"in t?t.response?.data:void 0,isAxiosError:(0,ce.isAxiosError)(t)}),"code"in t&&t.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(t.code)?!0:(0,ce.isAxiosError)(t)?[429,502,503,504].includes(t.response?.status??0):!1),wt=()=>3;function gr(t,e,r){lr("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,e.message,(0,pe.default)(Dt(t)),t,wt()),g("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,e.message,(0,pe.default)(Dt(t)),t,wt())}var me=s.extend("http");var ue={api:null,restApi:null};function ki(t){let e=t==="api"?mr():ur();me("client base url: %s",e);let r=Cr.default.create({baseURL:e,timeout:dr(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":at}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let a={..._r.default.pick(o,"method","url","headers"),baseURL:e,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?me("network request retry: %o",Er({...a,baseURL:e,isRetry:!0})):me("network request: %o",Er(a)),o}),(0,Ir.default)(r,{retries:wt(),retryCondition:fr,retryDelay:Dt,shouldResetTimeout:!0,onRetry:gr}),r}function Rr(t){return ue[t]===null&&(ue[t]=ki(t)),ue[t]}function Er(t){return{method:t.method,baseURL:t.baseURL,url:t.url,data:t.isRetry?"<retry>":Hi(t.data),params:t.isRetry?"<retry>":t.params,headers:{...t.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Hi(t){return t?.results?.raw?{...t,results:{...t.results,raw:"***"}}:t}var Or=require("axios"),Ur=l(require("lodash")),S=require("ts-pattern");function yr(t){(0,S.match)(t).when(Or.isAxiosError,Ki).otherwise(()=>{g("Unexpected error while sending network request: %s",t)})}function Ki(t){return(0,S.match)(t).with({code:"ECONNABORTED"},()=>{g("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{g("Network connection aborted")}).with({code:"ECONNRESET"},()=>{g("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{g("Network connection timeout")}).with({response:S.P.not(S.P.nullish)},e=>{ji(e,{status:e.response.status,data:e.response.data})}).otherwise(e=>{g(`[currents] Unexpected network error: %s
%O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status,payload:t.response?.config.data})})}function ji(t,{status:e,data:r}){(0,S.match)(e).with(401,()=>{g(`[currents] ${t.response?.config.method} ${t.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{g(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 400 Bad Request from cloud service:
%o`,r)}).with(404,()=>{g(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 404 Not Found from cloud service`)}).with(429,()=>{g(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{$i(t,r)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
%O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status})})}function $i(t,e){(0,S.match)(e).with({code:Tr.MISSING_SUITE,message:S.P.string,errors:S.P.array(S.P.string)},async r=>{let{message:o,errors:n}=r;yt(1),E(...hr(o,n))}).with({code:Tr.RUN_EXPIRED,message:S.P.string},r=>{g(r.message)}).with({message:S.P.string,errors:S.P.array(S.P.string)},r=>{let{message:o,errors:n}=r;yt(1),g(...hr(o,n)),yt(1)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
%O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status})})}var Tr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function hr(t,e){return Ur.default.isString(t)?e?.length===0?[t]:[t,`
${(e??[]).map(r=>` - ${r}`).join(`
`)}
`]:["Unexpected network error"]}var Ar=s.extend("http");async function J(t,e,r=Rr){try{let o=await r(t).request(e);return Ar("network response: %o",{...Sr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw Ar("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}),yr(n),n}}var ct=s.extend("api");async function Dr(t){try{return ct("Request params: %o",T(t)),J("api",{url:"cache/upload",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ct("Failed to create cache:",e),e}}async function wr(t){try{return ct("Request params: %o",t),J("api",{url:"cache/v2/download",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ct("Failed to retrieve cache:",e),e}}async function br(t){try{return ct("Request params: %o",t),J("api",{url:"cache/meta",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ct("Failed to retrieve reference cache meta:",e),e}}var Nr=require("util"),Lr=require("zlib");var xr=s.extend("api"),Vi=(0,Nr.promisify)(Lr.gzip);async function Br(t){try{xr("Run params: %o",T(t));let e=await Yi(JSON.stringify(t));return J("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:e}).then(r=>r.data)}catch(e){throw xr("Failed to create the run:",e),e}}async function Yi(t){try{return await Vi(t)}catch(e){throw E("Failed to compress run payload:",e),e}}var Mr=s.extend("api");async function vr(t,e){try{return Mr("Run params: %o",e),J("restApi",{url:"v1/runs/find",params:e,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`}}).then(r=>r.data)}catch(r){throw Mr("Failed to obtain run data:",r),r}}async function de(){try{let t=Pt();if(!t)throw new Error("Config is missing!");let e=t.ciBuildId?{projectId:t.projectId,ciBuildId:t.ciBuildId,pwLastRun:t.pwLastRun}:{projectId:t.projectId,branch:t.branch,tag:t.tag,pwLastRun:t.pwLastRun},r=await vr(t.apiKey,e);await Ji(t.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,t)}catch(t){throw s("Failed to get run data"),t}}async function Ji(t,e){let r=JSON.stringify(t,null,2);e.output?(await rr(e.output),await(0,Fr.writeFile)(e.output,r,"utf-8"),A(`Successfully written to ${e.output}`)):A(r)}var Uo=require("axios"),Pe=l(require("path"));var P=require("@commander-js/extra-typings");var Wi={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},qi={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"}},Qi={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"}},W={...Wi,...qi,...Qi};function le(){return{recordKey:process.env[W.recordKey.env],debug:process.env[W.debug.env]}}var Gr=s.extend("config"),kr=["recordKey"],ot;function Hr(t){ot={type:"SET_COMMAND_CONFIG",values:K(W,kr,le,t)},Gr("Resolved config: %o",{...ot,values:T(ot.values)})}function Kr(t){ot={type:"GET_COMMAND_CONFIG",values:K(W,kr,le,t)},Gr("Resolved config: %o",{...ot,values:T(ot.values)})}function q(){return ot}function jr(t){return{recordKey:t.key,id:t.id,preset:t.preset,outputDir:t.outputDir,presetOutput:t.presetOutput,debug:t.debug,matrixIndex:t.matrixIndex,matrixTotal:t.matrixTotal,continue:t.continue}}function $r(t){return{recordKey:t.key,id:t.id,preset:t.preset,pwOutputDir:t.pwOutputDir,path:t.path,debug:t.debug,matrixIndex:t.matrixIndex,matrixTotal:t.matrixTotal,continue:t.continue}}var Vr=require("@commander-js/extra-typings");function pt(t,e=[]){return t?e.concat(t.split(",").map(r=>r.trim())):e}async function G(t,e){try{e.debug&&qe(),await t(e),process.exit(0)}catch(r){E(r.message);let o=r instanceof Vr.CommanderError?r.exitCode:1;process.exit(o)}}var fe=new P.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(h(W,"recordKey")),ge=new P.Option("--debug","Enable debug logging").env(h(W,"debug")).default(!1),Ee=new P.Option("--id <id>","The ID the data is saved under in the cache"),Yr=new P.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(pt),bt=(e=>(e.lastRun="last-run",e))(bt||{}),Ce=new P.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(bt)),Jr=new P.Option("--output-dir <dir>","Path to the directory where output will be written"),Wr=new P.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),It=".currents_env",qr=new P.Option("--preset-output <path>","Path to the file containing the preset output").default(It),Ie=new P.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(Qr),_e=new P.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(Qr);function Qr(t){let e=parseInt(t,10);if(isNaN(e)||e<=0||!Number.isInteger(e))throw new P.InvalidArgumentError("A positive integer is expected.");return e}var zr=new P.Option("--continue","Continue the script execution if the cache is not found").default(!1),Xr=new P.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var R=require("lodash");var xt=s.extend("ci"),zi=(t,...e)=>(0,R.chain)(e).compact().join(t).value(),Xi=(t,e)=>(0,R.set)(t,(0,R.camelCase)(e),process.env[e]),O=t=>(0,R.transform)(t,Xi,{}),Zi=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,ta=()=>(0,R.some)(process.env,(t,e)=>/^CODEBUILD_/.test(e)),ea=()=>process.env.bamboo_buildNumber,ra=()=>(0,R.some)(process.env,(t,e)=>/^CONCOURSE_/.test(e)),oa=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),na=()=>!!(process.env.BUILD_ID&&process.env.PROJECT_ID&&process.env.PROJECT_NUMBER||process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT),ia=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,aa={appveyor:"APPVEYOR",azure:Zi,awsCodeBuild:ta,bamboo:ea,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",concourse:ra,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:oa,goCD:"GO_JOB_NAME",jenkins:ia,googleCloud:na,semaphore:"SEMAPHORE",teamcity:"TEAMCITY_VERSION",travis:"TRAVIS",netlify:"NETLIFY"};function sa(){let{env:t}=process;return(0,R.findKey)(aa,e=>{if((0,R.isString)(e))return t[e];if((0,R.isFunction)(e))return e()})}var Zr=()=>({appveyor:O(["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:O(["AGENT_BUILDDIRECTORY","AGENT_ID","AGENT_JOBNAME","AGENT_JOBSTATUS","AGENT_MACHINENAME","AGENT_NAME","AGENT_OS","AGENT_OSARCHITECTURE","BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_BUILDURI","BUILD_CONTAINERID","BUILD_CRONSCHEDULE_DISPLAYNAME","BUILD_DEFINITIONNAME","BUILD_DEFINITIONVERSION","BUILD_QUEUEDBY","BUILD_QUEUEDBYID","BUILD_REASON","BUILD_REPOSITORY_ID","BUILD_REPOSITORY_NAME","BUILD_REPOSITORY_PROVIDER","BUILD_REPOSITORY_URI","BUILD_REQUESTEDFOR","BUILD_REQUESTEDFOREMAIL","BUILD_REQUESTEDFORID","BUILD_SOURCEBRANCH","BUILD_SOURCEBRANCHNAME","BUILD_SOURCESDIRECTORY","BUILD_SOURCEVERSION","BUILD_SOURCEVERSIONAUTHOR","BUILD_SOURCEVERSIONMESSAGE","BUILD_STAGINGDIRECTORY","BUILD_TRIGGEREDBY_BUILDID","BUILD_TRIGGEREDBY_BUILDNUMBER","BUILD_TRIGGEREDBY_DEFINITIONID","BUILD_TRIGGEREDBY_DEFINITIONNAME","BUILD_TRIGGEREDBY_PROJECTID","COMMON_TESTRESULTSDIRECTORY","PIPELINE_WORKSPACE","SYSTEM_COLLECTIONID","SYSTEM_COLLECTIONURI","SYSTEM_DEFAULTWORKINGDIRECTORY","SYSTEM_DEFINITIONID","SYSTEM_HOSTTYPE","SYSTEM_JOBATTEMPT","SYSTEM_JOBDISPLAYNAME","SYSTEM_JOBID","SYSTEM_JOBNAME","SYSTEM_PHASEATTEMPT","SYSTEM_PHASEDISPLAYNAME","SYSTEM_PHASENAME","SYSTEM_PLANID","SYSTEM_PULLREQUEST_ISFORK","SYSTEM_PULLREQUEST_PULLREQUESTID","SYSTEM_PULLREQUEST_PULLREQUESTNUMBER","SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI","SYSTEM_PULLREQUEST_SOURCEBRANCH","SYSTEM_PULLREQUEST_SOURCECOMMITID","SYSTEM_PULLREQUEST_TARGETBRANCH","SYSTEM_PULLREQUEST_TARGETBRANCHNAME","SYSTEM_STAGEATTEMPT","SYSTEM_STAGEDISPLAYNAME","SYSTEM_STAGENAME","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","SYSTEM_TEAMPROJECT","SYSTEM_TEAMPROJECTID","SYSTEM_TIMELINEID"]),awsCodeBuild:O(["AWS_DEFAULT_REGION","AWS_REGION","CODEBUILD_BATCH_BUILD_IDENTIFIER","CODEBUILD_BUILD_ARN","CODEBUILD_BUILD_ID","CODEBUILD_BUILD_IMAGE","CODEBUILD_BUILD_NUMBER","CODEBUILD_BUILD_SUCCEEDING","CODEBUILD_BUILD_URL","CODEBUILD_INITIATOR","CODEBUILD_PROJECT_ARN","CODEBUILD_PUBLIC_BUILD_URL","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION","CODEBUILD_SRC_DIR","CODEBUILD_START_TIME","CODEBUILD_WEBHOOK_ACTOR_ACCOUNT_ID","CODEBUILD_WEBHOOK_BASE_REF","CODEBUILD_WEBHOOK_EVENT","CODEBUILD_WEBHOOK_HEAD_REF","CODEBUILD_WEBHOOK_MERGE_COMMIT","CODEBUILD_WEBHOOK_PREV_COMMIT","CODEBUILD_WEBHOOK_TRIGGER","CODEBUILD_WEBHOOK_LABEL","CODEBUILD_WEBHOOK_RUN_ID","CODEBUILD_WEBHOOK_JOB_ID","CODEBUILD_WEBHOOK_WORKFLOW_NAME","CODEBUILD_RUNNER_OWNER","CODEBUILD_RUNNER_REPO","CODEBUILD_RUNNER_REPO_DOMAIN","CODEBUILD_RUNNER_WITH_BUILDSPEC"]),bamboo:O(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:O(["CI","BITBUCKET_WORKSPACE","BITBUCKET_REPO_SLUG","BITBUCKET_REPO_UUID","BITBUCKET_REPO_FULL_NAME","BITBUCKET_REPO_IS_PRIVATE","BITBUCKET_REPO_OWNER","BITBUCKET_REPO_OWNER_UUID","BITBUCKET_PROJECT_KEY","BITBUCKET_PROJECT_UUID","BITBUCKET_BUILD_NUMBER","BITBUCKET_PIPELINE_UUID","BITBUCKET_STEP_UUID","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_STEP_TRIGGERER_UUID","BITBUCKET_PARALLEL_STEP","BITBUCKET_PARALLEL_STEP_COUNT","BITBUCKET_CLONE_DIR","BITBUCKET_COMMIT","BITBUCKET_BRANCH","BITBUCKET_TAG","BITBUCKET_BOOKMARK","BITBUCKET_GIT_HTTP_ORIGIN","BITBUCKET_GIT_SSH_ORIGIN","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT","BITBUCKET_DEPLOYMENT_ENVIRONMENT","BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID","BITBUCKET_EXIT_CODE"]),buildkite:O(["BUILDKITE_ORGANIZATION_SLUG","BUILDKITE_PIPELINE_ID","BUILDKITE_PIPELINE_NAME","BUILDKITE_PIPELINE_SLUG","BUILDKITE_PIPELINE_DEFAULT_BRANCH","BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_BRANCH","BUILDKITE_TAG","BUILDKITE_COMMIT","BUILDKITE_MESSAGE","BUILDKITE_BUILD_AUTHOR","BUILDKITE_BUILD_AUTHOR_EMAIL","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_LABEL","BUILDKITE_COMMAND","BUILDKITE_STEP_ID","BUILDKITE_STEP_KEY","BUILDKITE_PARALLEL_JOB","BUILDKITE_PARALLEL_JOB_COUNT","BUILDKITE_RETRY_COUNT","BUILDKITE_COMPUTE_TYPE","BUILDKITE_CLUSTER_NAME","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH","BUILDKITE_PULL_REQUEST_DRAFT","BUILDKITE_PULL_REQUEST_LABELS","BUILDKITE_MERGE_QUEUE_BASE_BRANCH","BUILDKITE_MERGE_QUEUE_BASE_COMMIT","BUILDKITE_REBUILT_FROM_BUILD_ID","BUILDKITE_REBUILT_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_ID","BUILDKITE_TRIGGERED_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG"]),circle:O(["CI","CIRCLECI","CIRCLE_BRANCH","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PREVIOUS_BUILD_NUM","CIRCLE_JOB","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_JOB_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PIPELINE_ID","CIRCLE_ORGANIZATION_ID","CIRCLE_PROJECT_ID","CIRCLE_PROJECT_REPONAME","CIRCLE_PROJECT_USERNAME","CIRCLE_REPOSITORY_URL","CIRCLE_WORKING_DIRECTORY","CIRCLE_SHA1","CIRCLE_TAG","CIRCLE_USERNAME","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_PULL_REQUEST","CIRCLE_PULL_REQUESTS","CI_PULL_REQUEST"]),concourse:O(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:O(["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:O(["DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:O(["CI","GITHUB_ACTIONS","GITHUB_WORKFLOW","GITHUB_WORKFLOW_REF","GITHUB_WORKFLOW_SHA","GITHUB_ACTION","GITHUB_ACTION_PATH","GITHUB_ACTION_REPOSITORY","GITHUB_JOB","GITHUB_EVENT_NAME","GITHUB_EVENT_PATH","GITHUB_RUN_ID","GITHUB_RUN_NUMBER","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY","GITHUB_REPOSITORY_ID","GITHUB_REPOSITORY_OWNER","GITHUB_REPOSITORY_OWNER_ID","GITHUB_REF","GITHUB_REF_NAME","GITHUB_REF_TYPE","GITHUB_REF_PROTECTED","GITHUB_BASE_REF","GITHUB_HEAD_REF","GITHUB_SHA","GITHUB_ACTOR","GITHUB_ACTOR_ID","GITHUB_TRIGGERING_ACTOR","GITHUB_SERVER_URL","GITHUB_API_URL","GITHUB_GRAPHQL_URL","GITHUB_WORKSPACE","GITHUB_RETENTION_DAYS","RUNNER_OS","RUNNER_ARCH","RUNNER_NAME","RUNNER_ENVIRONMENT","RUNNER_DEBUG"]),gitlab:O(["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","CI_MERGE_REQUEST_IID","CI_MERGE_REQUEST_PROJECT_URL","CI_MERGE_REQUEST_TITLE","CI_MERGE_REQUEST_SOURCE_BRANCH_NAME","CI_MERGE_REQUEST_TARGET_BRANCH_NAME","CI_OPEN_MERGE_REQUESTS"]),goCD:O(["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:O(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:O(["BRANCH_NAME","BUILD_DISPLAY_NAME","BUILD_ID","BUILD_NUMBER","BUILD_TAG","BUILD_URL","CHANGE_AUTHOR","CHANGE_AUTHOR_DISPLAY_NAME","CHANGE_AUTHOR_EMAIL","CHANGE_BRANCH","CHANGE_FORK","CHANGE_ID","CHANGE_TARGET","CHANGE_TITLE","CHANGE_URL","CI","EXECUTOR_NUMBER","JAVA_HOME","JENKINS_HOME","JENKINS_URL","JOB_BASE_NAME","JOB_NAME","JOB_URL","NODE_LABELS","NODE_NAME","RUN_ARTIFACTS_DISPLAY_URL","RUN_CHANGES_DISPLAY_URL","TAG_NAME","WORKSPACE","WORKSPACE_TMP","GIT_AUTHOR_EMAIL","GIT_AUTHOR_NAME","GIT_BRANCH","GIT_COMMIT","GIT_COMMITTER_EMAIL","GIT_COMMITTER_NAME","GIT_LOCAL_BRANCH","GIT_PREVIOUS_COMMIT","GIT_PREVIOUS_SUCCESSFUL_COMMIT","GIT_URL","ghprbActualCommit","ghprbGhRepository","ghprbPullId","ghprbPullLink","ghprbSourceBranch","ghprbTargetBranch","ghprbTriggerAuthorLogin"]),semaphore:O(["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"]),teamcity:null,travis:O(["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"]),netlify:O(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"])}),ca=()=>{let{env:t}=process;return{appveyor:{sha:t.APPVEYOR_REPO_COMMIT,branch:t.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||t.APPVEYOR_REPO_BRANCH,message:zi(`
`,t.APPVEYOR_REPO_COMMIT_MESSAGE,t.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:t.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:t.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:t.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:t.CODEBUILD_SOURCE_REPO_URL},azure:{sha:t.BUILD_SOURCEVERSION,branch:t.BUILD_SOURCEBRANCHNAME,message:t.BUILD_SOURCEVERSIONMESSAGE,authorName:t.BUILD_SOURCEVERSIONAUTHOR,authorEmail:t.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:t.bamboo_planRepository_revision,branch:t.bamboo_planRepository_branch,authorName:t.bamboo_planRepository_username,remoteOrigin:t.bamboo_planRepository_repositoryURL},bitbucket:{sha:t.BITBUCKET_COMMIT,branch:t.BITBUCKET_BRANCH},buildkite:{sha:t.BUILDKITE_COMMIT,branch:t.BUILDKITE_BRANCH,message:t.BUILDKITE_MESSAGE,authorName:t.BUILDKITE_BUILD_CREATOR,authorEmail:t.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:t.BUILDKITE_REPO,defaultBranch:t.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:t.CIRCLE_SHA1,branch:t.CIRCLE_BRANCH,authorName:t.CIRCLE_USERNAME,remoteOrigin:t.CIRCLE_REPOSITORY_URL},codeFresh:{sha:t.CF_REVISION,branch:t.CF_BRANCH,message:t.CF_COMMIT_MESSAGE,authorName:t.CF_COMMIT_AUTHOR},drone:{sha:t.DRONE_COMMIT_SHA,branch:t.DRONE_SOURCE_BRANCH,message:t.DRONE_COMMIT_MESSAGE,authorName:t.DRONE_COMMIT_AUTHOR,authorEmail:t.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:t.DRONE_GIT_HTTP_URL,defaultBranch:t.DRONE_REPO_BRANCH},githubActions:{sha:t.GITHUB_SHA,branch:t.GH_BRANCH||t.GITHUB_REF,defaultBranch:t.GITHUB_BASE_REF,remoteBranch:t.GITHUB_HEAD_REF,runAttempt:t.GITHUB_RUN_ATTEMPT},gitlab:{sha:t.CI_COMMIT_SHA,branch:t.CI_COMMIT_REF_NAME,message:t.CI_COMMIT_MESSAGE,authorName:t.GITLAB_USER_NAME,authorEmail:t.GITLAB_USER_EMAIL,remoteOrigin:t.CI_REPOSITORY_URL,defaultBranch:t.CI_DEFAULT_BRANCH},googleCloud:{sha:t.COMMIT_SHA,branch:t.BRANCH_NAME},jenkins:{sha:t.GIT_COMMIT,branch:t.GIT_BRANCH},semaphore:{sha:t.SEMAPHORE_GIT_SHA,branch:t.SEMAPHORE_GIT_BRANCH,remoteOrigin:t.SEMAPHORE_GIT_REPO_SLUG},snap:null,teamcity:null,travis:{sha:t.TRAVIS_PULL_REQUEST_SHA||t.TRAVIS_COMMIT,branch:t.TRAVIS_PULL_REQUEST_BRANCH||t.TRAVIS_BRANCH,message:t.TRAVIS_COMMIT_MESSAGE},netlify:{sha:t.COMMIT_REF,branch:t.BRANCH,remoteOrigin:t.REPOSITORY_URL}}},to=t=>{let e=eo();return e?(0,R.chain)(t()).get(e).value():{}};function pa(){return(0,R.chain)(Zr()).omitBy(R.isNull).keys().value()}function ma(t){return t&&pa().includes(t)}function eo(){let t=sa();return xt("detected CI provider name: %s",t),t||null}function ua(){return to(Zr)}function ro(){return to(ca)}function mt(t){let e=ua(),r=eo(),o=da(t,r);return xt("detected CI provider: %s",r),xt("detected CI params: %O",e),xt("detected CI build ID: %o",o),{params:e,provider:r,ciBuildId:o}}function da(t,e){return t?{source:"user",value:t}:ma(e)?{source:"server",value:null}:{source:"random",value:`auto:${ae()}`}}var oo=l(require("archiver")),no=l(require("fs-extra")),Re=l(require("path")),io=l(require("unzipper"));var la=50*1024*1024;async function ao(t,e=la){return new Promise((r,o)=>{let n=(0,oo.default)("zip",{zlib:{level:9}}),a=[],c=0;n.on("data",m=>{a.push(m),c+=m.length,c>e&&o(new Error(`Zip size exceeded the limit of ${e} bytes`))}),n.on("warning",m=>{m.code==="ENOENT"?g(m):o(m)}),n.on("error",m=>o(m)),n.on("end",()=>{let m=Buffer.concat(a);r(m)});let p=async m=>{let f=process.cwd(),d=Re.default.normalize(m),_=Re.default.relative(f,d),I=await no.default.stat(m);I.isDirectory()?n.directory(m,_):n.file(m,{name:_,stats:I})};(async m=>{for(let f of m)await p(f);await n.finalize()})(t).catch(o)})}async function so(t,e){return io.default.Open.buffer(t).then(r=>r.extract({path:e,concurrency:3}))}var lo=l(require("async-retry")),fo=require("axios");var co=l(require("axios")),po=require("https-proxy-agent"),mo=l(require("proxy-from-env"));var fa=s.extend("axios");function Te(t={}){let e=co.default.create(t);return e.interceptors.request.use(r=>{let o={...r},n=e.getUri(r),a=mo.default.getProxyForUrl(n);return a&&(fa("Using HTTP proxy %s for %s ",a,n),o.proxy=!1,o.httpsAgent=ga(a)),o}),e}var Nt=null;function ga(t){return Nt||(Nt=new po.HttpsProxyAgent(t),Nt)}var Bt=s.extend("upload"),Lt=5;async function he(t,e,r){return Bt("Uploading buffer %s",t.name,{buffer:Buffer.byteLength(t.buffer)}),Ca(t.buffer,t.uploadUrl,e,r)}async function Ea(t,e,r,o){return Te().request({method:"put",url:e,data:t,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function Oe(t,e){try{let r=await Te().get(t,{responseType:"arraybuffer",onDownloadProgress:e});return Buffer.from(r.data)}catch(r){throw(0,fo.isAxiosError)(r)&&Bt("Failed to download %s: %s",t,r.message),r}}async function Ca(...t){await(0,lo.default)(async()=>{await Ea(...t)},{retries:Lt,onRetry:(e,r)=>{if(Bt("Upload failed %d out of %d attempts: %s",r,Lt,e.message),r===Lt){E(`Cannot upload after ${r} times: ${e.message}`);return}g(`Upload failed ${r} out of ${Lt} attempts: ${e.message}`)}})}var Ue=t=>({total:e,loaded:r})=>{};function uo(t){return t/1e3/1e3}var Se=l(require("lodash"));var Q=l(require("path")),Ae=l(require("globby"));var go=require("lodash");function ye({config:t,cacheId:e,orgId:r,path:o,ci:n,cacheKey:a,metaCacheKey:c}){let p={id:e,orgId:r,config:(0,go.omit)(t,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString(),cacheKey:a,metaCacheKey:c};return Buffer.from(JSON.stringify(p))}function Eo(t,e){t instanceof Error?Z("%s. %s.",e,t.message):Z("%s. %s.",e,"Unknown error")}var Co=async t=>{let e=Q.default.resolve(t??"./test-results"),r=[Q.default.posix.join(e.replace(/\\/g,"/"),"**/.last-run.json"),Q.default.posix.join(e.replace(/\\/g,"/"),".last-run.json")];return Ae.sync(r)},Io=async(t=[])=>{let e=Ia(t),r=[];return e.length>0&&r.push(...Ae.sync(t.map(o=>o.replace(/\\/g,"/")))),r};function Ia(t){let e=process.cwd();return t.filter(r=>{let o=Q.default.resolve(r),n=Q.default.relative(e,o);return r.startsWith("..")||Q.default.isAbsolute(n)?(Eo(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function Mt(t){return t?t.path.some(e=>Q.default.basename(e)===".last-run.json"):!1}async function _o(t,e){switch(e.provider){case"githubActions":await ho(t,e);break;case"gitlab":await To(t,e);break;case"circle":await Oo(t,e);break;default:break}}async function Ro(t,e,r){switch(e.provider){case"githubActions":await ho(t,e,r);break;case"gitlab":await To(t,e,r);break;case"circle":await Oo(t,e,r);break;default:break}}async function To(t,e,r=null){let o=e.params,n=r?.ci.params,c=(n?ut(n.runAttempt,0):0)+1,p=ut(o.ciNodeIndex,1),u=ut(o.ciNodeTotal,1),m=Mt(r),f=c>1&&m,d=f?"--last-failed":"",_="";u>1&&(_=f?"--shard=1/1":`--shard=${p}/${u}`);let I=[d,_].filter(Boolean).join(" ");await et(t.presetOutput??It,`EXTRA_PW_FLAGS="${I}"
EXTRA_PWCP_FLAGS="${d}"
RUN_ATTEMPT=${c}
`)}async function ho(t,e,r=null){let{matrixIndex:o,matrixTotal:n}=t,a=e.params,c=ut(a.githubRunAttempt,1),p=Mt(r),u=c>1&&p,m=u?"--last-failed":"",f="";n>1&&(f=u?"--shard=1/1":`--shard=${o}/${n}`);let d=[m,f].filter(Boolean).join(" "),_=t.presetOutput??It;await et(_,d),s('Dumped PW config: "%s" for GHA to %s',d,_)}async function Oo(t,e,r=null){let o=e.params,n=r?.ci.params,a=n?.circleWorkflowId,c=n?.circleWorkflowWorkspaceId,p=ut(o.circleNodeIndex,0),u=ut(o.circleNodeTotal,1),m=c==o.circleWorkflowWorkspaceId&&a!==o.circleWorkflowId,f=Mt(r),d=m&&f,_=d?"--last-failed":"",I="";u>1&&(I=d?"--shard=1/1":`--shard=${p+1}/${u}`);let D=[_,I].filter(Boolean).join(" "),M=t.presetOutput??It;await et(M,D),s('Dumped PW config: "%s" for Circle to %s',D,M)}var ut=(t,e)=>{let r=Se.default.toNumber(t);return Se.default.isNaN(r)?e:r};async function De(){let t=q();if(t.type!=="GET_COMMAND_CONFIG"||!t.values)throw new Error("Config is missing!");let{recordKey:e,id:r,preset:o,matrixIndex:n,matrixTotal:a,continue:c}=t.values,p=t.values.outputDir,u=mt();o==="last-run"&&await _o(t.values,u);let{cacheId:m,refMetaReadUrl:f}=await br({recordKey:e,ci:u,id:r,config:{matrixIndex:n,matrixTotal:a}});try{let d=await Ta(f),{readUrl:_}=await wr({recordKey:e,cacheKey:d.cacheKey}),I=await _a({readUrl:_,outputDir:p});o==="last-run"&&await Ro(t.values,u,d),A(C("- restoring cache to"),I),Ut("Cache restored. Cache ID: %s",m)}catch(d){if((0,Uo.isAxiosError)(d)&&(d.response?.status===403||d.response?.status===404)){let _=`Cache with ID "${m}" not found`;if(c){Z(_);return}throw new Error(_)}throw d}}async function _a({readUrl:t,outputDir:e}){let r=await Oe(t),o=Ra(e);return await so(r,o),s("Cache downloaded",{readUrl:t,destination:o}),o}function Ra(t){let e=t??process.cwd();return Pe.default.isAbsolute(e)?e:Pe.default.resolve(process.cwd(),e)}async function Ta(t){let e=await Oe(t),r=JSON.parse(e.toString("utf-8"));return s("Meta file downloaded: %O",r),r}var Ao=require("lodash");async function we(){let t=q();if(t.type!=="SET_COMMAND_CONFIG"||!t.values)throw new Error("Config is missing!");let{recordKey:e,id:r,preset:o,pwOutputDir:n,matrixIndex:a,matrixTotal:c,continue:p}=t.values,u=await Io(t.values.path),m=t.values.path||[],f=mt();if(o==="last-run"&&(m.push(n),u.push(...await Co(n))),u.length===0){let M=`No files available to upload: ${m.filter(Boolean).join(",")}`;if(!p)throw new Error(M);Z(M)}let d=await Dr({recordKey:e,ci:f,id:r,config:{matrixIndex:a,matrixTotal:c}});s("Cache upload url created",{result:d});let _=Oa(f),I=u.length>0?await ao(u):null,D=[];I&&D.push(ha({archive:I,cacheId:d.cacheId,uploadUrl:d.uploadUrl}).then(()=>{Ua(u),s("Cache archive uploaded",{uploadUrl:d.uploadUrl})})),D.push(yo({meta:ye({cacheId:d.cacheId,config:t.values,ci:_,orgId:d.orgId,path:u}),cacheId:d.cacheId,uploadUrl:d.metaUploadUrl}).then(()=>s("Meta uploaded",{uploadUrl:d.metaUploadUrl})),yo({meta:ye({cacheId:d.cacheId,config:t.values,ci:_,orgId:d.orgId,path:u,cacheKey:d.cacheKey,metaCacheKey:d.metaCacheKey}),cacheId:d.cacheId,uploadUrl:d.refMetaUploadUrl}).then(()=>s("Ref meta uploaded",{uploadUrl:d.refMetaUploadUrl}))),await Promise.all(D),Ut("Cache uploaded. Cache ID: %s",d.cacheId)}async function ha({archive:t,cacheId:e,uploadUrl:r}){try{let o="application/zip";await he({buffer:t,contentType:o,name:e,uploadUrl:r},o,Ue(e)),s("Cache archive uploaded",{cacheId:e})}catch(o){throw s("Failed to upload cache archive",o),o}}async function yo({meta:t,cacheId:e,uploadUrl:r}){try{let o=`${e}_meta`,n="application/json";await he({buffer:t,contentType:n,name:o,uploadUrl:r},n,Ue(o)),s("Cache meta uploaded",{cacheId:e})}catch(o){throw s("Failed to upload cache meta",o),o}}function Oa(t){return t.ciBuildId.source==="server"||t.ciBuildId.source==="random"?(0,Ao.omit)(t,"ciBuildId"):t}function Ua(t){A(`Cache upload paths:
`+t.map(e=>`${C("- uploading")} ${e}`).join(`
`))}var Po=require("@currents/commit-info"),Do=require("lodash");var vt=require("lodash");var be=s.extend("ci-git");function So(t){be("git commit existing info: %O",t);let e=ro();be("commit info from provider environment variables: %O",e);let r=(0,vt.transform)(t,(o,n,a)=>{let c=n||(e?e[a]:null);return o[a]=(0,vt.defaultTo)(c,null)});return be("combined git and environment variables from provider: %O",r),r}var ya=async()=>{let t=await(0,Po.commitInfo)();return So({branch:t.branch,remoteOrigin:t.remote,authorEmail:t.email,authorName:t.author,message:t.message,sha:t.sha,ghaEventData:t.ghaEventData})},wo=(0,Do.memoize)(ya);var bo=l(require("getos")),xo=require("lodash"),N=require("os"),No=require("util"),Aa=async()=>{if((0,N.platform)()==="linux")try{let t=await(0,No.promisify)(bo.default)();return"dist"in t&&"release"in t?[t.dist,t.release].join(" - "):(0,N.release)()}catch{return(0,N.release)()}return(0,N.release)()},Sa=async()=>{let t=await Aa();return{osName:(0,N.platform)(),osVersion:t,osCpus:[],osMemory:{free:(0,N.freemem)(),total:(0,N.totalmem)()}}},Lo=(0,xo.memoize)(Sa);var sn=l(require("axios")),Be=l(require("fs-extra")),$t=l(require("path")),cn=l(require("semver"));var U={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 Bo(){return{projectId:process.env[U.projectId.env],recordKey:process.env[U.recordKey.env],ciBuildId:process.env[U.ciBuildId.env],tag:process.env[U.tag.env]?process.env[U.tag.env]?.split(",").map(t=>t.trim()):void 0,disableTitleTags:process.env[U.disableTitleTags.env],removeTitleTags:process.env[U.removeTitleTags.env],debug:process.env[U.debug.env],machineId:process.env[U.machineId.env]}}var Pa=s.extend("config"),Da=["projectId","recordKey"],xe=null;function Mo(t){xe=K(U,Da,Bo,t),Pa("Resolved Currents config: %o",xe)}function Ft(){return xe}function vo(t){return{ciBuildId:t.ciBuildId,projectId:t.projectId,recordKey:t.key,tag:t.tag,removeTitleTags:t.removeTitleTags,disableTitleTags:t.disableTitleTags,debug:t.debug,machineId:t.machineId,reportDir:t.reportDir}}var z=class{constructor(e){this.config=e}async getFullTestSuite(){return[]}};var Wo=l(require("fs-extra")),qo=require("jest-cli"),Qo=l(require("tmp"));var Yo=require("lodash");function Fo(t){let e=[];for(let[r,o]of Object.entries(t))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&e.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{e.push(`--${r}=${n}`)}):e.push(`--${r}=${o}`));return e.join(" ")}var Go=require("lodash"),wa=["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 ko(t){return(0,Go.omit)(t,...wa)}var jo=l(require("fs")),$o=require("jest-config"),Ne=require("lodash"),Le=l(require("path"));function Gt(t,e){return(...r)=>new Promise((o,n)=>{let a=0,c=()=>{a++;try{let p=t(...r);o(p)}catch(p){if(a>=e.length)n(p);else{let u=e[a-1];setTimeout(c,u)}}};c()})}var Ho=l(require("fs-extra")),ba=l(require("path"));async function kt(t){let e=await Ho.default.pathExists(t);if(!e)throw new Error("File does not exist");return e}var Ko=s.extend("jest-discovery");async function Vo(t){try{let{config:e,configPath:r}=await(0,$o.readInitialOptions)(t),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,Ne.omit)(e,o);if(a.projects&&(a.projects=a.projects.map(u=>typeof u!="string"?(0,Ne.omit)(u,n):u)),a.rootDir&&Object.keys(a).length===1)return null;let c=Le.default.resolve(r?Le.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(a,null,2)}`;return Ko("configFileContent: %O",p),jo.default.writeFileSync(c,p),await Gt(kt,[200,200,200,200,200,1e3])(c),c}catch(e){return E("Failed to recreate the config file"),Ko("error %o",e),null}}async function Jo(t){let e="!!##ThisPatternWillNotMatchAnyTestName##!!",r=t.options,o=ko(r),n=Fo(o),a=r.config,c=await Vo(a);return{cliArgs:[n,"--testNamePattern",e,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...t.args].filter(u=>!(0,Yo.isEmpty)(u)),configFilePath:c}}var xa=s.extend("jest-discovery");async function zo(t,e){console.time(C("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Jo(e);try{let n=Qo.default.fileSync({postfix:".json"});return xa("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,qo.run)(r.concat(["--openHandlesTimeout=0"])),await Gt(kt,Array.from({length:300},()=>100))(n.name),console.timeEnd(C("@currents/jest:fullTestSuite-ready")),await tt(n.name)}catch(n){return E("Failed to obtain the jest full test suite:",n),[]}finally{o&&Wo.default.unlinkSync(o)}}var Ht=class extends z{constructor(e){super(e)}async getFullTestSuite(){return zo(this.config.frameworkConfig,this.config.cliArgs)}};var Zo=l(require("fs-extra"));var Xo=l(require("path"));function dt(t){return Xo.default.join(t,"fullTestSuite.json")}var Na=s.extend("junit-discovery");async function tn(t){console.time(C("@currents/junit:fullTestSuite-ready"));try{Na("running scanner: %o",t);let e=dt(t);process.env.CURRENTS_DISCOVERY_PATH=e;let r=Zo.default.readFileSync(e,"utf-8");return JSON.parse(r)}catch(e){return E("Failed to obtain the junit full test suite:",e),[]}}var Kt=class extends z{constructor(e,r){super(e),this.reportDir=r}async getFullTestSuite(){return tn(this.reportDir)}};function en(t,e){switch(t.framework){case"jest":return new Ht(t);case"junit":return new Kt(t,e);default:return new z(t)}}var lt=l(require("fs-extra")),$=l(require("path"));async function rn(t){let e=await La(t?.reportDir);if(!e)throw new Error("Failed to find the report dir");return{reportDir:e,configFilePath:t?.configFilePath??$.default.join(e,"config.json")}}async function La(t){return t?(await jt(t),t):Ba((0,$.join)(process.cwd(),".currents"))}async function Ba(t){let e=await lt.default.readdir(t),r=null;for(let o of e){let n=$.default.join(t,o),a=await lt.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,$.resolve)(t,r.name):null}async function jt(t){try{return await lt.default.pathExists(t)}catch{return E("Error checking if path exists:",E),!1}}async function on(t){let e=$.default.join(t,"instances");return Ma(e)}async function Ma(t){let e=await lt.default.readdir(t),r=[];for(let o of e){let n=$.default.join(t,o);(await lt.default.stat(n)).isFile()&&r.push(n)}return r}var va=t=>Buffer.byteLength(JSON.stringify(t),"utf8"),nn=(t,e=1048576)=>{let r=[],o=[],n=0;for(let a of t){let c=va(a);n+c>e&&(r.push(o),o=[],n=0),o.push(a),n+=c}return o.length>0&&r.push(o),r};var Fa=3e4;async function Me(){let t=Ft();if(!t)throw new Error("Currents config is missing!");let e=await rn(t);Qe(ka(e.reportDir)),s("Reporter options: %o",e),A("Report directory: %s",e.reportDir);let r=await tt(e.configFilePath);s("Report config: %o",r);let o=await on(e.reportDir);s("Found %d instance results in the reportDir: %s",o.length,e.reportDir);let n=Ga(e.reportDir),a=await jt(n),c=dt(e.reportDir),p=null;if(a){let v=await tt(n);g("Marker file detected. The report was already uploaded: %o",{runUrl:v.response.runUrl,isoDate:v.isoDate})}if(await jt(c)&&(p=await tt(c),s("Full test suite file detected: %s",c)),p)s("The discovery stage was skipped");else{if(p=await en(r,e.reportDir).getFullTestSuite(),Ha(p))throw new Error("Failed to discover the full test suite!");await et(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,f={currents:t},d={type:r.framework,version:r.frameworkVersion,clientVersion:at,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},_=St.userFacingNanoid(),I=mt(t.ciBuildId),D={};for await(let v of o){let b=await tt(v);D[b.groupId]||(D[b.groupId]=[]),D[b.groupId].push(b)}let M=new Map;Object.values(D).forEach(v=>{v.forEach(b=>{b.artifacts?.forEach(x=>{x&&M.set(x.path,x.contentType)}),b.results.tests.forEach(x=>{x.artifacts?.forEach(w=>{w&&M.set(w.path,w.contentType)}),x.attempts.forEach(w=>{w.artifacts?.forEach(X=>{X&&M.set(X.path,X.contentType)})})})})});for await(let v of Object.keys(D)){let b=D[v],x=v;m&&(s("Default group found: %s, overwriting the group in the results",m),x=m,b=b.map(w=>({...w,groupId:m})));try{let w=nn(b),X=await an({ci:I,group:x,instances:[],fullTestSuite:p,config:f,machineId:_,framework:d});for(let te=0;te<w.length;te++){let ee=await an({ci:I,group:x,instances:w[te],fullTestSuite:[],config:f,machineId:_,framework:d});ee.artifactUploadUrls&&ee.artifactUploadUrls.length>0&&await Ka(ee.artifactUploadUrls,e.reportDir,M)}s("Api response: %o",X),A("[%s] Run created: %s",x,X.runUrl);let Ci={response:X,isoDate:new Date().toISOString()};await et(n,JSON.stringify(Ci)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(w){throw s("Failed to upload the results to the dashboard"),w}}}async function an({ci:t,group:e,instances:r,fullTestSuite:o,config:n,machineId:a,framework:c}){let p=await wo(),u=await Lo(),m={browserName:"node",browserVersion:cn.default.coerce(process.version)?.version},{currents:f}=n,_={platform:{...m,...u},ci:t,commit:p,group:e,fullTestSui