diff --git a/out/cloud-compute.entrypoint.js b/out/cloud-compute.entrypoint.js index b2e026e..764ee43 100644 --- a/out/cloud-compute.entrypoint.js +++ b/out/cloud-compute.entrypoint.js @@ -69,7 +69,7 @@ ${o} ${a}`:a;else if(i||e.directives.docStart||!s)e.commentBefore=a;else if(iv(s)&&!s.flow&&s.items.length>0){let e=s.items[0];U(e)&&(e=e.key);let t=e.commentBefore;e.commentBefore=t?`${a} ${t}`:a}else{let e=s.commentBefore;s.commentBefore=e?`${a} ${e}`:a}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:sE(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,a=-1){for(let t of e)yield*this.next(t);yield*this.end(t,a)}*next(e){switch(process.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(t,a,i)=>{let s=sS(e);s[0]+=t,this.onError(s,"BAD_DIRECTIVE",a,i)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let t=eD(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,a=new eF(sS(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(a):this.doc.errors.push(a);break}case"doc-end":{if(!this.doc){this.errors.push(new eF(sS(e),"UNEXPECTED_TOKEN","Unexpected doc-end without preceding document"));break}this.doc.directives.docEnd=!0;let t=eQ(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){let e=this.doc.comment;this.doc.comment=e?`${e} -${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new eF(sS(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let e=new sg(void 0,Object.assign({_directives:this.directives},this.options));this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),e.range=[0,t,t],this.decorate(e,!1),yield e}}};var sG={};function sB(e,t){if(t)for(let a of t)switch(a.type){case"space":case"comment":e.push(a);break;case"newline":return e.push(a),!0}return!1}function sT(e,t,a){switch(e.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":e.type=a,e.source=t;break;case"block-scalar":{let i=e.props.slice(1),s=t.length;for(let t of("block-scalar-header"===e.props[0].type&&(s-=e.props[0].source.length),i))t.offset+=s;delete e.props,Object.assign(e,{type:a,source:t,end:i});break}case"block-map":case"block-seq":{let i={type:"newline",offset:e.offset+t.length,indent:e.indent,source:"\n"};delete e.items,Object.assign(e,{type:a,source:t,end:[i]});break}default:{let i="indent"in e?e.indent:-1,s="end"in e&&Array.isArray(e.end)?e.end.filter(e=>"space"===e.type||"comment"===e.type||"newline"===e.type):[];for(let t of Object.keys(e))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:a,indent:i,source:t,end:s})}}}function sR(e){switch(e.type){case"block-scalar":{let t="";for(let a of e.props)t+=sR(a);return t+e.source}case"block-map":case"block-seq":{let t="";for(let a of e.items)t+=sZ(a);return t}case"flow-collection":{let t=e.start.source;for(let a of e.items)t+=sZ(a);for(let a of e.end)t+=a.source;return t}case"document":{let t=sZ(e);if(e.end)for(let a of e.end)t+=a.source;return t}default:{let t=e.source;if("end"in e&&e.end)for(let a of e.end)t+=a.source;return t}}}function sZ({start:e,key:t,sep:a,value:i}){let s="";for(let t of e)s+=t.source;if(t&&(s+=sR(t)),a)for(let e of a)s+=e.source;return i&&(s+=sR(i)),s}tF(sG,"createScalarToken",()=>e9,e=>e9=e),tF(sG,"resolveAsScalar",()=>e6,e=>e6=e),tF(sG,"setScalarValue",()=>e3,e=>e3=e),tF(sG,"stringify",()=>e5,e=>e5=e),tF(sG,"visit",()=>e8,e=>e8=e),tF(sG,"BOM",()=>e7,e=>e7=e),tF(sG,"DOCUMENT",()=>te,e=>te=e),tF(sG,"FLOW_END",()=>tt,e=>tt=e),tF(sG,"SCALAR",()=>ta,e=>ta=e),tF(sG,"isCollection",()=>ti,e=>ti=e),tF(sG,"isScalar",()=>ts,e=>ts=e),tF(sG,"prettyToken",()=>tn,e=>tn=e),tF(sG,"tokenType",()=>tr,e=>tr=e),to=function(e,t){let{implicitKey:a=!1,indent:i,inFlow:s=!1,offset:n=-1,type:r="PLAIN"}=t,o=ei({type:r,value:e},{implicitKey:a,indent:i>0?" ".repeat(i):"",inFlow:s,options:{blockQuote:!0,lineWidth:-1}}),l=t.end??[{type:"newline",offset:-1,indent:i,source:"\n"}];switch(o[0]){case"|":case">":{let e=o.indexOf("\n"),t=o.substring(0,e),a=o.substring(e+1)+"\n",s=[{type:"block-scalar-header",offset:n,indent:i,source:t}];return sB(s,l)||s.push({type:"newline",offset:-1,indent:i,source:"\n"}),{type:"block-scalar",offset:n,indent:i,props:s,source:a}}case'"':return{type:"double-quoted-scalar",offset:n,indent:i,source:o,end:l};case"'":return{type:"single-quoted-scalar",offset:n,indent:i,source:o,end:l};default:return{type:"scalar",offset:n,indent:i,source:o,end:l}}},tl=function(e,t=!0,a){if(e){let i=(e,t,i)=>{let s="number"==typeof e?e:Array.isArray(e)?e[0]:e.offset;if(a)a(s,t,i);else throw new eF([s,s+1],t,i)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return e2(e,t,i);case"block-scalar":return e0({options:{strict:t}},e,i)}}return null},tp=function(e,t,a={}){let{afterKey:i=!1,implicitKey:s=!1,inFlow:n=!1,type:r}=a,o="indent"in e?e.indent:null;if(i&&"number"==typeof o&&(o+=2),!r)switch(e.type){case"single-quoted-scalar":r="QUOTE_SINGLE";break;case"double-quoted-scalar":r="QUOTE_DOUBLE";break;case"block-scalar":{let t=e.props[0];if("block-scalar-header"!==t.type)throw Error("Invalid block scalar header");r=">"===t.source[0]?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:r="PLAIN"}let l=ei({type:r,value:t},{implicitKey:s||null===o,indent:null!==o&&o>0?" ".repeat(o):"",inFlow:n,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":(function(e,t){let a=t.indexOf("\n"),i=t.substring(0,a),s=t.substring(a+1)+"\n";if("block-scalar"===e.type){let t=e.props[0];if("block-scalar-header"!==t.type)throw Error("Invalid block scalar header");t.source=i,e.source=s}else{let{offset:t}=e,a="indent"in e?e.indent:-1,n=[{type:"block-scalar-header",offset:t,indent:a,source:i}];for(let t of(sB(n,"end"in e?e.end:void 0)||n.push({type:"newline",offset:-1,indent:a,source:"\n"}),Object.keys(e)))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:"block-scalar",indent:a,props:n,source:s})}})(e,l);break;case'"':sT(e,l,"double-quoted-scalar");break;case"'":sT(e,l,"single-quoted-scalar");break;default:sT(e,l,"scalar")}},td=e=>"type"in e?sR(e):sZ(e);const sN=Symbol("break visit"),sk=Symbol("skip children"),sV=Symbol("remove item");function sW(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),function e(t,a,i){let s=i(a,t);if("symbol"==typeof s)return s;for(let n of["key","value"]){let r=a[n];if(r&&"items"in r){for(let a=0;a{let a=e;for(let[e,i]of t){let t=a?.[e];if(!t||!("items"in t))return;a=t.items[i]}return a},sW.parentCollection=(e,t)=>{let a=sW.itemAtPath(e,t.slice(0,-1)),i=t[t.length-1][0],s=a?.[i];if(s&&"items"in s)return s;throw Error("Parent collection not found")},e9=to,e6=tl,e3=tp,e5=td,e8=sW,e7="\uFEFF",te="\x02",tt="\x18",ta="\x1f",ti=e=>!!e&&"items"in e,ts=e=>!!e&&("scalar"===e.type||"single-quoted-scalar"===e.type||"double-quoted-scalar"===e.type||"block-scalar"===e.type),tn=function(e){switch(e){case"\uFEFF":return"";case"\x02":return"";case"\x18":return"";case"\x1f":return"";default:return JSON.stringify(e)}},tr=function(e){switch(e){case"\uFEFF":return"byte-order-mark";case"\x02":return"doc-mode";case"\x18":return"flow-error-end";case"\x1f":return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case"\n":case"\r\n":return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(e[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null};const sH=new Set("0123456789ABCDEFabcdef"),sF=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),sU=new Set(",[]{}"),sL=new Set(" ,[]{}\n\r "),sD=e=>!e||sL.has(e);function sY(e,t){for(let a=0;a=0;)switch(e[t].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;e[++t]?.type==="space";);return e.splice(t,e.length)}function sM(e){if("flow-seq-start"===e.start.type)for(let t of e.items)!t.sep||t.value||sY(t.start,"explicit-key-ind")||sY(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,sj(t.value)?t.value.end?Array.prototype.push.apply(t.value.end,t.sep):t.value.end=t.sep:Array.prototype.push.apply(t.start,t.sep),delete t.sep)}function sJ(e){let t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new tu||null,prettyErrors:t}}function sz(e,t={}){let{lineCounter:a,prettyErrors:i}=sJ(t),s=new tm(a?.addNewLine),n=new k(t),r=null;for(let t of n.compose(s.parse(e),!0,e.length))if(r){if("silent"!==r.options.logLevel){r.errors.push(new eF(t.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}}else r=t;return i&&a&&(r.errors.forEach(eL(e,a)),r.warnings.forEach(eL(e,a))),r}tc=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if("string"!=typeof e)throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let a=this.next??"stream";for(;a&&(t||this.hasChars(1));)a=yield*this.parseNext(a)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;" "===t||" "===t;)t=this.buffer[++e];return!t||"#"===t||"\n"===t||"\r"===t&&"\n"===this.buffer[e+1]}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let a=0;for(;" "===t;)t=this.buffer[++a+e];if("\r"===t){let t=this.buffer[a+e+1];if("\n"===t||!t&&!this.atEnd)return e+a+1}return"\n"!==t&&!(a>=this.indentNext)&&(t||this.atEnd)?-1:e+a}if("-"===t||"."===t){let t=this.buffer.substr(e,3);if(("---"===t||"..."===t)&&sO(this.buffer[e+3]))return -1}return e}getLine(){let e=this.lineEndPos;return(("number"!=typeof e||-1!==e&&ethis.indentValue&&!sO(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if(("-"===e||"?"===e||":"===e)&&sO(t)){let e=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=e,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(null===e)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(sD),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=(yield*this.parseBlockScalarHeader())+(yield*this.pushSpaces(!0)),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t;let a=-1;do(e=yield*this.pushNewline())>0?(t=yield*this.pushSpaces(!1),this.indentValue=a=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0)let i=this.getLine();if(null===i)return this.setNext("flow");if((-1!==a&&a"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if("-"!==t)break}return yield*this.pushUntil(e=>sO(e)||"#"===e)}*parseBlockScalar(){let e,t=this.pos-1,a=0;e:for(let i=this.pos;e=this.buffer[i];++i)switch(e){case" ":a+=1;break;case"\n":t=i,a=0;break;case"\r":{let e=this.buffer[i+1];if(!e&&!this.atEnd)return this.setNext("block-scalar");if("\n"===e)break}default:break e}if(!e&&!this.atEnd)return this.setNext("block-scalar");if(a>=this.indentNext){-1===this.blockScalarIndent?this.indentNext=a:this.indentNext=this.blockScalarIndent+(0===this.indentNext?1:this.indentNext);do{let e=this.continueScalar(t+1);if(-1===e)break;t=this.buffer.indexOf("\n",e)}while(-1!==t)if(-1===t){if(!this.atEnd)return this.setNext("block-scalar");t=this.buffer.length}}let i=t+1;for(e=this.buffer[i];" "===e;)e=this.buffer[++i];if(" "===e){for(;" "===e||" "===e||"\r"===e||"\n"===e;)e=this.buffer[++i];t=i-1}else if(!this.blockScalarKeep)for(;;){let e=t-1,i=this.buffer[e];"\r"===i&&(i=this.buffer[--e]);let s=e;for(;" "===i;)i=this.buffer[--e];if("\n"===i&&e>=this.pos&&e+1+a>s)t=e;else break}return yield ta,yield*this.pushToIndex(t+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e;let t=this.flowLevel>0,a=this.pos-1,i=this.pos-1;for(;e=this.buffer[++i];)if(":"===e){let e=this.buffer[i+1];if(sO(e)||t&&sU.has(e))break;a=i}else if(sO(e)){let s=this.buffer[i+1];if("\r"===e&&("\n"===s?(i+=1,e="\n",s=this.buffer[i+1]):a=i),"#"===s||t&&sU.has(s))break;if("\n"===e){let e=this.continueScalar(i+1);if(-1===e)break;i=Math.max(i,e-2)}}else{if(t&&sU.has(e))break;a=i}return e||this.atEnd?(yield ta,yield*this.pushToIndex(a+1,!0),t?"flow":"doc"):this.setNext("plain-scalar")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let a=this.buffer.slice(this.pos,e);return a?(yield a,this.pos+=a.length,a.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(sD))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(sO(t)||e&&sU.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if("<"===this.charAt(1)){let e=this.pos+2,t=this.buffer[e];for(;!sO(t)&&">"!==t;)t=this.buffer[++e];return yield*this.pushToIndex(">"===t?e+1:e,!1)}{let e=this.pos+1,t=this.buffer[e];for(;t;)if(sF.has(t))t=this.buffer[++e];else if("%"===t&&sH.has(this.buffer[e+1])&&sH.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return"\n"===e?yield*this.pushCount(1):"\r"===e&&"\n"===this.charAt(1)?yield*this.pushCount(2):0}*pushSpaces(e){let t,a=this.pos-1;do t=this.buffer[++a];while(" "===t||e&&" "===t)let i=a-this.pos;return i>0&&(yield this.buffer.substr(this.pos,i),this.pos=a),i}*pushUntil(e){let t=this.pos,a=this.buffer[t];for(;!e(a);)a=this.buffer[++t];return yield*this.pushToIndex(t,!1)}},tu=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,a=this.lineStarts.length;for(;t>1;this.lineStarts[i]0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if("doc-end"===this.type&&(!e||"doc-end"!==e.type)){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e??this.stack.pop();if(t){if(0===this.stack.length)yield t;else{let e=this.peek(1);switch("block-scalar"===t.type?t.indent="indent"in e?e.indent:0:"flow-collection"===t.type&&"document"===e.type&&(t.indent=0),"flow-collection"===t.type&&sM(t),e.type){case"document":e.value=t;break;case"block-scalar":e.props.push(t);break;case"block-map":{let a=e.items[e.items.length-1];if(a.value){e.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}if(a.sep)a.value=t;else{Object.assign(a,{key:t,sep:[]}),this.onKeyLine=!a.explicitKey;return}break}case"block-seq":{let a=e.items[e.items.length-1];a.value?e.items.push({start:[],value:t}):a.value=t;break}case"flow-collection":{let a=e.items[e.items.length-1];!a||a.value?e.items.push({start:[],key:t,sep:[]}):a.sep?a.value=t:Object.assign(a,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if(("document"===e.type||"block-map"===e.type||"block-seq"===e.type)&&("block-map"===t.type||"block-seq"===t.type)){let a=t.items[t.items.length-1];a&&!a.sep&&!a.value&&a.start.length>0&&-1===sX(a.start)&&(0===t.indent||a.start.every(e=>"comment"!==e.type||e.indent=e.indent){let a=!this.onKeyLine&&this.indent===e.indent,i=a&&(t.sep||t.explicitKey)&&"seq-item-ind"!==this.type,s=[];if(i&&t.sep&&!t.value){let a=[];for(let i=0;ie.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(s=t.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":i||t.value?(s.push(this.sourceToken),e.items.push({start:s}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":t.sep||t.explicitKey?i||t.value?(s.push(this.sourceToken),e.items.push({start:s,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}):(t.start.push(this.sourceToken),t.explicitKey=!0),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey){if(t.sep){if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(sY(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]});else if(sj(t.key)&&!sY(t.sep,"newline")){let e=sP(t.start),a=t.key,i=t.sep;i.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:a,sep:i}]})}else s.length>0?t.sep=t.sep.concat(s,this.sourceToken):t.sep.push(this.sourceToken)}else if(sY(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let e=sP(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:null,sep:[this.sourceToken]}]})}}else t.sep?t.value||i?e.items.push({start:s,key:null,sep:[this.sourceToken]}):sY(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);i||t.value?(e.items.push({start:s,key:a,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(a):(Object.assign(t,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let t=this.startBlockValue(e);if(t){a&&"block-seq"!==t.type&&e.items.push({start:s}),this.stack.push(t);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let a="end"in t.value?t.value.end:void 0,i=Array.isArray(a)?a[a.length-1]:void 0;i?.type==="comment"?a?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let a=e.items[e.items.length-2],i=a?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||sY(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let t=this.startBlockValue(e);if(t){this.stack.push(t);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if("flow-error-end"===this.type){let e;do yield*this.pop(),e=this.peek(1);while(e&&"flow-collection"===e.type)}else if(0===e.end.length){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:a,sep:[]}):t.sep?this.stack.push(a):Object.assign(t,{key:a,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let a=this.startBlockValue(e);a?this.stack.push(a):(yield*this.pop(),yield*this.step())}else{let t=this.peek(2);if("block-map"!==t.type||("map-value-ind"!==this.type||t.indent!==e.indent)&&("newline"!==this.type||t.items[t.items.length-1].sep)){if("map-value-ind"===this.type&&"flow-collection"!==t.type){let a=sP(sK(t));sM(e);let i=e.end.splice(1,e.end.length);i.push(this.sourceToken);let s={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:a,key:e,sep:i}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=s}else yield*this.lineEnd(e)}else yield*this.pop(),yield*this.step()}}flowScalar(e){if(this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=sP(sK(e));return t.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=sP(sK(e));return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return"comment"===this.type&&!(this.indent<=t)&&e.every(e=>"newline"===e.type||"space"===e.type)}*documentEnd(e){"doc-mode"!==this.type&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop())}}},tg=function(e,t,a){let i;"function"==typeof t?i=t:void 0===a&&t&&"object"==typeof t&&(a=t);let s=sz(e,a);if(!s)return null;if(s.warnings.forEach(e=>eo(s.options.logLevel,e)),s.errors.length>0){if("silent"!==s.options.logLevel)throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:i},a))},th=function(e,t={}){let{lineCounter:a,prettyErrors:i}=sJ(t),s=new tm(a?.addNewLine),n=new k(t),r=Array.from(n.compose(s.parse(e)));if(i&&a)for(let t of r)t.errors.forEach(eL(e,a)),t.warnings.forEach(eL(e,a));return r.length>0?r:Object.assign([],{empty:!0},n.streamInfo())},tf=function(e,t,a){let i=null;if("function"==typeof t||Array.isArray(t)?i=t:void 0===a&&t&&(a=t),"string"==typeof a&&(a=a.length),"number"==typeof a){let e=Math.round(a);a=e<1?void 0:e>8?{indent:8}:{indent:e}}if(void 0===e){let{keepUndefined:e}=a??t??{};if(!e)return}return new sg(e,i,a).toString(a)},n=k,r=sg,o=sm,l=sf,p=eF,d=eU,c=D,u=W,m=iv,g=O,h=H,f=F,b=U,v=ib,y=L,I=iJ,C=ik,x=ep,w=eu,_=sG,A=tc,S=tu,E=tm,G=tg,B=th,T=sz,R=tf,Z=ix,N=i_;const s$=tU(io).object({"app-url":tU(io).string().required(),"api-token":tU(io).string().required(),skip:tU(io).boolean().default(!1).optional().label("skip")}),sq=tU(io).object().pattern(tU(io).string(),s$),sQ=e=>{let t=tU(il).parse(e),{error:a,value:i}=sq.validate(t,{abortEarly:!1});if(a)throw Error(`Invalid projects-yaml: ${a.message}`);return Object.entries(i).map(([e,t])=>({name:e,apiToken:t["api-token"],appUrl:t["app-url"],skip:t.skip}))},s1=()=>{let e=(0,tP.getInput)("api-token",{required:!1}),t=(0,tP.getInput)("github-token",{required:!0}),a=(0,tP.getInput)("app-url",{required:!1}),i=(0,tP.getInput)("head-sha"),s=(0,tP.getInput)("projects-yaml",{required:!1});if(s){if(e||a)throw Error("Cannot provide both 'projects-yaml' and 'api-token' or 'app-url'");return{githubToken:t,headSha:i,projectTargets:sQ(s)}}if(!e||!a)throw Error("Must provide either 'projects-yaml' or 'api-token' and 'app-url'");return{githubToken:t,headSha:i,projectTargets:[{name:"default",apiToken:e,appUrl:a,skip:!1}]}};var a2=tj("2Evbo"),s0=tj("4aTko"),tQ=tj("3midM"),s2={},s4=s2&&s2.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(s2,"__esModule",{value:!0}),s2.executeRemoteTestRun=void 0;var s0=tj("4aTko"),tQ=tj("3midM"),s9={};Object.defineProperty(s9,"__esModule",{value:!0}),s9.localtunnel=void 0;var s6={};Object.defineProperty(s6,"__esModule",{value:!0}),s6.localtunnel=void 0;var s3={},s5=s3&&s3.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var s=Object.getOwnPropertyDescriptor(t,a);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,s)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),s8=s3&&s3.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s7=s3&&s3.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&s5(t,e,a);return s8(t,e),t},ne=s3&&s3.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(s3,"__esModule",{value:!0}),s3.Tunnel=void 0;const nt=ne(tw),na=ne(t_),ni=s7(tj("5mM36")),ns=ne(tj("3oP91"));var nn=tT.Duplex,nr=tT.Writable,no=tA.EventEmitter,nl=tj("04vO9");class np{constructor(e,t){this._client=e,this._server=t}get client(){return this._client}get server(){return this._server}}function nd(e,t,a){function i(){this._finished=!0,this._mux._send_end(this),this._check_remove()}nn.call(this,e),e=Object.assign({max_write_size:0},e),this._mux=t,this.mux=t,this._chan=a,this._max_write_size=e.max_write_size,this._check_read_overflow=!1!==e.check_read_overflow,this._seq=0,this._remote_free=0,this._set_remote_free=!1,this._data=null,this._cb=null,this._index=0,this._finished=!1,this._ended=!1,this._removed=!1,this._handshake_sent=!1,this._handshake_received=!1,this._end_pending=!1,this._error_end=!1,this._error_end_pending=!1,this.once("finish",i),this.once("close",function(){this.removeListener("finish",i),this._finished||(this._finished=!0,this._mux._send_end(this)),this._check_remove()}),t.duplexes.set(a,this),t._max_open>0&&t.duplexes.size===t._max_open&&setImmediate(function(){t.emit("full")})}function nc(e,t){if(no.call(this,t),t=Object.assign({max_open:0,max_header_size:0,keep_alive:3e4},t),this._max_duplexes=2147483648,this._max_open=t.max_open,this.duplexes=new Map,this._chan=0,this._chan_offset=t.high_channels?this._max_duplexes:0,this._parse_handshake_data=t.parse_handshake_data,this.carrier=e,e instanceof np){let a={...(t.http2||{}).headers,[tH.constants.HTTP2_HEADER_STATUS]:200,[tH.constants.HTTP2_HEADER_CONTENT_TYPE]:"application/octet-stream"};e.server.on("stream",(e,t)=>{if(this._max_open>0&&this.duplexes.size===this._max_open)return this.emit("full"),e.respond({[tH.constants.HTTP2_HEADER_STATUS]:503},{endStream:!0});let i=Buffer.from(t["bpmux-channel"],"base64").readUint32BE();if(this.duplexes.has(i))return e.respond({[tH.constants.HTTP2_HEADER_STATUS]:409},{endStream:!0});e.cork(),this._add_http2_duplex(e,i),this.emit("peer_multiplex",e);let s=!1;this._parse_http2_handshake(e,t,()=>{let t;s=!0;let i=e.uncork;return e.uncork=()=>{e.uncork=i,e.destroyed||(e.respond({...a,...this._make_http2_handshake(t)}),e._handshake_sent=!0,this.emit("handshake_sent",e,!0),e.emit("handshake_sent",!0),e.uncork())},a=>{t=a,e.uncork()}}),s?(this.emit("pre_handshake_sent",e,!0),e.emit("pre_handshake_sent",!0)):(e.respond({...a,...this._make_http2_handshake()}),e._handshake_sent=!0,this.emit("handshake_sent",e,!0),e.emit("handshake_sent",!0),e.uncork())});let i=0;for(let t of[e.client,e.server])t.on("close",()=>{2==++i&&(this.emit("finish"),this.emit("end"),this.emit("close"))}),t.on("error",e=>{for(let a of this.duplexes.values())a.session===t&&!a.destroyed&&a.listenerCount("error")>0&&a.emit("error",e);this.emit("error",e)});return}this._max_header_size=t.max_header_size,this._finished=!1,this._ended=!1,this._header_buffers=[],this._header_buffer_len=0,this._reading_duplex=null,this._peer_multiplex_options=t.peer_multiplex_options,this._coalesce_writes=t.coalesce_writes,this._sending=!1,this._send_requested=!1,this._keep_alive_id=null,this._keep_alive_paused=!1,this._out_stream=nl.encode(t),this._coalesce_writes&&(this._out_stream._pushFrameData=function(e){var t;for(t=0;t0&&t.emit("error",e);a.emit("error",e)}if(e.on("finish",s),e.on("close",s),this._in_stream.on("end",n),e.on("close",n),e.on("error",r),this._in_stream.on("error",r),this._out_stream.on("error",r),this._out_stream.on("drain",function(){a._send(),this._writableState.lengths._readableState.highWaterMark?s.emit("error",Error("too much data")):s.push(e))):((a._max_header_size<=0||a._header_buffer_len0&&7===e[0])return this.emit("keep_alive");if(this._check_buffer(e,5)){var t=this,a=e.readUInt8(0,!0),i=e.readUInt32BE(1,!0),s=this.duplexes.get(i);if(3!==a&&!s){if(this._max_open>0&&this.duplexes.size===this._max_open)return this.emit("full");s=new nd(this._peer_multiplex_options,this,i),this.emit("peer_multiplex",s)}if(s&&s._handshake_received){switch(a){case 0:s._ended=!0,s._check_remove(),s.push(null);break;case 6:s._ended=!0,s._check_remove(),s.emit("error",Error("peer error")),s.push(null);break;case 2:case 3:if(!this._check_buffer(e,13))break;n();break;case 4:s._remote_seq=e.slice(5),this._reading_duplex=s;break;default:this.emit("error",Error("unknown type: "+a))}return}switch(a){case 0:s._end_pending=!0;break;case 6:s._error_end_pending=!0;break;case 5:if(!this._check_buffer(e,9))return;n();break;case 1:{if(!this._check_buffer(e,9))return;if(0===s._seq){let t=e.readUInt32BE(5,!0);s._remote_free=s._max_write_size>0?Math.min(t,s._max_write_size):t,s._set_remote_free=!0}s._handshake_received=!0;let t=e.slice(9);if(this._parse_handshake_data)try{t=this._parse_handshake_data(t)}catch(e){s.listenerCount("error")>0&&s.emit("error",e),this.emit("error",e)}let a=!1,i=s._handshake_sent?null:()=>(a=!0,function(e){s._send_handshake(e)});this.emit("handshake",s,t,i),s.emit("handshake",t,i),a?this._send_handshake(s):s._send_handshake(),s._error_end_pending?(s._ended=!0,s._check_remove(),s.emit("error",Error("peer error")),s.push(null)):s._end_pending&&(s._ended=!0,s._check_remove(),s.push(null)),this._send();break}case 3:break;default:this.emit("error",Error("expected handshake, got: "+a))}}function n(){let a=e.readUInt32BE(5,!0),i=13===e.length?e.readUInt32BE(9,!0):0;a=s._max_write_size>0?Math.min(a,s._max_write_size):a,s._remote_free=i+a-s._seq,s._seq0&&this.duplexes.size===this._max_open)throw this.emit("full"),Error("full");if(this.carrier instanceof np){if(this.carrier.client.closed||this.carrier.client.destroyed)throw Error("closed")}else{if(this.carrier.destroyed)throw Error("closed");if(this.carrier._writableState.ending)throw Error("finished");if(this.carrier._readableState.ended)throw Error("ended")}var t,a,i=this;function s(t){if(i.carrier instanceof np){let a=Buffer.alloc(4);a.writeUInt32BE(t);let s=e.http2||{},n=i.carrier.client.request({[tH.constants.HTTP2_HEADER_PATH]:"/",[tH.constants.HTTP2_HEADER_METHOD]:"POST",...s.headers,"bpmux-channel":a.toString("base64"),...i._make_http2_handshake(e.handshake_data)},{...s.options,endStream:!1,waitForTrailers:!0});return i._add_http2_duplex(n,t),setImmediate(()=>{n._handshake_sent=!0,i.emit("handshake_sent",n,!0),n.emit("handshake_sent",!0)}),n.on("response",e=>{let a=e[tH.constants.HTTP2_HEADER_STATUS];if(200!==a){let e=Error(`peer returned status ${a} for channel ${t}`);return e.status=a,e.duplex=n,n.destroy(e),i.emit("error",e)}i._parse_http2_handshake(n,e,null)}),n}var a=new nd(e,i,t);return e._delay_handshake||setImmediate(function(){a._send_handshake(e.handshake_data)}),a}if(void 0!==(e=e||{}).channel)return this.duplexes.get(e.channel)||s(e.channel);t=this._chan;do{if(a=(t+1)%this._max_duplexes,!this.duplexes.has(t+this._chan_offset))return this._chan=a,s(t+this._chan_offset);t=a}while(t!==this._chan)throw this.emit("full"),Error("full")},nc.prototype._add_http2_duplex=function(e,t){e._mux=this,e.mux=this,e._chan=t,e.get_channel=()=>t,e._handshake_sent=!1,e._handshake_received=!1,e._error_end=!1,this.duplexes.set(t,e),this._max_open>0&&this.duplexes.size===this._max_open&&this.emit("full"),e.on("close",()=>{this.duplexes.delete(t),this.emit("removed",e)}),e.peer_error_then_end=function(e,t,a){return this._error_end=!0,this.end(e,t,a)},e.on("wantTrailers",function(){this.sendTrailers({"bpmux-error":this._error_end.toString()})}),e.on("trailers",function(e){"true"===e["bpmux-error"]&&this.emit("error",Error("peer error"))})},nc.prototype._make_http2_handshake=function(e){return{"bpmux-handshake":(e||Buffer.alloc(0)).toString("base64")}},nc.prototype._parse_http2_handshake=function(e,t,a){e._handshake_received=!0;let i=Buffer.alloc(0);try{i=Buffer.from(t["bpmux-handshake"],"base64"),this._parse_handshake_data&&(i=this._parse_handshake_data(i))}catch(t){e.listenerCount("error")>0&&e.emit("error",t),this.emit("error",t)}this.emit("handshake",e,i,a),e.emit("handshake",i,a)};var nu={};Object.defineProperty(nu,"__esModule",{value:!0}),nu.TUNNEL_HIGH_WATER_MARK=void 0,nu.TUNNEL_HIGH_WATER_MARK=10485760;var nm={},ng=nm&&nm.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var s=Object.getOwnPropertyDescriptor(t,a);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,s)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),nh=nm&&nm.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),nf=nm&&nm.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&ng(t,e,a);return nh(t,e),t},nb=nm&&nm.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(nm,"__esModule",{value:!0}),nm.TunnelMultiplexingCluster=void 0;const nv=nb(tA),ny=nf(tw),nI=nf(t_);var nC={};Object.defineProperty(nC,"__esModule",{value:!0}),nC.HeaderHostTransformer=void 0;class nx extends tT.Transform{constructor(e){super(e),this.host=`${e.host}:${e.port}`,this.replaced=!1}_transform(e,t,a){a(null,this.replaced?e:e.toString().replace(/(\r\n[Hh]ost: )\S+/,(e,t)=>(this.replaced=!0,t+this.host)))}}nC.HeaderHostTransformer=nx;class nw extends nv.default{constructor(e){super(),this.logger=e.logger,this.opts=e,this.remoteMuxClient=e.remoteMuxClient}startListening(){let e=this.opts,t=e.localHost,a=e.localPort,i=e.localHttps?"https":"http",s=e.allowInvalidCert,n=r=>{let o;if(r.destroyed){this.logger.debug("remote destroyed"),this.emit("dead");return}this.logger.debug("connecting locally to %s://%s:%d",i,t,a);let l=()=>{this.logger.warn("local connection timeout"),c(!0)},p=null;if(e.localHttps){if(s)this.logger.debug("allowing invalid certificates");else{if(!e.localCert)throw Error("local_cert is required for https");if(!e.localKey)throw Error("local_key is required for https")}o=nI.connect({host:t,port:a,...s?{rejectUnauthorized:!1}:{cert:(0,ty.readFileSync)(e.localCert),key:(0,ty.readFileSync)(e.localKey),ca:e.localCa?[(0,ty.readFileSync)(e.localCa)]:void 0}}),p=setTimeout(l,5e3)}else o=ny.connect({host:t,port:a});p=setTimeout(l,5e3);let d=()=>{this.logger.debug("remote close"),this.emit("dead"),o.end()};r.once("close",d);let c=e=>{if(o.end(),r.removeListener("close",d),!e)return r.end();this.logger.warn("retrying connection to local server"),setTimeout(()=>n(r),0)};o.once("error",e=>{p&&clearTimeout(p),this.logger.error("local error %s %s %s",e.message,e.code,e,e.errors),c("ECONNREFUSED"===e.code||"ECONNRESET"===e.code)}),o.once("connect",()=>{p&&clearTimeout(p),this.logger.debug("connected locally"),r.resume();let t=r;e.localHost&&(this.logger.debug("transform Host header to %s",e.localHost),t=r.pipe(new nC.HeaderHostTransformer({host:e.localHost,port:e.localPort}))),t.pipe(o).pipe(r),o.once("close",e=>{this.logger.debug("local connection closed [%s]",e)})})};this.remoteMuxClient.on("handshake",e=>{e.on("data",e=>{let t=e.toString().match(/^(\w+) (\S+)/);t&&this.emit("request",{method:t[1],path:t[2]})}),e.pause(),n(e),this.emit("open",e)})}}nm.TunnelMultiplexingCluster=nw;var n_={},nA=n_&&n_.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var s=Object.getOwnPropertyDescriptor(t,a);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,s)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),nS=n_&&n_.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),nE=n_&&n_.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&nA(t,e,a);return nS(t,e),t},nG=n_&&n_.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n_,"__esModule",{value:!0}),n_.TunnelMultiplexingPoolingCluster=void 0;const nB=nG(tA),nT=nE(tw),nR=nE(t_);class nZ extends nB.default{constructor(e){super(),this.logger=e.logger,this.opts=e,this.remoteMuxClient=e.remoteMuxClient}open(){let e=this.remoteMuxClient.multiplex({highWaterMark:nu.TUNNEL_HIGH_WATER_MARK}),t=this.opts,a=t.localHost,i=t.localPort,s=t.localHttps?"https":"http",n=t.allowInvalidCert,r=()=>{let o;if(e.destroyed){this.logger.debug("remote destroyed"),this.emit("dead");return}if(this.logger.debug("connecting locally to %s://%s:%d",s,a,i),t.localHttps){if(n)this.logger.debug("allowing invalid certificates");else{if(!t.localCert)throw Error("local_cert is required for https");if(!t.localKey)throw Error("local_key is required for https")}o=nR.connect({host:a,port:i,...n?{rejectUnauthorized:!1}:{cert:(0,ty.readFileSync)(t.localCert),key:(0,ty.readFileSync)(t.localKey),ca:t.localCa?[(0,ty.readFileSync)(t.localCa)]:void 0}})}else o=nT.connect({host:a,port:i});let l=()=>{this.logger.debug("remote close"),this.emit("dead"),o.end()};e.once("close",l),o.once("error",t=>{if(this.logger.debug("local error %s",t.message),o.end(),e.removeListener("close",l),"ECONNREFUSED"!==t.code&&"ECONNRESET"!==t.code)return e.end();setTimeout(r,1e3)}),o.once("connect",()=>{this.logger.debug("connected locally"),e.resume();let a=e;t.localHost&&(this.logger.debug("transform Host header to %s",t.localHost),a=e.pipe(new nC.HeaderHostTransformer({host:t.localHost,port:t.localPort}))),a.pipe(o).pipe(e),o.once("close",e=>{this.logger.debug("local connection closed [%s]",e)})})};e.on("data",e=>{let t=e.toString().match(/^(\w+) (\S+)/);t&&this.emit("request",{method:t[1],path:t[2]})}),this.emit("open",e),e.pause(),r()}}n_.TunnelMultiplexingPoolingCluster=nZ;class nN extends tA.EventEmitter{constructor(e){super(),this.clientId=null,this.url=null,this.basicAuthUser=null,this.basicAuthPassword=null,this.logger=e.logger,this.opts=e,this.closed=!1,this.host=e.host||"https://tunnels.meticulous.ai"}_getInfo(e){let{id:t,port:a,multiplexing_port:i,use_no_pool_multiplexing:s,url:n,max_conn_count:r,tunnel_passphrase:o,basic_auth_user:l,basic_auth_password:p}=e,{port:d,localHost:c}=this.opts,{localHttps:u,localCert:m,localKey:g,localCa:h,allowInvalidCert:f}=this.opts,b=new URL(n),v=b.hostname.split(".");return v.shift(),{name:t,url:n,maxConn:r||1,remoteHost:v.join("."),remotePort:a,multiplexingRemotePort:i,useNoPoolMultiplexing:s,useTls:"https:"===b.protocol,tunnelPassphrase:o,basicAuthUser:l,basicAuthPassword:p,localPort:d,localHost:c,localHttps:u,localCert:m,localKey:g,localCa:h,allowInvalidCert:f}}_init(e){let t=this.opts,a=this._getInfo.bind(this),i={responseType:"json",headers:{Authorization:t.apiToken},params:{supportsMultiplexing:!0,supportsNoMultiplexingPool:!0,new:!0}},s=`${this.host}/`+(t.subdomain||""),n=()=>{let t=ni.default.create({timeout:3e4});(0,ns.default)(t,{retries:3,shouldResetTimeout:!0}),t.get(s,i).then(t=>{let i=t.data;if(this.logger.debug("got tunnel information",t.data),200!==t.status)return e(Error(i&&i.error||"localtunnel server returned an error, please try again"));e(null,a(i))}).catch(t=>{var a;return(0,ni.isAxiosError)(t)&&(null===(a=t.response)||void 0===a?void 0:a.status)===401?e(Error("Unauthorized. Please check your API token")):(this.logger.error(`tunnel server offline: ${t.message}, retry 1s`),setTimeout(n,1e3))})};n()}async _establish(e){if(this.setMaxListeners(e.maxConn+(tA.EventEmitter.defaultMaxListeners||10)),!e.multiplexingRemotePort)throw Error("multiplexingRemotePort must be set");this.logger.debug(`using multiplexing ${e.useNoPoolMultiplexing?"no-pooling":"pooling"} agent`);let t=await this._establishMultiplexingCluster({...e,multiplexingRemotePort:e.multiplexingRemotePort,useNoPoolMultiplexing:e.useNoPoolMultiplexing});t.once("open",()=>{this.emit("url",{url:e.url,basicAuthUser:e.basicAuthUser,basicAuthPassword:e.basicAuthPassword})}),t.on("error",e=>{this.logger.debug("got socket error",e.message),this.emit("error",e)});let a=0;if(t.on("open",e=>{a++,this.logger.debug("tunnel open [total: %d]",a);let t=()=>{e.destroy()};if(this.closed)return t();this.once("close",t),e.once("close",()=>{this.removeListener("close",t)})}),t.on("dead",()=>{a--,this.logger.debug("tunnel dead [total: %d]",a),this.closed||!t||t instanceof nm.TunnelMultiplexingCluster||t.open()}),t.on("request",e=>{this.emit("request",e)}),t instanceof n_.TunnelMultiplexingPoolingCluster)for(let a=0;a %s:%s",d,i,s,e,t),(p=o?na.default.connect({host:e,port:t,rejectUnauthorized:!0}):nt.default.connect({host:e,port:t})).setNoDelay(!0),p.on("error",a=>{this.logger.debug("got remote connection error",a.message),"ECONNREFUSED"===a.code&&this.emit("error",Error(`connection refused: ${e}:${t} (check your firewall settings)`)),p.end()}),p.on("close",()=>{this.closed||this.logger.error("The remote connection was closed unexpectedly. Please check your network connection and try again.")});let c=o?"secureConnect":"connect";return new Promise(e=>{p.once(c,()=>{p.write(`AUTH ${l}`),p.once("data",t=>{"AUTH OK"!=t.toString()&&(this.emit("error",Error("Tunnel auth failed")),p.end());let o={remoteMuxClient:new nc(p,{highWaterMark:nu.TUNNEL_HIGH_WATER_MARK,peer_multiplex_options:{highWaterMark:nu.TUNNEL_HIGH_WATER_MARK}}),logger:this.logger,localHost:i,localPort:s,localHttps:n,allowInvalidCert:r};e(a?new nm.TunnelMultiplexingCluster(o):new n_.TunnelMultiplexingPoolingCluster(o))})})})}open(e){this._init((t,a)=>{if(t||!a)return e(t||void 0);this.clientId=a.name,this.url=a.url,this.basicAuthUser=a.basicAuthUser,this.basicAuthPassword=a.basicAuthPassword,this._establish(a).then(()=>{e()}).catch(e=>{this.emit("error",e)})})}close(){this.closed=!0,this.emit("close")}}s3.Tunnel=nN,s6.localtunnel=e=>{let t=new s3.Tunnel(e);return new Promise((e,a)=>t.open(i=>i?a(i):e(t)))},Object.defineProperty(s9,"localtunnel",{enumerable:!0,get:function(){return s6.localtunnel}});const nk=s4(tj("7SZkG"));var nV={};Object.defineProperty(nV,"__esModule",{value:!0}),nV.getPort=void 0,nV.getPort=function(e){if(""===e.port)switch(e.protocol){case"http:":case"ws:":return 80;case"https:":case"wss:":return 443;case"ftp:":return 21;default:return -1}let t=parseInt(e.port,10);return isNaN(t)?-1:t};const nW=async({apiToken:e,appUrl:t,commitSha:a,secureTunnelHost:i,onTunnelCreated:s,onTestRunCreated:n,onProgressUpdate:r,keepTunnelOpenPromise:o,environment:l})=>{let p,d,c;let u=nk.default.getLogger(tQ.METICULOUS_LOGGER_NAME),m=(0,s0.getApiToken)(e);m||(u.error("You must provide an API token by using the --apiToken parameter"),process.exit(1));let g=(0,s0.createClient)({apiToken:m});try{p=new URL(t)}catch(e){throw Error(`Invalid app URL: ${t}`)}let h=(0,nV.getPort)(p);if(-1===h)throw Error(`Invalid app URL port: ${t}`);let f=await (0,s9.localtunnel)({logger:u,apiToken:m,localHost:p.hostname,...i?{host:i}:{},port:h,localHttps:!1,allowInvalidCert:!1});if(u.debug("Creating test run"),!f.url||!f.basicAuthUser||!f.basicAuthPassword)throw Error("Either Tunnel URL, basic auth user or basic auth password were not set");null==s||s({url:f.url,basicAuthUser:f.basicAuthUser,basicAuthPassword:f.basicAuthPassword});let b=await (0,s0.executeSecureTunnelTestRun)({client:g,headSha:a,tunnelUrl:f.url,basicAuthUser:f.basicAuthUser,basicAuthPassword:f.basicAuthPassword,environment:l});if(!b)throw Error("Test run was not created");null==n||n(b);let v=(0,tQ.defer)(),y=e=>{if("ExecutionError"===e.status&&(void 0===c||Date.now()-c<3e5)){void 0===c&&(c=Date.now(),u.info("Test run failed with execution error. Waiting for 300 seconds to see if it gets automatically retried..."));return}d&&clearInterval(d),o?o.then(()=>{f.close(),v.resolve(e)}):(f.close(),v.resolve(e))};return d=setInterval(async()=>{let e=await (0,s0.getTestRun)({client:g,testRunId:b.id});if(null==r||r(e),s0.IN_PROGRESS_TEST_RUN_STATUS.includes(e.status))void 0!==c&&(u.info(`Retrying test run... (status is now ${e.status})`),c=void 0);else{y(e);return}},5e3),{testRun:await v.promise}};s2.executeRemoteTestRun=nW;var nO={};nO=tj("95REl");const nH=async e=>{let t=nO.operation({retries:7,factor:2,minTimeout:1e3}),a=new URL(e);return new Promise((i,s)=>{t.attempt(async()=>{if(await nF(a)){i();return}let n=Error(`Could not connect to '${e}'. Please check: +${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new eF(sS(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let e=new sg(void 0,Object.assign({_directives:this.directives},this.options));this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),e.range=[0,t,t],this.decorate(e,!1),yield e}}};var sG={};function sB(e,t){if(t)for(let a of t)switch(a.type){case"space":case"comment":e.push(a);break;case"newline":return e.push(a),!0}return!1}function sT(e,t,a){switch(e.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":e.type=a,e.source=t;break;case"block-scalar":{let i=e.props.slice(1),s=t.length;for(let t of("block-scalar-header"===e.props[0].type&&(s-=e.props[0].source.length),i))t.offset+=s;delete e.props,Object.assign(e,{type:a,source:t,end:i});break}case"block-map":case"block-seq":{let i={type:"newline",offset:e.offset+t.length,indent:e.indent,source:"\n"};delete e.items,Object.assign(e,{type:a,source:t,end:[i]});break}default:{let i="indent"in e?e.indent:-1,s="end"in e&&Array.isArray(e.end)?e.end.filter(e=>"space"===e.type||"comment"===e.type||"newline"===e.type):[];for(let t of Object.keys(e))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:a,indent:i,source:t,end:s})}}}function sR(e){switch(e.type){case"block-scalar":{let t="";for(let a of e.props)t+=sR(a);return t+e.source}case"block-map":case"block-seq":{let t="";for(let a of e.items)t+=sZ(a);return t}case"flow-collection":{let t=e.start.source;for(let a of e.items)t+=sZ(a);for(let a of e.end)t+=a.source;return t}case"document":{let t=sZ(e);if(e.end)for(let a of e.end)t+=a.source;return t}default:{let t=e.source;if("end"in e&&e.end)for(let a of e.end)t+=a.source;return t}}}function sZ({start:e,key:t,sep:a,value:i}){let s="";for(let t of e)s+=t.source;if(t&&(s+=sR(t)),a)for(let e of a)s+=e.source;return i&&(s+=sR(i)),s}tF(sG,"createScalarToken",()=>e9,e=>e9=e),tF(sG,"resolveAsScalar",()=>e6,e=>e6=e),tF(sG,"setScalarValue",()=>e3,e=>e3=e),tF(sG,"stringify",()=>e5,e=>e5=e),tF(sG,"visit",()=>e8,e=>e8=e),tF(sG,"BOM",()=>e7,e=>e7=e),tF(sG,"DOCUMENT",()=>te,e=>te=e),tF(sG,"FLOW_END",()=>tt,e=>tt=e),tF(sG,"SCALAR",()=>ta,e=>ta=e),tF(sG,"isCollection",()=>ti,e=>ti=e),tF(sG,"isScalar",()=>ts,e=>ts=e),tF(sG,"prettyToken",()=>tn,e=>tn=e),tF(sG,"tokenType",()=>tr,e=>tr=e),to=function(e,t){let{implicitKey:a=!1,indent:i,inFlow:s=!1,offset:n=-1,type:r="PLAIN"}=t,o=ei({type:r,value:e},{implicitKey:a,indent:i>0?" ".repeat(i):"",inFlow:s,options:{blockQuote:!0,lineWidth:-1}}),l=t.end??[{type:"newline",offset:-1,indent:i,source:"\n"}];switch(o[0]){case"|":case">":{let e=o.indexOf("\n"),t=o.substring(0,e),a=o.substring(e+1)+"\n",s=[{type:"block-scalar-header",offset:n,indent:i,source:t}];return sB(s,l)||s.push({type:"newline",offset:-1,indent:i,source:"\n"}),{type:"block-scalar",offset:n,indent:i,props:s,source:a}}case'"':return{type:"double-quoted-scalar",offset:n,indent:i,source:o,end:l};case"'":return{type:"single-quoted-scalar",offset:n,indent:i,source:o,end:l};default:return{type:"scalar",offset:n,indent:i,source:o,end:l}}},tl=function(e,t=!0,a){if(e){let i=(e,t,i)=>{let s="number"==typeof e?e:Array.isArray(e)?e[0]:e.offset;if(a)a(s,t,i);else throw new eF([s,s+1],t,i)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return e2(e,t,i);case"block-scalar":return e0({options:{strict:t}},e,i)}}return null},tp=function(e,t,a={}){let{afterKey:i=!1,implicitKey:s=!1,inFlow:n=!1,type:r}=a,o="indent"in e?e.indent:null;if(i&&"number"==typeof o&&(o+=2),!r)switch(e.type){case"single-quoted-scalar":r="QUOTE_SINGLE";break;case"double-quoted-scalar":r="QUOTE_DOUBLE";break;case"block-scalar":{let t=e.props[0];if("block-scalar-header"!==t.type)throw Error("Invalid block scalar header");r=">"===t.source[0]?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:r="PLAIN"}let l=ei({type:r,value:t},{implicitKey:s||null===o,indent:null!==o&&o>0?" ".repeat(o):"",inFlow:n,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":(function(e,t){let a=t.indexOf("\n"),i=t.substring(0,a),s=t.substring(a+1)+"\n";if("block-scalar"===e.type){let t=e.props[0];if("block-scalar-header"!==t.type)throw Error("Invalid block scalar header");t.source=i,e.source=s}else{let{offset:t}=e,a="indent"in e?e.indent:-1,n=[{type:"block-scalar-header",offset:t,indent:a,source:i}];for(let t of(sB(n,"end"in e?e.end:void 0)||n.push({type:"newline",offset:-1,indent:a,source:"\n"}),Object.keys(e)))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:"block-scalar",indent:a,props:n,source:s})}})(e,l);break;case'"':sT(e,l,"double-quoted-scalar");break;case"'":sT(e,l,"single-quoted-scalar");break;default:sT(e,l,"scalar")}},td=e=>"type"in e?sR(e):sZ(e);const sN=Symbol("break visit"),sk=Symbol("skip children"),sV=Symbol("remove item");function sW(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),function e(t,a,i){let s=i(a,t);if("symbol"==typeof s)return s;for(let n of["key","value"]){let r=a[n];if(r&&"items"in r){for(let a=0;a{let a=e;for(let[e,i]of t){let t=a?.[e];if(!t||!("items"in t))return;a=t.items[i]}return a},sW.parentCollection=(e,t)=>{let a=sW.itemAtPath(e,t.slice(0,-1)),i=t[t.length-1][0],s=a?.[i];if(s&&"items"in s)return s;throw Error("Parent collection not found")},e9=to,e6=tl,e3=tp,e5=td,e8=sW,e7="\uFEFF",te="\x02",tt="\x18",ta="\x1f",ti=e=>!!e&&"items"in e,ts=e=>!!e&&("scalar"===e.type||"single-quoted-scalar"===e.type||"double-quoted-scalar"===e.type||"block-scalar"===e.type),tn=function(e){switch(e){case"\uFEFF":return"";case"\x02":return"";case"\x18":return"";case"\x1f":return"";default:return JSON.stringify(e)}},tr=function(e){switch(e){case"\uFEFF":return"byte-order-mark";case"\x02":return"doc-mode";case"\x18":return"flow-error-end";case"\x1f":return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case"\n":case"\r\n":return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(e[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null};const sH=new Set("0123456789ABCDEFabcdef"),sF=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),sU=new Set(",[]{}"),sL=new Set(" ,[]{}\n\r "),sD=e=>!e||sL.has(e);function sY(e,t){for(let a=0;a=0;)switch(e[t].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;e[++t]?.type==="space";);return e.splice(t,e.length)}function sM(e){if("flow-seq-start"===e.start.type)for(let t of e.items)!t.sep||t.value||sY(t.start,"explicit-key-ind")||sY(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,sj(t.value)?t.value.end?Array.prototype.push.apply(t.value.end,t.sep):t.value.end=t.sep:Array.prototype.push.apply(t.start,t.sep),delete t.sep)}function sJ(e){let t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new tu||null,prettyErrors:t}}function sz(e,t={}){let{lineCounter:a,prettyErrors:i}=sJ(t),s=new tm(a?.addNewLine),n=new k(t),r=null;for(let t of n.compose(s.parse(e),!0,e.length))if(r){if("silent"!==r.options.logLevel){r.errors.push(new eF(t.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}}else r=t;return i&&a&&(r.errors.forEach(eL(e,a)),r.warnings.forEach(eL(e,a))),r}tc=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if("string"!=typeof e)throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let a=this.next??"stream";for(;a&&(t||this.hasChars(1));)a=yield*this.parseNext(a)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;" "===t||" "===t;)t=this.buffer[++e];return!t||"#"===t||"\n"===t||"\r"===t&&"\n"===this.buffer[e+1]}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let a=0;for(;" "===t;)t=this.buffer[++a+e];if("\r"===t){let t=this.buffer[a+e+1];if("\n"===t||!t&&!this.atEnd)return e+a+1}return"\n"!==t&&!(a>=this.indentNext)&&(t||this.atEnd)?-1:e+a}if("-"===t||"."===t){let t=this.buffer.substr(e,3);if(("---"===t||"..."===t)&&sO(this.buffer[e+3]))return -1}return e}getLine(){let e=this.lineEndPos;return(("number"!=typeof e||-1!==e&&ethis.indentValue&&!sO(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if(("-"===e||"?"===e||":"===e)&&sO(t)){let e=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=e,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(null===e)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(sD),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=(yield*this.parseBlockScalarHeader())+(yield*this.pushSpaces(!0)),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t;let a=-1;do(e=yield*this.pushNewline())>0?(t=yield*this.pushSpaces(!1),this.indentValue=a=t):t=0,t+=yield*this.pushSpaces(!0);while(e+t>0)let i=this.getLine();if(null===i)return this.setNext("flow");if((-1!==a&&a"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if("-"!==t)break}return yield*this.pushUntil(e=>sO(e)||"#"===e)}*parseBlockScalar(){let e,t=this.pos-1,a=0;e:for(let i=this.pos;e=this.buffer[i];++i)switch(e){case" ":a+=1;break;case"\n":t=i,a=0;break;case"\r":{let e=this.buffer[i+1];if(!e&&!this.atEnd)return this.setNext("block-scalar");if("\n"===e)break}default:break e}if(!e&&!this.atEnd)return this.setNext("block-scalar");if(a>=this.indentNext){-1===this.blockScalarIndent?this.indentNext=a:this.indentNext=this.blockScalarIndent+(0===this.indentNext?1:this.indentNext);do{let e=this.continueScalar(t+1);if(-1===e)break;t=this.buffer.indexOf("\n",e)}while(-1!==t)if(-1===t){if(!this.atEnd)return this.setNext("block-scalar");t=this.buffer.length}}let i=t+1;for(e=this.buffer[i];" "===e;)e=this.buffer[++i];if(" "===e){for(;" "===e||" "===e||"\r"===e||"\n"===e;)e=this.buffer[++i];t=i-1}else if(!this.blockScalarKeep)for(;;){let e=t-1,i=this.buffer[e];"\r"===i&&(i=this.buffer[--e]);let s=e;for(;" "===i;)i=this.buffer[--e];if("\n"===i&&e>=this.pos&&e+1+a>s)t=e;else break}return yield ta,yield*this.pushToIndex(t+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e;let t=this.flowLevel>0,a=this.pos-1,i=this.pos-1;for(;e=this.buffer[++i];)if(":"===e){let e=this.buffer[i+1];if(sO(e)||t&&sU.has(e))break;a=i}else if(sO(e)){let s=this.buffer[i+1];if("\r"===e&&("\n"===s?(i+=1,e="\n",s=this.buffer[i+1]):a=i),"#"===s||t&&sU.has(s))break;if("\n"===e){let e=this.continueScalar(i+1);if(-1===e)break;i=Math.max(i,e-2)}}else{if(t&&sU.has(e))break;a=i}return e||this.atEnd?(yield ta,yield*this.pushToIndex(a+1,!0),t?"flow":"doc"):this.setNext("plain-scalar")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){let a=this.buffer.slice(this.pos,e);return a?(yield a,this.pos+=a.length,a.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(sD))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let e=this.flowLevel>0,t=this.charAt(1);if(sO(t)||e&&sU.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if("<"===this.charAt(1)){let e=this.pos+2,t=this.buffer[e];for(;!sO(t)&&">"!==t;)t=this.buffer[++e];return yield*this.pushToIndex(">"===t?e+1:e,!1)}{let e=this.pos+1,t=this.buffer[e];for(;t;)if(sF.has(t))t=this.buffer[++e];else if("%"===t&&sH.has(this.buffer[e+1])&&sH.has(this.buffer[e+2]))t=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return"\n"===e?yield*this.pushCount(1):"\r"===e&&"\n"===this.charAt(1)?yield*this.pushCount(2):0}*pushSpaces(e){let t,a=this.pos-1;do t=this.buffer[++a];while(" "===t||e&&" "===t)let i=a-this.pos;return i>0&&(yield this.buffer.substr(this.pos,i),this.pos=a),i}*pushUntil(e){let t=this.pos,a=this.buffer[t];for(;!e(a);)a=this.buffer[++t];return yield*this.pushToIndex(t,!1)}},tu=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,a=this.lineStarts.length;for(;t>1;this.lineStarts[i]0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if("doc-end"===this.type&&(!e||"doc-end"!==e.type)){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let t=e??this.stack.pop();if(t){if(0===this.stack.length)yield t;else{let e=this.peek(1);switch("block-scalar"===t.type?t.indent="indent"in e?e.indent:0:"flow-collection"===t.type&&"document"===e.type&&(t.indent=0),"flow-collection"===t.type&&sM(t),e.type){case"document":e.value=t;break;case"block-scalar":e.props.push(t);break;case"block-map":{let a=e.items[e.items.length-1];if(a.value){e.items.push({start:[],key:t,sep:[]}),this.onKeyLine=!0;return}if(a.sep)a.value=t;else{Object.assign(a,{key:t,sep:[]}),this.onKeyLine=!a.explicitKey;return}break}case"block-seq":{let a=e.items[e.items.length-1];a.value?e.items.push({start:[],value:t}):a.value=t;break}case"flow-collection":{let a=e.items[e.items.length-1];!a||a.value?e.items.push({start:[],key:t,sep:[]}):a.sep?a.value=t:Object.assign(a,{key:t,sep:[]});return}default:yield*this.pop(),yield*this.pop(t)}if(("document"===e.type||"block-map"===e.type||"block-seq"===e.type)&&("block-map"===t.type||"block-seq"===t.type)){let a=t.items[t.items.length-1];a&&!a.sep&&!a.value&&a.start.length>0&&-1===sX(a.start)&&(0===t.indent||a.start.every(e=>"comment"!==e.type||e.indent=e.indent){let a=!this.onKeyLine&&this.indent===e.indent,i=a&&(t.sep||t.explicitKey)&&"seq-item-ind"!==this.type,s=[];if(i&&t.sep&&!t.value){let a=[];for(let i=0;ie.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(s=t.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":i||t.value?(s.push(this.sourceToken),e.items.push({start:s}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"explicit-key-ind":t.sep||t.explicitKey?i||t.value?(s.push(this.sourceToken),e.items.push({start:s,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}):(t.start.push(this.sourceToken),t.explicitKey=!0),this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey){if(t.sep){if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(sY(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]});else if(sj(t.key)&&!sY(t.sep,"newline")){let e=sP(t.start),a=t.key,i=t.sep;i.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:a,sep:i}]})}else s.length>0?t.sep=t.sep.concat(s,this.sourceToken):t.sep.push(this.sourceToken)}else if(sY(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let e=sP(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:null,sep:[this.sourceToken]}]})}}else t.sep?t.value||i?e.items.push({start:s,key:null,sep:[this.sourceToken]}):sY(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);i||t.value?(e.items.push({start:s,key:a,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(a):(Object.assign(t,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let t=this.startBlockValue(e);if(t){a&&"block-seq"!==t.type&&e.items.push({start:s}),this.stack.push(t);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let a="end"in t.value?t.value.end:void 0,i=Array.isArray(a)?a[a.length-1]:void 0;i?.type==="comment"?a?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let a=e.items[e.items.length-2],i=a?.value?.end;if(Array.isArray(i)){Array.prototype.push.apply(i,t.start),i.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;t.value||sY(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let t=this.startBlockValue(e);if(t){this.stack.push(t);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if("flow-error-end"===this.type){let e;do yield*this.pop(),e=this.peek(1);while(e&&"flow-collection"===e.type)}else if(0===e.end.length){switch(this.type){case"comma":case"explicit-key-ind":!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case"map-value-ind":!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:a,sep:[]}):t.sep?this.stack.push(a):Object.assign(t,{key:a,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let a=this.startBlockValue(e);a?this.stack.push(a):(yield*this.pop(),yield*this.step())}else{let t=this.peek(2);if("block-map"!==t.type||("map-value-ind"!==this.type||t.indent!==e.indent)&&("newline"!==this.type||t.items[t.items.length-1].sep)){if("map-value-ind"===this.type&&"flow-collection"!==t.type){let a=sP(sK(t));sM(e);let i=e.end.splice(1,e.end.length);i.push(this.sourceToken);let s={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:a,key:e,sep:i}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=s}else yield*this.lineEnd(e)}else yield*this.pop(),yield*this.step()}}flowScalar(e){if(this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=sP(sK(e));return t.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=sP(sK(e));return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return"comment"===this.type&&!(this.indent<=t)&&e.every(e=>"newline"===e.type||"space"===e.type)}*documentEnd(e){"doc-mode"!==this.type&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop())}}},tg=function(e,t,a){let i;"function"==typeof t?i=t:void 0===a&&t&&"object"==typeof t&&(a=t);let s=sz(e,a);if(!s)return null;if(s.warnings.forEach(e=>eo(s.options.logLevel,e)),s.errors.length>0){if("silent"!==s.options.logLevel)throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:i},a))},th=function(e,t={}){let{lineCounter:a,prettyErrors:i}=sJ(t),s=new tm(a?.addNewLine),n=new k(t),r=Array.from(n.compose(s.parse(e)));if(i&&a)for(let t of r)t.errors.forEach(eL(e,a)),t.warnings.forEach(eL(e,a));return r.length>0?r:Object.assign([],{empty:!0},n.streamInfo())},tf=function(e,t,a){let i=null;if("function"==typeof t||Array.isArray(t)?i=t:void 0===a&&t&&(a=t),"string"==typeof a&&(a=a.length),"number"==typeof a){let e=Math.round(a);a=e<1?void 0:e>8?{indent:8}:{indent:e}}if(void 0===e){let{keepUndefined:e}=a??t??{};if(!e)return}return new sg(e,i,a).toString(a)},n=k,r=sg,o=sm,l=sf,p=eF,d=eU,c=D,u=W,m=iv,g=O,h=H,f=F,b=U,v=ib,y=L,I=iJ,C=ik,x=ep,w=eu,_=sG,A=tc,S=tu,E=tm,G=tg,B=th,T=sz,R=tf,Z=ix,N=i_;const s$=tU(io).object({"app-url":tU(io).string().required(),"api-token":tU(io).string().required(),skip:tU(io).boolean().default(!1).optional().label("skip")}),sq=tU(io).object().pattern(tU(io).string(),s$),sQ=e=>{let t=tU(il).parse(e),{error:a,value:i}=sq.validate(t,{abortEarly:!1});if(a)throw Error(`Invalid projects-yaml: ${a.message}`);return Object.entries(i).map(([e,t])=>({name:e,apiToken:t["api-token"],appUrl:t["app-url"],skip:t.skip}))},s1=()=>{let e=(0,tP.getInput)("api-token",{required:!1}),t=(0,tP.getInput)("github-token",{required:!0}),a=(0,tP.getInput)("app-url",{required:!1}),i=(0,tP.getInput)("head-sha"),s=(0,tP.getInput)("projects-yaml",{required:!1});if(s){if(e||a)throw Error("Cannot provide both 'projects-yaml' and 'api-token' or 'app-url'");return{githubToken:t,headSha:i,projectTargets:sQ(s)}}if(!e||!a)throw Error("Must provide either 'projects-yaml' or 'api-token' and 'app-url'");return{githubToken:t,headSha:i,projectTargets:[{name:"default",apiToken:e,appUrl:a,skip:!1}]}};var a2=tj("2Evbo"),s0=tj("4aTko"),tQ=tj("3midM"),s2={},s4=s2&&s2.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(s2,"__esModule",{value:!0}),s2.executeRemoteTestRun=void 0;var s0=tj("4aTko"),tQ=tj("3midM"),s9={};Object.defineProperty(s9,"__esModule",{value:!0}),s9.localtunnel=void 0;var s6={};Object.defineProperty(s6,"__esModule",{value:!0}),s6.localtunnel=void 0;var s3={},s5=s3&&s3.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var s=Object.getOwnPropertyDescriptor(t,a);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,s)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),s8=s3&&s3.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s7=s3&&s3.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&s5(t,e,a);return s8(t,e),t},ne=s3&&s3.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(s3,"__esModule",{value:!0}),s3.Tunnel=void 0;const nt=ne(tw),na=ne(t_),ni=s7(tj("5mM36")),ns=ne(tj("3oP91"));var nn=tT.Duplex,nr=tT.Writable,no=tA.EventEmitter,nl=tj("04vO9");class np{constructor(e,t){this._client=e,this._server=t}get client(){return this._client}get server(){return this._server}}function nd(e,t,a){function i(){this._finished=!0,this._mux._send_end(this),this._check_remove()}nn.call(this,e),e=Object.assign({max_write_size:0},e),this._mux=t,this.mux=t,this._chan=a,this._max_write_size=e.max_write_size,this._check_read_overflow=!1!==e.check_read_overflow,this._seq=0,this._remote_free=0,this._set_remote_free=!1,this._data=null,this._cb=null,this._index=0,this._finished=!1,this._ended=!1,this._removed=!1,this._handshake_sent=!1,this._handshake_received=!1,this._end_pending=!1,this._error_end=!1,this._error_end_pending=!1,this.once("finish",i),this.once("close",function(){this.removeListener("finish",i),this._finished||(this._finished=!0,this._mux._send_end(this)),this._check_remove()}),t.duplexes.set(a,this),t._max_open>0&&t.duplexes.size===t._max_open&&setImmediate(function(){t.emit("full")})}function nc(e,t){if(no.call(this,t),t=Object.assign({max_open:0,max_header_size:0,keep_alive:3e4},t),this._max_duplexes=2147483648,this._max_open=t.max_open,this.duplexes=new Map,this._chan=0,this._chan_offset=t.high_channels?this._max_duplexes:0,this._parse_handshake_data=t.parse_handshake_data,this.carrier=e,e instanceof np){let a={...(t.http2||{}).headers,[tH.constants.HTTP2_HEADER_STATUS]:200,[tH.constants.HTTP2_HEADER_CONTENT_TYPE]:"application/octet-stream"};e.server.on("stream",(e,t)=>{if(this._max_open>0&&this.duplexes.size===this._max_open)return this.emit("full"),e.respond({[tH.constants.HTTP2_HEADER_STATUS]:503},{endStream:!0});let i=Buffer.from(t["bpmux-channel"],"base64").readUint32BE();if(this.duplexes.has(i))return e.respond({[tH.constants.HTTP2_HEADER_STATUS]:409},{endStream:!0});e.cork(),this._add_http2_duplex(e,i),this.emit("peer_multiplex",e);let s=!1;this._parse_http2_handshake(e,t,()=>{let t;s=!0;let i=e.uncork;return e.uncork=()=>{e.uncork=i,e.destroyed||(e.respond({...a,...this._make_http2_handshake(t)}),e._handshake_sent=!0,this.emit("handshake_sent",e,!0),e.emit("handshake_sent",!0),e.uncork())},a=>{t=a,e.uncork()}}),s?(this.emit("pre_handshake_sent",e,!0),e.emit("pre_handshake_sent",!0)):(e.respond({...a,...this._make_http2_handshake()}),e._handshake_sent=!0,this.emit("handshake_sent",e,!0),e.emit("handshake_sent",!0),e.uncork())});let i=0;for(let t of[e.client,e.server])t.on("close",()=>{2==++i&&(this.emit("finish"),this.emit("end"),this.emit("close"))}),t.on("error",e=>{for(let a of this.duplexes.values())a.session===t&&!a.destroyed&&a.listenerCount("error")>0&&a.emit("error",e);this.emit("error",e)});return}this._max_header_size=t.max_header_size,this._finished=!1,this._ended=!1,this._header_buffers=[],this._header_buffer_len=0,this._reading_duplex=null,this._peer_multiplex_options=t.peer_multiplex_options,this._coalesce_writes=t.coalesce_writes,this._sending=!1,this._send_requested=!1,this._keep_alive_id=null,this._keep_alive_paused=!1,this._out_stream=nl.encode(t),this._coalesce_writes&&(this._out_stream._pushFrameData=function(e){var t;for(t=0;t0&&t.emit("error",e);a.emit("error",e)}if(e.on("finish",s),e.on("close",s),this._in_stream.on("end",n),e.on("close",n),e.on("error",r),this._in_stream.on("error",r),this._out_stream.on("error",r),this._out_stream.on("drain",function(){a._send(),this._writableState.lengths._readableState.highWaterMark?s.emit("error",Error("too much data")):s.push(e))):((a._max_header_size<=0||a._header_buffer_len0&&7===e[0])return this.emit("keep_alive");if(this._check_buffer(e,5)){var t=this,a=e.readUInt8(0,!0),i=e.readUInt32BE(1,!0),s=this.duplexes.get(i);if(3!==a&&!s){if(this._max_open>0&&this.duplexes.size===this._max_open)return this.emit("full");s=new nd(this._peer_multiplex_options,this,i),this.emit("peer_multiplex",s)}if(s&&s._handshake_received){switch(a){case 0:s._ended=!0,s._check_remove(),s.push(null);break;case 6:s._ended=!0,s._check_remove(),s.emit("error",Error("peer error")),s.push(null);break;case 2:case 3:if(!this._check_buffer(e,13))break;n();break;case 4:s._remote_seq=e.slice(5),this._reading_duplex=s;break;default:this.emit("error",Error("unknown type: "+a))}return}switch(a){case 0:s._end_pending=!0;break;case 6:s._error_end_pending=!0;break;case 5:if(!this._check_buffer(e,9))return;n();break;case 1:{if(!this._check_buffer(e,9))return;if(0===s._seq){let t=e.readUInt32BE(5,!0);s._remote_free=s._max_write_size>0?Math.min(t,s._max_write_size):t,s._set_remote_free=!0}s._handshake_received=!0;let t=e.slice(9);if(this._parse_handshake_data)try{t=this._parse_handshake_data(t)}catch(e){s.listenerCount("error")>0&&s.emit("error",e),this.emit("error",e)}let a=!1,i=s._handshake_sent?null:()=>(a=!0,function(e){s._send_handshake(e)});this.emit("handshake",s,t,i),s.emit("handshake",t,i),a?this._send_handshake(s):s._send_handshake(),s._error_end_pending?(s._ended=!0,s._check_remove(),s.emit("error",Error("peer error")),s.push(null)):s._end_pending&&(s._ended=!0,s._check_remove(),s.push(null)),this._send();break}case 3:break;default:this.emit("error",Error("expected handshake, got: "+a))}}function n(){let a=e.readUInt32BE(5,!0),i=13===e.length?e.readUInt32BE(9,!0):0;a=s._max_write_size>0?Math.min(a,s._max_write_size):a,s._remote_free=i+a-s._seq,s._seq0&&this.duplexes.size===this._max_open)throw this.emit("full"),Error("full");if(this.carrier instanceof np){if(this.carrier.client.closed||this.carrier.client.destroyed)throw Error("closed")}else{if(this.carrier.destroyed)throw Error("closed");if(this.carrier._writableState.ending)throw Error("finished");if(this.carrier._readableState.ended)throw Error("ended")}var t,a,i=this;function s(t){if(i.carrier instanceof np){let a=Buffer.alloc(4);a.writeUInt32BE(t);let s=e.http2||{},n=i.carrier.client.request({[tH.constants.HTTP2_HEADER_PATH]:"/",[tH.constants.HTTP2_HEADER_METHOD]:"POST",...s.headers,"bpmux-channel":a.toString("base64"),...i._make_http2_handshake(e.handshake_data)},{...s.options,endStream:!1,waitForTrailers:!0});return i._add_http2_duplex(n,t),setImmediate(()=>{n._handshake_sent=!0,i.emit("handshake_sent",n,!0),n.emit("handshake_sent",!0)}),n.on("response",e=>{let a=e[tH.constants.HTTP2_HEADER_STATUS];if(200!==a){let e=Error(`peer returned status ${a} for channel ${t}`);return e.status=a,e.duplex=n,n.destroy(e),i.emit("error",e)}i._parse_http2_handshake(n,e,null)}),n}var a=new nd(e,i,t);return e._delay_handshake||setImmediate(function(){a._send_handshake(e.handshake_data)}),a}if(void 0!==(e=e||{}).channel)return this.duplexes.get(e.channel)||s(e.channel);t=this._chan;do{if(a=(t+1)%this._max_duplexes,!this.duplexes.has(t+this._chan_offset))return this._chan=a,s(t+this._chan_offset);t=a}while(t!==this._chan)throw this.emit("full"),Error("full")},nc.prototype._add_http2_duplex=function(e,t){e._mux=this,e.mux=this,e._chan=t,e.get_channel=()=>t,e._handshake_sent=!1,e._handshake_received=!1,e._error_end=!1,this.duplexes.set(t,e),this._max_open>0&&this.duplexes.size===this._max_open&&this.emit("full"),e.on("close",()=>{this.duplexes.delete(t),this.emit("removed",e)}),e.peer_error_then_end=function(e,t,a){return this._error_end=!0,this.end(e,t,a)},e.on("wantTrailers",function(){this.sendTrailers({"bpmux-error":this._error_end.toString()})}),e.on("trailers",function(e){"true"===e["bpmux-error"]&&this.emit("error",Error("peer error"))})},nc.prototype._make_http2_handshake=function(e){return{"bpmux-handshake":(e||Buffer.alloc(0)).toString("base64")}},nc.prototype._parse_http2_handshake=function(e,t,a){e._handshake_received=!0;let i=Buffer.alloc(0);try{i=Buffer.from(t["bpmux-handshake"],"base64"),this._parse_handshake_data&&(i=this._parse_handshake_data(i))}catch(t){e.listenerCount("error")>0&&e.emit("error",t),this.emit("error",t)}this.emit("handshake",e,i,a),e.emit("handshake",i,a)};var nu={};Object.defineProperty(nu,"__esModule",{value:!0}),nu.TUNNEL_HIGH_WATER_MARK=void 0,nu.TUNNEL_HIGH_WATER_MARK=10485760;var nm={},ng=nm&&nm.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var s=Object.getOwnPropertyDescriptor(t,a);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,s)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),nh=nm&&nm.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),nf=nm&&nm.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&ng(t,e,a);return nh(t,e),t},nb=nm&&nm.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(nm,"__esModule",{value:!0}),nm.TunnelMultiplexingCluster=void 0;const nv=nb(tA),ny=nf(tw),nI=nf(t_);var nC={};Object.defineProperty(nC,"__esModule",{value:!0}),nC.HeaderHostTransformer=void 0;class nx extends tT.Transform{constructor(e){super(e),this.host=`${e.host}:${e.port}`,this.replaced=!1}_transform(e,t,a){a(null,this.replaced?e:e.toString().replace(/(\r\n[Hh]ost: )\S+/,(e,t)=>(this.replaced=!0,t+this.host)))}}nC.HeaderHostTransformer=nx;class nw extends nv.default{constructor(e){super(),this.logger=e.logger,this.opts=e,this.remoteMuxClient=e.remoteMuxClient}startListening(){let e=this.opts,t=e.localHost,a=e.localPort,i=e.localHttps?"https":"http",s=e.allowInvalidCert,n=r=>{let o;if(r.destroyed){this.logger.debug("remote destroyed"),this.emit("dead");return}this.logger.debug("connecting locally to %s://%s:%d",i,t,a);let l=()=>{this.logger.warn("local connection timeout"),c(!0)},p=null;if(e.localHttps){if(s)this.logger.debug("allowing invalid certificates");else{if(!e.localCert)throw Error("local_cert is required for https");if(!e.localKey)throw Error("local_key is required for https")}o=nI.connect({host:t,port:a,...s?{rejectUnauthorized:!1}:{cert:(0,ty.readFileSync)(e.localCert),key:(0,ty.readFileSync)(e.localKey),ca:e.localCa?[(0,ty.readFileSync)(e.localCa)]:void 0}}),p=setTimeout(l,5e3)}else o=ny.connect({host:t,port:a});p=setTimeout(l,5e3);let d=()=>{this.logger.debug("remote close"),this.emit("dead"),o.end()};r.once("close",d);let c=e=>{if(o.end(),r.removeListener("close",d),!e)return r.end();this.logger.warn("retrying connection to local server"),setTimeout(()=>n(r),0)};o.once("error",e=>{p&&clearTimeout(p),this.logger.error("local error %s %s %s",e.message,e.code,e,e.errors),c("ECONNREFUSED"===e.code||"ECONNRESET"===e.code)}),o.once("connect",()=>{p&&clearTimeout(p),this.logger.debug("connected locally"),r.resume();let t=r;e.localHost&&(this.logger.debug("transform Host header to %s",e.localHost),t=r.pipe(new nC.HeaderHostTransformer({host:e.localHost,port:e.localPort}))),t.pipe(o).pipe(r),o.once("close",e=>{this.logger.debug("local connection closed [%s]",e)})})};this.remoteMuxClient.on("handshake",e=>{e.on("data",e=>{let t=e.toString().match(/^(\w+) (\S+)/);t&&this.emit("request",{method:t[1],path:t[2]})}),e.pause(),n(e),this.emit("open",e)})}}nm.TunnelMultiplexingCluster=nw;var n_={},nA=n_&&n_.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var s=Object.getOwnPropertyDescriptor(t,a);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,s)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),nS=n_&&n_.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),nE=n_&&n_.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&nA(t,e,a);return nS(t,e),t},nG=n_&&n_.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n_,"__esModule",{value:!0}),n_.TunnelMultiplexingPoolingCluster=void 0;const nB=nG(tA),nT=nE(tw),nR=nE(t_);class nZ extends nB.default{constructor(e){super(),this.logger=e.logger,this.opts=e,this.remoteMuxClient=e.remoteMuxClient}open(){let e=this.remoteMuxClient.multiplex({highWaterMark:nu.TUNNEL_HIGH_WATER_MARK}),t=this.opts,a=t.localHost,i=t.localPort,s=t.localHttps?"https":"http",n=t.allowInvalidCert,r=()=>{let o;if(e.destroyed){this.logger.debug("remote destroyed"),this.emit("dead");return}if(this.logger.debug("connecting locally to %s://%s:%d",s,a,i),t.localHttps){if(n)this.logger.debug("allowing invalid certificates");else{if(!t.localCert)throw Error("local_cert is required for https");if(!t.localKey)throw Error("local_key is required for https")}o=nR.connect({host:a,port:i,...n?{rejectUnauthorized:!1}:{cert:(0,ty.readFileSync)(t.localCert),key:(0,ty.readFileSync)(t.localKey),ca:t.localCa?[(0,ty.readFileSync)(t.localCa)]:void 0}})}else o=nT.connect({host:a,port:i});let l=()=>{this.logger.debug("remote close"),this.emit("dead"),o.end()};e.once("close",l),o.once("error",t=>{if(this.logger.debug("local error %s",t.message),o.end(),e.removeListener("close",l),"ECONNREFUSED"!==t.code&&"ECONNRESET"!==t.code)return e.end();setTimeout(r,1e3)}),o.once("connect",()=>{this.logger.debug("connected locally"),e.resume();let a=e;t.localHost&&(this.logger.debug("transform Host header to %s",t.localHost),a=e.pipe(new nC.HeaderHostTransformer({host:t.localHost,port:t.localPort}))),a.pipe(o).pipe(e),o.once("close",e=>{this.logger.debug("local connection closed [%s]",e)})})};e.on("data",e=>{let t=e.toString().match(/^(\w+) (\S+)/);t&&this.emit("request",{method:t[1],path:t[2]})}),this.emit("open",e),e.pause(),r()}}n_.TunnelMultiplexingPoolingCluster=nZ;class nN extends tA.EventEmitter{constructor(e){super(),this.clientId=null,this.url=null,this.basicAuthUser=null,this.basicAuthPassword=null,this.logger=e.logger,this.opts=e,this.closed=!1,this.host=e.host||"https://tunnels.meticulous.ai"}_getInfo(e){let{id:t,port:a,multiplexing_port:i,use_no_pool_multiplexing:s,url:n,max_conn_count:r,tunnel_passphrase:o,basic_auth_user:l,basic_auth_password:p}=e,{port:d,localHost:c}=this.opts,{localHttps:u,localCert:m,localKey:g,localCa:h,allowInvalidCert:f}=this.opts,b=new URL(n),v=b.hostname.split(".");return v.shift(),{name:t,url:n,maxConn:r||1,remoteHost:v.join("."),remotePort:a,multiplexingRemotePort:i,useNoPoolMultiplexing:s,useTls:"https:"===b.protocol,tunnelPassphrase:o,basicAuthUser:l,basicAuthPassword:p,localPort:d,localHost:c,localHttps:u,localCert:m,localKey:g,localCa:h,allowInvalidCert:f}}_init(e){let t=this.opts,a=this._getInfo.bind(this),i={responseType:"json",headers:{Authorization:t.apiToken},params:{supportsMultiplexing:!0,supportsNoMultiplexingPool:!0,new:!0}},s=`${this.host}/`+(t.subdomain||""),n=()=>{let t=ni.default.create({timeout:3e4});(0,ns.default)(t,{retries:3,shouldResetTimeout:!0}),t.get(s,i).then(t=>{let i=t.data;if(this.logger.debug("got tunnel information",t.data),200!==t.status)return e(Error(i&&i.error||"localtunnel server returned an error, please try again"));e(null,a(i))}).catch(t=>{var a;return(0,ni.isAxiosError)(t)&&(null===(a=t.response)||void 0===a?void 0:a.status)===401?e(Error("Unauthorized. Please check your API token")):(this.logger.error(`tunnel server offline: ${t.message}, retry 1s`),setTimeout(n,1e3))})};n()}async _establish(e){if(this.setMaxListeners(e.maxConn+(tA.EventEmitter.defaultMaxListeners||10)),!e.multiplexingRemotePort)throw Error("multiplexingRemotePort must be set");this.logger.debug(`using multiplexing ${e.useNoPoolMultiplexing?"no-pooling":"pooling"} agent`);let t=await this._establishMultiplexingCluster({...e,multiplexingRemotePort:e.multiplexingRemotePort,useNoPoolMultiplexing:e.useNoPoolMultiplexing});t.once("open",()=>{this.emit("url",{url:e.url,basicAuthUser:e.basicAuthUser,basicAuthPassword:e.basicAuthPassword})}),t.on("error",e=>{this.logger.debug("got socket error",e.message),this.emit("error",e)});let a=0;if(t.on("open",e=>{a++,this.logger.debug("tunnel open [total: %d]",a);let t=()=>{e.destroy()};if(this.closed)return t();this.once("close",t),e.once("close",()=>{this.removeListener("close",t)})}),t.on("dead",()=>{a--,this.logger.debug("tunnel dead [total: %d]",a),this.closed||!t||t instanceof nm.TunnelMultiplexingCluster||t.open()}),t.on("request",e=>{this.emit("request",e)}),t instanceof n_.TunnelMultiplexingPoolingCluster)for(let a=0;a %s:%s",d,i,s,e,t),(p=o?na.default.connect({host:e,port:t,rejectUnauthorized:!0}):nt.default.connect({host:e,port:t})).setNoDelay(!0),p.on("error",a=>{this.logger.debug("got remote connection error",a.message),"ECONNREFUSED"===a.code&&this.emit("error",Error(`connection refused: ${e}:${t} (check your firewall settings)`)),p.end()}),p.on("close",()=>{this.closed||this.logger.error("The remote connection was closed unexpectedly. Please check your network connection and try again.")});let c=o?"secureConnect":"connect";return new Promise(e=>{p.once(c,()=>{p.write(`AUTH ${l}`),p.once("data",t=>{"AUTH OK"!=t.toString()&&(this.emit("error",Error("Tunnel auth failed")),p.end());let o={remoteMuxClient:new nc(p,{highWaterMark:nu.TUNNEL_HIGH_WATER_MARK,peer_multiplex_options:{highWaterMark:nu.TUNNEL_HIGH_WATER_MARK}}),logger:this.logger,localHost:i,localPort:s,localHttps:n,allowInvalidCert:r};e(a?new nm.TunnelMultiplexingCluster(o):new n_.TunnelMultiplexingPoolingCluster(o))})})})}open(e){this._init((t,a)=>{if(t||!a)return e(t||void 0);this.clientId=a.name,this.url=a.url,this.basicAuthUser=a.basicAuthUser,this.basicAuthPassword=a.basicAuthPassword,this._establish(a).then(()=>{e()}).catch(e=>{this.emit("error",e)})})}close(){this.closed=!0,this.emit("close")}}s3.Tunnel=nN,s6.localtunnel=e=>{let t=new s3.Tunnel(e);return new Promise((e,a)=>t.open(i=>i?a(i):e(t)))},Object.defineProperty(s9,"localtunnel",{enumerable:!0,get:function(){return s6.localtunnel}});const nk=s4(tj("7SZkG"));var nV={};Object.defineProperty(nV,"__esModule",{value:!0}),nV.getPort=void 0,nV.getPort=function(e){if(""===e.port)switch(e.protocol){case"http:":case"ws:":return 80;case"https:":case"wss:":return 443;case"ftp:":return 21;default:return -1}let t=parseInt(e.port,10);return isNaN(t)?-1:t};const nW=async({apiToken:e,appUrl:t,commitSha:a,secureTunnelHost:i,onTunnelCreated:s,onTestRunCreated:n,onProgressUpdate:r,keepTunnelOpenPromise:o,environment:l})=>{let p,d,c;let u=nk.default.getLogger(tQ.METICULOUS_LOGGER_NAME),m=(0,s0.getApiToken)(e);m||(u.error("You must provide an API token by using the --apiToken parameter"),process.exit(1));let g=(0,s0.createClient)({apiToken:m});try{p=new URL(t)}catch(e){throw Error(`Invalid app URL: ${t}`)}let h=(0,nV.getPort)(p);if(-1===h)throw Error(`Invalid app URL port: ${t}`);let f=await (0,s9.localtunnel)({logger:u,apiToken:m,localHost:p.hostname,...i?{host:i}:{},port:h,localHttps:!1,allowInvalidCert:!1});if(u.debug("Creating test run"),!f.url||!f.basicAuthUser||!f.basicAuthPassword)throw Error("Either Tunnel URL, basic auth user or basic auth password were not set");null==s||s({url:f.url,basicAuthUser:f.basicAuthUser,basicAuthPassword:f.basicAuthPassword});let b=await (0,s0.executeSecureTunnelTestRun)({client:g,headSha:a,tunnelUrl:f.url,basicAuthUser:f.basicAuthUser,basicAuthPassword:f.basicAuthPassword,environment:l});if(!b)throw Error("Test run was not created");null==n||n(b);let v=(0,tQ.defer)(),y=e=>{if("ExecutionError"===e.status&&(void 0===c||Date.now()-c<3e5)){void 0===c&&(c=Date.now(),u.info("Test run failed with execution error. Waiting for 300 seconds to see if it gets automatically retried..."));return}d&&clearInterval(d),o?o.then(()=>{f.close(),v.resolve(e)}):(f.close(),v.resolve(e))};return d=setInterval(async()=>{let e=await (0,s0.getTestRun)({client:g,testRunId:b.id});if(null==r||r(e),s0.IN_PROGRESS_TEST_RUN_STATUS.includes(e.status))void 0!==c&&(u.info(`Retrying test run... (status is now ${e.status})`),c=void 0);else{y(e);return}},5e3),{testRun:await v.promise}};s2.executeRemoteTestRun=nW;var ie=tj("7SZkG"),nO={};nO=tj("95REl");const nH=async e=>{let t=nO.operation({retries:7,factor:2,minTimeout:1e3}),a=new URL(e);return new Promise((i,s)=>{t.attempt(async()=>{if(await nF(a)){i();return}let n=Error(`Could not connect to '${e}'. Please check: 1. The server running at '${e}' has fully started by the time the Meticulous action starts. You may need to add a 'sleep 30' after starting the server to ensure that this is the case. 2. The server running at '${e}' is using tcp instead of tcp6. You can use 'netstat -tulpen' to see what addresses and ports it is bound to. @@ -78,10 +78,10 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus In addition we were not able to trigger a run on ${a} since the '${p}' branch is now pointing to ${d}. Therefore no diffs will be reported for this run. Re-running the tests may fix this.`;return e.warn(t),(0,tP.warning)(t),{baseTestRunExists:!1}}let c=await nJ({owner:n,repo:r,workflowId:o,ref:p,commitSha:a,octokit:s,logger:e});if(null==c){let t=`Warning: Could not retrieve dispatched workflow run. Will not perform diffs against ${a}.`;return e.warn(t),(0,tP.warning)(t),{baseTestRunExists:!1}}return e.info(`Waiting on workflow run: ${c.html_url}`),await n4({owner:n,repo:r,workflowRunId:c.workflowRunId,octokit:s,commitSha:a,timeout:n1,logger:e}),{baseTestRunExists:!0}},n4=async({commitSha:e,...t})=>{let a=await nz(t);if(null==a||nq(a.status))throw Error(`Timed out while waiting for workflow run (${t.workflowRunId}) to complete.`);if("completed"!==a.status||"success"!==a.conclusion)throw Error(`Comparing against visual snapshots taken on ${e}, but the corresponding workflow run [${a.id}] did not complete successfully. See: ${a.html_url}`)},n9=async({commitSha:e,logger:t,...a})=>{let i=await nz(a);return null==i||nq(i.status)?(t.warn(`Timed out while waiting for workflow run (${a.workflowRunId}) to complete. Running without comparisons.`),{baseTestRunExists:!1}):"completed"!==i.status||"success"!==i.conclusion?(t.warn(`Comparing against visual snapshots taken on ${e}, but the corresponding workflow run [${i.id}] did not complete successfully. See: ${i.html_url}. Running without comparisons.`),{baseTestRunExists:!1}):{baseTestRunExists:!0}},n6=async({owner:e,repo:t,ref:a,octokit:i,logger:s})=>{try{return(await i.rest.repos.getBranch({owner:e,repo:t,branch:a})).data.commit.sha}catch(e){if(nD(e))throw Error(`Missing permission to get the head commit of the branch '${a}'. This is required in order to correctly calculate the two commits to compare. Please add the 'contents: read' permission to your workflow YAML file: see ${nL} for the correct setup.`);throw s.error(`Unable to get head commit of branch '${a}'. This is required in order to correctly calculate the two commits to compare. ${nX}`),e}},n3=e=>e.substring(0,7),n5=(e,t)=>"push"===e?{type:"push",payload:t}:"pull_request"===e?{type:"pull_request",payload:t}:"workflow_dispatch"===e?{type:"workflow_dispatch",payload:t}:null,n8=e=>!!e&&"pull_request"===e.type&&e.payload.pull_request.title.toLowerCase().includes("[meticulous debug]");var n7=tj("3X9Zh");const re=e=>``,rt=async({octokit:e,event:t,owner:a,repo:i,body:s,shortHeadSha:n,testSuiteId:r,createIfDoesNotExist:o,logger:l})=>{if("pull_request"===t.type)try{let l=await e.rest.issues.listComments({owner:a,repo:i,issue_number:t.payload.pull_request.number,per_page:1e3}),p=re(r),d=l.data.find(e=>(e.body??"").indexOf(p)>-1),c=r?`Test suite: ${r}. `:"",u=`${s} -${c}Last updated for commit ${n}. This comment will update as new commits are pushed.${p}`;null!=d?await e.rest.issues.updateComment({owner:a,repo:i,comment_id:d.id,body:u}):o&&await e.rest.issues.createComment({owner:a,repo:i,issue_number:t.payload.pull_request.number,body:u})}catch(e){if(nD(e))throw Error(`Missing permission to list and post comments to the pull request #${t.payload.pull_request.number}. Please add the 'pull-requests: write' permission to your workflow YAML file: see ${nL} for the correct setup.`);throw l.error(`Unable to post / update comment on PR #${t.payload.pull_request.number}. ${nX}`),e}};tj("endj4");var aQ=tj("lrbwi");const ra=(0,aQ.default).fromObject({minutes:45});var s0=tj("4aTko");const ri=async({apiToken:e,headCommitSha:t})=>{let a=(0,s0.createClient)({apiToken:e});return await (0,s0.getGitHubCloudReplayBaseTestRun)({client:a,headCommitSha:t})},rs=async({apiToken:e,appUrl:t,testRunId:a,githubToken:i,headSha:s,isSingleTestRunExecution:n})=>{let{payload:r}=a2.context,o=n5(a2.context.eventName,r),{owner:l,repo:p}=a2.context.repo,d=n8(o),c=(0,n7.getOctokitOrFail)(i),u=n?ii():ia(`Test Run ${a}`),m=(0,s0.createClient)({apiToken:e}),g=await (0,s0.getProject)(m);if(!g)throw Error(`Could not retrieve project data${n?"":` for project ${a}`}. Is the API token correct?`);if(u.info(`Running tests for project ${g.organization.name}/${g.name} against app URL '${t}' ${n?"":` (test run ID ${a})`}...`),null==o){u.warn(`Running report-diffs-action is only supported for 'push', \ +${c}Last updated for commit ${n}. This comment will update as new commits are pushed.${p}`;null!=d?await e.rest.issues.updateComment({owner:a,repo:i,comment_id:d.id,body:u}):o&&await e.rest.issues.createComment({owner:a,repo:i,issue_number:t.payload.pull_request.number,body:u})}catch(e){if(nD(e))throw Error(`Missing permission to list and post comments to the pull request #${t.payload.pull_request.number}. Please add the 'pull-requests: write' permission to your workflow YAML file: see ${nL} for the correct setup.`);throw l.error(`Unable to post / update comment on PR #${t.payload.pull_request.number}. ${nX}`),e}};tj("endj4");var aQ=tj("lrbwi");const ra=(0,aQ.default).fromObject({minutes:45});var s0=tj("4aTko");const ri=async({apiToken:e,headCommitSha:t})=>{let a=(0,s0.createClient)({apiToken:e});return await (0,s0.getGitHubCloudReplayBaseTestRun)({client:a,headCommitSha:t})},rs=async({apiToken:e,appUrl:t,testRunId:a,githubToken:i,headSha:s,isSingleTestRunExecution:n})=>{let{payload:r}=a2.context,o=n5(a2.context.eventName,r),{owner:l,repo:p}=a2.context.repo,d=n8(o),c=(0,n7.getOctokitOrFail)(i),u=n?tU(ie).getLogger(tQ.METICULOUS_LOGGER_NAME):ia(`Test Run ${a}`),m=(0,s0.createClient)({apiToken:e}),g=await (0,s0.getProject)(m);if(!g)throw Error(`Could not retrieve project data${n?"":` for project ${a}`}. Is the API token correct?`);if(u.info(`Running tests for project ${g.organization.name}/${g.name} against app URL '${t}' ${n?"":` (test run ID ${a})`}...`),null==o){u.warn(`Running report-diffs-action is only supported for 'push', \ 'pull_request' and 'workflow_dispatch' events, but was triggered \ on a '${a2.context.eventName}' event. Skipping execution.`);return}let{baseCommitSha:h,baseTestRun:f}=await ri({apiToken:e,headCommitSha:s}),b=null;if(null!=f)b=h,u.info(`Tests already exist for commit ${h} (${f.id})`);else{let{base:e}=await a4(o,{useDeploymentUrl:!1},u);if(e){let{baseTestRunExists:t}=await n2({logger:u,event:o,base:e,context:a2.context,octokit:c});t&&(b=e)}}null!=b?u.info(`Comparing visual snapshots for the commit ${ir(s)}, against ${ir(b)}`):u.info(`Generating visual snapshots for commit ${ir(s)}`),await nH(t);let v=d?(0,tQ.defer)():null,y=null,I=0;await (0,s2.executeRemoteTestRun)({apiToken:e,appUrl:t,commitSha:s,environment:"github-actions",onTunnelCreated:({url:e,basicAuthUser:i,basicAuthPassword:n})=>{u.info(`Secure tunnel to ${t} created: ${e}, user: ${i}, password: ${n}`),d&&rt({octokit:c,event:o,owner:l,repo:p,body:`\u{1F916} Meticulous is running in debug mode. Secure tunnel to ${t} created: ${e} user: \`${i}\` password: \`${n}\`. -Tunnel will be live for up to ${ra.toHuman()}. Cancel the workflow run to close the tunnel early.`,testSuiteId:`__meticulous_debug_${a}__`,shortHeadSha:n3(s),createIfDoesNotExist:!0,logger:u}).catch(e=>{u.error(e)})},onTestRunCreated:e=>{u.info(`Test run created: ${e.url}`)},onProgressUpdate:e=>{(0,s0.IN_PROGRESS_TEST_RUN_STATUS).includes(e.status)||!v||y||(u.info(`Test run execution completed. Keeping tunnel open for ${ra.toHuman()}`),y=setTimeout(()=>{v.resolve()},ra.as("milliseconds")));let t=e.configData.testCases?.length||0,a=e.resultData?.results?.length||0;a!=I&&t&&(u.info(`Executed ${a}/${t} test cases`),I=a)},...v?{keepTunnelOpenPromise:v.promise}:{}})};(async()=>{let e=ii(),t=await (0,tM.initSentry)("report-diffs-action-cloud-compute-v1",1),a=t.startTransaction({name:"report-diffs-action.runMeticulousTestsActionInCloud",description:"Run Meticulous tests action (in cloud)",op:"report-diffs-action.runMeticulousTestsActionInCloud"}),i="",{projectTargets:s,headSha:n,githubToken:r}=s1(),o=n||a3(),l=s.filter(e=>e.skip),p=s.filter(e=>!e.skip),d=1===s.length&&"default"===s[0].name;if(l){let t=l.map(e=>e.name);e.info(`Skipping test runs for the following targets: ${t.join(", ")}`)}(await Promise.allSettled(p.map(e=>rs({testRunId:e.name,apiToken:e.apiToken,appUrl:e.appUrl,githubToken:r,headSha:o,isSingleTestRunExecution:d})))).forEach((e,t)=>{if("rejected"===e.status){let a=e.reason instanceof Error?e.reason.message:`${e.reason}`;d?i=a:i+=`Test run ${p[t].name} failed: ${a} +Tunnel will be live for up to ${ra.toHuman()}. Cancel the workflow run to close the tunnel early.`,testSuiteId:`__meticulous_debug_${a}__`,shortHeadSha:n3(s),createIfDoesNotExist:!0,logger:u}).catch(e=>{u.error(e)})},onTestRunCreated:e=>{u.info(`Test run created: ${e.url}`)},onProgressUpdate:e=>{(0,s0.IN_PROGRESS_TEST_RUN_STATUS).includes(e.status)||!v||y||(u.info(`Test run execution completed. Keeping tunnel open for ${ra.toHuman()}`),y=setTimeout(()=>{v.resolve()},ra.as("milliseconds")));let t=e.configData.testCases?.length||0,a=e.resultData?.results?.length||0;a!=I&&t&&(u.info(`Executed ${a}/${t} test cases`),I=a)},...v?{keepTunnelOpenPromise:v.promise}:{}})};(async()=>{let e=ii(),t=await (0,tM.initSentry)("report-diffs-action-cloud-compute-v1",1),a=t.startTransaction({name:"report-diffs-action.runMeticulousTestsActionInCloud",description:"Run Meticulous tests action (in cloud)",op:"report-diffs-action.runMeticulousTestsActionInCloud"}),i="",{projectTargets:s,headSha:n,githubToken:r}=s1(),o=n||a3(),l=s.filter(e=>e.skip),p=s.filter(e=>!e.skip),d=1===s.length&&"default"===s[0].name;if(l.length>0){let t=l.map(e=>e.name);e.info(`Skipping test runs for the following targets: ${t.join(", ")}`)}(await Promise.allSettled(p.map(e=>rs({testRunId:e.name,apiToken:e.apiToken,appUrl:e.appUrl,githubToken:r,headSha:o,isSingleTestRunExecution:d})))).forEach((e,t)=>{if("rejected"===e.status){let a=e.reason instanceof Error?e.reason.message:`${e.reason}`;d?i=a:i+=`Test run ${p[t].name} failed: ${a} `}}),i?((0,tP.setFailed)(i),a.setStatus("unknown_error")):a.setStatus("ok"),a.finish(),await t.getClient()?.close(5e3),process.exit(i?1:0)})().catch(e=>{let t=e instanceof Error?e.message:`${e}`;(0,tP.setFailed)(t),process.exit(1)}); \ No newline at end of file diff --git a/src/actions/cloud-compute/cloud-compute.ts b/src/actions/cloud-compute/cloud-compute.ts index 248180a..1e69cf2 100644 --- a/src/actions/cloud-compute/cloud-compute.ts +++ b/src/actions/cloud-compute/cloud-compute.ts @@ -46,7 +46,7 @@ export const runMeticulousTestsCloudComputeAction = async (): Promise => { projectTargets.length === 1 && projectTargets[0].name === "default"; // Log skipped targets, if any - if (skippedTargets) { + if (skippedTargets.length > 0) { const skippedTargetNames = skippedTargets.map((target) => target.name); logger.info( `Skipping test runs for the following targets: ${skippedTargetNames.join( diff --git a/src/actions/cloud-compute/run-test-run.ts b/src/actions/cloud-compute/run-test-run.ts index d4dbc2b..78f0142 100644 --- a/src/actions/cloud-compute/run-test-run.ts +++ b/src/actions/cloud-compute/run-test-run.ts @@ -5,8 +5,9 @@ import { IN_PROGRESS_TEST_RUN_STATUS, TestRun, } from "@alwaysmeticulous/client"; -import { defer } from "@alwaysmeticulous/common"; +import { defer, METICULOUS_LOGGER_NAME } from "@alwaysmeticulous/common"; import { executeRemoteTestRun } from "@alwaysmeticulous/remote-replay-launcher"; +import log from "loglevel"; import { throwIfCannotConnectToOrigin } from "../../common/check-connection"; import { tryTriggerTestsWorkflowOnBase } from "../../common/ensure-base-exists.utils"; import { shortCommitSha } from "../../common/environment.utils"; @@ -44,7 +45,7 @@ export const runOneTestRun = async ({ const isDebugPRRun = isDebugPullRequestRun(event); const octokit = getOctokitOrFail(githubToken); const logger = isSingleTestRunExecution - ? initLogger() + ? log.getLogger(METICULOUS_LOGGER_NAME) : getPrefixedLogger(`Test Run ${testRunId}`); const apiClient = createClient({ apiToken,