@currents/cmd 1.0.5 → 1.1.0-beta.0
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 +29 -16
- package/dist/index.d.ts +95 -2
- package/dist/index.js +9 -9
- package/dist/{discovery → services/upload/discovery}/jest/reporter.js +1 -1
- package/package.json +4 -4
- /package/dist/{discovery → services/upload/discovery}/jest/reporter.d.ts +0 -0
- /package/dist/{discovery → services/upload/discovery}/jest/reporter.js.LEGAL.txt +0 -0
package/dist/bin/index.js
CHANGED
|
@@ -1,32 +1,45 @@
|
|
|
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 Or=Object.create;var ce=Object.defineProperty;var Pr=Object.getOwnPropertyDescriptor;var Ar=Object.getOwnPropertyNames;var Ur=Object.getPrototypeOf,br=Object.prototype.hasOwnProperty;var Sr=(e,t)=>{for(var r in t)ce(e,r,{get:t[r],enumerable:!0})},yr=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ar(t))!br.call(e,n)&&n!==r&&ce(e,n,{get:()=>t[n],enumerable:!(i=Pr(t,n))||i.enumerable});return e};var c=(e,t,r)=>(r=e!=null?Or(Ur(e)):{},yr(t||!e||!e.__esModule?ce(r,"default",{value:e,enumerable:!0}):r,e));var dc=require("source-map-support/register");var Cr=require("@commander-js/extra-typings");var Ne={name:"@currents/cmd",version:"1.1.0-beta.0",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/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/semver":"^7.5.8","@types/tmp":"^0.2.6","@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",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",lodash:"^4.17.21",nanoid:"^3.3.4","pretty-ms":"^7.0.1",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.2.0"},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 H=Ne.version;var be=require("@commander-js/extra-typings");var Nr=[];function De(e){Nr.push(e)}var E=c(require("chalk")),M=c(require("util"));var me=require("debug"),Dr=c(require("fs-extra")),s=(0,me.debug)("currents"),Br=null;function k(){me.debug.enable("currents,currents:*")}function Be(e){Br=e}var xe=[],ve=[];var G=(...e)=>{let t=M.default.format(...e);De(t),console.log(t)},y=G,g=(...e)=>{let t=M.default.format(...e);return ve.push(t),s("WARNING: ",t),G(E.default.bgYellow.black(" WARNING "),t)};var Me=(...e)=>G(E.default.green.bold(M.default.format(...e))),p=(...e)=>{let t=M.default.format(...e);return xe.push(t),s("ERROR: ",t),G(E.default.bgRed.white(" ERROR "),t)};var j=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
|
+
`)),Zo=E.default.cyan,en=E.default.blueBright,tn=E.default.red,rn=E.default.yellow,on=E.default.green,nn=E.default.gray,sn=E.default.white,an=E.default.black,cn=E.default.magenta,I=E.default.dim,mn=E.default.bold;var rr=c(require("chalk"));var B=class extends Error{};function we(e){return Object.entries(e??{}).reduce((t,[r,i])=>i===void 0?t:{...t,[r]:i},{})}function C(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function vr(e,t){return e[t].cli}function Mr(e,t){return e[t].name}function K(e,t,r,i){let n={...we(i),...we(r())};return t.forEach(a=>{if(!n[a])throw p(`${Mr(e,a)} is required for Currents Reporter. Use the following methods to set the value:
|
|
4
|
+
- as environment variable: ${I(C(e,a))}
|
|
5
|
+
- as CLI flag of the command: ${I(vr(e,a))}`),new B("Missing required config variable")}),n}var wr={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Fr={branch:{name:"Run Branch",cli:"--branch"},ciBuildId:{name:"CI Build ID",cli:"--ci-build-id"},projectId:{name:"Project ID",cli:"--project-id"},tag:{name:"Run Tag",cli:"--tag"}},L={...wr,...Fr};function Fe(){return{apiKey:process.env[L.apiKey.env],debug:!!process.env[L.debug.env]}}var Hr=s.extend("config"),kr=["apiKey"],pe=null;function He(e){pe=K(L,kr,Fe,e),Hr("Resolved config: %o",pe)}function V(){return pe}var st=require("axios");var ot=c(require("lodash"));var Ye=c(require("axios")),qe=c(require("axios-retry")),Qe=c(require("lodash"));var ue=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ke=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Ge=()=>3e4;var de=require("axios"),le=c(require("pretty-ms"));var je=s.extend("http"),$=e=>[3*1e3,15*1e3,30*1e3][e-1],Ke=e=>(je("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,de.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,de.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),J=()=>3;function Ve(e,t,r){je("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,le.default)($(e)),e,J()),g("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,le.default)($(e)),e,J())}var $e=s.extend("http");var ge={api:null,restApi:null};function Gr(e){let t=Ye.default.create({baseURL:e==="api"?ue():ke(),timeout:Ge(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let i=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let n={...Qe.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return i?$e("network request retry: %o",Je({...n,isRetry:!0})):$e("network request: %o",Je(n)),r}),(0,qe.default)(t,{retries:J(),retryCondition:Ke,retryDelay:$,shouldResetTimeout:!0,onRetry:Ve}),t}function We(e){return ge[e]===null&&(ge[e]=Gr(e)),ge[e]}function Je(e){return{method:e.method,baseUrl:ue(),url:e.url,data:e.isRetry?"<retry>":jr(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function jr(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Ze=require("axios"),et=c(require("lodash")),R=require("ts-pattern");function tt(e){(0,R.match)(e).when(Ze.isAxiosError,Kr).otherwise(()=>{g("Unexpected error while sending network request: %s",e)})}function Kr(e){return(0,R.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:R.P.not(R.P.nullish)},t=>{Vr(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 Vr(e,{status:t,data:r}){(0,R.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,()=>{$r(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 $r(e,t){(0,R.match)(t).with({code:ze.MISSING_SUITE,message:R.P.string,errors:R.P.array(R.P.string)},async r=>{let{message:i,errors:n}=r;j(1),p(...Xe(i,n))}).with({code:ze.RUN_EXPIRED,message:R.P.string},r=>{g(r.message)}).with({message:R.P.string,errors:R.P.array(R.P.string)},r=>{let{message:i,errors:n}=r;j(1),g(...Xe(i,n)),j(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 ze={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Xe(e,t){return et.default.isString(e)?t?.length===0?[e]:[e,`
|
|
10
10
|
${(t??[]).map(r=>` - ${r}`).join(`
|
|
11
11
|
`)}
|
|
12
|
-
`]:["Unexpected network error"]}var Je=i.extend("http");async function Ye(e,t=He){try{let r=await t().request(e);return Je("network response: %o",{...$e.default.omit(r,"request","config"),url:r.config.url,method:r.config.method}),r}catch(r){let o=r;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 qe=i.extend("run"),Er=(0,Qe.promisify)(We.gzip);async function ze(e){try{qe("Run params: %o",e);let t=await gr(JSON.stringify(e));return Ye({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 gr(e){try{return await Er(e)}catch(t){throw m("Failed to compress run payload:",t),t}}var mt=c(require("fs-extra")),lt=require("jest-cli"),dt=c(require("tmp"));var A=c(require("fs-extra")),U=c(require("path"));async function Xe(e){let t=await _r(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??U.default.join(t,"config.json")}}async function _r(e){return e?(await j(e),e):fr((0,U.join)(process.cwd(),".currents"))}async function fr(e){let t=await A.default.readdir(e),r=null;for(let o of t){let s=U.default.join(e,o),a=await A.default.stat(s);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,U.resolve)(e,r.name):null}async function j(e){try{return await A.default.pathExists(e)}catch{return m("Error checking if path exists:",m),!1}}async function Ze(e){let t=U.default.join(e,"instances");return Rr(t)}async function Rr(e){let t=await A.default.readdir(e),r=[];for(let o of t){let s=U.default.join(e,o);(await A.default.stat(s)).isFile()&&r.push(s)}return r}async function L(e){try{return await A.default.readJson(e)}catch(t){throw m("Error while reading JSON file: %s",e,t),m}}async function ce(e,t){try{return await A.default.writeFile(e,t,"utf8"),e}catch(r){throw m(`Error writing file at ${e}:`,r),r}}var V={};tr(V,{getNanoid:()=>Ir,userFacingNanoid:()=>ue});var pe=require("nanoid"),et="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ir=(e=16)=>(0,pe.customAlphabet)(et,e)(),ue=(0,pe.customAlphabet)(et,12);var pt=require("lodash");var tt=require("lodash"),Cr=["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 rt(e){return(0,tt.omit)(e,...Cr)}function ot(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(s=>{t.push(`--${r}=${s}`)}):t.push(`--${r}=${o}`));return t.join(" ")}var it=c(require("fs")),at=require("jest-config"),me=require("lodash"),le=c(require("path"));function K(e,t){return(...r)=>new Promise((o,s)=>{let a=0,l=()=>{a++;try{let d=e(...r);o(d)}catch(d){if(a>=t.length)s(d);else{let f=t[a-1];setTimeout(l,f)}}};l()})}var nt=c(require("fs-extra")),Tr=c(require("path"));async function J(e){let t=await nt.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var st=i.extend("jest-discovery");async function ct(e){try{let{config:t,configPath:r}=await(0,at.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"],s=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,me.omit)(t,o);if(a.projects&&(a.projects=a.projects.map(f=>typeof f!="string"?(0,me.omit)(f,s):f)),a.rootDir&&Object.keys(a).length===1)return null;let l=le.default.resolve(r?le.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),d=`module.exports=${JSON.stringify(a,null,2)}`;return st("configFileContent: %O",d),it.default.writeFileSync(l,d),await K(J,[200,200,200,200,200,1e3])(l),l}catch(t){return m("Failed to recreate the config file"),st("error %o",t),null}}async function ut(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=rt(r),s=ot(o),a=r.config,l=await ct(a);return{cliArgs:[s,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",l?`--config=${l}`:"",...e.args].filter(f=>!(0,pt.isEmpty)(f)),configFilePath:l}}var hr=i.extend("jest-discovery");async function Et(e,t){console.time(T("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await ut(t);try{let s=dt.default.fileSync({postfix:".json"});return hr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=s.name,await(0,lt.run)(r.concat(["--openHandlesTimeout=0"])),await K(J,Array.from({length:300},()=>100))(s.name),console.timeEnd(T("@currents/jest:fullTestSuite-ready")),await L(s.name)}catch(s){return m("Failed to obtain the jest full test suite:",s),[]}finally{o&&mt.default.unlinkSync(o)}}var B=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var $=class extends B{constructor(t){super(t)}async getFullTestSuite(){return Et(this.config.frameworkConfig,this.config.cliArgs)}};function gt(e){switch(e.framework){case"jest":return new $(e);default:return new B(e)}}var u=require("lodash");var Y=i.extend("ci"),Or=(e,...t)=>(0,u.chain)(t).compact().join(e).value(),Pr=(e,t)=>(0,u.set)(e,(0,u.camelCase)(t),process.env[t]),p=e=>(0,u.transform)(e,Pr,{}),Ur=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Ar=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Sr=()=>(0,u.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Lr=()=>process.env.bamboo_buildNumber,Nr=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,Dr=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,br=()=>(0,u.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Br=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),yr=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Mr=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,vr=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,xr={appveyor:"APPVEYOR",azure:Ar,awsCodeBuild:Sr,bamboo:Lr,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Nr,codeshipPro:Dr,concourse:br,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Br,goCD:"GO_JOB_NAME",googleCloud:yr,jenkins:Mr,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Ur,travis:"TRAVIS",wercker:vr,netlify:"NETLIFY",layerci:"LAYERCI"};function wr(){let{env:e}=process;return(0,u.findKey)(xr,t=>{if((0,u.isString)(t))return e[t];if((0,u.isFunction)(t))return t()})}var _t=()=>({appveyor:p(["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:p(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:p(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:p(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:p(["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:p(["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:p(["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:p(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:p(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:p(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:p(["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:p(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:p(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:p(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:p(["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:p(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:p(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:p(["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:p(["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:p(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:p(["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:p(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:p(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Fr=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Or(`
|
|
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}}},ft=e=>{let t=Rt();return t?(0,u.chain)(e()).get(t).value():{}};function Hr(){return(0,u.chain)(_t()).omitBy(u.isNull).keys().value()}function kr(e){return e&&Hr().includes(e)}function Rt(){let e=wr();return Y("detected CI provider name: %s",e),e||null}function Gr(){return ft(_t)}function It(){return ft(Fr)}function Ct(e){let t=Gr(),r=Rt(),o=jr(e,r);return Y("detected CI provider: %s",r),Y("detected CI params: %O",t),Y("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function jr(e,t){return e?{source:"user",value:e}:kr(t)?{source:"server",value:null}:{source:"random",value:`auto:${ue()}`}}var ht=require("@currents/commit-info"),Ot=require("lodash");var q=require("lodash");var de=i.extend("ci-git");function Tt(e){de("git commit existing info: %O",e);let t=It();de("commit info from provider environment variables: %O",t);let r=(0,q.transform)(e,(o,s,a)=>{let l=s||(t?t[a]:null);return o[a]=(0,q.defaultTo)(l,null)});return de("combined git and environment variables from provider: %O",r),r}var Vr=async()=>{let e=await(0,ht.commitInfo)();return Tt({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Pt=(0,Ot.memoize)(Vr);var Ut=c(require("getos")),At=require("lodash"),I=require("os"),St=require("util"),Kr=async()=>{if((0,I.platform)()==="linux")try{let e=await(0,St.promisify)(Ut.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)()},Jr=async()=>{let e=await Kr();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},Lt=(0,At.memoize)(Jr);var Nt={name:"@currents/cmd",version:"1.0.5",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/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/semver":"^7.5.8","@types/tmp":"^0.2.6","@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",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",lodash:"^4.17.21",nanoid:"^3.3.4","pretty-ms":"^7.0.1",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.2.0"},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/discovery/jest/reporter.js",require:"./dist/discovery/jest/reporter.js",types:"./dist/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 Q=Nt.version;async function Bt(){let e=F();if(!e)throw new Error("Currents config is missing!");e.debug&&fe();let t=await Xe(e);Re(Wr(t.reportDir)),i("Reporter options: %o",t),M("Report directory: %s",t.reportDir);let r=await L(t.configFilePath);i("Report config: %o",r);let o=await Ze(t.reportDir);i("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let s=qr(t.reportDir),a=await j(s),l=Qr(t.reportDir),d=null;if(a){let C=await L(s);E("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate}),await j(l)&&(d=await L(l),i("Full test suite file detected: %s",l))}if(d)i("The discovery stage was skipped");else{if(d=await gt(r).getFullTestSuite(),zr(d))throw new Error("Failed to discover the full test suite!");await ce(l,JSON.stringify(d))}let f=d.length===1?d[0].name:null,Z={currents:e},N={type:r.framework,version:r.frameworkVersion,clientVersion:Q},_e=V.userFacingNanoid(),v=Ct(e.ciBuildId),S={};for await(let C of o){let O=await L(C);S[O.groupId]||(S[O.groupId]=[]),S[O.groupId].push(O)}for await(let C of Object.keys(S)){let O=S[C],ee=C;f&&(i("Default group found: %s, overwriting the group in the results",f),ee=f,O=O.map(D=>({...D,groupId:f})));try{let D=await Yr({ci:v,group:ee,instances:O,fullTestSuite:d,config:Z,machineId:_e,framework:N});i("Api response: %o",D),M("[%s] Run created: %s",ee,D.runUrl);let Qt={response:D,isoDate:new Date().toISOString()};await ce(s,JSON.stringify(Qt)),i("Marker file %s: %s",a?"overwritten":"created",s)}catch{throw new Error("Failed to upload the results to the dashboard")}}}async function Yr({ci:e,group:t,instances:r,fullTestSuite:o,config:s,machineId:a,framework:l}){let d=await Pt(),f=await Lt(),Z={browserName:"node",browserVersion:bt.default.coerce(process.version)?.version},{currents:N}=s,v={platform:{...Z,...f},ci:e,commit:d,group:t,fullTestSuite:o,config:s,projectId:N.projectId,recordKey:N.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:N.tag??[],machineId:N.machineId??a,framework:l,instances:r};return i("Creating run: %o",(0,Dt.mapValues)(v,(S,C)=>C==="recordKey"?"******":S)),ze(v)}function qr(e){return W.default.join(e,"upload.marker.json")}function Qr(e){return W.default.join(e,"fullTestSuite.json")}function Wr(e){return W.default.join(e,`.debug-${new Date().toISOString()}.log`)}function zr(e){return e.length===0||e.some(t=>t.tests.length===0)}var Yt=c(require("fs"));var jt=require("@commander-js/extra-typings"),Vt=c(require("chalk"));var h=require("@commander-js/extra-typings");var yt=new h.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(P("ciBuildId")),Mt=new h.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(P("recordKey")),vt=new h.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(P("projectId")),xt=new h.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(Xr),wt=new h.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),Ft=new h.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),Ht=new h.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(P("machineId")),kt=new h.Option("--report-dir <string>","explicit path to the report directory").env(P("reportDir")),Gt=new h.Option("--debug","enable debug logs").env(P("debug")).default(!1);function Xr(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}var z="currents",Kt=(e=Ee())=>e.version(Q),Zr=`
|
|
12
|
+
`]:["Unexpected network error"]}var rt=s.extend("http");async function Y(e,t,r=We){try{let i=await r(e).request(t);return rt("network response: %o",{...ot.default.omit(i,"request","config"),url:i.config.url,method:i.config.method}),i}catch(i){let n=i;throw rt("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}),tt(n),n}}var nt=s.extend("api");async function it(e,t){try{return nt("Run params: %o",t),Y("restApi",{url:"v1/runs/get-one",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw nt("Failed to obtain run data:",r),r}}async function fe(){try{let e=V();if(!e)throw new Error("Config is missing!");e.debug&&k();let t=e.ciBuildId?{ciBuildId:e.ciBuildId,lastFailed:e.lastFailed}:{projectId:e.projectId,branch:e.branch,tag:e.tag,lastFailed:e.lastFailed},r=await it(e.apiKey,t);if(e.lastFailed){console.log(Yr(r.data));return}console.log(JSON.stringify(r))}catch(e){if(e instanceof st.AxiosError)return;throw new Error("Failed to get run data")}}function Yr(e){return JSON.stringify(e,null,2)}var q={};Sr(q,{getNanoid:()=>qr,userFacingNanoid:()=>Re});var Ee=require("nanoid"),at="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",qr=(e=16)=>(0,Ee.customAlphabet)(at,e)(),Re=(0,Ee.customAlphabet)(at,12);var u=require("lodash");var Q=s.extend("ci"),Qr=(e,...t)=>(0,u.chain)(t).compact().join(e).value(),Wr=(e,t)=>(0,u.set)(e,(0,u.camelCase)(t),process.env[t]),m=e=>(0,u.transform)(e,Wr,{}),zr=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Xr=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Zr=()=>(0,u.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),eo=()=>process.env.bamboo_buildNumber,to=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,ro=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,oo=()=>(0,u.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),no=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),io=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,so=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,ao=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,co={appveyor:"APPVEYOR",azure:Xr,awsCodeBuild:Zr,bamboo:eo,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:to,codeshipPro:ro,concourse:oo,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:no,goCD:"GO_JOB_NAME",googleCloud:io,jenkins:so,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:zr,travis:"TRAVIS",wercker:ao,netlify:"NETLIFY",layerci:"LAYERCI"};function mo(){let{env:e}=process;return(0,u.findKey)(co,t=>{if((0,u.isString)(t))return e[t];if((0,u.isFunction)(t))return t()})}var ct=()=>({appveyor:m(["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:m(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:m(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:m(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:m(["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:m(["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:m(["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:m(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:m(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:m(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:m(["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:m(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:m(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:m(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:m(["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:m(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:m(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:m(["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:m(["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:m(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:m(["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:m(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:m(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),po=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Qr(`
|
|
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}}},mt=e=>{let t=pt();return t?(0,u.chain)(e()).get(t).value():{}};function uo(){return(0,u.chain)(ct()).omitBy(u.isNull).keys().value()}function lo(e){return e&&uo().includes(e)}function pt(){let e=mo();return Q("detected CI provider name: %s",e),e||null}function go(){return mt(ct)}function ut(){return mt(po)}function dt(e){let t=go(),r=pt(),i=fo(e,r);return Q("detected CI provider: %s",r),Q("detected CI params: %O",t),Q("detected CI build ID: %o",i),{params:t,provider:r,ciBuildId:i}}function fo(e,t){return e?{source:"user",value:e}:lo(t)?{source:"server",value:null}:{source:"random",value:`auto:${Re()}`}}var gt=require("@currents/commit-info"),ft=require("lodash");var W=require("lodash");var _e=s.extend("ci-git");function lt(e){_e("git commit existing info: %O",e);let t=ut();_e("commit info from provider environment variables: %O",t);let r=(0,W.transform)(e,(i,n,a)=>{let d=n||(t?t[a]:null);return i[a]=(0,W.defaultTo)(d,null)});return _e("combined git and environment variables from provider: %O",r),r}var Eo=async()=>{let e=await(0,gt.commitInfo)();return lt({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Et=(0,ft.memoize)(Eo);var Rt=c(require("getos")),_t=require("lodash"),T=require("os"),It=require("util"),Ro=async()=>{if((0,T.platform)()==="linux")try{let e=await(0,It.promisify)(Rt.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,T.release)()}catch{return(0,T.release)()}return(0,T.release)()},_o=async()=>{let e=await Ro();return{osName:(0,T.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,T.freemem)(),total:(0,T.totalmem)()}}},Ct=(0,_t.memoize)(_o);var Ie=c(require("fs-extra"));async function N(e){try{return await Ie.default.readJson(e)}catch(t){throw p("Error while reading JSON file: %s",e,t),p}}async function Ce(e,t){try{return await Ie.default.writeFile(e,t,"utf8"),e}catch(r){throw p(`Error writing file at ${e}:`,r),r}}var $t=require("axios"),Jt=require("lodash"),re=c(require("path")),Yt=c(require("semver"));var ht=require("util"),Ot=require("zlib");var Tt=s.extend("api"),Io=(0,ht.promisify)(Ot.gzip);async function Pt(e){try{Tt("Run params: %o",e);let t=await Co(JSON.stringify(e));return Y("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Tt("Failed to create the run:",t),t}}async function Co(e){try{return await Io(e)}catch(t){throw p("Failed to compress run payload:",t),t}}var f={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 At(){return{projectId:process.env[f.projectId.env],recordKey:process.env[f.recordKey.env],ciBuildId:process.env[f.ciBuildId.env],tag:process.env[f.tag.env]?process.env[f.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:!!process.env[f.disableTitleTags.env],removeTitleTags:!!process.env[f.removeTitleTags.env],debug:!!process.env[f.debug.env],machineId:process.env[f.machineId.env]}}var To=s.extend("config"),ho=["projectId","recordKey"],Te=null;function Ut(e){Te=K(f,ho,At,e),To("Resolved Currents config: %o",Te)}function z(){return Te}function bt(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 Ft=c(require("fs-extra")),Ht=require("jest-cli"),kt=c(require("tmp"));var Mt=require("lodash");var St=require("lodash"),Oo=["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 yt(e){return(0,St.omit)(e,...Oo)}function Lt(e){let t=[];for(let[r,i]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof i=="boolean"?i&&t.push(`--${r}`):Array.isArray(i)?i.forEach(n=>{t.push(`--${r}=${n}`)}):t.push(`--${r}=${i}`));return t.join(" ")}var Bt=c(require("fs")),xt=require("jest-config"),he=require("lodash"),Oe=c(require("path"));function X(e,t){return(...r)=>new Promise((i,n)=>{let a=0,d=()=>{a++;try{let l=e(...r);i(l)}catch(l){if(a>=t.length)n(l);else{let _=t[a-1];setTimeout(d,_)}}};d()})}var Nt=c(require("fs-extra")),Po=c(require("path"));async function Z(e){let t=await Nt.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Dt=s.extend("jest-discovery");async function vt(e){try{let{config:t,configPath:r}=await(0,xt.readInitialOptions)(e),i=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,he.omit)(t,i);if(a.projects&&(a.projects=a.projects.map(_=>typeof _!="string"?(0,he.omit)(_,n):_)),a.rootDir&&Object.keys(a).length===1)return null;let d=Oe.default.resolve(r?Oe.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),l=`module.exports=${JSON.stringify(a,null,2)}`;return Dt("configFileContent: %O",l),Bt.default.writeFileSync(d,l),await X(Z,[200,200,200,200,200,1e3])(d),d}catch(t){return p("Failed to recreate the config file"),Dt("error %o",t),null}}async function wt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,i=yt(r),n=Lt(i),a=r.config,d=await vt(a);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",d?`--config=${d}`:"",...e.args].filter(_=>!(0,Mt.isEmpty)(_)),configFilePath:d}}var Ao=s.extend("jest-discovery");async function Gt(e,t){console.time(I("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:i}=await wt(t);try{let n=kt.default.fileSync({postfix:".json"});return Ao("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Ht.run)(r.concat(["--openHandlesTimeout=0"])),await X(Z,Array.from({length:300},()=>100))(n.name),console.timeEnd(I("@currents/jest:fullTestSuite-ready")),await N(n.name)}catch(n){return p("Failed to obtain the jest full test suite:",n),[]}finally{i&&Ft.default.unlinkSync(i)}}var x=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var ee=class extends x{constructor(t){super(t)}async getFullTestSuite(){return Gt(this.config.frameworkConfig,this.config.cliArgs)}};function jt(e){switch(e.framework){case"jest":return new ee(e);default:return new x(e)}}var v=c(require("fs-extra")),A=c(require("path"));async function Kt(e){let t=await Uo(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??A.default.join(t,"config.json")}}async function Uo(e){return e?(await te(e),e):bo((0,A.join)(process.cwd(),".currents"))}async function bo(e){let t=await v.default.readdir(e),r=null;for(let i of t){let n=A.default.join(e,i),a=await v.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:i,birthtime:a.birthtime})}return r?(0,A.resolve)(e,r.name):null}async function te(e){try{return await v.default.pathExists(e)}catch{return p("Error checking if path exists:",p),!1}}async function Vt(e){let t=A.default.join(e,"instances");return So(t)}async function So(e){let t=await v.default.readdir(e),r=[];for(let i of t){let n=A.default.join(e,i);(await v.default.stat(n)).isFile()&&r.push(n)}return r}async function Pe(){let e=z();if(!e)throw new Error("Currents config is missing!");e.debug&&k();let t=await Kt(e);Be(Do(t.reportDir)),s("Reporter options: %o",t),y("Report directory: %s",t.reportDir);let r=await N(t.configFilePath);s("Report config: %o",r);let i=await Vt(t.reportDir);s("Found %d instance results in the reportDir: %s",i.length,t.reportDir);let n=Lo(t.reportDir),a=await te(n),d=No(t.reportDir),l=null;if(a){let h=await N(n);g("Marker file detected. The report was already uploaded: %o",{runUrl:h.response.runUrl,isoDate:h.isoDate}),await te(d)&&(l=await N(d),s("Full test suite file detected: %s",d))}if(l)s("The discovery stage was skipped");else{if(l=await jt(r).getFullTestSuite(),Bo(l))throw new Error("Failed to discover the full test suite!");await Ce(d,JSON.stringify(l))}let _=l.length===1?l[0].name:null,se={currents:e},D={type:r.framework,version:r.frameworkVersion,clientVersion:H},Le=q.userFacingNanoid(),F=dt(e.ciBuildId),b={};for await(let h of i){let P=await N(h);b[P.groupId]||(b[P.groupId]=[]),b[P.groupId].push(P)}for await(let h of Object.keys(b)){let P=b[h],ae=h;_&&(s("Default group found: %s, overwriting the group in the results",_),ae=_,P=P.map(S=>({...S,groupId:_})));try{let S=await yo({ci:F,group:ae,instances:P,fullTestSuite:l,config:se,machineId:Le,framework:D});s("Api response: %o",S),y("[%s] Run created: %s",ae,S.runUrl);let hr={response:S,isoDate:new Date().toISOString()};await Ce(n,JSON.stringify(hr)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(S){if(S instanceof $t.AxiosError)return;throw new Error("Failed to upload the results to the dashboard")}}}async function yo({ci:e,group:t,instances:r,fullTestSuite:i,config:n,machineId:a,framework:d}){let l=await Et(),_=await Ct(),se={browserName:"node",browserVersion:Yt.default.coerce(process.version)?.version},{currents:D}=n,F={platform:{...se,..._},ci:e,commit:l,group:t,fullTestSuite:i,config:n,projectId:D.projectId,recordKey:D.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:D.tag??[],machineId:D.machineId??a,framework:d,instances:r};return s("Creating run: %o",(0,Jt.mapValues)(F,(b,h)=>h==="recordKey"?"******":b)),Pt(F)}function Lo(e){return re.default.join(e,"upload.marker.json")}function No(e){return re.default.join(e,"fullTestSuite.json")}function Do(e){return re.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Bo(e){return e.length===0||e.some(t=>t.tests.length===0)}var qt=require("@commander-js/extra-typings");function oe(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function ne(e,t){try{await e(t),Me("Script execution finished"),process.exit(0)}catch(r){r instanceof qt.CommanderError&&(p(r.message),process.exit(r.exitCode)),r instanceof B&&(p(r.message),process.exit(1)),p("Script execution failed:",r),process.exit(1)}}async function Qt(e){await ne(async t=>{He(t);let r=V();y("Config: %o",r),await fe()},e)}var U=require("@commander-js/extra-typings");var Wt=new U.Option("--api-key <api-key>","your API Key obtained from Currents dashboard").env(C(L,"apiKey")),zt=new U.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)"),Xt=new U.Option("-p, --project-id <project>","the project ID obtained from Currents"),Zt=new U.Option("-t, --tag <tag>","comma-separated tag(s) associated with the Currents run").argParser(oe),Ae=new U.Option("--debug","enable debug logs").env(C(L,"debug")).default(!1),er=new U.Option("-b, --branch <branch>","branch name of the recorded run"),tr=new U.Option("--last-failed","format the output for .last-run.json");var Ue="api",xo=e=>`
|
|
14
14
|
----------------------------------------------------
|
|
15
15
|
\u{1F4D6} Documentation: https://docs.currents.dev
|
|
16
16
|
\u{1F919} Support: support@currents.dev
|
|
17
17
|
----------------------------------------------------
|
|
18
18
|
|
|
19
|
-
${
|
|
19
|
+
${rr.default.bold("Examples")}
|
|
20
|
+
|
|
21
|
+
Obtain last run data by --ci-build-id:
|
|
22
|
+
${I(`${e} ${Ue} get-run --api-key <api-key> --ci-build-id --provider <provider>`)}
|
|
23
|
+
|
|
24
|
+
Obtain last run data using filters:
|
|
25
|
+
${I(`${e} ${Ue} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA --tag tagB`)}
|
|
26
|
+
`,or=e=>new be.Command().command(Ue).description(`Receive information from Currents API ${xo(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(vo()),vo=()=>new be.Command().name("get-run").allowUnknownOption().addOption(Wt).addOption(Ae).addOption(zt).addOption(Xt).addOption(er).addOption(Zt).addOption(tr).addOption(Ae).action(Qt);var Rr=require("@commander-js/extra-typings"),_r=c(require("chalk"));var O=require("@commander-js/extra-typings");var nr=new O.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(C(f,"ciBuildId")),ir=new O.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(C(f,"recordKey")),sr=new O.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(C(f,"projectId")),ar=new O.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(oe),cr=new O.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),mr=new O.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),pr=new O.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(C(f,"machineId")),ur=new O.Option("--report-dir <string>","explicit path to the report directory").env(C(f,"reportDir")),dr=new O.Option("--debug","enable debug logs").env(C(f,"debug")).default(!1);var fr=c(require("fs"));var lr=require("tmp-promise"),gr=async()=>{let{path:e}=await(0,lr.file)();return e};var Se=s.extend("cli"),ie=class{constructor(t){this.configFilePath=null;this.cliOptions=t,Se("CLI options: %o",this.cliOptions),this.parsedConfig=bt(this.cliOptions),Se("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await gr();return fr.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),Se("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function Er(e){await ne(async t=>{let r=new ie(t);Ut(r.parsedConfig);let i=z();y("Currents config: %o",{...i,recordKey:i?.recordKey?"*****":void 0}),await Pe()},e)}var w="upload",Mo=e=>`
|
|
27
|
+
----------------------------------------------------
|
|
28
|
+
\u{1F4D6} Documentation: https://docs.currents.dev
|
|
29
|
+
\u{1F919} Support: support@currents.dev
|
|
30
|
+
----------------------------------------------------
|
|
31
|
+
|
|
32
|
+
${_r.default.bold("Examples")}
|
|
20
33
|
|
|
21
34
|
Upload test results to Currents:
|
|
22
|
-
${
|
|
35
|
+
${I(`${e} ${w} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
|
|
23
36
|
|
|
24
37
|
Upload test results to Currents, add tags "tagA", "tagB" to the recorded run:
|
|
25
|
-
${
|
|
38
|
+
${I(`${e} ${w} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
|
|
26
39
|
|
|
27
40
|
Provide a custom path to the reports directory:
|
|
28
|
-
${
|
|
29
|
-
`,
|
|
30
|
-
${
|
|
41
|
+
${I(`${e} ${w} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
|
|
42
|
+
`,Ir=e=>new Rr.Command().name(w).command(w).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
|
|
43
|
+
${Mo(e)}`).addOption(nr).addOption(ir).addOption(sr).addOption(ar).addOption(cr).addOption(mr).addOption(pr).addOption(dr).addOption(ur).action(r=>Er(r));var ye="currents",Tr=()=>new Cr.Command(ye).version(H).addCommand(Ir(ye),{isDefault:!0}).addCommand(or(ye));import("dotenv/config");function wo(){Tr().parse()}wo();
|
|
31
44
|
/*! For license information please see index.js.LEGAL.txt */
|
|
32
45
|
//# sourceMappingURL=index.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,96 @@
|
|
|
1
|
-
declare function
|
|
1
|
+
declare function handleCurrentsReport(): Promise<void>;
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
type TestCaseStatus = "passed" | "failed" | "pending";
|
|
4
|
+
type TestRunnerStatus = "passed" | "failed" | "skipped";
|
|
5
|
+
type ExpectedStatus = "passed" | "skipped";
|
|
6
|
+
type JestTestCaseStatus = "pending" | "todo" | "failed" | "passed";
|
|
7
|
+
type InstanceReportStats = {
|
|
8
|
+
suites: number;
|
|
9
|
+
tests: number;
|
|
10
|
+
passes: number;
|
|
11
|
+
pending: number;
|
|
12
|
+
skipped: number;
|
|
13
|
+
failures: number;
|
|
14
|
+
flaky: number;
|
|
15
|
+
wallClockStartedAt: string;
|
|
16
|
+
wallClockEndedAt: string;
|
|
17
|
+
wallClockDuration: number;
|
|
18
|
+
};
|
|
19
|
+
type ErrorSchema = {
|
|
20
|
+
message?: string;
|
|
21
|
+
stack?: string;
|
|
22
|
+
value?: string;
|
|
23
|
+
snippet?: string;
|
|
24
|
+
location?: LocationSchema;
|
|
25
|
+
};
|
|
26
|
+
type LocationSchema = {
|
|
27
|
+
line: number;
|
|
28
|
+
column: number;
|
|
29
|
+
file: string;
|
|
30
|
+
};
|
|
31
|
+
type WorkerInfo = {
|
|
32
|
+
workerIndex: number;
|
|
33
|
+
parallelIndex: number;
|
|
34
|
+
};
|
|
35
|
+
type InstanceReportTestAttempt = {
|
|
36
|
+
_s: TestCaseStatus;
|
|
37
|
+
attempt: number;
|
|
38
|
+
workerIndex: number;
|
|
39
|
+
parallelIndex: number;
|
|
40
|
+
startTime: string;
|
|
41
|
+
steps: unknown[];
|
|
42
|
+
duration: number;
|
|
43
|
+
status: TestRunnerStatus;
|
|
44
|
+
stderr?: string[];
|
|
45
|
+
stdout?: string[];
|
|
46
|
+
errors?: ErrorSchema[];
|
|
47
|
+
error?: ErrorSchema;
|
|
48
|
+
};
|
|
49
|
+
type InstanceReportTest = {
|
|
50
|
+
_t: number;
|
|
51
|
+
testId: string;
|
|
52
|
+
title: string[];
|
|
53
|
+
state: TestCaseStatus;
|
|
54
|
+
isFlaky?: boolean;
|
|
55
|
+
retries: number;
|
|
56
|
+
expectedStatus?: ExpectedStatus;
|
|
57
|
+
annotations?: unknown[];
|
|
58
|
+
timeout: number;
|
|
59
|
+
location: LocationSchema;
|
|
60
|
+
attempts: InstanceReportTestAttempt[];
|
|
61
|
+
};
|
|
62
|
+
type InstanceReport = {
|
|
63
|
+
groupId: string;
|
|
64
|
+
spec: string;
|
|
65
|
+
worker: WorkerInfo;
|
|
66
|
+
startTime: string;
|
|
67
|
+
results: {
|
|
68
|
+
error?: string;
|
|
69
|
+
exception?: string | null;
|
|
70
|
+
stats: InstanceReportStats;
|
|
71
|
+
tests: InstanceReportTest[];
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
type CLIArgs = {
|
|
75
|
+
options: Record<string, unknown>;
|
|
76
|
+
args: string[];
|
|
77
|
+
};
|
|
78
|
+
type ReportConfig = {
|
|
79
|
+
framework: string;
|
|
80
|
+
frameworkVersion: string | null;
|
|
81
|
+
cliArgs: CLIArgs;
|
|
82
|
+
frameworkConfig: Record<string, unknown>;
|
|
83
|
+
};
|
|
84
|
+
type ReportOptions = {
|
|
85
|
+
configFilePath?: string;
|
|
86
|
+
reportDir?: string;
|
|
87
|
+
};
|
|
88
|
+
type UploadMarkerInfo = {
|
|
89
|
+
response: {
|
|
90
|
+
runUrl: string;
|
|
91
|
+
runId: string;
|
|
92
|
+
};
|
|
93
|
+
isoDate: string;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export { type CLIArgs, type ErrorSchema, type ExpectedStatus, type InstanceReport, type InstanceReportStats, type InstanceReportTest, type InstanceReportTestAttempt, type JestTestCaseStatus, type LocationSchema, type ReportConfig, type ReportOptions, type TestCaseStatus, type TestRunnerStatus, type UploadMarkerInfo, type WorkerInfo, handleCurrentsReport };
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
|
|
3
|
-
%
|
|
4
|
-
%
|
|
5
|
-
%
|
|
6
|
-
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}
|
|
7
|
-
|
|
1
|
+
"use strict";var Tt=Object.create;var N=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Ut=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var ie=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},ae=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ot(t))!Pt.call(e,o)&&o!==r&&N(e,o,{get:()=>t[o],enumerable:!(n=ht(t,o))||n.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Tt(Ut(e)):{},ae(t||!e||!e.__esModule?N(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>ae(N({},"__esModule",{value:!0}),e);var Tr={};ie(Tr,{handleCurrentsReport:()=>ft});module.exports=At(Tr);var J=require("debug"),St=u(require("fs-extra")),i=(0,J.debug)("currents"),Lt=null;function ce(){J.debug.enable("currents,currents:*")}function ue(e){Lt=e}var D={};ie(D,{getNanoid:()=>Nt,userFacingNanoid:()=>$});var Y=require("nanoid"),me="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Nt=(e=16)=>(0,Y.customAlphabet)(me,e)(),$=(0,Y.customAlphabet)(me,12);var m=require("lodash");var B=i.extend("ci"),Dt=(e,...t)=>(0,m.chain)(t).compact().join(e).value(),Bt=(e,t)=>(0,m.set)(e,(0,m.camelCase)(t),process.env[t]),c=e=>(0,m.transform)(e,Bt,{}),bt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,yt=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Mt=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),vt=()=>process.env.bamboo_buildNumber,xt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,wt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Ht=()=>(0,m.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Ft=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Gt=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,kt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,jt=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Vt={appveyor:"APPVEYOR",azure:yt,awsCodeBuild:Mt,bamboo:vt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:xt,codeshipPro:wt,concourse:Ht,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Ft,goCD:"GO_JOB_NAME",googleCloud:Gt,jenkins:kt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:bt,travis:"TRAVIS",wercker:jt,netlify:"NETLIFY",layerci:"LAYERCI"};function Kt(){let{env:e}=process;return(0,m.findKey)(Vt,t=>{if((0,m.isString)(t))return e[t];if((0,m.isFunction)(t))return t()})}var le=()=>({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","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),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"])}),Jt=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Dt(`
|
|
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}}},pe=e=>{let t=Ee();return t?(0,m.chain)(e()).get(t).value():{}};function Yt(){return(0,m.chain)(le()).omitBy(m.isNull).keys().value()}function $t(e){return e&&Yt().includes(e)}function Ee(){let e=Kt();return B("detected CI provider name: %s",e),e||null}function Qt(){return pe(le)}function _e(){return pe(Jt)}function ge(e){let t=Qt(),r=Ee(),n=Wt(e,r);return B("detected CI provider: %s",r),B("detected CI params: %O",t),B("detected CI build ID: %o",n),{params:t,provider:r,ciBuildId:n}}function Wt(e,t){return e?{source:"user",value:e}:$t(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 de(e){Q("git commit existing info: %O",e);let t=_e();Q("commit info from provider environment variables: %O",t);let r=(0,b.transform)(e,(n,o,a)=>{let l=o||(t?t[a]:null);return n[a]=(0,b.defaultTo)(l,null)});return Q("combined git and environment variables from provider: %O",r),r}var qt=async()=>{let e=await(0,Re.commitInfo)();return de({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"),zt=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)()},Xt=async()=>{let e=await zt();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},Oe=(0,Te.memoize)(Xt);var Ue={name:"@currents/cmd",version:"1.1.0-beta.0",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/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/semver":"^7.5.8","@types/tmp":"^0.2.6","@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",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",lodash:"^4.17.21",nanoid:"^3.3.4","pretty-ms":"^7.0.1",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.2.0"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var Pe=Ue.version;var er=[];function Ae(e){er.push(e)}var R=u(require("chalk")),y=u(require("util"));var Se=[],Le=[];var W=(...e)=>{let t=y.default.format(...e);Ae(t),console.log(t)},q=W,E=(...e)=>{let t=y.default.format(...e);return Le.push(t),i("WARNING: ",t),W(R.default.bgYellow.black(" WARNING "),t)};var _=(...e)=>{let t=y.default.format(...e);return Se.push(t),i("ERROR: ",t),W(R.default.bgRed.white(" ERROR "),t)};var M=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
|
+
`)),to=R.default.cyan,ro=R.default.blueBright,oo=R.default.red,no=R.default.yellow,so=R.default.green,io=R.default.gray,ao=R.default.white,co=R.default.black,uo=R.default.magenta,v=R.default.dim,mo=R.default.bold;var z=u(require("fs-extra"));async function U(e){try{return await z.default.readJson(e)}catch(t){throw _("Error while reading JSON file: %s",e,t),_}}async function X(e,t){try{return await z.default.writeFile(e,t,"utf8"),e}catch(r){throw _(`Error writing file at ${e}:`,r),r}}var dt=require("axios"),Rt=require("lodash"),j=u(require("path")),It=u(require("semver"));var We=require("util"),qe=require("zlib");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],be=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 ye(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 rr(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:be,retryDelay:x,shouldResetTimeout:!0,onRetry:ye}),t}function Fe(e){return re[e]===null&&(re[e]=rr(e)),re[e]}function ve(e){return{method:e.method,baseUrl:Z(),url:e.url,data:e.isRetry?"<retry>":or(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function or(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,nr).otherwise(()=>{E("Unexpected error while sending network request: %s",e)})}function nr(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=>{sr(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 sr(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,()=>{ir(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 ir(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),_(...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
|
+
%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
|
+
${(t??[]).map(r=>` - ${r}`).join(`
|
|
8
9
|
`)}
|
|
9
|
-
`]:["Unexpected network error"]}var Se=i.extend("http");async function Le(e,r=Te){try{let t=await r().request(e);return Se("network response: %o",{...Ne.default.omit(t,"request","config"),url:t.config.url,method:t.config.method}),t}catch(t){let o=t;throw Se("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}),Ae(o),o}}var De=i.extend("run"),br=(0,Be.promisify)(be.gzip);async function Me(e){try{De("Run params: %o",e);let r=await Mr(JSON.stringify(e));return Le({url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:r}).then(t=>t.data)}catch(r){throw De("Failed to create the run:",r),r}}async function Mr(e){try{return await br(e)}catch(r){throw _("Failed to compress run payload:",r),r}}var yr=u(require("fs"));var Ko=i.extend("config");var vr=null;function ye(){return vr}var Qe=u(require("fs-extra")),We=require("jest-cli"),qe=u(require("tmp"));var O=u(require("fs-extra")),T=u(require("path"));async function ve(e){let r=await xr(e?.reportDir);if(!r)throw new Error("Failed to find the report dir");return{reportDir:r,configFilePath:e?.configFilePath??T.default.join(r,"config.json")}}async function xr(e){return e?(await x(e),e):wr((0,T.join)(process.cwd(),".currents"))}async function wr(e){let r=await O.default.readdir(e),t=null;for(let o of r){let n=T.default.join(e,o),a=await O.default.stat(n);a.isDirectory()&&(!t||a.birthtime>t.birthtime)&&(t={name:o,birthtime:a.birthtime})}return t?(0,T.resolve)(e,t.name):null}async function x(e){try{return await O.default.pathExists(e)}catch{return _("Error checking if path exists:",_),!1}}async function xe(e){let r=T.default.join(e,"instances");return Hr(r)}async function Hr(e){let r=await O.default.readdir(e),t=[];for(let o of r){let n=T.default.join(e,o);(await O.default.stat(n)).isFile()&&t.push(n)}return t}async function U(e){try{return await O.default.readJson(e)}catch(r){throw _("Error while reading JSON file: %s",e,r),_}}async function X(e,r){try{return await O.default.writeFile(e,r,"utf8"),e}catch(t){throw _(`Error writing file at ${e}:`,t),t}}var w={};se(w,{getNanoid:()=>Fr,userFacingNanoid:()=>ee});var Z=require("nanoid"),we="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Fr=(e=16)=>(0,Z.customAlphabet)(we,e)(),ee=(0,Z.customAlphabet)(we,12);var Ye=require("lodash");var He=require("lodash"),Gr=["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 Fe(e){return(0,He.omit)(e,...Gr)}function Ge(e){let r=[];for(let[t,o]of Object.entries(e))t==="_"||t==="$0"||t.includes("-")||(typeof o=="boolean"?o&&r.push(`--${t}`):Array.isArray(o)?o.forEach(n=>{r.push(`--${t}=${n}`)}):r.push(`--${t}=${o}`));return r.join(" ")}var Ve=u(require("fs")),Ke=require("jest-config"),re=require("lodash"),te=u(require("path"));function H(e,r){return(...t)=>new Promise((o,n)=>{let a=0,l=()=>{a++;try{let E=e(...t);o(E)}catch(E){if(a>=r.length)n(E);else{let d=r[a-1];setTimeout(l,d)}}};l()})}var ke=u(require("fs-extra")),kr=u(require("path"));async function F(e){let r=await ke.default.pathExists(e);if(!r)throw new Error("File does not exist");return r}var je=i.extend("jest-discovery");async function Je(e){try{let{config:r,configPath:t}=await(0,Ke.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,re.omit)(r,o);if(a.projects&&(a.projects=a.projects.map(d=>typeof d!="string"?(0,re.omit)(d,n):d)),a.rootDir&&Object.keys(a).length===1)return null;let l=te.default.resolve(t?te.default.dirname(t):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),E=`module.exports=${JSON.stringify(a,null,2)}`;return je("configFileContent: %O",E),Ve.default.writeFileSync(l,E),await H(F,[200,200,200,200,200,1e3])(l),l}catch(r){return _("Failed to recreate the config file"),je("error %o",r),null}}async function $e(e){let r="!!##ThisPatternWillNotMatchAnyTestName##!!",t=e.options,o=Fe(t),n=Ge(o),a=t.config,l=await Je(a);return{cliArgs:[n,"--testNamePattern",r,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",l?`--config=${l}`:"",...e.args].filter(d=>!(0,Ye.isEmpty)(d)),configFilePath:l}}var jr=i.extend("jest-discovery");async function ze(e,r){console.time(b("@currents/jest:fullTestSuite-ready"));let{cliArgs:t,configFilePath:o}=await $e(r);try{let n=qe.default.fileSync({postfix:".json"});return jr("running scanner: %o",t),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,We.run)(t.concat(["--openHandlesTimeout=0"])),await H(F,Array.from({length:300},()=>100))(n.name),console.timeEnd(b("@currents/jest:fullTestSuite-ready")),await U(n.name)}catch(n){return _("Failed to obtain the jest full test suite:",n),[]}finally{o&&Qe.default.unlinkSync(o)}}var S=class{constructor(r){this.config=r}async getFullTestSuite(){return[]}};var G=class extends S{constructor(r){super(r)}async getFullTestSuite(){return ze(this.config.frameworkConfig,this.config.cliArgs)}};function Xe(e){switch(e.framework){case"jest":return new G(e);default:return new S(e)}}var m=require("lodash");var k=i.extend("ci"),Vr=(e,...r)=>(0,m.chain)(r).compact().join(e).value(),Kr=(e,r)=>(0,m.set)(e,(0,m.camelCase)(r),process.env[r]),c=e=>(0,m.transform)(e,Kr,{}),Jr=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Yr=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,$r=()=>(0,m.some)(process.env,(e,r)=>/^CODEBUILD_/.test(r)),Qr=()=>process.env.bamboo_buildNumber,Wr=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,qr=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,zr=()=>(0,m.some)(process.env,(e,r)=>/^CONCOURSE_/.test(r)),Xr=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Zr=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,et=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,rt=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,tt={appveyor:"APPVEYOR",azure:Yr,awsCodeBuild:$r,bamboo:Qr,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Wr,codeshipPro:qr,concourse:zr,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Xr,goCD:"GO_JOB_NAME",googleCloud:Zr,jenkins:et,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Jr,travis:"TRAVIS",wercker:rt,netlify:"NETLIFY",layerci:"LAYERCI"};function ot(){let{env:e}=process;return(0,m.findKey)(tt,r=>{if((0,m.isString)(r))return e[r];if((0,m.isFunction)(r))return r()})}var Ze=()=>({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","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),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"])}),nt=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Vr(`
|
|
10
|
-
`,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}}},er=e=>{let r=rr();return r?(0,m.chain)(e()).get(r).value():{}};function st(){return(0,m.chain)(Ze()).omitBy(m.isNull).keys().value()}function it(e){return e&&st().includes(e)}function rr(){let e=ot();return k("detected CI provider name: %s",e),e||null}function at(){return er(Ze)}function tr(){return er(nt)}function or(e){let r=at(),t=rr(),o=ct(e,t);return k("detected CI provider: %s",t),k("detected CI params: %O",r),k("detected CI build ID: %o",o),{params:r,provider:t,ciBuildId:o}}function ct(e,r){return e?{source:"user",value:e}:it(r)?{source:"server",value:null}:{source:"random",value:`auto:${ee()}`}}var sr=require("@currents/commit-info"),ir=require("lodash");var j=require("lodash");var oe=i.extend("ci-git");function nr(e){oe("git commit existing info: %O",e);let r=tr();oe("commit info from provider environment variables: %O",r);let t=(0,j.transform)(e,(o,n,a)=>{let l=n||(r?r[a]:null);return o[a]=(0,j.defaultTo)(l,null)});return oe("combined git and environment variables from provider: %O",t),t}var ut=async()=>{let e=await(0,sr.commitInfo)();return nr({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},ar=(0,ir.memoize)(ut);var cr=u(require("getos")),ur=require("lodash"),I=require("os"),mr=require("util"),mt=async()=>{if((0,I.platform)()==="linux")try{let e=await(0,mr.promisify)(cr.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)()},lt=async()=>{let e=await mt();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},lr=(0,ur.memoize)(lt);var Er={name:"@currents/cmd",version:"1.0.5",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/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/semver":"^7.5.8","@types/tmp":"^0.2.6","@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",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",lodash:"^4.17.21",nanoid:"^3.3.4","pretty-ms":"^7.0.1",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.2.0"},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/discovery/jest/reporter.js",require:"./dist/discovery/jest/reporter.js",types:"./dist/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 pr=Er.version;async function pt(){let e=ye();if(!e)throw new Error("Currents config is missing!");e.debug&&ae();let r=await ve(e);ce(Rt(r.reportDir)),i("Reporter options: %o",r),W("Report directory: %s",r.reportDir);let t=await U(r.configFilePath);i("Report config: %o",t);let o=await xe(r.reportDir);i("Found %d instance results in the reportDir: %s",o.length,r.reportDir);let n=gt(r.reportDir),a=await x(n),l=dt(r.reportDir),E=null;if(a){let f=await U(n);p("Marker file detected. The report was already uploaded: %o",{runUrl:f.response.runUrl,isoDate:f.isoDate}),await x(l)&&(E=await U(l),i("Full test suite file detected: %s",l))}if(E)i("The discovery stage was skipped");else{if(E=await Xe(t).getFullTestSuite(),It(E))throw new Error("Failed to discover the full test suite!");await X(l,JSON.stringify(E))}let d=E.length===1?E[0].name:null,K={currents:e},P={type:t.framework,version:t.frameworkVersion,clientVersion:pr},ne=w.userFacingNanoid(),N=or(e.ciBuildId),h={};for await(let f of o){let C=await U(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;d&&(i("Default group found: %s, overwriting the group in the results",d),J=d,C=C.map(A=>({...A,groupId:d})));try{let A=await _t({ci:N,group:J,instances:C,fullTestSuite:E,config:K,machineId:ne,framework:P});i("Api response: %o",A),W("[%s] Run created: %s",J,A.runUrl);let dr={response:A,isoDate:new Date().toISOString()};await X(n,JSON.stringify(dr)),i("Marker file %s: %s",a?"overwritten":"created",n)}catch{throw new Error("Failed to upload the results to the dashboard")}}}async function _t({ci:e,group:r,instances:t,fullTestSuite:o,config:n,machineId:a,framework:l}){let E=await ar(),d=await lr(),K={browserName:"node",browserVersion:gr.default.coerce(process.version)?.version},{currents:P}=n,N={platform:{...K,...d},ci:e,commit:E,group:r,fullTestSuite:o,config:n,projectId:P.projectId,recordKey:P.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:P.tag??[],machineId:P.machineId??a,framework:l,instances:t};return i("Creating run: %o",(0,_r.mapValues)(N,(h,f)=>f==="recordKey"?"******":h)),Me(N)}function gt(e){return V.default.join(e,"upload.marker.json")}function dt(e){return V.default.join(e,"fullTestSuite.json")}function Rt(e){return V.default.join(e,`.debug-${new Date().toISOString()}.log`)}function It(e){return e.length===0||e.some(r=>r.tests.length===0)}0&&(module.exports={currentsReporter});
|
|
10
|
+
`]:["Unexpected network error"]}var Je=i.extend("http");async function $e(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 Qe=i.extend("api"),ar=(0,We.promisify)(qe.gzip);async function ze(e){try{Qe("Run params: %o",e);let t=await cr(JSON.stringify(e));return $e("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 cr(e){try{return await ar(e)}catch(t){throw _("Failed to compress run payload:",t),t}}var Tn=i.extend("config");var ur=null;function Xe(){return ur}var ut=u(require("fs-extra")),mt=require("jest-cli"),lt=u(require("tmp"));var at=require("lodash");var Ze=require("lodash"),mr=["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,...mr)}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 H(e,t){return(...r)=>new Promise((n,o)=>{let a=0,l=()=>{a++;try{let p=e(...r);n(p)}catch(p){if(a>=t.length)o(p);else{let d=t[a-1];setTimeout(l,d)}}};l()})}var rt=u(require("fs-extra")),lr=u(require("path"));async function F(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(d=>typeof d!="string"?(0,oe.omit)(d,o):d)),a.rootDir&&Object.keys(a).length===1)return null;let l=ne.default.resolve(r?ne.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(a,null,2)}`;return ot("configFileContent: %O",p),nt.default.writeFileSync(l,p),await H(F,[200,200,200,200,200,1e3])(l),l}catch(t){return _("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,l=await it(a);return{cliArgs:[o,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",l?`--config=${l}`:"",...e.args].filter(d=>!(0,at.isEmpty)(d)),configFilePath:l}}var pr=i.extend("jest-discovery");async function pt(e,t){console.time(v("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:n}=await ct(t);try{let o=lt.default.fileSync({postfix:".json"});return pr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=o.name,await(0,mt.run)(r.concat(["--openHandlesTimeout=0"])),await H(F,Array.from({length:300},()=>100))(o.name),console.timeEnd(v("@currents/jest:fullTestSuite-ready")),await U(o.name)}catch(o){return _("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 G=class extends A{constructor(t){super(t)}async getFullTestSuite(){return pt(this.config.frameworkConfig,this.config.cliArgs)}};function Et(e){switch(e.framework){case"jest":return new G(e);default:return new A(e)}}var S=u(require("fs-extra")),T=u(require("path"));async function _t(e){let t=await Er(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 Er(e){return e?(await k(e),e):_r((0,T.join)(process.cwd(),".currents"))}async function _r(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 k(e){try{return await S.default.pathExists(e)}catch{return _("Error checking if path exists:",_),!1}}async function gt(e){let t=T.default.join(e,"instances");return gr(t)}async function gr(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 ft(){let e=Xe();if(!e)throw new Error("Currents config is missing!");e.debug&&ce();let t=await _t(e);ue(fr(t.reportDir)),i("Reporter options: %o",t),q("Report directory: %s",t.reportDir);let r=await U(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=Rr(t.reportDir),a=await k(o),l=Ir(t.reportDir),p=null;if(a){let f=await U(o);E("Marker file detected. The report was already uploaded: %o",{runUrl:f.response.runUrl,isoDate:f.isoDate}),await k(l)&&(p=await U(l),i("Full test suite file detected: %s",l))}if(p)i("The discovery stage was skipped");else{if(p=await Et(r).getFullTestSuite(),Cr(p))throw new Error("Failed to discover the full test suite!");await X(l,JSON.stringify(p))}let d=p.length===1?p[0].name:null,V={currents:e},P={type:r.framework,version:r.frameworkVersion,clientVersion:Pe},se=D.userFacingNanoid(),L=ge(e.ciBuildId),h={};for await(let f of n){let C=await U(f);h[C.groupId]||(h[C.groupId]=[]),h[C.groupId].push(C)}for await(let f of Object.keys(h)){let C=h[f],K=f;d&&(i("Default group found: %s, overwriting the group in the results",d),K=d,C=C.map(O=>({...O,groupId:d})));try{let O=await dr({ci:L,group:K,instances:C,fullTestSuite:p,config:V,machineId:se,framework:P});i("Api response: %o",O),q("[%s] Run created: %s",K,O.runUrl);let Ct={response:O,isoDate:new Date().toISOString()};await X(o,JSON.stringify(Ct)),i("Marker file %s: %s",a?"overwritten":"created",o)}catch(O){if(O instanceof dt.AxiosError)return;throw new Error("Failed to upload the results to the dashboard")}}}async function dr({ci:e,group:t,instances:r,fullTestSuite:n,config:o,machineId:a,framework:l}){let p=await fe(),d=await Oe(),V={browserName:"node",browserVersion:It.default.coerce(process.version)?.version},{currents:P}=o,L={platform:{...V,...d},ci:e,commit:p,group:t,fullTestSuite:n,config:o,projectId:P.projectId,recordKey:P.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:P.tag??[],machineId:P.machineId??a,framework:l,instances:r};return i("Creating run: %o",(0,Rt.mapValues)(L,(h,f)=>f==="recordKey"?"******":h)),ze(L)}function Rr(e){return j.default.join(e,"upload.marker.json")}function Ir(e){return j.default.join(e,"fullTestSuite.json")}function fr(e){return j.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Cr(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 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
|
|
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.log(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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@currents/cmd",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.1.0-beta.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"author": "Currents Software Inc",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -78,9 +78,9 @@
|
|
|
78
78
|
"types": "./dist/index.d.ts"
|
|
79
79
|
},
|
|
80
80
|
"./discovery/jest": {
|
|
81
|
-
"import": "./dist/discovery/jest/reporter.js",
|
|
82
|
-
"require": "./dist/discovery/jest/reporter.js",
|
|
83
|
-
"types": "./dist/discovery/jest/reporter.d.ts"
|
|
81
|
+
"import": "./dist/services/upload/discovery/jest/reporter.js",
|
|
82
|
+
"require": "./dist/services/upload/discovery/jest/reporter.js",
|
|
83
|
+
"types": "./dist/services/upload/discovery/jest/reporter.d.ts"
|
|
84
84
|
},
|
|
85
85
|
"./package.json": "./package.json"
|
|
86
86
|
},
|
|
File without changes
|
|
File without changes
|