@currents/cmd 1.1.1-beta.0 → 1.1.1-beta.2
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
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
`)),
|
|
2
|
+
"use strict";var Ho=Object.create;var Ae=Object.defineProperty;var jo=Object.getOwnPropertyDescriptor;var Ko=Object.getOwnPropertyNames;var $o=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var Jo=(e,t)=>{for(var r in t)Ae(e,r,{get:t[r],enumerable:!0})},Yo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ko(t))!Vo.call(e,n)&&n!==r&&Ae(e,n,{get:()=>t[n],enumerable:!(o=jo(t,n))||o.enumerable});return e};var p=(e,t,r)=>(r=e!=null?Ho($o(e)):{},Yo(t||!e||!e.__esModule?Ae(r,"default",{value:e,enumerable:!0}):r,e));var Fd=require("source-map-support/register");var Go=require("@commander-js/extra-typings");var st={name:"@currents/cmd",version:"1.1.1-beta.2",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',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":"^7.0.2","@types/archiver":"^6.0.2","@types/async-retry":"^1.4.8","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.5","@types/node":"^20.14.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^9.0.8",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.1.0",typescript:"^5.4.5",vitest:"^1.3.0"},dependencies:{"@commander-js/extra-typings":"^11.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.2","axios-retry":"^4.4.0",commander:"^11.1.0",debug:"^4.3.5",dotenv:"^16.0.3",execa:"^8.0.1","fs-extra":"^11.2.0",getos:"^3.2.1","jest-cli":"^29.7.0","jest-config":"^29.7.0","https-proxy-agent":"^7.0.4",lodash:"^4.17.21",nanoid:"^3.3.4","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.2.0",unzipper:"^0.12.3"},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 ee=st.version;var it=require("@commander-js/extra-typings");var Wo=[];function xe(e){Wo.push(e)}var _=p(require("chalk")),N=p(require("util"));var Ue=require("debug"),Qo=p(require("fs-extra")),a=(0,Ue.debug)("currents"),zo=null;function ct(){Ue.debug.enable("currents,currents:*")}function pt(e){zo=e}var mt=[],dt=[];var we=(...e)=>{let t=N.default.format(...e);xe(t),console.log(t)},Xo=(...e)=>{let t=N.default.format(...e);xe(t),console.error(t)},k=we,f=(...e)=>{let t=N.default.format(...e);return dt.push(t),a("WARNING: ",t),we(_.default.bgYellow.black(" WARNING "),t)},Se=(...e)=>{let t=N.default.format(...ut(e));return a("WARNING: ",N.default.format(...e)),we(_.default.bgYellow.black(" WARNING "),t)};var l=(...e)=>{let t=N.default.format(...ut(e));return mt.push(t),a("ERROR: ",N.default.format(...e)),Xo(_.default.bgRed.white(" ERROR "),t)};var ut=e=>e.map(t=>t instanceof Error?t.message:t),te=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
|
+
`)),Mi=_.default.cyan,Gi=_.default.blueBright,ki=_.default.red,Fi=_.default.yellow,Hi=_.default.green,ji=_.default.gray,Ki=_.default.white,$i=_.default.black,Vi=_.default.magenta,R=_.default.dim,Ji=_.default.bold;var Co=p(require("chalk"));var K=class extends Error{},$=class extends Error{};function lt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function I(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function en(e,t){return e[t].cli}function tn(e,t){return e[t].name}function F(e,t,r,o){let n={...lt(o),...lt(r())};return t.forEach(s=>{if(!n[s])throw l(`${tn(e,s)} is required for Currents Reporter. Use the following methods to set the value:
|
|
4
4
|
- as environment variable: ${R(I(e,s))}
|
|
5
|
-
- as CLI flag of the command: ${R(
|
|
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,()=>{
|
|
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
|
|
5
|
+
- as CLI flag of the command: ${R(en(e,s))}`),new K("Missing required config variable")}),n}var rn={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},on={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"}},U={...rn,...on};function ft(){return{apiKey:process.env[U.apiKey.env],debug:!!process.env[U.debug.env]}}var nn=a.extend("config"),an=["apiKey","projectId"],De=null;function gt(e){De=F(U,an,ft,e),nn("Resolved config: %o",De)}function re(){return De}var oe=p(require("fs-extra")),Ct=require("path");async function H(e){try{return await oe.default.readJson(e)}catch(t){throw l("Error while reading JSON file: %s",e,t),l}}async function V(e,t){try{return await oe.default.writeFile(e,t,"utf8"),e}catch(r){throw l(`Error writing file at ${e}:`,r),r}}async function Et(e){let t=(0,Ct.dirname)(e);await oe.default.ensureDir(t)}var ne={};Jo(ne,{getNanoid:()=>sn,userFacingNanoid:()=>ve});var Ne=require("nanoid"),Rt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",sn=(e=16)=>(0,Ne.customAlphabet)(Rt,e)(),ve=(0,Ne.customAlphabet)(Rt,12);var Jt=require("fs/promises");var Bt=p(require("lodash"));var bt=p(require("axios")),At=p(require("axios-retry")),xt=p(require("lodash"));var Le=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ht=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",It=()=>3e4;var Be=require("axios"),Me=p(require("pretty-ms"));var _t=a.extend("http"),ie=e=>[3*1e3,15*1e3,30*1e3][e-1],Tt=e=>(_t("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,Be.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,Be.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),ae=()=>3;function Ot(e,t,r){_t("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Me.default)(ie(e)),e,ae()),f("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Me.default)(ie(e)),e,ae())}var yt=a.extend("http");var Ge={api:null,restApi:null};function cn(e){let t=bt.default.create({baseURL:e==="api"?Le():ht(),timeout:It(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let o=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let n={...xt.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return o?yt("network request retry: %o",Pt({...n,isRetry:!0})):yt("network request: %o",Pt(n)),r}),(0,At.default)(t,{retries:ae(),retryCondition:Tt,retryDelay:ie,shouldResetTimeout:!0,onRetry:Ot}),t}function Ut(e){return Ge[e]===null&&(Ge[e]=cn(e)),Ge[e]}function Pt(e){return{method:e.method,baseUrl:Le(),url:e.url,data:e.isRetry?"<retry>":pn(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function pn(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Dt=require("axios"),Nt=p(require("lodash")),T=require("ts-pattern");function vt(e){(0,T.match)(e).when(Dt.isAxiosError,mn).otherwise(()=>{f("Unexpected error while sending network request: %s",e)})}function mn(e){return(0,T.match)(e).with({code:"ECONNABORTED"},()=>{f("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{f("Network connection aborted")}).with({code:"ECONNRESET"},()=>{f("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{f("Network connection timeout")}).with({response:T.P.not(T.P.nullish)},t=>{dn(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{f(`[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 dn(e,{status:t,data:r}){(0,T.match)(t).with(401,()=>{f(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{f(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
|
|
7
|
+
%o`,r)}).with(429,()=>{f(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{un(e,r)}).otherwise(()=>{f(`[currents] Unexpected network response: %s
|
|
8
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function un(e,t){(0,T.match)(t).with({code:wt.MISSING_SUITE,message:T.P.string,errors:T.P.array(T.P.string)},async r=>{let{message:o,errors:n}=r;te(1),l(...St(o,n))}).with({code:wt.RUN_EXPIRED,message:T.P.string},r=>{f(r.message)}).with({message:T.P.string,errors:T.P.array(T.P.string)},r=>{let{message:o,errors:n}=r;te(1),f(...St(o,n)),te(1)}).otherwise(()=>{f(`[currents] Unexpected network response: %s
|
|
9
|
+
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var wt={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function St(e,t){return Nt.default.isString(e)?t?.length===0?[e]:[e,`
|
|
10
10
|
${(t??[]).map(r=>` - ${r}`).join(`
|
|
11
11
|
`)}
|
|
12
|
-
`]:["Unexpected network error"]}var Dt=a.extend("http");async function H(e,t,r=bt){try{let o=await r(e).request(t);return Dt("network response: %o",{...Nt.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw Dt("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}),St(n),n}}var ae=a.extend("api");async function Lt(e){try{return ae("Request params: %o",e),H("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ae("Failed to create cache:",t),t}}async function Bt(e){try{return ae("Request params: %o",e),H("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ae("Failed to retrieve cache:",t),t}}var Gt=require("util"),kt=require("zlib");var Mt=a.extend("api"),mn=(0,Gt.promisify)(kt.gzip);async function Ft(e){try{Mt("Run params: %o",e);let t=await dn(JSON.stringify(e));return H("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Mt("Failed to create the run:",t),t}}async function dn(e){try{return await mn(e)}catch(t){throw l("Failed to compress run payload:",t),t}}var Ht=a.extend("api");async function jt(e,t){try{return Ht("Run params: %o",t),H("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw Ht("Failed to obtain run data:",r),r}}async function Be(){try{let e=te();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 jt(e.apiKey,t);await un(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function un(e,t){let r=JSON.stringify(e,null,2);t.output?(await gt(t.output),await(0,Kt.writeFile)(t.output,r,"utf-8")):G(r)}var Tr=require("axios");var O=require("@commander-js/extra-typings");var ln={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},gn={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"}},fn={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"}},N={...ln,...gn,...fn};function Me(){return{recordKey:process.env[N.recordKey.env],debug:process.env[N.debug.env]}}var $t=a.extend("config"),Vt=["recordKey"],z;function Jt(e){z={type:"SET_COMMAND_CONFIG",values:k(N,Vt,Me,e)},$t("Resolved config: %o",z)}function Yt(e){z={type:"GET_COMMAND_CONFIG",values:k(N,Vt,Me,e)},$t("Resolved config: %o",z)}function v(){return z}function qt(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}}function Wt(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}}var Qt=require("@commander-js/extra-typings");var zt=require("axios");function $(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function L(e,t){try{t.debug&&it(),await e(t),process.exit(0)}catch(r){r instanceof Qt.CommanderError&&(l(r.message),process.exit(r.exitCode)),r instanceof j&&(l(r.message),process.exit(1)),(0,zt.isAxiosError)(r)&&(l(r.message),process.exit(1)),l("Script execution failed: %o",r),process.exit(1)}}var Ge=new O.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(I(N,"recordKey")),ke=new O.Option("--debug","Enable debug logging").env(I(N,"debug")).default(!1),Fe=new O.Option("--id <id>","The ID the data is saved under in the cache"),Xt=new O.Option("--path <path>","Comma-separated list of paths to cache").argParser($),se=(t=>(t.lastRun="last-run",t))(se||{}),He=new O.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(se)),Zt=new O.Option("--output-dir <dir>","Path to the directory where output will be written"),er=new O.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),ce=".currents_env",tr=new O.Option("--preset-output <path>","Path to the file containing the preset output").default(ce),je=new O.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(rr),Ke=new O.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(rr);function rr(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new O.InvalidArgumentError("A positive integer is expected.");return t}var C=require("lodash");var pe=a.extend("ci"),Cn=(e,...t)=>(0,C.chain)(t).compact().join(e).value(),En=(e,t)=>(0,C.set)(e,(0,C.camelCase)(t),process.env[t]),f=e=>(0,C.transform)(e,En,{}),Rn=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,hn=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,In=()=>(0,C.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),_n=()=>process.env.bamboo_buildNumber,Tn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,On=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,yn=()=>(0,C.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Pn=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),bn=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,An=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,xn=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Un={appveyor:"APPVEYOR",azure:hn,awsCodeBuild:In,bamboo:_n,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Tn,codeshipPro:On,concourse:yn,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Pn,goCD:"GO_JOB_NAME",googleCloud:bn,jenkins:An,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Rn,travis:"TRAVIS",wercker:xn,netlify:"NETLIFY",layerci:"LAYERCI"};function wn(){let{env:e}=process;return(0,C.findKey)(Un,t=>{if((0,C.isString)(t))return e[t];if((0,C.isFunction)(t))return t()})}var or=()=>({appveyor:f(["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:f(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:f(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:f(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:f(["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:f(["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:f(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:f(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:f(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:f(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:f(["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:f(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:f(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:f(["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:f(["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:f(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:f(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:f(["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:f(["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:f(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:f(["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:f(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:f(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Sn=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Cn(`
|
|
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}}},
|
|
12
|
+
`]:["Unexpected network error"]}var Lt=a.extend("http");async function j(e,t,r=Ut){try{let o=await r(e).request(t);return Lt("network response: %o",{...Bt.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw Lt("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}),vt(n),n}}var se=a.extend("api");async function Gt(e){try{return se("Request params: %o",e),j("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw se("Failed to create cache:",t),t}}async function kt(e){try{return se("Request params: %o",e),j("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw se("Failed to retrieve cache:",t),t}}var Ht=require("util"),jt=require("zlib");var Ft=a.extend("api"),ln=(0,Ht.promisify)(jt.gzip);async function Kt(e){try{Ft("Run params: %o",e);let t=await fn(JSON.stringify(e));return j("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Ft("Failed to create the run:",t),t}}async function fn(e){try{return await ln(e)}catch(t){throw l("Failed to compress run payload:",t),t}}var $t=a.extend("api");async function Vt(e,t){try{return $t("Run params: %o",t),j("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw $t("Failed to obtain run data:",r),r}}async function ke(){try{let e=re();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 Vt(e.apiKey,t);await gn(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function gn(e,t){let r=JSON.stringify(e,null,2);t.output?(await Et(t.output),await(0,Jt.writeFile)(t.output,r,"utf-8")):k(r)}var Pr=require("axios");var O=require("@commander-js/extra-typings");var Cn={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},En={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"}},Rn={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"}},v={...Cn,...En,...Rn};function Fe(){return{recordKey:process.env[v.recordKey.env],debug:process.env[v.debug.env]}}var Yt=a.extend("config"),qt=["recordKey"],X;function Wt(e){X={type:"SET_COMMAND_CONFIG",values:F(v,qt,Fe,e)},Yt("Resolved config: %o",X)}function Qt(e){X={type:"GET_COMMAND_CONFIG",values:F(v,qt,Fe,e)},Yt("Resolved config: %o",X)}function L(){return X}function zt(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}}function Xt(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}}var Zt=require("@commander-js/extra-typings");var er=require("axios");function J(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function B(e,t){try{t.debug&&ct(),await e(t),process.exit(0)}catch(r){r instanceof Zt.CommanderError&&(l(r.message),process.exit(r.exitCode)),r instanceof K&&(l(r.message),process.exit(1)),r instanceof $&&(Se(r.message),process.exit(1)),(0,er.isAxiosError)(r)&&(l(r.message),process.exit(1)),l("Script execution failed: %o",r),process.exit(1)}}var He=new O.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(I(v,"recordKey")),je=new O.Option("--debug","Enable debug logging").env(I(v,"debug")).default(!1),Ke=new O.Option("--id <id>","The ID the data is saved under in the cache"),tr=new O.Option("--path <path>","Comma-separated list of paths to cache").argParser(J),ce=(t=>(t.lastRun="last-run",t))(ce||{}),$e=new O.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(ce)),rr=new O.Option("--output-dir <dir>","Path to the directory where output will be written"),or=new O.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),pe=".currents_env",nr=new O.Option("--preset-output <path>","Path to the file containing the preset output").default(pe),Ve=new O.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(ir),Je=new O.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(ir);function ir(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new O.InvalidArgumentError("A positive integer is expected.");return t}var C=require("lodash");var me=a.extend("ci"),hn=(e,...t)=>(0,C.chain)(t).compact().join(e).value(),In=(e,t)=>(0,C.set)(e,(0,C.camelCase)(t),process.env[t]),g=e=>(0,C.transform)(e,In,{}),_n=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Tn=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,On=()=>(0,C.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),yn=()=>process.env.bamboo_buildNumber,Pn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,bn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,An=()=>(0,C.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),xn=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Un=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,wn=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Sn=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Dn={appveyor:"APPVEYOR",azure:Tn,awsCodeBuild:On,bamboo:yn,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Pn,codeshipPro:bn,concourse:An,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:xn,goCD:"GO_JOB_NAME",googleCloud:Un,jenkins:wn,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:_n,travis:"TRAVIS",wercker:Sn,netlify:"NETLIFY",layerci:"LAYERCI"};function Nn(){let{env:e}=process;return(0,C.findKey)(Dn,t=>{if((0,C.isString)(t))return e[t];if((0,C.isFunction)(t))return t()})}var ar=()=>({appveyor:g(["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:g(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:g(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:g(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:g(["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:g(["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:g(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:g(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:g(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:g(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:g(["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:g(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:g(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:g(["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:g(["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:g(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:g(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:g(["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:g(["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:g(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:g(["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:g(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:g(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),vn=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:hn(`
|
|
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}}},sr=e=>{let t=cr();return t?(0,C.chain)(e()).get(t).value():{}};function Ln(){return(0,C.chain)(ar()).omitBy(C.isNull).keys().value()}function Bn(e){return e&&Ln().includes(e)}function cr(){let e=Nn();return me("detected CI provider name: %s",e),e||null}function Mn(){return sr(ar)}function pr(){return sr(vn)}function Y(e){let t=Mn(),r=cr(),o=Gn(e,r);return me("detected CI provider: %s",r),me("detected CI params: %O",t),me("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Gn(e,t){return e?{source:"user",value:e}:Bn(t)?{source:"server",value:null}:{source:"random",value:`auto:${ve()}`}}var mr=p(require("archiver")),dr=p(require("fs-extra")),q=p(require("path")),ur=p(require("unzipper"));var kn=50*1024*1024;async function lr(e,t=kn){return new Promise((r,o)=>{let n=(0,mr.default)("zip",{zlib:{level:9}}),s=[],d=0;n.on("data",c=>{s.push(c),d+=c.length,d>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",c=>{c.code==="ENOENT"?f(c):o(c)}),n.on("error",c=>o(c)),n.on("end",()=>{let c=Buffer.concat(s);r(c)});let m=async c=>{let E=process.cwd(),D=q.default.normalize(c),M=q.default.relative(E,D),P=await dr.default.stat(c);P.isDirectory()?n.directory(c,M):n.file(c,{name:M,stats:P})};(async c=>{for(let E of c)await m(E);await n.finalize()})(e).catch(o)})}async function fr(e,t){return ur.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}function gr(e){let t=process.cwd();return e.filter(r=>{let o=q.default.resolve(r),n=q.default.relative(t,o);return r.startsWith("..")||q.default.isAbsolute(n)?(f(`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}var Ir=p(require("async-retry")),_r=require("axios");var Cr=p(require("axios")),Er=require("https-proxy-agent"),Rr=p(require("proxy-from-env"));var Fn=a.extend("axios");function Ye(e={}){let t=Cr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),s=Rr.default.getProxyForUrl(n);return s&&(Fn("Using HTTP proxy %s for %s ",s,n),o.proxy=!1,o.httpsAgent=Hn(s)),o}),t}var de=null;function Hn(e){return de||(de=new Er.HttpsProxyAgent(e),de)}var le=a.extend("upload"),ue=5;async function qe(e,t,r){return le("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),Kn(e.buffer,e.uploadUrl,t,r)}async function jn(e,t,r,o){return Ye().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function We(e,t){try{let r=await Ye().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,_r.isAxiosError)(r)&&le("Failed to download %s: %s",e,r.message),r}}async function Kn(...e){await(0,Ir.default)(async()=>{await jn(...e)},{retries:ue,onRetry:(t,r)=>{if(le("Upload failed %d out of %d attempts: %s",r,ue,t.message),r===ue){l(`Cannot upload after ${r} times: ${t.message}`);return}f(`Upload failed ${r} out of ${ue} attempts: ${t.message}`)}})}var Qe=e=>({total:t,loaded:r})=>{};function hr(e){return e/1e3/1e3}var ze=p(require("lodash"));async function Tr(e,t){switch(t.provider){case"githubActions":await $n(e,t);break;case"gitlab":await yr(e,t);break;default:break}}async function Or(e,t,r){switch(t.provider){case"gitlab":await yr(e,t,r);break;default:break}}async function yr(e,t,r=null){let o=t.params,n=r?.ci.params,d=(n?fe(n.runAttempt,0):0)+1,m=fe(o.ciNodeIndex,1),u=fe(o.ciNodeTotal,1),c=d>1?"--last-failed":"",E="";u>1&&(E=d>1?"--shard=1/1":`--shard=${m}/${u}`);let D=[c,E].filter(Boolean).join(" ");await V(e.presetOutput??pe,`EXTRA_PW_FLAGS="${D}"
|
|
14
14
|
EXTRA_PWCP_FLAGS="${c}"
|
|
15
15
|
RUN_ATTEMPT="${d}"
|
|
16
|
-
`)}async function Hn(e,t){let{matrixIndex:r,matrixTotal:o}=e,n=t.params,s=le(n.githubRunAttempt,1),d=s>1?"--last-failed":"",m="";o>1&&(m=s>1?"--shard=1/1":`--shard=${r}/${o}`);let u=[d,m].filter(Boolean).join(" "),c=e.presetOutput??ce;await K(c,u),a('Dumped PW config: "%s" for GHA to %s',u,c)}var le=(e,t)=>{let r=qe.default.toNumber(e);return qe.default.isNaN(r)?t:r};async function We(){let e=v();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s}=e.values,d=e.values.outputDir,m=V();o==="last-run"&&await hr(e.values,m);let u=await Bt({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:s}});try{await jn({readUrl:u.readUrl,outputDir:d});let c=await Kn(u.metaReadUrl);o==="last-run"&&await Ir(e.values,m,c)}catch(c){throw(0,Tr.isAxiosError)(c)&&c.response?.status&&(c.response?.status===403||c.response?.status===404)?new Error(`Cache with ID "${u.cacheId}" not found`):c}}async function jn({readUrl:e,outputDir:t}){let r=await Je(e);await dr(r,t||"."),a("Cache downloaded")}async function Kn(e){let t=await Je(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}var Or=p(require("path"));var yr=require("lodash");function Pr({config:e,cacheId:t,orgId:r,path:o,ci:n}){let s={id:t,orgId:r,config:(0,yr.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(s))}var br=e=>Or.default.resolve(e??"test-results",".last-run.json");async function Qe(){let e=v();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,pwOutputDir:n,matrixIndex:s,matrixTotal:d}=e.values,m=e.values.path?ur(e.values.path):[],u=[];m&&m.length>0&&u.push(...m);let c=V();if(o==="last-run"){let D=br(n);u.push(D)}if(u.length===0)throw new Error("No paths available to upload");let E=await Lt({recordKey:t,ci:c,id:r,config:{matrixIndex:s,matrixTotal:d}});await $n({archive:await mr(u),cacheId:E.cacheId,uploadUrl:E.uploadUrl}),await Vn({meta:Pr({cacheId:E.cacheId,config:e.values,ci:c,orgId:E.orgId,path:u}),cacheId:E.cacheId,uploadUrl:E.metaUploadUrl})}async function $n({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await Ve({buffer:e,contentType:o,name:t,uploadUrl:r},o,Ye(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function Vn({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await Ve({buffer:e,contentType:n,name:o,uploadUrl:r},n,Ye(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var xr=require("@currents/commit-info"),Ur=require("lodash");var ge=require("lodash");var ze=a.extend("ci-git");function Ar(e){ze("git commit existing info: %O",e);let t=ar();ze("commit info from provider environment variables: %O",t);let r=(0,ge.transform)(e,(o,n,s)=>{let d=n||(t?t[s]:null);return o[s]=(0,ge.defaultTo)(d,null)});return ze("combined git and environment variables from provider: %O",r),r}var Jn=async()=>{let e=await(0,xr.commitInfo)();return Ar({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},wr=(0,Ur.memoize)(Jn);var Sr=p(require("getos")),Dr=require("lodash"),y=require("os"),Nr=require("util"),Yn=async()=>{if((0,y.platform)()==="linux")try{let e=await(0,Nr.promisify)(Sr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,y.release)()}catch{return(0,y.release)()}return(0,y.release)()},qn=async()=>{let e=await Yn();return{osName:(0,y.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,y.freemem)(),total:(0,y.totalmem)()}}},vr=(0,Dr.memoize)(qn);var to=require("lodash"),Ie=p(require("path")),ro=p(require("semver"));var h={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 Lr(){return{projectId:process.env[h.projectId.env],recordKey:process.env[h.recordKey.env],ciBuildId:process.env[h.ciBuildId.env],tag:process.env[h.tag.env]?process.env[h.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:!!process.env[h.disableTitleTags.env],removeTitleTags:!!process.env[h.removeTitleTags.env],debug:!!process.env[h.debug.env],machineId:process.env[h.machineId.env]}}var Wn=a.extend("config"),Qn=["projectId","recordKey"],Xe=null;function Br(e){Xe=k(h,Qn,Lr,e),Wn("Resolved Currents config: %o",Xe)}function fe(){return Xe}function Mr(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 qr=p(require("fs-extra")),Wr=require("jest-cli"),Qr=p(require("tmp"));var Jr=require("lodash");var Gr=require("lodash"),zn=["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 kr(e){return(0,Gr.omit)(e,...zn)}function Fr(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 Kr=p(require("fs")),$r=require("jest-config"),Ze=require("lodash"),et=p(require("path"));function Ce(e,t){return(...r)=>new Promise((o,n)=>{let s=0,d=()=>{s++;try{let m=e(...r);o(m)}catch(m){if(s>=t.length)n(m);else{let u=t[s-1];setTimeout(d,u)}}};d()})}var Hr=p(require("fs-extra")),Xn=p(require("path"));async function Ee(e){let t=await Hr.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var jr=a.extend("jest-discovery");async function Vr(e){try{let{config:t,configPath:r}=await(0,$r.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,Ze.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(u=>typeof u!="string"?(0,Ze.omit)(u,n):u)),s.rootDir&&Object.keys(s).length===1)return null;let d=et.default.resolve(r?et.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(s,null,2)}`;return jr("configFileContent: %O",m),Kr.default.writeFileSync(d,m),await Ce(Ee,[200,200,200,200,200,1e3])(d),d}catch(t){return l("Failed to recreate the config file"),jr("error %o",t),null}}async function Yr(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=kr(r),n=Fr(o),s=r.config,d=await Vr(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",d?`--config=${d}`:"",...e.args].filter(u=>!(0,Jr.isEmpty)(u)),configFilePath:d}}var Zn=a.extend("jest-discovery");async function zr(e,t){console.time(R("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Yr(t);try{let n=Qr.default.fileSync({postfix:".json"});return Zn("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Wr.run)(r.concat(["--openHandlesTimeout=0"])),await Ce(Ee,Array.from({length:300},()=>100))(n.name),console.timeEnd(R("@currents/jest:fullTestSuite-ready")),await F(n.name)}catch(n){return l("Failed to obtain the jest full test suite:",n),[]}finally{o&&qr.default.unlinkSync(o)}}var Y=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Re=class extends Y{constructor(t){super(t)}async getFullTestSuite(){return zr(this.config.frameworkConfig,this.config.cliArgs)}};function Xr(e){switch(e.framework){case"jest":return new Re(e);default:return new Y(e)}}var q=p(require("fs-extra")),w=p(require("path"));async function Zr(e){let t=await ei(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??w.default.join(t,"config.json")}}async function ei(e){return e?(await he(e),e):ti((0,w.join)(process.cwd(),".currents"))}async function ti(e){let t=await q.default.readdir(e),r=null;for(let o of t){let n=w.default.join(e,o),s=await q.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,w.resolve)(e,r.name):null}async function he(e){try{return await q.default.pathExists(e)}catch{return l("Error checking if path exists:",l),!1}}async function eo(e){let t=w.default.join(e,"instances");return ri(t)}async function ri(e){let t=await q.default.readdir(e),r=[];for(let o of t){let n=w.default.join(e,o);(await q.default.stat(n)).isFile()&&r.push(n)}return r}async function tt(){let e=fe();if(!e)throw new Error("Currents config is missing!");let t=await Zr(e);at(ai(t.reportDir)),a("Reporter options: %o",t),G("Report directory: %s",t.reportDir);let r=await F(t.configFilePath);a("Report config: %o",r);let o=await eo(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=ni(t.reportDir),s=await he(n),d=ii(t.reportDir),m=null;if(s){let b=await F(n);g("Marker file detected. The report was already uploaded: %o",{runUrl:b.response.runUrl,isoDate:b.isoDate}),await he(d)&&(m=await F(d),a("Full test suite file detected: %s",d))}if(m)a("The discovery stage was skipped");else{if(m=await Xr(r).getFullTestSuite(),si(m))throw new Error("Failed to discover the full test suite!");await K(d,JSON.stringify(m))}let u=m.length===1?m[0].name:null,c={currents:e},E={type:r.framework,version:r.frameworkVersion,clientVersion:Z},D=oe.userFacingNanoid(),B=V(e.ciBuildId),P={};for await(let b of o){let x=await F(b);P[x.groupId]||(P[x.groupId]=[]),P[x.groupId].push(x)}for await(let b of Object.keys(P)){let x=P[b],Pe=b;u&&(a("Default group found: %s, overwriting the group in the results",u),Pe=u,x=x.map(M=>({...M,groupId:u})));try{let M=await oi({ci:B,group:Pe,instances:x,fullTestSuite:m,config:c,machineId:D,framework:E});a("Api response: %o",M),G("[%s] Run created: %s",Pe,M.runUrl);let Mo={response:M,isoDate:new Date().toISOString()};await K(n,JSON.stringify(Mo)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(M){throw a("Failed to upload the results to the dashboard"),M}}}async function oi({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:d}){let m=await wr(),u=await vr(),c={browserName:"node",browserVersion:ro.default.coerce(process.version)?.version},{currents:E}=n,B={platform:{...c,...u},ci:e,commit:m,group:t,fullTestSuite:o,config:n,projectId:E.projectId,recordKey:E.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:E.tag??[],machineId:E.machineId??s,framework:d,instances:r};return a("Creating run: %o",(0,to.mapValues)(B,(P,b)=>b==="recordKey"?"******":P)),Ft(B)}function ni(e){return Ie.default.join(e,"upload.marker.json")}function ii(e){return Ie.default.join(e,"fullTestSuite.json")}function ai(e){return Ie.default.join(e,`.debug-${new Date().toISOString()}.log`)}function si(e){return e.length===0||e.some(t=>t.tests.length===0)}var ci=a.extend("cli");async function oo(e){await L(async t=>{ut(t);let r=te();ci("Config: %o",r),await Be()},e)}var S=require("@commander-js/extra-typings");var no=new S.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(I(U,"apiKey")),io=new S.Option("-o, --output <path>","Path to the file where output will be written").env(I(U,"output")),ao=new S.Option("--ci-build-id <id>","Unique identifier for the run"),so=new S.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(I(U,"projectId")),co=new S.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser($),po=new S.Option("--debug","Enable debug logging").env(I(U,"debug")).default(!1),mo=new S.Option("-b, --branch <branch>","Branch name for the recorded run"),uo=new S.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var _e="api",pi=e=>`
|
|
16
|
+
`)}async function $n(e,t){let{matrixIndex:r,matrixTotal:o}=e,n=t.params,s=fe(n.githubRunAttempt,1),d=s>1?"--last-failed":"",m="";o>1&&(m=s>1?"--shard=1/1":`--shard=${r}/${o}`);let u=[d,m].filter(Boolean).join(" "),c=e.presetOutput??pe;await V(c,u),a('Dumped PW config: "%s" for GHA to %s',u,c)}var fe=(e,t)=>{let r=ze.default.toNumber(e);return ze.default.isNaN(r)?t:r};async function Xe(){let e=L();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s}=e.values,d=e.values.outputDir,m=Y();o==="last-run"&&await Tr(e.values,m);let u=await kt({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:s}});try{await Vn({readUrl:u.readUrl,outputDir:d});let c=await Jn(u.metaReadUrl);o==="last-run"&&await Or(e.values,m,c)}catch(c){throw(0,Pr.isAxiosError)(c)&&c.response?.status&&(c.response?.status===403||c.response?.status===404)?new $(`Cache with ID "${u.cacheId}" not found`):c}}async function Vn({readUrl:e,outputDir:t}){let r=await We(e);await fr(r,t||"."),a("Cache downloaded")}async function Jn(e){let t=await We(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}var br=p(require("path"));var Ar=require("lodash");function xr({config:e,cacheId:t,orgId:r,path:o,ci:n}){let s={id:t,orgId:r,config:(0,Ar.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(s))}var Ur=e=>br.default.resolve(e??"test-results",".last-run.json");async function Ze(){let e=L();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,pwOutputDir:n,matrixIndex:s,matrixTotal:d}=e.values,m=e.values.path?gr(e.values.path):[],u=[];m&&m.length>0&&u.push(...m);let c=Y();if(o==="last-run"){let D=Ur(n);u.push(D)}if(u.length===0)throw new Error("No paths available to upload");let E=await Gt({recordKey:t,ci:c,id:r,config:{matrixIndex:s,matrixTotal:d}});await Yn({archive:await lr(u),cacheId:E.cacheId,uploadUrl:E.uploadUrl}),await qn({meta:xr({cacheId:E.cacheId,config:e.values,ci:c,orgId:E.orgId,path:u}),cacheId:E.cacheId,uploadUrl:E.metaUploadUrl})}async function Yn({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await qe({buffer:e,contentType:o,name:t,uploadUrl:r},o,Qe(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function qn({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await qe({buffer:e,contentType:n,name:o,uploadUrl:r},n,Qe(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var Sr=require("@currents/commit-info"),Dr=require("lodash");var ge=require("lodash");var et=a.extend("ci-git");function wr(e){et("git commit existing info: %O",e);let t=pr();et("commit info from provider environment variables: %O",t);let r=(0,ge.transform)(e,(o,n,s)=>{let d=n||(t?t[s]:null);return o[s]=(0,ge.defaultTo)(d,null)});return et("combined git and environment variables from provider: %O",r),r}var Wn=async()=>{let e=await(0,Sr.commitInfo)();return wr({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Nr=(0,Dr.memoize)(Wn);var vr=p(require("getos")),Lr=require("lodash"),y=require("os"),Br=require("util"),Qn=async()=>{if((0,y.platform)()==="linux")try{let e=await(0,Br.promisify)(vr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,y.release)()}catch{return(0,y.release)()}return(0,y.release)()},zn=async()=>{let e=await Qn();return{osName:(0,y.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,y.freemem)(),total:(0,y.totalmem)()}}},Mr=(0,Lr.memoize)(zn);var no=require("lodash"),_e=p(require("path")),io=p(require("semver"));var h={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 Gr(){return{projectId:process.env[h.projectId.env],recordKey:process.env[h.recordKey.env],ciBuildId:process.env[h.ciBuildId.env],tag:process.env[h.tag.env]?process.env[h.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:!!process.env[h.disableTitleTags.env],removeTitleTags:!!process.env[h.removeTitleTags.env],debug:!!process.env[h.debug.env],machineId:process.env[h.machineId.env]}}var Xn=a.extend("config"),Zn=["projectId","recordKey"],tt=null;function kr(e){tt=F(h,Zn,Gr,e),Xn("Resolved Currents config: %o",tt)}function Ce(){return tt}function Fr(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 zr=p(require("fs-extra")),Xr=require("jest-cli"),Zr=p(require("tmp"));var Wr=require("lodash");var Hr=require("lodash"),ei=["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 jr(e){return(0,Hr.omit)(e,...ei)}function Kr(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 Jr=p(require("fs")),Yr=require("jest-config"),rt=require("lodash"),ot=p(require("path"));function Ee(e,t){return(...r)=>new Promise((o,n)=>{let s=0,d=()=>{s++;try{let m=e(...r);o(m)}catch(m){if(s>=t.length)n(m);else{let u=t[s-1];setTimeout(d,u)}}};d()})}var $r=p(require("fs-extra")),ti=p(require("path"));async function Re(e){let t=await $r.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Vr=a.extend("jest-discovery");async function qr(e){try{let{config:t,configPath:r}=await(0,Yr.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,rt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(u=>typeof u!="string"?(0,rt.omit)(u,n):u)),s.rootDir&&Object.keys(s).length===1)return null;let d=ot.default.resolve(r?ot.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(s,null,2)}`;return Vr("configFileContent: %O",m),Jr.default.writeFileSync(d,m),await Ee(Re,[200,200,200,200,200,1e3])(d),d}catch(t){return l("Failed to recreate the config file"),Vr("error %o",t),null}}async function Qr(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=jr(r),n=Kr(o),s=r.config,d=await qr(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",d?`--config=${d}`:"",...e.args].filter(u=>!(0,Wr.isEmpty)(u)),configFilePath:d}}var ri=a.extend("jest-discovery");async function eo(e,t){console.time(R("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Qr(t);try{let n=Zr.default.fileSync({postfix:".json"});return ri("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Xr.run)(r.concat(["--openHandlesTimeout=0"])),await Ee(Re,Array.from({length:300},()=>100))(n.name),console.timeEnd(R("@currents/jest:fullTestSuite-ready")),await H(n.name)}catch(n){return l("Failed to obtain the jest full test suite:",n),[]}finally{o&&zr.default.unlinkSync(o)}}var W=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var he=class extends W{constructor(t){super(t)}async getFullTestSuite(){return eo(this.config.frameworkConfig,this.config.cliArgs)}};function to(e){switch(e.framework){case"jest":return new he(e);default:return new W(e)}}var Q=p(require("fs-extra")),w=p(require("path"));async function ro(e){let t=await oi(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??w.default.join(t,"config.json")}}async function oi(e){return e?(await Ie(e),e):ni((0,w.join)(process.cwd(),".currents"))}async function ni(e){let t=await Q.default.readdir(e),r=null;for(let o of t){let n=w.default.join(e,o),s=await Q.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,w.resolve)(e,r.name):null}async function Ie(e){try{return await Q.default.pathExists(e)}catch{return l("Error checking if path exists:",l),!1}}async function oo(e){let t=w.default.join(e,"instances");return ii(t)}async function ii(e){let t=await Q.default.readdir(e),r=[];for(let o of t){let n=w.default.join(e,o);(await Q.default.stat(n)).isFile()&&r.push(n)}return r}async function nt(){let e=Ce();if(!e)throw new Error("Currents config is missing!");let t=await ro(e);pt(pi(t.reportDir)),a("Reporter options: %o",t),k("Report directory: %s",t.reportDir);let r=await H(t.configFilePath);a("Report config: %o",r);let o=await oo(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=si(t.reportDir),s=await Ie(n),d=ci(t.reportDir),m=null;if(s){let b=await H(n);f("Marker file detected. The report was already uploaded: %o",{runUrl:b.response.runUrl,isoDate:b.isoDate}),await Ie(d)&&(m=await H(d),a("Full test suite file detected: %s",d))}if(m)a("The discovery stage was skipped");else{if(m=await to(r).getFullTestSuite(),mi(m))throw new Error("Failed to discover the full test suite!");await V(d,JSON.stringify(m))}let u=m.length===1?m[0].name:null,c={currents:e},E={type:r.framework,version:r.frameworkVersion,clientVersion:ee},D=ne.userFacingNanoid(),M=Y(e.ciBuildId),P={};for await(let b of o){let x=await H(b);P[x.groupId]||(P[x.groupId]=[]),P[x.groupId].push(x)}for await(let b of Object.keys(P)){let x=P[b],be=b;u&&(a("Default group found: %s, overwriting the group in the results",u),be=u,x=x.map(G=>({...G,groupId:u})));try{let G=await ai({ci:M,group:be,instances:x,fullTestSuite:m,config:c,machineId:D,framework:E});a("Api response: %o",G),k("[%s] Run created: %s",be,G.runUrl);let Fo={response:G,isoDate:new Date().toISOString()};await V(n,JSON.stringify(Fo)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(G){throw a("Failed to upload the results to the dashboard"),G}}}async function ai({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:d}){let m=await Nr(),u=await Mr(),c={browserName:"node",browserVersion:io.default.coerce(process.version)?.version},{currents:E}=n,M={platform:{...c,...u},ci:e,commit:m,group:t,fullTestSuite:o,config:n,projectId:E.projectId,recordKey:E.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:E.tag??[],machineId:E.machineId??s,framework:d,instances:r};return a("Creating run: %o",(0,no.mapValues)(M,(P,b)=>b==="recordKey"?"******":P)),Kt(M)}function si(e){return _e.default.join(e,"upload.marker.json")}function ci(e){return _e.default.join(e,"fullTestSuite.json")}function pi(e){return _e.default.join(e,`.debug-${new Date().toISOString()}.log`)}function mi(e){return e.length===0||e.some(t=>t.tests.length===0)}var di=a.extend("cli");async function ao(e){await B(async t=>{gt(t);let r=re();di("Config: %o",r),await ke()},e)}var S=require("@commander-js/extra-typings");var so=new S.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(I(U,"apiKey")),co=new S.Option("-o, --output <path>","Path to the file where output will be written").env(I(U,"output")),po=new S.Option("--ci-build-id <id>","Unique identifier for the run"),mo=new S.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(I(U,"projectId")),uo=new S.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(J),lo=new S.Option("--debug","Enable debug logging").env(I(U,"debug")).default(!1),fo=new S.Option("-b, --branch <branch>","Branch name for the recorded run"),go=new S.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Te="api",ui=e=>`
|
|
17
17
|
|
|
18
|
-
${
|
|
18
|
+
${Co.default.bold("Examples")}
|
|
19
19
|
|
|
20
20
|
Obtain run data by --ci-build-id:
|
|
21
|
-
${R(`${e} ${
|
|
21
|
+
${R(`${e} ${Te} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
|
|
22
22
|
|
|
23
23
|
Obtain most recent run data by filters:
|
|
24
|
-
${R(`${e} ${
|
|
24
|
+
${R(`${e} ${Te} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
|
|
25
25
|
|
|
26
26
|
Obtain last run data that matches the Playwright "test-results/.last-run.json":
|
|
27
|
-
${R(`${e} ${
|
|
27
|
+
${R(`${e} ${Te} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
|
|
28
28
|
|
|
29
|
-
`,
|
|
29
|
+
`,Eo=e=>new it.Command().command(Te).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(li(e)),li=e=>new it.Command().name("get-run").description(`Receive information from Currents API ${ui(e)}`).allowUnknownOption().addOption(so).addOption(lo).addOption(po).addOption(mo).addOption(fo).addOption(uo).addOption(co).addOption(go).action(ao);var Oe=require("@commander-js/extra-typings");var Io=p(require("chalk"));var fi=a.extend("cli");async function Ro(e){await B(async t=>{Qt(zt(t));let r=L();fi("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await Xe()},e)}var gi=a.extend("cli");async function ho(e){await B(async t=>{Wt(Xt(t));let r=L();gi("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await Ze()},e)}var z="cache",Ci=e=>`
|
|
30
30
|
|
|
31
|
-
${
|
|
31
|
+
${Io.default.bold("Examples")}
|
|
32
32
|
|
|
33
33
|
Save files to the cache under a specific ID:
|
|
34
|
-
${R(`${e} ${
|
|
34
|
+
${R(`${e} ${z} set --key <record-key> --id <id> --path <path-1,path-2,...path-n>`)}
|
|
35
35
|
|
|
36
36
|
Retrieve files from the cache saved under a specific ID:
|
|
37
|
-
${R(`${e} ${
|
|
37
|
+
${R(`${e} ${z} get --key <record-key> --id <id>`)}
|
|
38
38
|
|
|
39
39
|
Store the last run data in the cache:
|
|
40
|
-
${R(`${e} ${
|
|
40
|
+
${R(`${e} ${z} set --key <record-key> --preset last-run`)}
|
|
41
41
|
|
|
42
42
|
Retrieve the last run data from the cache:
|
|
43
|
-
${R(`${e} ${
|
|
43
|
+
${R(`${e} ${z} get --key <record-key> --preset last-run`)}
|
|
44
44
|
|
|
45
45
|
Retrieve the last run data from the cache and save it to a custom directory:
|
|
46
|
-
${R(`${e} ${
|
|
46
|
+
${R(`${e} ${z} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
|
|
47
47
|
|
|
48
|
-
`,
|
|
48
|
+
`,_o=e=>new Oe.Command().command(z).description(`Cache data to Currents ${Ci(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Ei()).addCommand(Ri()),Ei=()=>new Oe.Command().name("set").allowUnknownOption().addOption(He).addOption(Ke).addOption($e).addOption(tr).addOption(je).addOption(or).addOption(Ve).addOption(Je).action(ho),Ri=()=>new Oe.Command().name("get").allowUnknownOption().addOption(He).addOption(Ke).addOption($e).addOption(rr).addOption(nr).addOption(je).addOption(Ve).addOption(Je).action(Ro);var Lo=require("@commander-js/extra-typings"),Bo=p(require("chalk"));var A=require("@commander-js/extra-typings");var To=new A.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(I(h,"ciBuildId")),Oo=new A.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(I(h,"recordKey")),yo=new A.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(I(h,"projectId")),Po=new A.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(J),bo=new A.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),Ao=new A.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),xo=new A.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(I(h,"machineId")),Uo=new A.Option("--report-dir <string>","explicit path to the report directory").env(I(h,"reportDir")),wo=new A.Option("--debug","enable debug logs").env(I(h,"debug")).default(!1);var No=p(require("fs"));var So=require("tmp-promise"),Do=async()=>{let{path:e}=await(0,So.file)();return e};var at=a.extend("cli"),ye=class{constructor(t){this.configFilePath=null;this.cliOptions=t,at("CLI options: %o",this.cliOptions),this.parsedConfig=Fr(this.cliOptions),at("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await Do();return No.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),at("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function vo(e){await B(async t=>{let r=new ye(t);kr(r.parsedConfig);let o=Ce();k("Currents config: %o",{...o,recordKey:o?.recordKey?"*****":void 0}),await nt()},e)}var Z="upload",hi=e=>`
|
|
49
49
|
|
|
50
|
-
${
|
|
50
|
+
${Bo.default.bold("Examples")}
|
|
51
51
|
|
|
52
52
|
Upload test results to Currents:
|
|
53
|
-
${R(`${e} ${
|
|
53
|
+
${R(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
|
|
54
54
|
|
|
55
55
|
Upload test results to Currents, add tags "tagA", "tagB" to the recorded run:
|
|
56
|
-
${R(`${e} ${
|
|
56
|
+
${R(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
|
|
57
57
|
|
|
58
58
|
Provide a custom path to the reports directory:
|
|
59
|
-
${R(`${e} ${
|
|
59
|
+
${R(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
|
|
60
60
|
|
|
61
|
-
`,
|
|
62
|
-
${
|
|
61
|
+
`,Mo=e=>new Lo.Command().name(Z).command(Z).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
|
|
62
|
+
${hi(e)}`).addOption(To).addOption(Oo).addOption(yo).addOption(Po).addOption(bo).addOption(Ao).addOption(xo).addOption(wo).addOption(Uo).action(r=>vo(r));var Ii=`
|
|
63
63
|
----------------------------------------------------
|
|
64
64
|
\u{1F4D6} Documentation: https://docs.currents.dev
|
|
65
65
|
\u{1F919} Support: support@currents.dev
|
|
66
66
|
----------------------------------------------------
|
|
67
|
-
`,
|
|
67
|
+
`,Pe="currents",ko=()=>new Go.Command(Pe).version(ee).description(`Currents CLI ${Ii}`).addCommand(Mo(Pe),{isDefault:!0}).addCommand(_o(Pe)).addCommand(Eo(Pe));import("dotenv/config");function _i(){ko().parse()}_i();
|
|
68
68
|
/*! For license information please see index.js.LEGAL.txt */
|
|
69
69
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var Ct=Object.create;var D=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var ie=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},ae=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ht(t))!Pt.call(e,o)&&o!==r&&D(e,o,{get:()=>t[o],enumerable:!(n=Tt(t,o))||n.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Ct(Ot(e)):{},ae(t||!e||!e.__esModule?D(r,"default",{value:e,enumerable:!0}):r,e)),Ut=e=>ae(D({},"__esModule",{value:!0}),e);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}}},le=e=>{let t=Ee();return t?(0,m.chain)(e()).get(t).value():{}};function Jt(){return(0,m.chain)(pe()).omitBy(m.isNull).keys().value()}function Yt(e){return e&&Jt().includes(e)}function Ee(){let e=Vt();return y("detected CI provider name: %s",e),e||null}function $t(){return le(pe)}function de(){return le(Kt)}function ge(e){let t=$t(),r=Ee(),n=qt(e,r);return y("detected CI provider: %s",r),y("detected CI params: %O",t),y("detected CI build ID: %o",n),{params:t,provider:r,ciBuildId:n}}function qt(e,t){return e?{source:"user",value:e}:Yt(t)?{source:"server",value:null}:{source:"random",value:`auto:${$()}`}}var Re=require("@currents/commit-info"),Ie=require("lodash");var b=require("lodash");var q=i.extend("ci-git");function _e(e){q("git commit existing info: %O",e);let t=de();q("commit info from provider environment variables: %O",t);let r=(0,b.transform)(e,(n,o,a)=>{let p=o||(t?t[a]:null);return n[a]=(0,b.defaultTo)(p,null)});return q("combined git and environment variables from provider: %O",r),r}var Qt=async()=>{let e=await(0,Re.commitInfo)();return _e({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},fe=(0,Ie.memoize)(Qt);var Ce=u(require("getos")),Te=require("lodash"),I=require("os"),he=require("util"),Wt=async()=>{if((0,I.platform)()==="linux")try{let e=await(0,he.promisify)(Ce.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,I.release)()}catch{return(0,I.release)()}return(0,I.release)()},zt=async()=>{let e=await Wt();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},Oe=(0,Te.memoize)(zt);var Pe={name:"@currents/cmd",version:"1.1.1-beta.
|
|
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`,r)}).with(429,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{
|
|
6
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function
|
|
1
|
+
"use strict";var Ct=Object.create;var D=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var ie=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},ae=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ht(t))!Pt.call(e,o)&&o!==r&&D(e,o,{get:()=>t[o],enumerable:!(n=Tt(t,o))||n.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Ct(Ot(e)):{},ae(t||!e||!e.__esModule?D(r,"default",{value:e,enumerable:!0}):r,e)),Ut=e=>ae(D({},"__esModule",{value:!0}),e);var Or={};ie(Or,{handleCurrentsReport:()=>It});module.exports=Ut(Or);var ce=require("debug"),At=u(require("fs-extra")),i=(0,ce.debug)("currents"),St=null;function ue(e){St=e}var B={};ie(B,{getNanoid:()=>Lt,userFacingNanoid:()=>$});var Y=require("nanoid"),me="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Lt=(e=16)=>(0,Y.customAlphabet)(me,e)(),$=(0,Y.customAlphabet)(me,12);var m=require("lodash");var y=i.extend("ci"),Nt=(e,...t)=>(0,m.chain)(t).compact().join(e).value(),Dt=(e,t)=>(0,m.set)(e,(0,m.camelCase)(t),process.env[t]),c=e=>(0,m.transform)(e,Dt,{}),Bt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,yt=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,bt=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Mt=()=>process.env.bamboo_buildNumber,vt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,xt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,wt=()=>(0,m.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Ht=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Ft=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Gt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,kt=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,jt={appveyor:"APPVEYOR",azure:yt,awsCodeBuild:bt,bamboo:Mt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:vt,codeshipPro:xt,concourse:wt,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Ht,goCD:"GO_JOB_NAME",googleCloud:Ft,jenkins:Gt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Bt,travis:"TRAVIS",wercker:kt,netlify:"NETLIFY",layerci:"LAYERCI"};function Vt(){let{env:e}=process;return(0,m.findKey)(jt,t=>{if((0,m.isString)(t))return e[t];if((0,m.isFunction)(t))return t()})}var pe=()=>({appveyor:c(["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:c(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:c(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:c(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:c(["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:c(["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:c(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:c(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:c(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:c(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:c(["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:c(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:c(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:c(["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:c(["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:c(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:c(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:c(["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:c(["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:c(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:c(["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:c(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:c(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Kt=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Nt(`
|
|
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}}},le=e=>{let t=Ee();return t?(0,m.chain)(e()).get(t).value():{}};function Jt(){return(0,m.chain)(pe()).omitBy(m.isNull).keys().value()}function Yt(e){return e&&Jt().includes(e)}function Ee(){let e=Vt();return y("detected CI provider name: %s",e),e||null}function $t(){return le(pe)}function de(){return le(Kt)}function ge(e){let t=$t(),r=Ee(),n=qt(e,r);return y("detected CI provider: %s",r),y("detected CI params: %O",t),y("detected CI build ID: %o",n),{params:t,provider:r,ciBuildId:n}}function qt(e,t){return e?{source:"user",value:e}:Yt(t)?{source:"server",value:null}:{source:"random",value:`auto:${$()}`}}var Re=require("@currents/commit-info"),Ie=require("lodash");var b=require("lodash");var q=i.extend("ci-git");function _e(e){q("git commit existing info: %O",e);let t=de();q("commit info from provider environment variables: %O",t);let r=(0,b.transform)(e,(n,o,a)=>{let p=o||(t?t[a]:null);return n[a]=(0,b.defaultTo)(p,null)});return q("combined git and environment variables from provider: %O",r),r}var Qt=async()=>{let e=await(0,Re.commitInfo)();return _e({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},fe=(0,Ie.memoize)(Qt);var Ce=u(require("getos")),Te=require("lodash"),I=require("os"),he=require("util"),Wt=async()=>{if((0,I.platform)()==="linux")try{let e=await(0,he.promisify)(Ce.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,I.release)()}catch{return(0,I.release)()}return(0,I.release)()},zt=async()=>{let e=await Wt();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},Oe=(0,Te.memoize)(zt);var Pe={name:"@currents/cmd",version:"1.1.1-beta.2",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',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":"^7.0.2","@types/archiver":"^6.0.2","@types/async-retry":"^1.4.8","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.5","@types/node":"^20.14.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^9.0.8",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.1.0",typescript:"^5.4.5",vitest:"^1.3.0"},dependencies:{"@commander-js/extra-typings":"^11.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.2","axios-retry":"^4.4.0",commander:"^11.1.0",debug:"^4.3.5",dotenv:"^16.0.3",execa:"^8.0.1","fs-extra":"^11.2.0",getos:"^3.2.1","jest-cli":"^29.7.0","jest-config":"^29.7.0","https-proxy-agent":"^7.0.4",lodash:"^4.17.21",nanoid:"^3.3.4","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.2.0",unzipper:"^0.12.3"},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 Ue=Pe.version;var Zt=[];function Q(e){Zt.push(e)}var R=u(require("chalk")),A=u(require("util"));var Ae=[],Se=[];var Le=(...e)=>{let t=A.default.format(...e);Q(t),console.log(t)},er=(...e)=>{let t=A.default.format(...e);Q(t),console.error(t)},W=Le,E=(...e)=>{let t=A.default.format(...e);return Se.push(t),i("WARNING: ",t),Le(R.default.bgYellow.black(" WARNING "),t)};var d=(...e)=>{let t=A.default.format(...tr(e));return Ae.push(t),i("ERROR: ",A.default.format(...e)),er(R.default.bgRed.white(" ERROR "),t)};var tr=e=>e.map(t=>t instanceof Error?t.message:t),M=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
|
+
`)),oo=R.default.cyan,no=R.default.blueBright,so=R.default.red,io=R.default.yellow,ao=R.default.green,co=R.default.gray,uo=R.default.white,mo=R.default.black,po=R.default.magenta,v=R.default.dim,lo=R.default.bold;var z=u(require("fs-extra")),or=require("path");async function P(e){try{return await z.default.readJson(e)}catch(t){throw d("Error while reading JSON file: %s",e,t),d}}async function X(e,t){try{return await z.default.writeFile(e,t,"utf8"),e}catch(r){throw d(`Error writing file at ${e}:`,r),r}}var _t=require("lodash"),V=u(require("path")),Rt=u(require("semver"));var Ye=u(require("lodash"));var xe=u(require("axios")),we=u(require("axios-retry")),He=u(require("lodash"));var Z=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Ne=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",De=()=>3e4;var ee=require("axios"),te=u(require("pretty-ms"));var Be=i.extend("http"),x=e=>[3*1e3,15*1e3,30*1e3][e-1],ye=e=>(Be("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,ee.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,ee.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),w=()=>3;function be(e,t,r){Be("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,te.default)(x(e)),e,w()),E("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,te.default)(x(e)),e,w())}var Me=i.extend("http");var re={api:null,restApi:null};function nr(e){let t=xe.default.create({baseURL:e==="api"?Z():Ne(),timeout:De(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let n=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let o={...He.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return n?Me("network request retry: %o",ve({...o,isRetry:!0})):Me("network request: %o",ve(o)),r}),(0,we.default)(t,{retries:w(),retryCondition:ye,retryDelay:x,shouldResetTimeout:!0,onRetry:be}),t}function Fe(e){return re[e]===null&&(re[e]=nr(e)),re[e]}function ve(e){return{method:e.method,baseUrl:Z(),url:e.url,data:e.isRetry?"<retry>":sr(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function sr(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var je=require("axios"),Ve=u(require("lodash")),g=require("ts-pattern");function Ke(e){(0,g.match)(e).when(je.isAxiosError,ir).otherwise(()=>{E("Unexpected error while sending network request: %s",e)})}function ir(e){return(0,g.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:g.P.not(g.P.nullish)},t=>{ar(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{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 ar(e,{status:t,data:r}){(0,g.match)(t).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`,r)}).with(429,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{cr(e,r)}).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 cr(e,t){(0,g.match)(t).with({code:Ge.MISSING_SUITE,message:g.P.string,errors:g.P.array(g.P.string)},async r=>{let{message:n,errors:o}=r;M(1),d(...ke(n,o))}).with({code:Ge.RUN_EXPIRED,message:g.P.string},r=>{E(r.message)}).with({message:g.P.string,errors:g.P.array(g.P.string)},r=>{let{message:n,errors:o}=r;M(1),E(...ke(n,o)),M(1)}).otherwise(()=>{E(`[currents] Unexpected network response: %s
|
|
7
7
|
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var Ge={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function ke(e,t){return Ve.default.isString(e)?t?.length===0?[e]:[e,`
|
|
8
8
|
${(t??[]).map(r=>` - ${r}`).join(`
|
|
9
9
|
`)}
|
|
10
|
-
`]:["Unexpected network error"]}var Je=i.extend("http");async function H(e,t,r=Fe){try{let n=await r(e).request(t);return Je("network response: %o",{...Ye.default.omit(n,"request","config"),url:n.config.url,method:n.config.method}),n}catch(n){let o=n;throw Je("network error: %o",{code:o.code,message:o.message,url:o.config?.url,method:o.config?.method,status:o.response?.status,headers:o.response?.headers,data:o.response?.data}),Ke(o),o}}var
|
|
10
|
+
`]:["Unexpected network error"]}var Je=i.extend("http");async function H(e,t,r=Fe){try{let n=await r(e).request(t);return Je("network response: %o",{...Ye.default.omit(n,"request","config"),url:n.config.url,method:n.config.method}),n}catch(n){let o=n;throw Je("network error: %o",{code:o.code,message:o.message,url:o.config?.url,method:o.config?.method,status:o.response?.status,headers:o.response?.headers,data:o.response?.data}),Ke(o),o}}var rn=i.extend("api");var Qe=require("util"),We=require("zlib");var qe=i.extend("api"),ur=(0,Qe.promisify)(We.gzip);async function ze(e){try{qe("Run params: %o",e);let t=await mr(JSON.stringify(e));return H("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw qe("Failed to create the run:",t),t}}async function mr(e){try{return await ur(e)}catch(t){throw d("Failed to compress run payload:",t),t}}var gn=i.extend("api");var xn=i.extend("config");var pr=null;function Xe(){return pr}var ut=u(require("fs-extra")),mt=require("jest-cli"),pt=u(require("tmp"));var at=require("lodash");var Ze=require("lodash"),lr=["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 et(e){return(0,Ze.omit)(e,...lr)}function tt(e){let t=[];for(let[r,n]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof n=="boolean"?n&&t.push(`--${r}`):Array.isArray(n)?n.forEach(o=>{t.push(`--${r}=${o}`)}):t.push(`--${r}=${n}`));return t.join(" ")}var nt=u(require("fs")),st=require("jest-config"),oe=require("lodash"),ne=u(require("path"));function F(e,t){return(...r)=>new Promise((n,o)=>{let a=0,p=()=>{a++;try{let l=e(...r);n(l)}catch(l){if(a>=t.length)o(l);else{let _=t[a-1];setTimeout(p,_)}}};p()})}var rt=u(require("fs-extra")),Er=u(require("path"));async function G(e){let t=await rt.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var ot=i.extend("jest-discovery");async function it(e){try{let{config:t,configPath:r}=await(0,st.readInitialOptions)(e),n=["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"],o=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,oe.omit)(t,n);if(a.projects&&(a.projects=a.projects.map(_=>typeof _!="string"?(0,oe.omit)(_,o):_)),a.rootDir&&Object.keys(a).length===1)return null;let p=ne.default.resolve(r?ne.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),l=`module.exports=${JSON.stringify(a,null,2)}`;return ot("configFileContent: %O",l),nt.default.writeFileSync(p,l),await F(G,[200,200,200,200,200,1e3])(p),p}catch(t){return d("Failed to recreate the config file"),ot("error %o",t),null}}async function ct(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,n=et(r),o=tt(n),a=r.config,p=await it(a);return{cliArgs:[o,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(_=>!(0,at.isEmpty)(_)),configFilePath:p}}var dr=i.extend("jest-discovery");async function lt(e,t){console.time(v("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:n}=await ct(t);try{let o=pt.default.fileSync({postfix:".json"});return dr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=o.name,await(0,mt.run)(r.concat(["--openHandlesTimeout=0"])),await F(G,Array.from({length:300},()=>100))(o.name),console.timeEnd(v("@currents/jest:fullTestSuite-ready")),await P(o.name)}catch(o){return d("Failed to obtain the jest full test suite:",o),[]}finally{n&&ut.default.unlinkSync(n)}}var S=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var k=class extends S{constructor(t){super(t)}async getFullTestSuite(){return lt(this.config.frameworkConfig,this.config.cliArgs)}};function Et(e){switch(e.framework){case"jest":return new k(e);default:return new S(e)}}var L=u(require("fs-extra")),T=u(require("path"));async function dt(e){let t=await gr(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 gr(e){return e?(await j(e),e):_r((0,T.join)(process.cwd(),".currents"))}async function _r(e){let t=await L.default.readdir(e),r=null;for(let n of t){let o=T.default.join(e,n),a=await L.default.stat(o);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:n,birthtime:a.birthtime})}return r?(0,T.resolve)(e,r.name):null}async function j(e){try{return await L.default.pathExists(e)}catch{return d("Error checking if path exists:",d),!1}}async function gt(e){let t=T.default.join(e,"instances");return Rr(t)}async function Rr(e){let t=await L.default.readdir(e),r=[];for(let n of t){let o=T.default.join(e,n);(await L.default.stat(o)).isFile()&&r.push(o)}return r}async function It(){let e=Xe();if(!e)throw new Error("Currents config is missing!");let t=await dt(e);ue(Tr(t.reportDir)),i("Reporter options: %o",t),W("Report directory: %s",t.reportDir);let r=await P(t.configFilePath);i("Report config: %o",r);let n=await gt(t.reportDir);i("Found %d instance results in the reportDir: %s",n.length,t.reportDir);let o=fr(t.reportDir),a=await j(o),p=Cr(t.reportDir),l=null;if(a){let f=await P(o);E("Marker file detected. The report was already uploaded: %o",{runUrl:f.response.runUrl,isoDate:f.isoDate}),await j(p)&&(l=await P(p),i("Full test suite file detected: %s",p))}if(l)i("The discovery stage was skipped");else{if(l=await Et(r).getFullTestSuite(),hr(l))throw new Error("Failed to discover the full test suite!");await X(p,JSON.stringify(l))}let _=l.length===1?l[0].name:null,K={currents:e},U={type:r.framework,version:r.frameworkVersion,clientVersion:Ue},se=B.userFacingNanoid(),N=ge(e.ciBuildId),h={};for await(let f of n){let C=await P(f);h[C.groupId]||(h[C.groupId]=[]),h[C.groupId].push(C)}for await(let f of Object.keys(h)){let C=h[f],J=f;_&&(i("Default group found: %s, overwriting the group in the results",_),J=_,C=C.map(O=>({...O,groupId:_})));try{let O=await Ir({ci:N,group:J,instances:C,fullTestSuite:l,config:K,machineId:se,framework:U});i("Api response: %o",O),W("[%s] Run created: %s",J,O.runUrl);let ft={response:O,isoDate:new Date().toISOString()};await X(o,JSON.stringify(ft)),i("Marker file %s: %s",a?"overwritten":"created",o)}catch(O){throw i("Failed to upload the results to the dashboard"),O}}}async function Ir({ci:e,group:t,instances:r,fullTestSuite:n,config:o,machineId:a,framework:p}){let l=await fe(),_=await Oe(),K={browserName:"node",browserVersion:Rt.default.coerce(process.version)?.version},{currents:U}=o,N={platform:{...K,..._},ci:e,commit:l,group:t,fullTestSuite:n,config:o,projectId:U.projectId,recordKey:U.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:U.tag??[],machineId:U.machineId??a,framework:p,instances:r};return i("Creating run: %o",(0,_t.mapValues)(N,(h,f)=>f==="recordKey"?"******":h)),ze(N)}function fr(e){return V.default.join(e,"upload.marker.json")}function Cr(e){return V.default.join(e,"fullTestSuite.json")}function Tr(e){return V.default.join(e,`.debug-${new Date().toISOString()}.log`)}function hr(e){return e.length===0||e.some(t=>t.tests.length===0)}0&&(module.exports={handleCurrentsReport});
|
|
11
11
|
/*! For license information please see index.js.LEGAL.txt */
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var N=Object.create;var a=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var _=(t,e)=>{for(var o in e)a(t,o,{get:e[o],enumerable:!0})},R=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of P(e))!W.call(t,r)&&r!==o&&a(t,r,{get:()=>e[r],enumerable:!(n=v(e,r))||n.enumerable});return t};var i=(t,e,o)=>(o=t!=null?N(D(t)):{},R(e||!t||!t.__esModule?a(o,"default",{value:t,enumerable:!0}):o,t)),O=t=>R(a({},"__esModule",{value:!0}),t);var B={};_(B,{default:()=>m});module.exports=O(B);var b=require("debug"),$=i(require("fs-extra")),c=(0,b.debug)("currents");var E=i(require("fs-extra"));var w=i(require("crypto"));var H=i(require("fs-extra")),u=i(require("path"));function S(t,e){return L(u.default.relative(e,t))}function L(t){return t.split(u.default.sep).join(u.default.posix.sep)}function C(){return"root"}function y(t){return t.context.config.displayName?.name??t.context.config.id}function x(t){return[...t.ancestorTitles,t.title]}function T(t){return S(t.path,t.context.config.rootDir)}function j(t,e){let o=x(e),n=T(t),r=o.join(" ")+n;return w.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function I(t){let e=(t.join(" ").match(/@(\S+)/g)??[]).filter(Boolean).map(o=>o);return Array.from(new Set([...e].map(o=>o.trim()).map(o=>o.replace("@",""))))}var M=[];function F(t){M.push(t)}var s=i(require("chalk")),p=i(require("util"));var k=[];var G=(...t)=>{let e=p.default.format(...t);F(e),console.error(e)};var A=(...t)=>{let e=p.default.format(...Y(t));return k.push(e),c("ERROR: ",p.default.format(...t)),G(s.default.bgRed.white(" ERROR "),e)};var Y=t=>t.map(e=>e instanceof Error?e.message:e);var at=s.default.cyan,ct=s.default.blueBright,ut=s.default.red,pt=s.default.yellow,gt=s.default.green,mt=s.default.gray,ft=s.default.white,dt=s.default.black,xt=s.default.magenta,h=s.default.dim,Tt=s.default.bold;var g=c.extend("jest-discovery"),m=class{constructor(){this.specsWithoutResultsCount=0;this.fullTestSuite={}}onRunStart(e){g("onRunStart, results: %O",e),console.time(h("@currents/jest-discovery"))}onTestFileResult(e,o){let n=y(e);this.fullTestSuite[n]||(this.fullTestSuite[n]={name:n,tags:[],tests:[]});let r=T(e);g("onTestFileResult [%s][%s]",n,r),o.testResults.length===0?(g("Failed to obtain spec results, error:",r,o.failureMessage),this.specsWithoutResultsCount+=1):this.fullTestSuite[n].tests.push(...o.testResults.map(f=>{let d=x(f);return{spec:r,tags:I(d),testId:j(e,f),title:d}}))}async onRunComplete(e,o){let n=process.env.CURRENTS_DISCOVERY_PATH;if(!n)throw new Error("CURRENTS_DISCOVERY_PATH is not set");let r=[];this.specsWithoutResultsCount>0?A("Incomplete full test suite! Run the command with --debug flag."):(r=this.getFullTestSuite(e),g("onRunComplete %s, %o",n,r)),await E.default.writeFile(n,JSON.stringify(r),"utf8"),console.timeEnd(h("@currents/jest-discovery"))}getFullTestSuite(e){let o=Object.values(this.fullTestSuite),n=o.length===1,r=o.length>0&&e.size>0&&[...e][0].config.id===o[0].name;return n&&r&&(o[0].name=C()),o}};
|
|
2
2
|
/*! For license information please see reporter.js.LEGAL.txt */
|
|
3
3
|
//# sourceMappingURL=reporter.js.map
|