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