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