@currents/cmd 1.9.4 → 1.9.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/index.js +7 -7
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/dist/bin/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var ni=Object.create;var We=Object.defineProperty;var ii=Object.getOwnPropertyDescriptor;var si=Object.getOwnPropertyNames;var ai=Object.getPrototypeOf,ci=Object.prototype.hasOwnProperty;var mi=(e,t)=>{for(var r in t)We(e,r,{get:t[r],enumerable:!0})},pi=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of si(t))!ci.call(e,n)&&n!==r&&We(e,n,{get:()=>t[n],enumerable:!(o=ii(t,n))||o.enumerable});return e};var d=(e,t,r)=>(r=e!=null?ni(ai(e)):{},pi(t||!e||!e.__esModule?We(r,"default",{value:e,enumerable:!0}):r,e));var Lg=require("source-map-support/register");var ti=require("@commander-js/extra-typings");var Gt={name:"@currents/cmd",version:"1.9.
|
|
2
|
+
"use strict";var ni=Object.create;var We=Object.defineProperty;var ii=Object.getOwnPropertyDescriptor;var si=Object.getOwnPropertyNames;var ai=Object.getPrototypeOf,ci=Object.prototype.hasOwnProperty;var mi=(e,t)=>{for(var r in t)We(e,r,{get:t[r],enumerable:!0})},pi=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of si(t))!ci.call(e,n)&&n!==r&&We(e,n,{get:()=>t[n],enumerable:!(o=ii(t,n))||o.enumerable});return e};var d=(e,t,r)=>(r=e!=null?ni(ai(e)):{},pi(t||!e||!e.__esModule?We(r,"default",{value:e,enumerable:!0}):r,e));var Lg=require("source-map-support/register");var ti=require("@commander-js/extra-typings");var Gt={name:"@currents/cmd",version:"1.9.5-beta.0",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",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":"^10.0.1","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.16","@types/node":"^22.13.14","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.9"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.12.0","axios-retry":"^4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^16.5.0",execa:"^9.5.1","fs-extra":"^11.3.0",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.7.1","source-map-support":"^0.5.21",tmp:"^0.2.5","tmp-promise":"^3.0.3","ts-pattern":"^5.7.0",unzipper:"^0.12.3",uuid:"^11.1.0",xml2js:"^0.6.2"},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=Gt.version;var At=require("@commander-js/extra-typings");var di=[];function ze(e){di.push(e)}var w=d(require("chalk")),L=d(require("util"));var Qe=require("debug"),li=d(require("fs-extra")),s=(0,Qe.debug)("currents"),fi=null;function Ht(){Qe.debug.enable("currents,currents:*")}function jt(e){fi=e}var Kt=[],$t=[];var fe=(...e)=>{let t=L.default.format(...e);ze(t),console.log(t)},gi=(...e)=>{let t=L.default.format(...e);ze(t),console.error(t)},x=fe,C=(...e)=>{let t=L.default.format(...e);return $t.push(t),s("WARNING: ",t),fe(w.default.bgYellow.black(" WARNING "),t)},q=(...e)=>{let t=L.default.format(...Vt(e));return s("WARNING: ",L.default.format(...e)),fe(w.default.bgYellow.black(" WARNING "),t)},ge=(...e)=>fe(w.default.green.bold(L.default.format(...e))),h=(...e)=>{let t=L.default.format(...Vt(e));return Kt.push(t),s("ERROR: ",L.default.format(...e)),gi(w.default.bgRed.white(" ERROR "),t)};var Vt=e=>e.map(t=>t instanceof Error?t.message:t),Ce=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
3
|
`)),Ia=w.default.cyan,_a=w.default.blueBright,Ta=w.default.red,ya=w.default.yellow,Oa=w.default.green,wa=w.default.gray,Pa=w.default.white,ba=w.default.black,xa=w.default.magenta,g=w.default.dim,Sa=w.default.bold;var cn=d(require("chalk"));function Jt(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function he(e){return Jt(e,["apiKey"])}function T(e){return Jt(e,["recordKey","key"])}var ee=class extends Error{};var H=d(require("fs-extra")),Re=require("path"),qt=require("uuid");async function Y(e){try{return await H.default.readJson(e)}catch(t){throw h("Error while reading JSON file: %s",e,t),h}}async function W(e,t){try{return await H.default.writeFile(e,t,"utf8"),e}catch(r){throw h(`Error writing file at ${e}:`,r),r}}async function Ee(e,t){try{try{return await H.default.access(e),e}catch{return await H.default.writeFile(e,t,"utf8"),e}}catch(r){throw h(`Error writing file at ${e}:`,r),r}}async function Yt(e,t){if(t){await H.default.ensureDir(e);return}let r=(0,Re.dirname)(e);await H.default.ensureDir(r)}function hi(){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=(0,qt.v4)();return`${e}-${t}`}async function Wt(e,t){let r=hi(),o=(0,Re.join)(e,t,r);return Ie(o)}async function Ie(e){try{return await H.default.ensureDir(e),s("Folder created",e),e}catch(t){throw h(`Failed to create folder at ${e}:`,t),t}}var zt=d(require("crypto"));function _e(e){return zt.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var Te={};mi(Te,{getNanoid:()=>Ri,userFacingNanoid:()=>Ze});var Xe=require("nanoid"),Qt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ri=(e=16)=>(0,Xe.customAlphabet)(Qt,e)(),Ze=(0,Xe.customAlphabet)(Qt,12);function Xt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function y(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function Ei(e,t){return e[t].cli}function Ii(e,t){return e[t].name}function M(e,t,r,o,n){let a={...Xt(o),...Xt(r())};return t.forEach(c=>{if(!a[c])throw h(`${Ii(e,c)} is required for Currents Reporter. Use the following methods to set the value:
|
|
4
4
|
- as environment variable: ${g(y(e,c))}
|
|
5
5
|
- as CLI flag of the command: ${g(Ei(e,c))}`),new ee("Missing required config variable")}),typeof n=="function"&&n(a),a}var _i={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ti={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"}},B={..._i,...Ti};function Zt(){return{apiKey:process.env[B.apiKey.env],debug:!!process.env[B.debug.env]}}var yi=s.extend("config"),Oi=["apiKey","projectId"],wi=e=>{let{ciBuildId:t,tag:r,branch:o}=e;if(!([t,r,o].filter(Boolean).length===1||r&&o&&!t))throw h('"ciBuildId", "tag", "branch" or a combination of "tag" and "branch" are expected to be provided'),new ee("Missing or invalid parameters")},et=null;function er(e){et=M(B,Oi,Zt,e,wi),yi("Resolved config: %o",he(et))}function ye(){return et}var Sr=require("fs/promises");var Rr=d(require("lodash"));var cr=d(require("axios")),mr=d(require("axios-retry")),pr=d(require("lodash"));var tr=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",rr=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",or=()=>3e4;var tt=require("axios"),rt=d(require("pretty-ms"));var nr=s.extend("http"),Oe=e=>[3*1e3,15*1e3,30*1e3][e-1],ir=e=>(nr("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,tt.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,tt.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),we=()=>3;function sr(e,t,r){nr("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,rt.default)(Oe(e)),e,we()),C("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,rt.default)(Oe(e)),e,we())}var ot=s.extend("http");var nt={api:null,restApi:null};function Pi(e){let t=e==="api"?tr():rr();ot("client base url: %s",t);let r=cr.default.create({baseURL:t,timeout:or(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":Z}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let a={...pr.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?ot("network request retry: %o",ar({...a,baseURL:t,isRetry:!0})):ot("network request: %o",ar(a)),o}),(0,mr.default)(r,{retries:we(),retryCondition:ir,retryDelay:Oe,shouldResetTimeout:!0,onRetry:sr}),r}function ur(e){return nt[e]===null&&(nt[e]=Pi(e)),nt[e]}function ar(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":bi(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function bi(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var fr=require("axios"),gr=d(require("lodash")),S=require("ts-pattern");function Cr(e){(0,S.match)(e).when(fr.isAxiosError,xi).otherwise(()=>{C("Unexpected error while sending network request: %s",e)})}function xi(e){return(0,S.match)(e).with({code:"ECONNABORTED"},()=>{C("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{C("Network connection aborted")}).with({code:"ECONNRESET"},()=>{C("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{C("Network connection timeout")}).with({response:S.P.not(S.P.nullish)},t=>{Si(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{C(`[currents] Unexpected network error: %s
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
%O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var dr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function lr(e,t){return gr.default.isString(e)?t?.length===0?[e]:[e,`
|
|
10
10
|
${(t??[]).map(r=>` - ${r}`).join(`
|
|
11
11
|
`)}
|
|
12
|
-
`]:["Unexpected network error"]}var hr=s.extend("http");async function K(e,t,r=ur){try{let o=await r(e).request(t);return hr("network response: %o",{...Rr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw hr("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}),Cr(n),n}}var te=s.extend("api");async function Ir(e){try{return te("Request params: %o",T(e)),K("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw te("Failed to create cache:",t),t}}async function _r(e){try{return te("Request params: %o",e),K("api",{url:"cache/v2/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw te("Failed to retrieve cache:",t),t}}async function Tr(e){try{return te("Request params: %o",e),K("api",{url:"cache/meta",method:"POST",data:e}).then(t=>t.data)}catch(t){throw te("Failed to retrieve reference cache meta:",t),t}}var Or=require("util"),wr=require("zlib");var yr=s.extend("api"),Ui=(0,Or.promisify)(wr.gzip);async function Pr(e){try{yr("Run params: %o",T(e));let t=await vi(JSON.stringify(e));return K("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw yr("Failed to create the run:",t),t}}async function vi(e){try{return await Ui(e)}catch(t){throw h("Failed to compress run payload:",t),t}}var br=s.extend("api");async function xr(e,t){try{return br("Run params: %o",t),K("restApi",{url:"v1/runs/find",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw br("Failed to obtain run data:",r),r}}async function it(){try{let e=ye();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 xr(e.apiKey,t);await Di(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw s("Failed to get run data"),e}}async function Di(e,t){let r=JSON.stringify(e,null,2);t.output?(await Yt(t.output),await(0,Sr.writeFile)(t.output,r,"utf-8"),x(`Successfully written to ${t.output}`)):x(r)}var go=require("axios"),_t=d(require("path"));var A=require("@commander-js/extra-typings");var Ni={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Li={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"},continue:{name:"Continue when upload path missing",cli:"--continue"}},Mi={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"},continue:{name:"Continue on cache miss",cli:"--continue"}},j={...Ni,...Li,...Mi};function st(){return{recordKey:process.env[j.recordKey.env],debug:process.env[j.debug.env]}}var Ar=s.extend("config"),Ur=["recordKey"],z;function vr(e){z={type:"SET_COMMAND_CONFIG",values:M(j,Ur,st,e)},Ar("Resolved config: %o",{...z,values:T(z.values)})}function Dr(e){z={type:"GET_COMMAND_CONFIG",values:M(j,Ur,st,e)},Ar("Resolved config: %o",{...z,values:T(z.values)})}function $(){return z}function Nr(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,continue:e.continue}}function Lr(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,continue:e.continue}}var Mr=require("@commander-js/extra-typings");function re(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function D(e,t){try{t.debug&&Ht(),await e(t),process.exit(0)}catch(r){h(r.message);let o=r instanceof Mr.CommanderError?r.exitCode:1;process.exit(o)}}var at=new A.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(y(j,"recordKey")),ct=new A.Option("--debug","Enable debug logging").env(y(j,"debug")).default(!1),mt=new A.Option("--id <id>","The ID the data is saved under in the cache"),Br=new A.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(re),Pe=(t=>(t.lastRun="last-run",t))(Pe||{}),pt=new A.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(Pe)),kr=new A.Option("--output-dir <dir>","Path to the directory where output will be written"),Fr=new A.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),ce=".currents_env",Gr=new A.Option("--preset-output <path>","Path to the file containing the preset output").default(ce),ut=new A.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(Hr),dt=new A.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(Hr);function Hr(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new A.InvalidArgumentError("A positive integer is expected.");return t}var Kr=new A.Option("--continue","Continue the script execution if the cache is not found").default(!1),jr=new A.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var I=require("lodash");var be=s.extend("ci"),Bi=(e,...t)=>(0,I.chain)(t).compact().join(e).value(),ki=(e,t)=>(0,I.set)(e,(0,I.camelCase)(t),process.env[t]),E=e=>(0,I.transform)(e,ki,{}),Fi=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Gi=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Hi=()=>(0,I.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Ki=()=>process.env.bamboo_buildNumber,ji=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,$i=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Vi=()=>(0,I.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Ji=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),qi=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Yi=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Wi=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,zi={appveyor:"APPVEYOR",azure:Gi,awsCodeBuild:Hi,bamboo:Ki,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:ji,codeshipPro:$i,concourse:Vi,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Ji,goCD:"GO_JOB_NAME",googleCloud:qi,jenkins:Yi,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Fi,travis:"TRAVIS",wercker:Wi,netlify:"NETLIFY",layerci:"LAYERCI"};function Qi(){let{env:e}=process;return(0,I.findKey)(zi,t=>{if((0,I.isString)(t))return e[t];if((0,I.isFunction)(t))return t()})}var $r=()=>({appveyor:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:E(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:E(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:E(["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:E(["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:E(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:E(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:E(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:E(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:E(["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:E(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:E(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:E(["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:E(["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:E(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:E(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:E(["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:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:E(["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:E(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:E(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Xi=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Bi(`
|
|
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}}},Vr=e=>{let t=Jr();return t?(0,I.chain)(e()).get(t).value():{}};function Zi(){return(0,I.chain)($r()).omitBy(I.isNull).keys().value()}function es(e){return e&&Zi().includes(e)}function Jr(){let e=Qi();return be("detected CI provider name: %s",e),e||null}function ts(){return Vr($r)}function qr(){return Vr(Xi)}function oe(e){let t=ts(),r=Jr(),o=rs(e,r);return be("detected CI provider: %s",r),be("detected CI params: %O",t),be("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function rs(e,t){return e?{source:"user",value:e}:es(t)?{source:"server",value:null}:{source:"random",value:`auto:${Ze()}`}}var Yr=d(require("archiver")),Wr=d(require("fs-extra")),lt=d(require("path")),zr=d(require("unzipper"));var os=50*1024*1024;async function Qr(e,t=os){return new Promise((r,o)=>{let n=(0,Yr.default)("zip",{zlib:{level:9}}),a=[],c=0;n.on("data",u=>{a.push(u),c+=u.length,c>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",u=>{u.code==="ENOENT"?C(u):o(u)}),n.on("error",u=>o(u)),n.on("end",()=>{let u=Buffer.concat(a);r(u)});let p=async u=>{let R=process.cwd(),l=lt.default.normalize(u),f=lt.default.relative(R,l),_=await Wr.default.stat(u);_.isDirectory()?n.directory(u,f):n.file(u,{name:f,stats:_})};(async u=>{for(let R of u)await p(R);await n.finalize()})(e).catch(o)})}async function Xr(e,t){return zr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}var oo=d(require("async-retry")),no=require("axios");var Zr=d(require("axios")),eo=require("https-proxy-agent"),to=d(require("proxy-from-env"));var ns=s.extend("axios");function ft(e={}){let t=Zr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),a=to.default.getProxyForUrl(n);return a&&(ns("Using HTTP proxy %s for %s ",a,n),o.proxy=!1,o.httpsAgent=is(a)),o}),t}var xe=null;function is(e){return xe||(xe=new eo.HttpsProxyAgent(e),xe)}var Ae=s.extend("upload"),Se=5;async function gt(e,t,r){return Ae("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),as(e.buffer,e.uploadUrl,t,r)}async function ss(e,t,r,o){return ft().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function Ct(e,t){try{let r=await ft().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,no.isAxiosError)(r)&&Ae("Failed to download %s: %s",e,r.message),r}}async function as(...e){await(0,oo.default)(async()=>{await ss(...e)},{retries:Se,onRetry:(t,r)=>{if(Ae("Upload failed %d out of %d attempts: %s",r,Se,t.message),r===Se){h(`Cannot upload after ${r} times: ${t.message}`);return}C(`Upload failed ${r} out of ${Se} attempts: ${t.message}`)}})}var ht=e=>({total:t,loaded:r})=>{};function ro(e){return e/1e3/1e3}var It=d(require("lodash"));var V=d(require("path")),Et=d(require("globby"));var io=require("lodash");function Rt({config:e,cacheId:t,orgId:r,path:o,ci:n,cacheKey:a,metaCacheKey:c}){let p={id:t,orgId:r,config:(0,io.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString(),cacheKey:a,metaCacheKey:c};return Buffer.from(JSON.stringify(p))}function so(e,t){e instanceof Error?q("%s. %s.",t,e.message):q("%s. %s.",t,"Unknown error")}var ao=async e=>{let t=V.default.resolve(e??"./test-results"),r=[V.default.
|
|
12
|
+
`]:["Unexpected network error"]}var hr=s.extend("http");async function j(e,t,r=ur){try{let o=await r(e).request(t);return hr("network response: %o",{...Rr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw hr("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}),Cr(n),n}}var te=s.extend("api");async function Ir(e){try{return te("Request params: %o",T(e)),j("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw te("Failed to create cache:",t),t}}async function _r(e){try{return te("Request params: %o",e),j("api",{url:"cache/v2/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw te("Failed to retrieve cache:",t),t}}async function Tr(e){try{return te("Request params: %o",e),j("api",{url:"cache/meta",method:"POST",data:e}).then(t=>t.data)}catch(t){throw te("Failed to retrieve reference cache meta:",t),t}}var Or=require("util"),wr=require("zlib");var yr=s.extend("api"),Ui=(0,Or.promisify)(wr.gzip);async function Pr(e){try{yr("Run params: %o",T(e));let t=await vi(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 yr("Failed to create the run:",t),t}}async function vi(e){try{return await Ui(e)}catch(t){throw h("Failed to compress run payload:",t),t}}var br=s.extend("api");async function xr(e,t){try{return br("Run params: %o",t),j("restApi",{url:"v1/runs/find",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw br("Failed to obtain run data:",r),r}}async function it(){try{let e=ye();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 xr(e.apiKey,t);await Di(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw s("Failed to get run data"),e}}async function Di(e,t){let r=JSON.stringify(e,null,2);t.output?(await Yt(t.output),await(0,Sr.writeFile)(t.output,r,"utf-8"),x(`Successfully written to ${t.output}`)):x(r)}var go=require("axios"),_t=d(require("path"));var A=require("@commander-js/extra-typings");var Ni={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Li={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"},continue:{name:"Continue when upload path missing",cli:"--continue"}},Mi={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"},continue:{name:"Continue on cache miss",cli:"--continue"}},K={...Ni,...Li,...Mi};function st(){return{recordKey:process.env[K.recordKey.env],debug:process.env[K.debug.env]}}var Ar=s.extend("config"),Ur=["recordKey"],z;function vr(e){z={type:"SET_COMMAND_CONFIG",values:M(K,Ur,st,e)},Ar("Resolved config: %o",{...z,values:T(z.values)})}function Dr(e){z={type:"GET_COMMAND_CONFIG",values:M(K,Ur,st,e)},Ar("Resolved config: %o",{...z,values:T(z.values)})}function $(){return z}function Nr(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,continue:e.continue}}function Lr(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,continue:e.continue}}var Mr=require("@commander-js/extra-typings");function re(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function D(e,t){try{t.debug&&Ht(),await e(t),process.exit(0)}catch(r){h(r.message);let o=r instanceof Mr.CommanderError?r.exitCode:1;process.exit(o)}}var at=new A.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(y(K,"recordKey")),ct=new A.Option("--debug","Enable debug logging").env(y(K,"debug")).default(!1),mt=new A.Option("--id <id>","The ID the data is saved under in the cache"),Br=new A.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(re),Pe=(t=>(t.lastRun="last-run",t))(Pe||{}),pt=new A.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(Pe)),kr=new A.Option("--output-dir <dir>","Path to the directory where output will be written"),Fr=new A.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),ce=".currents_env",Gr=new A.Option("--preset-output <path>","Path to the file containing the preset output").default(ce),ut=new A.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(Hr),dt=new A.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(Hr);function Hr(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new A.InvalidArgumentError("A positive integer is expected.");return t}var jr=new A.Option("--continue","Continue the script execution if the cache is not found").default(!1),Kr=new A.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var I=require("lodash");var be=s.extend("ci"),Bi=(e,...t)=>(0,I.chain)(t).compact().join(e).value(),ki=(e,t)=>(0,I.set)(e,(0,I.camelCase)(t),process.env[t]),E=e=>(0,I.transform)(e,ki,{}),Fi=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Gi=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Hi=()=>(0,I.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),ji=()=>process.env.bamboo_buildNumber,Ki=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,$i=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Vi=()=>(0,I.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Ji=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),qi=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Yi=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Wi=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,zi={appveyor:"APPVEYOR",azure:Gi,awsCodeBuild:Hi,bamboo:ji,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Ki,codeshipPro:$i,concourse:Vi,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Ji,goCD:"GO_JOB_NAME",googleCloud:qi,jenkins:Yi,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Fi,travis:"TRAVIS",wercker:Wi,netlify:"NETLIFY",layerci:"LAYERCI"};function Qi(){let{env:e}=process;return(0,I.findKey)(zi,t=>{if((0,I.isString)(t))return e[t];if((0,I.isFunction)(t))return t()})}var $r=()=>({appveyor:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:E(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:E(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:E(["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:E(["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:E(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:E(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:E(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:E(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:E(["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:E(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:E(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:E(["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:E(["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:E(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:E(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:E(["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:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:E(["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:E(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:E(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Xi=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Bi(`
|
|
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}}},Vr=e=>{let t=Jr();return t?(0,I.chain)(e()).get(t).value():{}};function Zi(){return(0,I.chain)($r()).omitBy(I.isNull).keys().value()}function es(e){return e&&Zi().includes(e)}function Jr(){let e=Qi();return be("detected CI provider name: %s",e),e||null}function ts(){return Vr($r)}function qr(){return Vr(Xi)}function oe(e){let t=ts(),r=Jr(),o=rs(e,r);return be("detected CI provider: %s",r),be("detected CI params: %O",t),be("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function rs(e,t){return e?{source:"user",value:e}:es(t)?{source:"server",value:null}:{source:"random",value:`auto:${Ze()}`}}var Yr=d(require("archiver")),Wr=d(require("fs-extra")),lt=d(require("path")),zr=d(require("unzipper"));var os=50*1024*1024;async function Qr(e,t=os){return new Promise((r,o)=>{let n=(0,Yr.default)("zip",{zlib:{level:9}}),a=[],c=0;n.on("data",u=>{a.push(u),c+=u.length,c>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",u=>{u.code==="ENOENT"?C(u):o(u)}),n.on("error",u=>o(u)),n.on("end",()=>{let u=Buffer.concat(a);r(u)});let p=async u=>{let R=process.cwd(),l=lt.default.normalize(u),f=lt.default.relative(R,l),_=await Wr.default.stat(u);_.isDirectory()?n.directory(u,f):n.file(u,{name:f,stats:_})};(async u=>{for(let R of u)await p(R);await n.finalize()})(e).catch(o)})}async function Xr(e,t){return zr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}var oo=d(require("async-retry")),no=require("axios");var Zr=d(require("axios")),eo=require("https-proxy-agent"),to=d(require("proxy-from-env"));var ns=s.extend("axios");function ft(e={}){let t=Zr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),a=to.default.getProxyForUrl(n);return a&&(ns("Using HTTP proxy %s for %s ",a,n),o.proxy=!1,o.httpsAgent=is(a)),o}),t}var xe=null;function is(e){return xe||(xe=new eo.HttpsProxyAgent(e),xe)}var Ae=s.extend("upload"),Se=5;async function gt(e,t,r){return Ae("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),as(e.buffer,e.uploadUrl,t,r)}async function ss(e,t,r,o){return ft().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function Ct(e,t){try{let r=await ft().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,no.isAxiosError)(r)&&Ae("Failed to download %s: %s",e,r.message),r}}async function as(...e){await(0,oo.default)(async()=>{await ss(...e)},{retries:Se,onRetry:(t,r)=>{if(Ae("Upload failed %d out of %d attempts: %s",r,Se,t.message),r===Se){h(`Cannot upload after ${r} times: ${t.message}`);return}C(`Upload failed ${r} out of ${Se} attempts: ${t.message}`)}})}var ht=e=>({total:t,loaded:r})=>{};function ro(e){return e/1e3/1e3}var It=d(require("lodash"));var V=d(require("path")),Et=d(require("globby"));var io=require("lodash");function Rt({config:e,cacheId:t,orgId:r,path:o,ci:n,cacheKey:a,metaCacheKey:c}){let p={id:t,orgId:r,config:(0,io.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString(),cacheKey:a,metaCacheKey:c};return Buffer.from(JSON.stringify(p))}function so(e,t){e instanceof Error?q("%s. %s.",t,e.message):q("%s. %s.",t,"Unknown error")}var ao=async e=>{let t=V.default.resolve(e??"./test-results"),r=[V.default.posix.join(t.replace(/\\/g,"/"),"**/.last-run.json"),V.default.posix.join(t.replace(/\\/g,"/"),".last-run.json")];return Et.sync(r)},co=async(e=[])=>{let t=cs(e),r=[];return t.length>0&&r.push(...Et.sync(e.map(o=>o.replace(/\\/g,"/")))),r};function cs(e){let t=process.cwd();return e.filter(r=>{let o=V.default.resolve(r),n=V.default.relative(t,o);return r.startsWith("..")||V.default.isAbsolute(n)?(so(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function Ue(e){return e?e.path.some(t=>V.default.basename(t)===".last-run.json"):!1}async function mo(e,t){switch(t.provider){case"githubActions":await lo(e,t);break;case"gitlab":await uo(e,t);break;case"circle":await fo(e,t);break;default:break}}async function po(e,t,r){switch(t.provider){case"githubActions":await lo(e,t,r);break;case"gitlab":await uo(e,t,r);break;case"circle":await fo(e,t,r);break;default:break}}async function uo(e,t,r=null){let o=t.params,n=r?.ci.params,c=(n?ne(n.runAttempt,0):0)+1,p=ne(o.ciNodeIndex,1),m=ne(o.ciNodeTotal,1),u=Ue(r),R=c>1&&u,l=R?"--last-failed":"",f="";m>1&&(f=R?"--shard=1/1":`--shard=${p}/${m}`);let _=[l,f].filter(Boolean).join(" ");await W(e.presetOutput??ce,`EXTRA_PW_FLAGS="${_}"
|
|
14
14
|
EXTRA_PWCP_FLAGS="${l}"
|
|
15
15
|
RUN_ATTEMPT=${c}
|
|
16
16
|
`)}async function lo(e,t,r=null){let{matrixIndex:o,matrixTotal:n}=e,a=t.params,c=ne(a.githubRunAttempt,1),p=Ue(r),m=c>1&&p,u=m?"--last-failed":"",R="";n>1&&(R=m?"--shard=1/1":`--shard=${o}/${n}`);let l=[u,R].filter(Boolean).join(" "),f=e.presetOutput??ce;await W(f,l),s('Dumped PW config: "%s" for GHA to %s',l,f)}async function fo(e,t,r=null){let o=t.params,n=r?.ci.params,a=n?.circleWorkflowId,c=n?.circleWorkflowWorkspaceId,p=ne(o.circleNodeIndex,0),m=ne(o.circleNodeTotal,1),u=c==o.circleWorkflowWorkspaceId&&a!==o.circleWorkflowId,R=Ue(r),l=u&&R,f=l?"--last-failed":"",_="";m>1&&(_=l?"--shard=1/1":`--shard=${p+1}/${m}`);let P=[f,_].filter(Boolean).join(" "),b=e.presetOutput??ce;await W(b,P),s('Dumped PW config: "%s" for Circle to %s',P,b)}var ne=(e,t)=>{let r=It.default.toNumber(e);return It.default.isNaN(r)?t:r};async function Tt(){let e=$();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:a,continue:c}=e.values,p=e.values.outputDir,m=oe();o==="last-run"&&await mo(e.values,m);let{cacheId:u,refMetaReadUrl:R}=await Tr({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:a}});try{let l=await us(R),{readUrl:f}=await _r({recordKey:t,cacheKey:l.cacheKey}),_=await ms({readUrl:f,outputDir:p});o==="last-run"&&await po(e.values,m,l),x(g("- restoring cache to"),_),ge("Cache restored. Cache ID: %s",u)}catch(l){if((0,go.isAxiosError)(l)&&(l.response?.status===403||l.response?.status===404)){let f=`Cache with ID "${u}" not found`;if(c){q(f);return}throw new Error(f)}throw l}}async function ms({readUrl:e,outputDir:t}){let r=await Ct(e),o=ps(t);return await Xr(r,o),s("Cache downloaded",{readUrl:e,destination:o}),o}function ps(e){let t=e??process.cwd();return _t.default.isAbsolute(t)?t:_t.default.resolve(process.cwd(),t)}async function us(e){let t=await Ct(e),r=JSON.parse(t.toString("utf-8"));return s("Meta file downloaded: %O",r),r}var ho=require("lodash");async function yt(){let e=$();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,pwOutputDir:n,matrixIndex:a,matrixTotal:c,continue:p}=e.values,m=await co(e.values.path),u=e.values.path||[],R=oe();if(o==="last-run"&&(u.push(n),m.push(...await ao(n))),m.length===0){let b=`No files available to upload: ${u.filter(Boolean).join(",")}`;if(!p)throw new Error(b);q(b)}let l=await Ir({recordKey:t,ci:R,id:r,config:{matrixIndex:a,matrixTotal:c}});s("Cache upload url created",{result:l});let f=ls(R),_=m.length>0?await Qr(m):null,P=[];_&&P.push(ds({archive:_,cacheId:l.cacheId,uploadUrl:l.uploadUrl}).then(()=>{fs(m),s("Cache archive uploaded",{uploadUrl:l.uploadUrl})})),P.push(Co({meta:Rt({cacheId:l.cacheId,config:e.values,ci:f,orgId:l.orgId,path:m}),cacheId:l.cacheId,uploadUrl:l.metaUploadUrl}).then(()=>s("Meta uploaded",{uploadUrl:l.metaUploadUrl})),Co({meta:Rt({cacheId:l.cacheId,config:e.values,ci:f,orgId:l.orgId,path:m,cacheKey:l.cacheKey,metaCacheKey:l.metaCacheKey}),cacheId:l.cacheId,uploadUrl:l.refMetaUploadUrl}).then(()=>s("Ref meta uploaded",{uploadUrl:l.refMetaUploadUrl}))),await Promise.all(P),ge("Cache uploaded. Cache ID: %s",l.cacheId)}async function ds({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await gt({buffer:e,contentType:o,name:t,uploadUrl:r},o,ht(t)),s("Cache archive uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache archive",o),o}}async function Co({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await gt({buffer:e,contentType:n,name:o,uploadUrl:r},n,ht(o)),s("Cache meta uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache meta",o),o}}function ls(e){return e.ciBuildId.source==="server"||e.ciBuildId.source==="random"?(0,ho.omit)(e,"ciBuildId"):e}function fs(e){x(`Cache upload paths:
|
|
17
17
|
`+e.map(t=>`${g("- uploading")} ${t}`).join(`
|
|
18
|
-
`))}var Eo=require("@currents/commit-info"),Io=require("lodash");var ve=require("lodash");var Ot=s.extend("ci-git");function Ro(e){Ot("git commit existing info: %O",e);let t=qr();Ot("commit info from provider environment variables: %O",t);let r=(0,ve.transform)(e,(o,n,a)=>{let c=n||(t?t[a]:null);return o[a]=(0,ve.defaultTo)(c,null)});return Ot("combined git and environment variables from provider: %O",r),r}var gs=async()=>{let e=await(0,Eo.commitInfo)();return Ro({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},_o=(0,Io.memoize)(gs);var To=d(require("getos")),yo=require("lodash"),U=require("os"),Oo=require("util"),Cs=async()=>{if((0,U.platform)()==="linux")try{let e=await(0,Oo.promisify)(To.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,U.release)()}catch{return(0,U.release)()}return(0,U.release)()},hs=async()=>{let e=await Cs();return{osName:(0,U.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,U.freemem)(),total:(0,U.totalmem)()}}},wo=(0,yo.memoize)(hs);var xt=d(require("path")),Qo=d(require("semver"));var O={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 Po(){return{projectId:process.env[O.projectId.env],recordKey:process.env[O.recordKey.env],ciBuildId:process.env[O.ciBuildId.env],tag:process.env[O.tag.env]?process.env[O.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:process.env[O.disableTitleTags.env],removeTitleTags:process.env[O.removeTitleTags.env],debug:process.env[O.debug.env],machineId:process.env[O.machineId.env]}}var Rs=s.extend("config"),Es=["projectId","recordKey"],wt=null;function bo(e){wt=M(O,Es,Po,e),Rs("Resolved Currents config: %o",wt)}function De(){return wt}function xo(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 J=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Fo=d(require("fs-extra")),Go=require("jest-cli"),Ho=d(require("tmp"));var Bo=require("lodash");function So(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 Ao=require("lodash"),Is=["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 Uo(e){return(0,Ao.omit)(e,...Is)}var No=d(require("fs")),Lo=require("jest-config"),Pt=require("lodash"),bt=d(require("path"));function Ne(e,t){return(...r)=>new Promise((o,n)=>{let a=0,c=()=>{a++;try{let p=e(...r);o(p)}catch(p){if(a>=t.length)n(p);else{let m=t[a-1];setTimeout(c,m)}}};c()})}var vo=d(require("fs-extra")),_s=d(require("path"));async function Le(e){let t=await vo.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Do=s.extend("jest-discovery");async function Mo(e){try{let{config:t,configPath:r}=await(0,Lo.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,Pt.omit)(t,o);if(a.projects&&(a.projects=a.projects.map(m=>typeof m!="string"?(0,Pt.omit)(m,n):m)),a.rootDir&&Object.keys(a).length===1)return null;let c=bt.default.resolve(r?bt.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(a,null,2)}`;return Do("configFileContent: %O",p),No.default.writeFileSync(c,p),await Ne(Le,[200,200,200,200,200,1e3])(c),c}catch(t){return h("Failed to recreate the config file"),Do("error %o",t),null}}async function ko(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Uo(r),n=So(o),a=r.config,c=await Mo(a);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,Bo.isEmpty)(m)),configFilePath:c}}var Ts=s.extend("jest-discovery");async function Ko(e,t){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await ko(t);try{let n=Ho.default.fileSync({postfix:".json"});return Ts("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Go.run)(r.concat(["--openHandlesTimeout=0"])),await Ne(Le,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await Y(n.name)}catch(n){return h("Failed to obtain the jest full test suite:",n),[]}finally{o&&Fo.default.unlinkSync(o)}}var Me=class extends J{constructor(t){super(t)}async getFullTestSuite(){return Ko(this.config.frameworkConfig,this.config.cliArgs)}};var $o=d(require("fs-extra"));var jo=d(require("path"));function ie(e){return jo.default.join(e,"fullTestSuite.json")}var ys=s.extend("junit-discovery");async function Vo(e){console.time(g("@currents/junit:fullTestSuite-ready"));try{ys("running scanner: %o",e);let t=ie(e);process.env.CURRENTS_DISCOVERY_PATH=t;let r=$o.default.readFileSync(t,"utf-8");return JSON.parse(r)}catch(t){return h("Failed to obtain the junit full test suite:",t),[]}}var Be=class extends J{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Vo(this.reportDir)}};function Jo(e,t){switch(e.framework){case"jest":return new Me(e);case"junit":return new Be(e,t);default:return new J(e)}}var se=d(require("fs-extra")),k=d(require("path"));async function qo(e){let t=await Os(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??k.default.join(t,"config.json")}}async function Os(e){return e?(await ke(e),e):ws((0,k.join)(process.cwd(),".currents"))}async function ws(e){let t=await se.default.readdir(e),r=null;for(let o of t){let n=k.default.join(e,o),a=await se.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,k.resolve)(e,r.name):null}async function ke(e){try{return await se.default.pathExists(e)}catch{return h("Error checking if path exists:",h),!1}}async function Yo(e){let t=k.default.join(e,"instances");return Ps(t)}async function Ps(e){let t=await se.default.readdir(e),r=[];for(let o of t){let n=k.default.join(e,o);(await se.default.stat(n)).isFile()&&r.push(n)}return r}var bs=e=>Buffer.byteLength(JSON.stringify(e),"utf8"),Wo=(e,t=1048576)=>{let r=[],o=[],n=0;for(let a of e){let c=bs(a);n+c>t&&(r.push(o),o=[],n=0),o.push(a),n+=c}return o.length>0&&r.push(o),r};async function St(){let e=De();if(!e)throw new Error("Currents config is missing!");let t=await qo(e);Kt(Ss(t.reportDir)),s("Reporter options: %o",t),x("Report directory: %s",t.reportDir);let r=await Y(t.configFilePath);s("Report config: %o",r);let o=await Yo(t.reportDir);s("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=xs(t.reportDir),a=await ke(n),c=ie(t.reportDir),p=null;if(a){let P=await Y(n);C("Marker file detected. The report was already uploaded: %o",{runUrl:P.response.runUrl,isoDate:P.isoDate}),await ke(c)&&(p=await Y(c),s("Full test suite file detected: %s",c))}if(p)s("The discovery stage was skipped");else{if(p=await Jo(r,t.reportDir).getFullTestSuite(),As(p))throw new Error("Failed to discover the full test suite!");await W(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,u={currents:e},R={type:r.framework,version:r.frameworkVersion,clientVersion:Z,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},l=Te.userFacingNanoid(),f=oe(e.ciBuildId),_={};for await(let P of o){let b=await Y(P);_[b.groupId]||(_[b.groupId]=[]),_[b.groupId].push(b)}for await(let P of Object.keys(_)){let b=_[P],le=P;m&&(s("Default group found: %s, overwriting the group in the results",m),le=m,b=b.map(X=>({...X,groupId:m})));try{let X=Wo(b),qe=await zo({ci:f,group:le,instances:[],fullTestSuite:p,config:u,machineId:l,framework:R});for(let Ye=0;Ye<X.length;Ye++)await zo({ci:f,group:le,instances:X[Ye],fullTestSuite:[],config:u,machineId:l,framework:R});s("Api response: %o",qe),x("[%s] Run created: %s",le,qe.runUrl);let oi={response:qe,isoDate:new Date().toISOString()};await W(n,JSON.stringify(oi)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(X){throw s("Failed to upload the results to the dashboard"),X}}}async function zo({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:a,framework:c}){let p=await _o(),m=await wo(),u={browserName:"node",browserVersion:Qo.default.coerce(process.version)?.version},{currents:R}=n,f={platform:{...u,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:R.projectId,recordKey:R.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:R.tag??[],machineId:R.machineId??a,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return s("Creating run: %o",T(f)),Pr(f)}function xs(e){return xt.default.join(e,"upload.marker.json")}function Ss(e){return xt.default.join(e,`.debug-${new Date().toISOString()}.log`)}function As(e){return e.length===0||e.some(t=>t.tests.length===0)}var Us=s.extend("cli");async function Xo(e){await D(async t=>{er(t);let r=ye();Us("Config: %o",he(r)),await it()},e)}var F=require("@commander-js/extra-typings");var Zo=new F.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(y(B,"apiKey")),en=new F.Option("-o, --output <path>","Path to the file where output will be written").env(y(B,"output")),tn=new F.Option("--ci-build-id <id>","Unique identifier for the run"),rn=new F.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(y(B,"projectId")),on=new F.Option("-t, --tag <tag>","Filter by comma-separated list of tags").argParser(re),nn=new F.Option("--debug","Enable debug logging").env(y(B,"debug")).default(!1),sn=new F.Option("-b, --branch <branch>","Filter by git branch name"),an=new F.Option("--pw-last-run",'Create Playwright ".last-run.json" file with the failed test(s) from the run');var Fe="api",vs=e=>`
|
|
18
|
+
`))}var Eo=require("@currents/commit-info"),Io=require("lodash");var ve=require("lodash");var Ot=s.extend("ci-git");function Ro(e){Ot("git commit existing info: %O",e);let t=qr();Ot("commit info from provider environment variables: %O",t);let r=(0,ve.transform)(e,(o,n,a)=>{let c=n||(t?t[a]:null);return o[a]=(0,ve.defaultTo)(c,null)});return Ot("combined git and environment variables from provider: %O",r),r}var gs=async()=>{let e=await(0,Eo.commitInfo)();return Ro({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},_o=(0,Io.memoize)(gs);var To=d(require("getos")),yo=require("lodash"),U=require("os"),Oo=require("util"),Cs=async()=>{if((0,U.platform)()==="linux")try{let e=await(0,Oo.promisify)(To.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,U.release)()}catch{return(0,U.release)()}return(0,U.release)()},hs=async()=>{let e=await Cs();return{osName:(0,U.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,U.freemem)(),total:(0,U.totalmem)()}}},wo=(0,yo.memoize)(hs);var xt=d(require("path")),Qo=d(require("semver"));var O={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 Po(){return{projectId:process.env[O.projectId.env],recordKey:process.env[O.recordKey.env],ciBuildId:process.env[O.ciBuildId.env],tag:process.env[O.tag.env]?process.env[O.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:process.env[O.disableTitleTags.env],removeTitleTags:process.env[O.removeTitleTags.env],debug:process.env[O.debug.env],machineId:process.env[O.machineId.env]}}var Rs=s.extend("config"),Es=["projectId","recordKey"],wt=null;function bo(e){wt=M(O,Es,Po,e),Rs("Resolved Currents config: %o",wt)}function De(){return wt}function xo(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 J=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Fo=d(require("fs-extra")),Go=require("jest-cli"),Ho=d(require("tmp"));var Bo=require("lodash");function So(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 Ao=require("lodash"),Is=["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 Uo(e){return(0,Ao.omit)(e,...Is)}var No=d(require("fs")),Lo=require("jest-config"),Pt=require("lodash"),bt=d(require("path"));function Ne(e,t){return(...r)=>new Promise((o,n)=>{let a=0,c=()=>{a++;try{let p=e(...r);o(p)}catch(p){if(a>=t.length)n(p);else{let m=t[a-1];setTimeout(c,m)}}};c()})}var vo=d(require("fs-extra")),_s=d(require("path"));async function Le(e){let t=await vo.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Do=s.extend("jest-discovery");async function Mo(e){try{let{config:t,configPath:r}=await(0,Lo.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,Pt.omit)(t,o);if(a.projects&&(a.projects=a.projects.map(m=>typeof m!="string"?(0,Pt.omit)(m,n):m)),a.rootDir&&Object.keys(a).length===1)return null;let c=bt.default.resolve(r?bt.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(a,null,2)}`;return Do("configFileContent: %O",p),No.default.writeFileSync(c,p),await Ne(Le,[200,200,200,200,200,1e3])(c),c}catch(t){return h("Failed to recreate the config file"),Do("error %o",t),null}}async function ko(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Uo(r),n=So(o),a=r.config,c=await Mo(a);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,Bo.isEmpty)(m)),configFilePath:c}}var Ts=s.extend("jest-discovery");async function jo(e,t){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await ko(t);try{let n=Ho.default.fileSync({postfix:".json"});return Ts("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Go.run)(r.concat(["--openHandlesTimeout=0"])),await Ne(Le,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await Y(n.name)}catch(n){return h("Failed to obtain the jest full test suite:",n),[]}finally{o&&Fo.default.unlinkSync(o)}}var Me=class extends J{constructor(t){super(t)}async getFullTestSuite(){return jo(this.config.frameworkConfig,this.config.cliArgs)}};var $o=d(require("fs-extra"));var Ko=d(require("path"));function ie(e){return Ko.default.join(e,"fullTestSuite.json")}var ys=s.extend("junit-discovery");async function Vo(e){console.time(g("@currents/junit:fullTestSuite-ready"));try{ys("running scanner: %o",e);let t=ie(e);process.env.CURRENTS_DISCOVERY_PATH=t;let r=$o.default.readFileSync(t,"utf-8");return JSON.parse(r)}catch(t){return h("Failed to obtain the junit full test suite:",t),[]}}var Be=class extends J{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Vo(this.reportDir)}};function Jo(e,t){switch(e.framework){case"jest":return new Me(e);case"junit":return new Be(e,t);default:return new J(e)}}var se=d(require("fs-extra")),k=d(require("path"));async function qo(e){let t=await Os(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??k.default.join(t,"config.json")}}async function Os(e){return e?(await ke(e),e):ws((0,k.join)(process.cwd(),".currents"))}async function ws(e){let t=await se.default.readdir(e),r=null;for(let o of t){let n=k.default.join(e,o),a=await se.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,k.resolve)(e,r.name):null}async function ke(e){try{return await se.default.pathExists(e)}catch{return h("Error checking if path exists:",h),!1}}async function Yo(e){let t=k.default.join(e,"instances");return Ps(t)}async function Ps(e){let t=await se.default.readdir(e),r=[];for(let o of t){let n=k.default.join(e,o);(await se.default.stat(n)).isFile()&&r.push(n)}return r}var bs=e=>Buffer.byteLength(JSON.stringify(e),"utf8"),Wo=(e,t=1048576)=>{let r=[],o=[],n=0;for(let a of e){let c=bs(a);n+c>t&&(r.push(o),o=[],n=0),o.push(a),n+=c}return o.length>0&&r.push(o),r};async function St(){let e=De();if(!e)throw new Error("Currents config is missing!");let t=await qo(e);jt(Ss(t.reportDir)),s("Reporter options: %o",t),x("Report directory: %s",t.reportDir);let r=await Y(t.configFilePath);s("Report config: %o",r);let o=await Yo(t.reportDir);s("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=xs(t.reportDir),a=await ke(n),c=ie(t.reportDir),p=null;if(a){let P=await Y(n);C("Marker file detected. The report was already uploaded: %o",{runUrl:P.response.runUrl,isoDate:P.isoDate}),await ke(c)&&(p=await Y(c),s("Full test suite file detected: %s",c))}if(p)s("The discovery stage was skipped");else{if(p=await Jo(r,t.reportDir).getFullTestSuite(),As(p))throw new Error("Failed to discover the full test suite!");await W(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,u={currents:e},R={type:r.framework,version:r.frameworkVersion,clientVersion:Z,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},l=Te.userFacingNanoid(),f=oe(e.ciBuildId),_={};for await(let P of o){let b=await Y(P);_[b.groupId]||(_[b.groupId]=[]),_[b.groupId].push(b)}for await(let P of Object.keys(_)){let b=_[P],le=P;m&&(s("Default group found: %s, overwriting the group in the results",m),le=m,b=b.map(X=>({...X,groupId:m})));try{let X=Wo(b),qe=await zo({ci:f,group:le,instances:[],fullTestSuite:p,config:u,machineId:l,framework:R});for(let Ye=0;Ye<X.length;Ye++)await zo({ci:f,group:le,instances:X[Ye],fullTestSuite:[],config:u,machineId:l,framework:R});s("Api response: %o",qe),x("[%s] Run created: %s",le,qe.runUrl);let oi={response:qe,isoDate:new Date().toISOString()};await W(n,JSON.stringify(oi)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(X){throw s("Failed to upload the results to the dashboard"),X}}}async function zo({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:a,framework:c}){let p=await _o(),m=await wo(),u={browserName:"node",browserVersion:Qo.default.coerce(process.version)?.version},{currents:R}=n,f={platform:{...u,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:R.projectId,recordKey:R.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:R.tag??[],machineId:R.machineId??a,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return s("Creating run: %o",T(f)),Pr(f)}function xs(e){return xt.default.join(e,"upload.marker.json")}function Ss(e){return xt.default.join(e,`.debug-${new Date().toISOString()}.log`)}function As(e){return e.length===0||e.some(t=>t.tests.length===0)}var Us=s.extend("cli");async function Xo(e){await D(async t=>{er(t);let r=ye();Us("Config: %o",he(r)),await it()},e)}var F=require("@commander-js/extra-typings");var Zo=new F.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(y(B,"apiKey")),en=new F.Option("-o, --output <path>","Path to the file where output will be written").env(y(B,"output")),tn=new F.Option("--ci-build-id <id>","Unique identifier for the run"),rn=new F.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(y(B,"projectId")),on=new F.Option("-t, --tag <tag>","Filter by comma-separated list of tags").argParser(re),nn=new F.Option("--debug","Enable debug logging").env(y(B,"debug")).default(!1),sn=new F.Option("-b, --branch <branch>","Filter by git branch name"),an=new F.Option("--pw-last-run",'Create Playwright ".last-run.json" file with the failed test(s) from the run');var Fe="api",vs=e=>`
|
|
19
19
|
|
|
20
20
|
${cn.default.bold("Examples")}
|
|
21
21
|
|
|
@@ -47,7 +47,7 @@ ${g(`${e} ${ae} get --key <record-key> --preset last-run`)}
|
|
|
47
47
|
Retrieve the last run data from the cache and save it to a custom directory:
|
|
48
48
|
${g(`${e} ${ae} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
|
|
49
49
|
|
|
50
|
-
`,ln=e=>new Ge.Command().command(ae).description(`Cache data to Currents ${Ms(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Bs()).addCommand(ks()),Bs=()=>new Ge.Command().name("set").allowUnknownOption().addOption(at).addOption(mt).addOption(pt).addOption(Br).addOption(ct).addOption(Fr).addOption(ut).addOption(dt).addOption(
|
|
50
|
+
`,ln=e=>new Ge.Command().command(ae).description(`Cache data to Currents ${Ms(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Bs()).addCommand(ks()),Bs=()=>new Ge.Command().name("set").allowUnknownOption().addOption(at).addOption(mt).addOption(pt).addOption(Br).addOption(ct).addOption(Fr).addOption(ut).addOption(dt).addOption(Kr).action(un),ks=()=>new Ge.Command().name("get").allowUnknownOption().addOption(at).addOption(mt).addOption(pt).addOption(kr).addOption(Gr).addOption(ct).addOption(ut).addOption(dt).addOption(jr).action(pn);var bn=require("@commander-js/extra-typings"),xn=d(require("chalk"));var N=require("@commander-js/extra-typings");var fn=new N.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(y(O,"ciBuildId")),gn=new N.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(y(O,"recordKey")),Cn=new N.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(y(O,"projectId")),hn=new N.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(re),Rn=new N.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),En=new N.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),In=new N.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(y(O,"machineId")),_n=new N.Option("--report-dir <string>","explicit path to the report directory").env(y(O,"reportDir")),Tn=new N.Option("--debug","enable debug logs").env(y(O,"debug")).default(!1);var wn=d(require("fs"));var yn=require("tmp-promise"),On=async()=>{let{path:e}=await(0,yn.file)();return e};var Ut=s.extend("cli"),He=class{constructor(t){this.configFilePath=null;this.cliOptions=t,Ut("CLI options: %o",T(this.cliOptions)),this.parsedConfig=xo(this.cliOptions),Ut("Parsed config from CLI options: %o",T(this.parsedConfig))}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await On();return wn.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),Ut("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function Pn(e){await D(async t=>{let r=new He(t);bo(r.parsedConfig);let o=De();x("Currents config: %o",T(o)),await St()},e)}var me="upload",Fs=e=>`
|
|
51
51
|
|
|
52
52
|
${xn.default.bold("Examples")}
|
|
53
53
|
|
|
@@ -61,14 +61,14 @@ Provide a custom path to the reports directory:
|
|
|
61
61
|
${g(`${e} ${me} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
|
|
62
62
|
|
|
63
63
|
`,Sn=e=>new bn.Command().name(me).command(me).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
|
|
64
|
-
${Fs(e)}`).addOption(fn).addOption(gn).addOption(Cn).addOption(hn).addOption(Rn).addOption(En).addOption(In).addOption(Tn).addOption(_n).action(r=>Pn(r));var Xn=require("@commander-js/extra-typings");var Zn=d(require("chalk"));var pe={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},inputFormat:{name:"Input Format",cli:"--input-format"},inputFiles:{name:"Input File",cli:"--input-file"},outputDir:{name:"Output Dir",cli:"--output-dir"},framework:{name:"Framework",cli:"--framework"},frameworkVersion:{name:"Framework Version",cli:"--framework-version"}};function An(){return{debug:process.env[pe.debug.env]}}var Gs=s.extend("config"),Hs=["inputFormat","inputFiles","framework"],vt=null;function Un(e){vt=M(pe,Hs,An,e),Gs("Resolved config: %o",vt)}function
|
|
64
|
+
${Fs(e)}`).addOption(fn).addOption(gn).addOption(Cn).addOption(hn).addOption(Rn).addOption(En).addOption(In).addOption(Tn).addOption(_n).action(r=>Pn(r));var Xn=require("@commander-js/extra-typings");var Zn=d(require("chalk"));var pe={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},inputFormat:{name:"Input Format",cli:"--input-format"},inputFiles:{name:"Input File",cli:"--input-file"},outputDir:{name:"Output Dir",cli:"--output-dir"},framework:{name:"Framework",cli:"--framework"},frameworkVersion:{name:"Framework Version",cli:"--framework-version"}};function An(){return{debug:process.env[pe.debug.env]}}var Gs=s.extend("config"),Hs=["inputFormat","inputFiles","framework"],vt=null;function Un(e){vt=M(pe,Hs,An,e),Gs("Resolved config: %o",vt)}function je(){return vt}function vn(e){return{inputFiles:e.inputFile,inputFormat:e.inputFormat,outputDir:e.outputDir,framework:e.framework,frameworkVersion:e.frameworkVersion,debug:e.debug}}var Je=require("path");var Dn=require("lodash"),Nn=d(require("crypto"));function Ln(e,t,r,o){let n=Q(e.failure),a=n.length>0,c=t?.timestamp??"",p="skipped"in e,m=p?"pending":a?"failed":"passed";return{_t:Ke(c),testId:Lt(ue(e.name,o).join(", "),o),title:ue(e.name,o),state:m,isFlaky:js(),expectedStatus:"passed",timeout:Ks(),location:$s(t?.file??""),retries:Vs(n),attempts:Js(e,n,Mt(c),r,p)}}function Lt(e,t){let r=`${e}${t}`;return Nn.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function Ke(e){return Mn(e)?new Date(e).getTime():new Date().getTime()}function Mt(e){return Mn(e)?new Date(e).toISOString():new Date().toISOString()}function Mn(e){let t=new Date(e);return!isNaN(t.getTime())}function ue(e,t){return[t,e].filter(Boolean)}function js(){return!1}function Ks(){return 0}function $s(e){return{column:1,file:e,line:1}}function Vs(e){let t=0;return e.forEach(r=>{typeof r!="string"&&t++}),t}function Js(e,t,r,o,n){let a=e.time?$e(e.time):0;return n?[{_s:"pending",attempt:0,startTime:r,steps:[],duration:a,status:"skipped",stdout:Dt(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.length===0?[{_s:"passed",attempt:0,startTime:r,steps:[],duration:a,status:"passed",stdout:Dt(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.reduce((c,p,m)=>{if(p!=="true"&&p!=="false"){let u=Ys(p);c.push({_s:"failed",attempt:m,startTime:Ws(o,r),steps:[],duration:a,status:"failed",stdout:Dt(e?.["system-out"]),stderr:qs(e?.["system-err"]),errors:u,error:u[0]})}return c},[])}function Dt(e){return e?[e]:[]}function qs(e){return e?[e]:[]}function Ys(e){return e==="true"||e==="false"?[]:[typeof e=="string"?{message:e}:{message:e.message,stack:e._,value:e.type}]}function Ws(e,t){let r=Ke(t)+e;return new Date(r).toISOString()}function Q(e){return e?Array.isArray(e)?e:[e]:[]}function zs(e){return Math.round(e*1e3)}function $e(e){let t=parseFloat(e);return isNaN(t)?0:zs(t)}function Ve(e,t,r){let o=(0,Dn.isNumber)(r)&&r>0,n=!!e.id&&Nt(t,"id",e.id);if(e.file){let a=Nt(t,"file",e.file);return a&&!n?`${e.file} - ${e.id}`:a&&o?`${e.file} - ${r}`:e.file}if(e.name){let a=Nt(t,"name",e.name);return a&&!n?`${e.name} - ${e.id}`:a&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function Nt(e,t,r){return e.filter(n=>n[t]===r).length>1}function Bn(e){let t=[];return e.forEach(r=>{let o=Q(r.testsuites?.testsuite),n={name:r.testsuites?.name??"No name",tags:[],tests:[]};o?.forEach(a=>{let c=Ve(a,o);Q(a?.testcase)?.forEach(m=>{let u={title:ue(m.name,c),spec:c,tags:[],testId:Lt(ue(m.name,c).join(", "),c)};n.tests.push(u)})}),t.push(n)}),t}var G=require("@commander-js/extra-typings"),kn=d(require("globby"));var Fn=new G.Option("--debug","Enable debug logging").env(y(pe,"debug")).default(!1),Bt=(t=>(t.junit="junit",t))(Bt||{}),Gn=new G.Option("--input-format <string>","the format of the input test reports").choices(Object.values(Bt)),Hn=new G.Option("--input-file <patterns>",'comma-separated glob patterns to match report file paths (e.g., "report1.xml,report2.xml")').argParser(Qs),jn=new G.Option("-o, --output-dir <string>","the directory to save the converted test reports"),kt=(n=>(n.postman="postman",n.node="node",n.vitest="vitest",n.wdio="wdio",n))(kt||{}),Kn=new G.Option("--framework <string>","the testing framework used to generate the test reports").choices(Object.values(kt)),$n=new G.Option("--framework-version <string>","the version of the testing framework used to generate the test reports");function Qs(e){let t=e.split(",").map(o=>o.trim()),r=kn.sync(t);if(r.length===0)throw new G.InvalidArgumentError("No files found with the provided patterns");return r}async function v(e){let t=new Map;return e.forEach(r=>{let o=Q(r.testsuites?.testsuite),n=r.testsuites?.name??"No name";o.forEach((a,c)=>{let p=Ve(a,o,c),m=Xs(a,n,p),u=_e(n+p);m.results.tests.length!==0&&t.set(u,m)})}),t}function Xs(e,t,r){let o=Mt(e.timestamp??""),n=e.time?$e(e.time):0,a=new Date(Ke(e.timestamp??"")+n),c=Q(e.testcase),p=0,m=c.filter(f=>"failure"in f).length,u=c.filter(f=>"skipped"in f).length,R=c.length-m-u;return{groupId:t,spec:r,startTime:o,results:{stats:{suites:1,tests:c.length,passes:R,pending:u,skipped:0,failures:m,flaky:0,wallClockStartedAt:o,wallClockEndedAt:a.toISOString(),wallClockDuration:n},tests:c?.map(f=>(c[0]?.time&&(p+=$e(c[0].time)),Ln(f,e,p,r)))}}}async function Vn({inputFormat:e,framework:t,parsedXMLArray:r}){return e==="junit"?Zs(t,r):new Map}async function Zs(e,t){switch(e){case"node":return v(t);case"postman":return v(t);case"vitest":return v(t);case"wdio":return v(t);default:return C("Unsupported framework: %s",e),new Map}}var Jn=require("fs-extra"),qn=require("xml2js");async function Yn(e){let t=await Promise.all(e.map(o=>(0,Jn.readFile)(o,"utf-8"))),r=(await Promise.all(t.map(ea))).filter(Boolean);return t.length!==r.length&&C("Some files could not be parsed. Enable debug logging for more details"),r}async function ea(e){let t=e.trim();if(!t)return null;try{return await(0,qn.parseStringPromise)(t,{explicitArray:!1,mergeAttrs:!0})||null}catch(r){return s("Error parsing XML input",r),null}}function Wn(e){return{framework:e.inputFormat,frameworkVersion:e.frameworkVersion??null,frameworkConfig:{originFramework:e.framework,originFrameworkVersion:e.frameworkVersion}}}async function zn(){try{let e=je();if(!e)throw new Error("Config is missing!");let t=e.outputDir?await Ie(e.outputDir):await Wt(process.cwd(),".currents"),r=await Ie((0,Je.join)(t,"instances")),o=Wn(e);s("Report config:",o),x("[currents] Convertion files: %s",e.inputFiles.join(", ")),await Ee((0,Je.join)(t,"config.json"),JSON.stringify(o));let n=await Yn(e.inputFiles);if(n.length===0)throw new Error("No valid XML JUnit report was found.");let a=Bn(n);await Ee(ie(t),JSON.stringify(a));let c=await Vn({inputFormat:e.inputFormat,framework:e.framework,parsedXMLArray:n});await Promise.all(Array.from(c.entries()).map(([p,m])=>Ee((0,Je.join)(r,`${_e(p)}.json`),JSON.stringify(m)))),x("[currents] Conversion completed, report saved to: %s",t)}catch(e){throw s("Failed to convert: %o",e),e}}var ta=s.extend("cli");async function Qn(e){await D(async t=>{Un(vn(t));let r=je();ta("Config: %o",r),await zn()},e)}var Ft="convert",ra=e=>`
|
|
65
65
|
|
|
66
66
|
${Zn.default.bold("Examples")}
|
|
67
67
|
|
|
68
68
|
Convert JUnit test reports to Currents format:
|
|
69
69
|
${g(`${e} ${Ft} --input-format junit --input-file ./*.xml --framework postman`)}
|
|
70
70
|
`,ei=e=>new Xn.Command().name(Ft).command(Ft).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Convert reports from various testing frameworks to Currents format
|
|
71
|
-
${ra(e)}`).addOption(Fn).addOption(Gn).addOption(Hn).addOption(
|
|
71
|
+
${ra(e)}`).addOption(Fn).addOption(Gn).addOption(Hn).addOption(jn).addOption(Kn).addOption($n).action(r=>Qn(r));var oa=`
|
|
72
72
|
----------------------------------------------------
|
|
73
73
|
\u{1F4D6} Documentation: https://docs.currents.dev
|
|
74
74
|
\u{1F919} Support: support@currents.dev
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";var Nr=Object.create;var x=Object.defineProperty;var Dr=Object.getOwnPropertyDescriptor;var Br=Object.getOwnPropertyNames;var br=Object.getPrototypeOf,xr=Object.prototype.hasOwnProperty;var le=(e,r)=>{for(var t in r)x(e,t,{get:r[t],enumerable:!0})},ge=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Br(r))!xr.call(e,n)&&n!==t&&x(e,n,{get:()=>r[n],enumerable:!(o=Dr(r,n))||o.enumerable});return e};var c=(e,r,t)=>(t=e!=null?Nr(br(e)):{},ge(r||!e||!e.__esModule?x(t,"default",{value:e,enumerable:!0}):t,e)),vr=e=>ge(x({},"__esModule",{value:!0}),e);var vt={};le(vt,{handleCurrentsReport:()=>yr});module.exports=vr(vt);var de=require("debug"),Mr=c(require("fs-extra")),i=(0,de.debug)("currents"),wr=null;function Ee(e){wr=e}var v={};le(v,{getNanoid:()=>Fr,userFacingNanoid:()=>Z});var X=require("nanoid"),Re="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Fr=(e=16)=>(0,X.customAlphabet)(Re,e)(),Z=(0,X.customAlphabet)(Re,12);var p=require("lodash");var M=i.extend("ci"),kr=(e,...r)=>(0,p.chain)(r).compact().join(e).value(),Hr=(e,r)=>(0,p.set)(e,(0,p.camelCase)(r),process.env[r]),u=e=>(0,p.transform)(e,Hr,{}),Gr=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,jr=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Vr=()=>(0,p.some)(process.env,(e,r)=>/^CODEBUILD_/.test(r)),Kr=()=>process.env.bamboo_buildNumber,Jr=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,$r=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Yr=()=>(0,p.some)(process.env,(e,r)=>/^CONCOURSE_/.test(r)),qr=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Qr=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Wr=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,zr=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Xr={appveyor:"APPVEYOR",azure:jr,awsCodeBuild:Vr,bamboo:Kr,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Jr,codeshipPro:$r,concourse:Yr,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:qr,goCD:"GO_JOB_NAME",googleCloud:Qr,jenkins:Wr,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Gr,travis:"TRAVIS",wercker:zr,netlify:"NETLIFY",layerci:"LAYERCI"};function Zr(){let{env:e}=process;return(0,p.findKey)(Xr,r=>{if((0,p.isString)(r))return e[r];if((0,p.isFunction)(r))return r()})}var _e=()=>({appveyor:u(["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:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:u(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:u(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:u(["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:u(["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:u(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:u(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:u(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:u(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:u(["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:u(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:u(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:u(["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:u(["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:u(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:u(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:u(["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:u(["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:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:u(["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:u(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:u(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),et=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:kr(`
|
|
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}}},fe=e=>{let r=Ie();return r?(0,p.chain)(e()).get(r).value():{}};function rt(){return(0,p.chain)(_e()).omitBy(p.isNull).keys().value()}function tt(e){return e&&rt().includes(e)}function Ie(){let e=Zr();return M("detected CI provider name: %s",e),e||null}function ot(){return fe(_e)}function Ce(){return fe(et)}function Te(e){let r=ot(),t=Ie(),o=nt(e,t);return M("detected CI provider: %s",t),M("detected CI params: %O",r),M("detected CI build ID: %o",o),{params:r,provider:t,ciBuildId:o}}function nt(e,r){return e?{source:"user",value:e}:tt(r)?{source:"server",value:null}:{source:"random",value:`auto:${Z()}`}}var Oe=require("@currents/commit-info"),Pe=require("lodash");var w=require("lodash");var ee=i.extend("ci-git");function he(e){ee("git commit existing info: %O",e);let r=Ce();ee("commit info from provider environment variables: %O",r);let t=(0,w.transform)(e,(o,n,a)=>{let m=n||(r?r[a]:null);return o[a]=(0,w.defaultTo)(m,null)});return ee("combined git and environment variables from provider: %O",t),t}var st=async()=>{let e=await(0,Oe.commitInfo)();return he({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Ue=(0,Pe.memoize)(st);var Ae=c(require("getos")),Se=require("lodash"),f=require("os"),ye=require("util"),it=async()=>{if((0,f.platform)()==="linux")try{let e=await(0,ye.promisify)(Ae.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,f.release)()}catch{return(0,f.release)()}return(0,f.release)()},at=async()=>{let e=await it();return{osName:(0,f.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,f.freemem)(),total:(0,f.totalmem)()}}},Le=(0,Se.memoize)(at);var Ne={name:"@currents/cmd",version:"1.9.
|
|
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}}},fe=e=>{let r=Ie();return r?(0,p.chain)(e()).get(r).value():{}};function rt(){return(0,p.chain)(_e()).omitBy(p.isNull).keys().value()}function tt(e){return e&&rt().includes(e)}function Ie(){let e=Zr();return M("detected CI provider name: %s",e),e||null}function ot(){return fe(_e)}function Ce(){return fe(et)}function Te(e){let r=ot(),t=Ie(),o=nt(e,t);return M("detected CI provider: %s",t),M("detected CI params: %O",r),M("detected CI build ID: %o",o),{params:r,provider:t,ciBuildId:o}}function nt(e,r){return e?{source:"user",value:e}:tt(r)?{source:"server",value:null}:{source:"random",value:`auto:${Z()}`}}var Oe=require("@currents/commit-info"),Pe=require("lodash");var w=require("lodash");var ee=i.extend("ci-git");function he(e){ee("git commit existing info: %O",e);let r=Ce();ee("commit info from provider environment variables: %O",r);let t=(0,w.transform)(e,(o,n,a)=>{let m=n||(r?r[a]:null);return o[a]=(0,w.defaultTo)(m,null)});return ee("combined git and environment variables from provider: %O",t),t}var st=async()=>{let e=await(0,Oe.commitInfo)();return he({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Ue=(0,Pe.memoize)(st);var Ae=c(require("getos")),Se=require("lodash"),f=require("os"),ye=require("util"),it=async()=>{if((0,f.platform)()==="linux")try{let e=await(0,ye.promisify)(Ae.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,f.release)()}catch{return(0,f.release)()}return(0,f.release)()},at=async()=>{let e=await it();return{osName:(0,f.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,f.freemem)(),total:(0,f.totalmem)()}}},Le=(0,Se.memoize)(at);var Ne={name:"@currents/cmd",version:"1.9.5-beta.0",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",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":"^10.0.1","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.16","@types/node":"^22.13.14","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.9"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.12.0","axios-retry":"^4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^16.5.0",execa:"^9.5.1","fs-extra":"^11.3.0",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.7.1","source-map-support":"^0.5.21",tmp:"^0.2.5","tmp-promise":"^3.0.3","ts-pattern":"^5.7.0",unzipper:"^0.12.3",uuid:"^11.1.0",xml2js:"^0.6.2"},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 F=Ne.version;function ut(e,r){if(!e)return e;let t={...e};return r.forEach(o=>{t.hasOwnProperty(o)&&(t[o]="*****")}),t}function D(e){return ut(e,["recordKey","key"])}var mt=[];function re(e){mt.push(e)}var _=c(require("chalk")),A=c(require("util"));var De=[],Be=[];var be=(...e)=>{let r=A.default.format(...e);re(r),console.log(r)},pt=(...e)=>{let r=A.default.format(...e);re(r),console.error(r)},te=be,l=(...e)=>{let r=A.default.format(...e);return Be.push(r),i("WARNING: ",r),be(_.default.bgYellow.black(" WARNING "),r)};var d=(...e)=>{let r=A.default.format(...lt(e));return De.push(r),i("ERROR: ",A.default.format(...e)),pt(_.default.bgRed.white(" ERROR "),r)};var lt=e=>e.map(r=>r instanceof Error?r.message:r),k=(e=2)=>console.log(Array(e).fill("").join(`
|
|
3
3
|
`)),fo=_.default.cyan,Io=_.default.blueBright,Co=_.default.red,To=_.default.yellow,ho=_.default.green,Oo=_.default.gray,Po=_.default.white,Uo=_.default.black,Ao=_.default.magenta,S=_.default.dim,So=_.default.bold;var oe=c(require("fs-extra")),xe=require("path"),dt=require("uuid");async function P(e){try{return await oe.default.readJson(e)}catch(r){throw d("Error while reading JSON file: %s",e,r),d}}async function ne(e,r){try{return await oe.default.writeFile(e,r,"utf8"),e}catch(t){throw d(`Error writing file at ${e}:`,t),t}}var Et=c(require("crypto"));var pe=c(require("path")),Sr=c(require("semver"));var Xe=c(require("lodash"));var je=c(require("axios")),Ve=c(require("axios-retry")),Ke=c(require("lodash"));var ve=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Me=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",we=()=>3e4;var se=require("axios"),ie=c(require("pretty-ms"));var Fe=i.extend("http"),H=e=>[3*1e3,15*1e3,30*1e3][e-1],ke=e=>(Fe("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,se.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,se.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),G=()=>3;function He(e,r,t){Fe("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${t.method?.toUpperCase()} ${t.url}`,r.message,(0,ie.default)(H(e)),e,G()),l("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${t.method?.toUpperCase()} ${t.url}`,r.message,(0,ie.default)(H(e)),e,G())}var ae=i.extend("http");var ce={api:null,restApi:null};function Rt(e){let r=e==="api"?ve():Me();ae("client base url: %s",r);let t=je.default.create({baseURL:r,timeout:we(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":F}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let a={...Ke.default.pick(o,"method","url","headers"),baseURL:r,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?ae("network request retry: %o",Ge({...a,baseURL:r,isRetry:!0})):ae("network request: %o",Ge(a)),o}),(0,Ve.default)(t,{retries:G(),retryCondition:ke,retryDelay:H,shouldResetTimeout:!0,onRetry:He}),t}function Je(e){return ce[e]===null&&(ce[e]=Rt(e)),ce[e]}function Ge(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":_t(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function _t(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var qe=require("axios"),Qe=c(require("lodash")),E=require("ts-pattern");function We(e){(0,E.match)(e).when(qe.isAxiosError,ft).otherwise(()=>{l("Unexpected error while sending network request: %s",e)})}function ft(e){return(0,E.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:E.P.not(E.P.nullish)},r=>{It(r,{status:r.response.status,data:r.response.data})}).otherwise(r=>{l(`[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 It(e,{status:r,data:t}){(0,E.match)(r).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:
|
|
5
5
|
%o`,t)}).with(404,()=>{l(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 404 Not Found from cloud service`)}).with(429,()=>{l(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Ct(e,t)}).otherwise(()=>{l(`[currents] Unexpected network response: %s
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@currents/cmd",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.5-beta.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Currents Software Inc",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@currents/commit-info": "1.0.1-beta.0",
|
|
47
47
|
"archiver": "^7.0.1",
|
|
48
48
|
"async-retry": "^1.3.3",
|
|
49
|
-
"axios": "^1.
|
|
49
|
+
"axios": "^1.12.0",
|
|
50
50
|
"axios-retry": "^4.5.0",
|
|
51
51
|
"chalk": "^4.1.2",
|
|
52
52
|
"commander": "^13.1.0",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"proxy-from-env": "^1.1.0",
|
|
66
66
|
"semver": "^7.7.1",
|
|
67
67
|
"source-map-support": "^0.5.21",
|
|
68
|
-
"tmp": "^0.2.
|
|
68
|
+
"tmp": "^0.2.5",
|
|
69
69
|
"tmp-promise": "^3.0.3",
|
|
70
70
|
"ts-pattern": "^5.7.0",
|
|
71
71
|
"unzipper": "^0.12.3",
|