@currents/cmd 1.0.0-beta.0 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -18
- package/dist/bin/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @currents/cmd
|
|
2
2
|
|
|
3
|
-
CLI
|
|
3
|
+
CLI tool for [Currents](https://currents.dev) - a cloud platform for debugging, troubleshooting, and analyzing CI tests.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -10,27 +10,27 @@ npm install @currents/cmd --save-dev
|
|
|
10
10
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
- Generate test results with one of the reporters (see [documentation](https://docs.currents.dev) for the list of supporter reporters)
|
|
14
|
+
- Upload the results
|
|
14
15
|
|
|
15
16
|
```sh
|
|
16
17
|
npx currents upload --project-id=xxx --key=yyy
|
|
17
18
|
```
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
ℹ️ Get familiar with [CI Build ID 📖](https://docs.currents.dev/guides/ci-build-id) (`--ci-build-id`) before using the tool in CI.
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
## Notes
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
Obtain `--project-id` and [--key](https://docs.currents.dev/guides/record-key) from https://app.currents.dev to identify the project and associate the results with your organization.
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
`currents` will upload the results, as follows:
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
- use `process.env.CURRENTS_REPORT_DIR` or `--reportDir` to read the results previosly generated by one of supported reporters, otherwise
|
|
29
|
+
- use the most recently created directory named as `.currents-report-[timestamp]-[uuidv4()]` in the current working directory
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
> ℹ️ Get familiar with [CI Build ID 📖](https://docs.currents.dev/guides/ci-build-id) before using `currents` in CI. It is **important** to set the `CI Build ID` explicitly if you are using sharding or multiple machines for the same test run.
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
The `--project-id` and [--key](https://docs.currents.dev/guides/record-key) are used to identify the project and associate the results with the organization in the Currents dashboard.
|
|
33
|
+
> ℹ️ The `CI Build ID` will be generated automatically if not set.
|
|
34
34
|
|
|
35
35
|
## Configuration
|
|
36
36
|
|
|
@@ -38,10 +38,10 @@ Please note that all options apart from `--project-id` and `--key` are optional.
|
|
|
38
38
|
|
|
39
39
|
| Property | Type | Description | Environment variable | Default |
|
|
40
40
|
| ---------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | --------------------------------------- |
|
|
41
|
-
| `-k, --key` | `string` | The record key to
|
|
42
|
-
| `-p, --project-id` | `string` | The id of the project
|
|
41
|
+
| `-k, --key` | `string` | The record key to record the results to Currents. Read more: https://currents.dev/readme/guides/record-key | `CURRENTS_RECORD_KEY` | - |
|
|
42
|
+
| `-p, --project-id` | `string` | The id of the project for reporting | `CURRENTS_PROJECT_ID` | - |
|
|
43
43
|
| `--machine-id` | `string` | Unique identifier of the machine running the tests. If not provided, it will be generated automatically. See: https://currents.dev/readme/readme?q=machineId | `CURRENTS_MACHINE_ID` | `[random-string]` |
|
|
44
|
-
| `--report-dir` | `string` | The
|
|
44
|
+
| `--report-dir` | `string` | The directory containng the test results created with one of the [supported](https://docs.currents.dev) reporters | `CURRENTS_REPORT_DIR` | `.currents-report-[timestamp]-[uuidv4]` |
|
|
45
45
|
| `--ci-build-id` | `string` | The id of the build to record the test run. Read more: https://currents.dev/readme/guides/ci-build-id | `CURRENTS_CI_BUILD_ID` | `auto:[random-string]` |
|
|
46
46
|
| `--debug` | `boolean` | Enable debug logs | `DEBUG="currents,currents:*"` | `falseu` |
|
|
47
47
|
| `-t, --tag` | `string` | Comma-separated tag(s) for recorded runs in Currents | `CURRENTS_TAG` | - |
|
|
@@ -50,10 +50,6 @@ Please note that all options apart from `--project-id` and `--key` are optional.
|
|
|
50
50
|
|
|
51
51
|
The configuration is also available by running the CLI command with the `--help` argument.
|
|
52
52
|
|
|
53
|
-
**Note:**
|
|
54
|
-
|
|
55
|
-
The `CI Build ID` and `Machine ID` will be generated automatically if not set. It is **important** to set the `CI Build ID` explicitly when the results from different machines are part of the same test run. Read more - [here](https://docs.currents.dev/guides/ci-build-id).
|
|
56
|
-
|
|
57
53
|
## Troubleshooting
|
|
58
54
|
|
|
59
55
|
Run the CLI command with the `--debug` argument or prefix it with `DEBUG="currents,currents:*"` to obtain detailed information about the command execution process.
|
package/dist/bin/index.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
${(t??[]).map(r=>` - ${r}`).join(`
|
|
11
11
|
`)}
|
|
12
12
|
`]:["Unexpected network error"]}var Ke=i.extend("http");async function $e(e,t=Fe){try{let r=await t().request(e);return Ke("network response: %o",{...Je.default.omit(r,"request","config"),url:r.config.url,method:r.config.method}),r}catch(r){let o=r;throw Ke("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}),Ve(o),o}}var Ye=i.extend("run"),Er=(0,qe.promisify)(Qe.gzip);async function We(e){try{Ye("Run params: %o",e);let t=await gr(JSON.stringify(e));return $e({url:"v2/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Ye("Failed to create the run:",t),t}}async function gr(e){try{return await Er(e)}catch(t){throw l("Failed to compress run payload:",t),t}}var pt=a(require("fs-extra")),lt=require("jest-cli"),dt=a(require("tmp"));var U=a(require("fs-extra")),y=a(require("path"));async function ze(e){let t=await _r(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??y.default.join(t,"config.json")}}async function _r(e){return e?(await j(e),e):fr(process.cwd(),".currents-report")}async function fr(e,t){let r=await U.default.readdir(e),o=null;for(let s of r){let m=y.default.join(e,s),p=await U.default.stat(m);p.isDirectory()&&s.startsWith(t)&&(!o||p.birthtime>o.birthtime)&&(o={name:s,birthtime:p.birthtime})}return o?o.name:null}async function j(e){try{return await U.default.pathExists(e)}catch{return l("Error checking if path exists:",l),!1}}async function Xe(e){let t=y.default.join(e,"instances");return Rr(t)}async function Rr(e){let t=await U.default.readdir(e),r=[];for(let o of t){let s=y.default.join(e,o);(await U.default.stat(s)).isFile()&&r.push(s)}return r}async function S(e){try{return await U.default.readJson(e)}catch(t){throw l("Error while reading JSON file: %s",e,t),l}}async function ce(e,t){try{return await U.default.writeFile(e,t,"utf8"),e}catch(r){throw l(`Error writing file at ${e}:`,r),r}}var V={};tr(V,{getNanoid:()=>Ir,userFacingNanoid:()=>me});var ue=require("nanoid"),Ze="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ir=(e=16)=>(0,ue.customAlphabet)(Ze,e)(),me=(0,ue.customAlphabet)(Ze,12);var ut=require("lodash");var et=require("lodash"),Cr=["bail","clearCache","clearMocks","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","prettierPath","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function tt(e){return(0,et.omit)(e,...Cr)}function rt(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 st=a(require("fs")),it=require("jest-config"),at=require("lodash"),pe=a(require("path"));function K(e,t){return(...r)=>new Promise((o,s)=>{let m=0,p=()=>{m++;try{let E=e(...r);o(E)}catch(E){if(m>=t.length)s(E);else{let I=t[m-1];setTimeout(p,I)}}};p()})}var ot=a(require("fs-extra")),Tr=a(require("path"));async function J(e){let t=await ot.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var nt=i.extend("jest-discovery");async function ct(e){try{let{config:t,configPath:r}=await(0,it.readInitialOptions)(e),o=(0,at.omit)(t,["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","detectLeaks","detectOpenHandles","reporters","logHeapUsage","listTests","notify","notifyMode","silent","verbose","watch","watchAll","watchman","watchPlugins","shard"]);if(o.rootDir&&Object.keys(o).length===1)return null;let s=pe.default.resolve(r?pe.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(o,null,2)}`;return nt("configFileContent: %O",m),st.default.writeFileSync(s,m),await K(J,[200,200,200,200,200,1e3])(s),s}catch(t){return l("Failed to recreate the config file"),nt("error %o",t),null}}async function mt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=tt(r),s=rt(o),m=r.config,p=await ct(m);return{cliArgs:[s,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(I=>!(0,ut.isEmpty)(I)),configFilePath:p}}var hr=i.extend("jest-discovery");async function Et(e,t){console.time(T("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await mt(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 S(s.name)}catch(s){return l("Failed to obtain the jest full test suite:",s),[]}finally{o&&pt.default.unlinkSync(o)}}var D=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var $=class extends D{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 D(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]),c=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: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"])}),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:${me()}`}}var ht=require("@currents/commit-info"),Ot=require("lodash");var q=require("lodash");var le=i.extend("ci-git");function Tt(e){le("git commit existing info: %O",e);let t=It();le("commit info from provider environment variables: %O",t);let r=(0,q.transform)(e,(o,s,m)=>{let p=s||(t?t[m]:null);return o[m]=(0,q.defaultTo)(p,null)});return le("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=a(require("getos")),At=require("lodash"),R=require("os"),St=require("util"),Kr=async()=>{if((0,R.platform)()==="linux")try{let e=await(0,St.promisify)(Ut.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,R.release)()}catch{return(0,R.release)()}return(0,R.release)()},Jr=async()=>{let e=await Kr();return{osName:(0,R.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,R.freemem)(),total:(0,R.totalmem)()}}},Lt=(0,At.memoize)(Jr);var Nt={name:"@currents/cmd",version:"1.0.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/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&&_e();let t=await ze(e);fe(Wr(t.reportDir)),i("Reporter options: %o",t),B("Report directory: %s",t.reportDir);let r=await S(t.configFilePath);i("Report config: %o",r);let o=await Xe(t.reportDir);i("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let s=qr(t.reportDir),m=await j(s),p=Qr(t.reportDir),E=null;if(m){let C=await S(s);d("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate}),await j(p)&&(E=await S(p),i("Full test suite file detected: %s",p))}if(E)i("The discovery stage was skipped");else{if(E=await gt(r).getFullTestSuite(),zr(E))throw new Error("Failed to discover the full test suite!");await ce(p,JSON.stringify(E))}let I=E.length===1?E[0].name:null,Z={currents:e},L={type:r.framework,version:r.frameworkVersion,clientVersion:Q},ge=V.userFacingNanoid(),M=Ct(e.ciBuildId),A={};for await(let C of o){let O=await S(C);A[O.groupId]||(A[O.groupId]=[]),A[O.groupId].push(O)}for await(let C of Object.keys(A)){let O=A[C],ee=C;I&&(i("Default group found: %s, overwriting the group in the results",I),ee=I,O=O.map(N=>({...N,groupId:I})));try{let N=await Yr({ci:M,group:ee,instances:O,fullTestSuite:E,config:Z,machineId:ge,framework:L});i("Api response: %o",N),B("[%s] Run created: %s",ee,N.runUrl);let Qt={response:N,isoDate:new Date().toISOString()};await ce(s,JSON.stringify(Qt)),i("Marker file %s: %s",m?"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:m,framework:p}){let E=await Pt(),I=await Lt(),Z={browserName:"node",browserVersion:bt.default.coerce(process.version)?.version},{currents:L}=s,M={platform:{...Z,...I},ci:e,commit:E,group:t,fullTestSuite:o,config:s,projectId:L.projectId,recordKey:L.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:L.tag??[],machineId:L.machineId??m,framework:p,instances:r};return i("Creating run: %o",(0,Dt.mapValues)(M,(A,C)=>C==="recordKey"?"******":A)),We(M)}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=a(require("fs"));var jt=require("@commander-js/extra-typings"),Vt=a(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=de())=>e.version(Q),Zr=`
|
|
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:${me()}`}}var ht=require("@currents/commit-info"),Ot=require("lodash");var q=require("lodash");var le=i.extend("ci-git");function Tt(e){le("git commit existing info: %O",e);let t=It();le("commit info from provider environment variables: %O",t);let r=(0,q.transform)(e,(o,s,m)=>{let p=s||(t?t[m]:null);return o[m]=(0,q.defaultTo)(p,null)});return le("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=a(require("getos")),At=require("lodash"),R=require("os"),St=require("util"),Kr=async()=>{if((0,R.platform)()==="linux")try{let e=await(0,St.promisify)(Ut.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,R.release)()}catch{return(0,R.release)()}return(0,R.release)()},Jr=async()=>{let e=await Kr();return{osName:(0,R.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,R.freemem)(),total:(0,R.totalmem)()}}},Lt=(0,At.memoize)(Jr);var Nt={name:"@currents/cmd",version:"1.0.0-beta.1",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^7.0.2","@types/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&&_e();let t=await ze(e);fe(Wr(t.reportDir)),i("Reporter options: %o",t),B("Report directory: %s",t.reportDir);let r=await S(t.configFilePath);i("Report config: %o",r);let o=await Xe(t.reportDir);i("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let s=qr(t.reportDir),m=await j(s),p=Qr(t.reportDir),E=null;if(m){let C=await S(s);d("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate}),await j(p)&&(E=await S(p),i("Full test suite file detected: %s",p))}if(E)i("The discovery stage was skipped");else{if(E=await gt(r).getFullTestSuite(),zr(E))throw new Error("Failed to discover the full test suite!");await ce(p,JSON.stringify(E))}let I=E.length===1?E[0].name:null,Z={currents:e},L={type:r.framework,version:r.frameworkVersion,clientVersion:Q},ge=V.userFacingNanoid(),M=Ct(e.ciBuildId),A={};for await(let C of o){let O=await S(C);A[O.groupId]||(A[O.groupId]=[]),A[O.groupId].push(O)}for await(let C of Object.keys(A)){let O=A[C],ee=C;I&&(i("Default group found: %s, overwriting the group in the results",I),ee=I,O=O.map(N=>({...N,groupId:I})));try{let N=await Yr({ci:M,group:ee,instances:O,fullTestSuite:E,config:Z,machineId:ge,framework:L});i("Api response: %o",N),B("[%s] Run created: %s",ee,N.runUrl);let Qt={response:N,isoDate:new Date().toISOString()};await ce(s,JSON.stringify(Qt)),i("Marker file %s: %s",m?"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:m,framework:p}){let E=await Pt(),I=await Lt(),Z={browserName:"node",browserVersion:bt.default.coerce(process.version)?.version},{currents:L}=s,M={platform:{...Z,...I},ci:e,commit:E,group:t,fullTestSuite:o,config:s,projectId:L.projectId,recordKey:L.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:L.tag??[],machineId:L.machineId??m,framework:p,instances:r};return i("Creating run: %o",(0,Dt.mapValues)(M,(A,C)=>C==="recordKey"?"******":A)),We(M)}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=a(require("fs"));var jt=require("@commander-js/extra-typings"),Vt=a(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=de())=>e.version(Q),Zr=`
|
|
14
14
|
----------------------------------------------------
|
|
15
15
|
\u{1F4D6} Documentation: https://docs.currents.dev
|
|
16
16
|
\u{1F919} Support: support@currents.dev
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
${(r??[]).map(t=>` - ${t}`).join(`
|
|
8
8
|
`)}
|
|
9
9
|
`]:["Unexpected network error"]}var Ae=i.extend("http");async function Ne(e,r=Ce){try{let t=await r().request(e);return Ae("network response: %o",{...Se.default.omit(t,"request","config"),url:t.config.url,method:t.config.method}),t}catch(t){let o=t;throw Ae("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}),Pe(o),o}}var Le=i.extend("run"),br=(0,De.promisify)(Be.gzip);async function be(e){try{Le("Run params: %o",e);let r=await Mr(JSON.stringify(e));return Ne({url:"v2/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:r}).then(t=>t.data)}catch(r){throw Le("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=c(require("fs"));var Ko=i.extend("config");var vr=null;function Me(){return vr}var Qe=c(require("fs-extra")),We=require("jest-cli"),qe=c(require("tmp"));var T=c(require("fs-extra")),S=c(require("path"));async function ye(e){let r=await xr(e?.reportDir);if(!r)throw new Error("Failed to find the report dir");return{reportDir:r,configFilePath:e?.configFilePath??S.default.join(r,"config.json")}}async function xr(e){return e?(await x(e),e):wr(process.cwd(),".currents-report")}async function wr(e,r){let t=await T.default.readdir(e),o=null;for(let n of t){let m=S.default.join(e,n),E=await T.default.stat(m);E.isDirectory()&&n.startsWith(r)&&(!o||E.birthtime>o.birthtime)&&(o={name:n,birthtime:E.birthtime})}return o?o.name:null}async function x(e){try{return await T.default.pathExists(e)}catch{return _("Error checking if path exists:",_),!1}}async function ve(e){let r=S.default.join(e,"instances");return Hr(r)}async function Hr(e){let r=await T.default.readdir(e),t=[];for(let o of r){let n=S.default.join(e,o);(await T.default.stat(n)).isFile()&&t.push(n)}return t}async function h(e){try{return await T.default.readJson(e)}catch(r){throw _("Error while reading JSON file: %s",e,r),_}}async function X(e,r){try{return await T.default.writeFile(e,r,"utf8"),e}catch(t){throw _(`Error writing file at ${e}:`,t),t}}var w={};ne(w,{getNanoid:()=>Fr,userFacingNanoid:()=>ee});var Z=require("nanoid"),xe="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Fr=(e=16)=>(0,Z.customAlphabet)(xe,e)(),ee=(0,Z.customAlphabet)(xe,12);var Ye=require("lodash");var we=require("lodash"),Gr=["bail","clearCache","clearMocks","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","prettierPath","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function He(e){return(0,we.omit)(e,...Gr)}function Fe(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 je=c(require("fs")),Ve=require("jest-config"),Ke=require("lodash"),re=c(require("path"));function H(e,r){return(...t)=>new Promise((o,n)=>{let m=0,E=()=>{m++;try{let p=e(...t);o(p)}catch(p){if(m>=r.length)n(p);else{let I=r[m-1];setTimeout(E,I)}}};E()})}var Ge=c(require("fs-extra")),kr=c(require("path"));async function F(e){let r=await Ge.default.pathExists(e);if(!r)throw new Error("File does not exist");return r}var ke=i.extend("jest-discovery");async function Je(e){try{let{config:r,configPath:t}=await(0,Ve.readInitialOptions)(e),o=(0,Ke.omit)(r,["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","detectLeaks","detectOpenHandles","reporters","logHeapUsage","listTests","notify","notifyMode","silent","verbose","watch","watchAll","watchman","watchPlugins","shard"]);if(o.rootDir&&Object.keys(o).length===1)return null;let n=re.default.resolve(t?re.default.dirname(t):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(o,null,2)}`;return ke("configFileContent: %O",m),je.default.writeFileSync(n,m),await H(F,[200,200,200,200,200,1e3])(n),n}catch(r){return _("Failed to recreate the config file"),ke("error %o",r),null}}async function $e(e){let r="!!##ThisPatternWillNotMatchAnyTestName##!!",t=e.options,o=He(t),n=Fe(o),m=t.config,E=await Je(m);return{cliArgs:[n,"--testNamePattern",r,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",E?`--config=${E}`:"",...e.args].filter(I=>!(0,Ye.isEmpty)(I)),configFilePath:E}}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 h(n.name)}catch(n){return _("Failed to obtain the jest full test suite:",n),[]}finally{o&&Qe.default.unlinkSync(o)}}var A=class{constructor(r){this.config=r}async getFullTestSuite(){return[]}};var G=class extends A{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 A(e)}}var u=require("lodash");var k=i.extend("ci"),Vr=(e,...r)=>(0,u.chain)(r).compact().join(e).value(),Kr=(e,r)=>(0,u.set)(e,(0,u.camelCase)(r),process.env[r]),a=e=>(0,u.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,u.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,u.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,u.findKey)(tt,r=>{if((0,u.isString)(r))return e[r];if((0,u.isFunction)(r))return r()})}var Ze=()=>({appveyor:a(["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:a(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:a(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:a(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:a(["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:a(["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:a(["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:a(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:a(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:a(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:a(["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:a(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:a(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:a(["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:a(["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:a(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:a(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:a(["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:a(["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:a(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:a(["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:a(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:a(["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,u.chain)(e()).get(r).value():{}};function st(){return(0,u.chain)(Ze()).omitBy(u.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 te=i.extend("ci-git");function nr(e){te("git commit existing info: %O",e);let r=tr();te("commit info from provider environment variables: %O",r);let t=(0,j.transform)(e,(o,n,m)=>{let E=n||(r?r[m]:null);return o[m]=(0,j.defaultTo)(E,null)});return te("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=c(require("getos")),ur=require("lodash"),d=require("os"),mr=require("util"),mt=async()=>{if((0,d.platform)()==="linux")try{let e=await(0,mr.promisify)(cr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,d.release)()}catch{return(0,d.release)()}return(0,d.release)()},Et=async()=>{let e=await mt();return{osName:(0,d.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,d.freemem)(),total:(0,d.totalmem)()}}},Er=(0,ur.memoize)(Et);var lr={name:"@currents/cmd",version:"1.0.0-beta.
|
|
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,u.chain)(e()).get(r).value():{}};function st(){return(0,u.chain)(Ze()).omitBy(u.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 te=i.extend("ci-git");function nr(e){te("git commit existing info: %O",e);let r=tr();te("commit info from provider environment variables: %O",r);let t=(0,j.transform)(e,(o,n,m)=>{let E=n||(r?r[m]:null);return o[m]=(0,j.defaultTo)(E,null)});return te("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=c(require("getos")),ur=require("lodash"),d=require("os"),mr=require("util"),mt=async()=>{if((0,d.platform)()==="linux")try{let e=await(0,mr.promisify)(cr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,d.release)()}catch{return(0,d.release)()}return(0,d.release)()},Et=async()=>{let e=await mt();return{osName:(0,d.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,d.freemem)(),total:(0,d.totalmem)()}}},Er=(0,ur.memoize)(Et);var lr={name:"@currents/cmd",version:"1.0.0-beta.1",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^7.0.2","@types/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=lr.version;async function pt(){let e=Me();if(!e)throw new Error("Currents config is missing!");e.debug&&ie();let r=await ye(e);ae(dt(r.reportDir)),i("Reporter options: %o",r),W("Report directory: %s",r.reportDir);let t=await h(r.configFilePath);i("Report config: %o",t);let o=await ve(r.reportDir);i("Found %d instance results in the reportDir: %s",o.length,r.reportDir);let n=gt(r.reportDir),m=await x(n),E=Rt(r.reportDir),p=null;if(m){let f=await h(n);l("Marker file detected. The report was already uploaded: %o",{runUrl:f.response.runUrl,isoDate:f.isoDate}),await x(E)&&(p=await h(E),i("Full test suite file detected: %s",E))}if(p)i("The discovery stage was skipped");else{if(p=await Xe(t).getFullTestSuite(),It(p))throw new Error("Failed to discover the full test suite!");await X(E,JSON.stringify(p))}let I=p.length===1?p[0].name:null,K={currents:e},U={type:t.framework,version:t.frameworkVersion,clientVersion:pr},oe=w.userFacingNanoid(),N=or(e.ciBuildId),O={};for await(let f of o){let C=await h(f);O[C.groupId]||(O[C.groupId]=[]),O[C.groupId].push(C)}for await(let f of Object.keys(O)){let C=O[f],J=f;I&&(i("Default group found: %s, overwriting the group in the results",I),J=I,C=C.map(P=>({...P,groupId:I})));try{let P=await _t({ci:N,group:J,instances:C,fullTestSuite:p,config:K,machineId:oe,framework:U});i("Api response: %o",P),W("[%s] Run created: %s",J,P.runUrl);let Rr={response:P,isoDate:new Date().toISOString()};await X(n,JSON.stringify(Rr)),i("Marker file %s: %s",m?"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:m,framework:E}){let p=await ar(),I=await Er(),K={browserName:"node",browserVersion:gr.default.coerce(process.version)?.version},{currents:U}=n,N={platform:{...K,...I},ci:e,commit:p,group:r,fullTestSuite:o,config:n,projectId:U.projectId,recordKey:U.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:U.tag??[],machineId:U.machineId??m,framework:E,instances:t};return i("Creating run: %o",(0,_r.mapValues)(N,(O,f)=>f==="recordKey"?"******":O)),be(N)}function gt(e){return V.default.join(e,"upload.marker.json")}function Rt(e){return V.default.join(e,"fullTestSuite.json")}function dt(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});
|
|
11
11
|
/*! For license information please see index.js.LEGAL.txt */
|
|
12
12
|
//# sourceMappingURL=index.js.map
|