gha-workflow-testing 1.0.0 โ†’ 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +16 -19
  2. package/dist/check_run.d.ts +20 -0
  3. package/dist/check_run.d.ts.map +1 -0
  4. package/dist/check_run.js +110 -0
  5. package/dist/check_run.js.map +1 -0
  6. package/dist/github-api.d.ts +2 -0
  7. package/dist/github-api.d.ts.map +1 -1
  8. package/dist/github-api.js +37 -11
  9. package/dist/github-api.js.map +1 -1
  10. package/dist/global_setup.d.ts +9 -0
  11. package/dist/global_setup.d.ts.map +1 -0
  12. package/dist/global_setup.js +50 -0
  13. package/dist/global_setup.js.map +1 -0
  14. package/dist/global_teardown.d.ts +10 -0
  15. package/dist/global_teardown.d.ts.map +1 -0
  16. package/dist/global_teardown.js +77 -0
  17. package/dist/global_teardown.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/reporter.d.ts +28 -0
  23. package/dist/reporter.d.ts.map +1 -1
  24. package/dist/reporter.js +106 -51
  25. package/dist/reporter.js.map +1 -1
  26. package/dist/reusable_reporter.d.ts +211 -0
  27. package/dist/reusable_reporter.d.ts.map +1 -0
  28. package/dist/reusable_reporter.js +749 -0
  29. package/dist/reusable_reporter.js.map +1 -0
  30. package/dist/workflow_status.d.ts +57 -0
  31. package/dist/workflow_status.d.ts.map +1 -0
  32. package/dist/workflow_status.js +165 -0
  33. package/dist/workflow_status.js.map +1 -0
  34. package/package.json +6 -7
  35. package/src/check_run.ts +122 -0
  36. package/src/github-api.ts +44 -12
  37. package/src/global_setup.ts +16 -0
  38. package/src/global_teardown.ts +53 -0
  39. package/src/index.ts +3 -0
  40. package/src/reporter.ts +121 -21
  41. package/src/reusable_reporter.ts +890 -0
  42. package/src/workflow_status.ts +181 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable_reporter.js","sourceRoot":"","sources":["../src/reusable_reporter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwdH,kDAYC;AAGD,sDAEC;AAiXD,4DAYC;AAGD,gEAEC;AAz2BD,uCAAyB;AACzB,yCAAkD;AAkBlD,6FAA6F;AAChF,QAAA,iBAAiB,GAAG,UAAU,CAAC;AA4B5C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAa,wBAAyB,SAAQ,+BAAoB;IAIhE,YAAY,YAAoB;QAC9B,KAAK,CAAC,YAAY,CAAC,CAAC;QAHd,mBAAc,GAAgD,EAAE,CAAC;QAIvE,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC;IACzC,CAAC;IAED,4EAA4E;IAC5E,qBAAqB;IACrB,4EAA4E;IAE5E;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,GAAc,EAAE,KAAa;QAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAAC,GAAc,EAAE,KAAa;QACzD,MAAM,IAAI,GAAS,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,sEAAsE;YACtE,kEAAkE;YAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC;YACnC,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEvE,2BAA2B;YAC3B,kFAAkF;YAClF,iDAAiD;YACjD,IAAI,QAAgB,CAAC;YACrB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,QAAQ,GAAG,yBAAiB,CAAC;YAC/B,CAAC;iBAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBAChC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,aAAa,CAAC,CAAC,mDAAmD;YAC/E,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;oBAC9B,YAAY,EAAE,QAAQ;oBACtB,QAAQ,EAAE,QAAQ,KAAK,yBAAiB;oBACxC,cAAc,EAAE,EAAE;oBAClB,IAAI,EAAE,EAAE;oBACR,aAAa,EAAE,SAAS;oBACxB,SAAS,EAAE,CAAC;oBACZ,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC;oBACb,WAAW,EAAE,CAAC;oBACd,WAAW,EAAE,CAAC;iBACf,CAAC;YACJ,CAAC;YAED,6DAA6D;YAC7D,IAAI,UAAU,IAAI,aAAa;gBAC3B,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE5C,2BAA2B;YAC3B,MAAM,QAAQ,GAAgD,EAAE,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACjD,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,MAAM,MAAM,GACV,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC;oBACzE,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;oBACjE,KAAK,CAAC,UAAU,EAAE,CAAC;oBACnB,IAAI,MAAM;wBAAE,KAAK,CAAC,WAAW,EAAE,CAAC;;wBAC3B,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;YAC3D,CAAC;YAED,MAAM,SAAS,GACb,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;YAEvE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;gBACpB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,QAAQ;aAChB,CAAC;YACF,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,SAAS;gBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;;gBAC7B,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,mCAAmC;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,CAAC;iBAAM,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,CAAC;iBAAM,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChD,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,aAAa,GAAG,iBAAiB,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,UAAU;IACV,4EAA4E;IAE5E,uDAAuD;IACvD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,4EAA4E;IAC5E,sBAAsB;IACtB,2EAA2E;IAC3E,4EAA4E;IAE5E;;;;OAIG;IACH,sBAAsB;QACpB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAChE,IAAI,KAAK,CAAC,QAAQ;gBAAE,SAAS,CAAC,qCAAqC;YACnE,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;qBAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;qBAC5B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;qBAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED;;;OAGG;IACH,0BAA0B;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,yBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,qCAAqC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,IAAI,QAAQ,CAAC,MAAM;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACH,wBAAwB;QACtB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACrE,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACxC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnD,CAAC,CAAC,OAAO,CAAC;gBACZ,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC3C,QAAQ,CAAC,IAAI,CACX,IAAI,SAAS,KAAK,UAAU,OAAO,QAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,CACnE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM;YACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,OAAwB;QAC1C,MAAM,EAAE,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAC9C,CAAC;QACF,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CACb,uCAAuC,EAAE,UAAU;gBACjD,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,yBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrG,CAAC;QACJ,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;iBAC5B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;iBAChD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,KAAK,CACb,UAAU,KAAK,CAAC,YAAY,sBAAsB,KAAK,CAAC,aAAa,OAAO,UAAU,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,GAAW;QACvC,+BAA+B;QAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACK,qBAAqB,CAAC,OAAe;QAC3C,2EAA2E;QAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1D,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E,4DAA4D;IAC5D,uBAAuB;QACrB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,yEAAyE;QACzE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,yBAAiB,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAChE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,yBAAiB,CACjC,CAAC;QAEF,0EAA0E;QAC1E,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,sFAAsF,CACvF,CAAC;QACF,KAAK,CAAC,IAAI,CACR,yFAAyF,CAC1F,CAAC;QAEF,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM;gBAC7C,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxD,CAAC,CAAC,GAAG,CAAC;YACR,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,CAAC,YAAY,QAAQ,WAAW,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,GAAG;gBAC9E,KAAK,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,SAAS,GAAG;gBACnE,KAAK,KAAK,CAAC,WAAW,MAAM,KAAK,CAAC,WAAW,MAAM,KAAK,CAAC,UAAU,IAAI,CAC1E,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,yEAAyE;QACzE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CACR,sFAAsF;gBACpF,YAAY,IAAI,MAAM,WAAW,CAAC,aAAa,IAAI,CACtD,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACvC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;gBACnE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;gBACpE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,MAAM,OAAO,QAAQ,GAAG,CAAC,UAAU,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/F,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,0EAA0E;QAC1E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM;gBAC7C,CAAC,CAAC,iBAAiB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC3E,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACvC,yEAAyE;gBACzE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACzC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnD,CAAC,CAAC,OAAO,CAAC;gBACZ,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;gBAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;gBAC7E,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,MAAM,WAAW,QAAQ,GAAG,CAAC,UAAU,IAAI,SAAS,GAAG;oBACjE,KAAK,WAAW,MAAM,WAAW,IAAI,CACxC,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAClD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACzC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnD,CAAC,CAAC,OAAO,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,mCAAmC,WAAW,mBAAmB,CAAC,CAAC;gBAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBACzC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,QAAQ,MAAM,IAAI,CAAC,UAAU,IAAI,SAAS,IAAI,CAAC,CAAC;gBAC9E,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,2BAA2B;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAEpD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CACT,sEAAsE,CACvE,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,kEAAkE,CACnE,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAEpE,UAAU,CAAC,MAA8C;QAC/D,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS;gBACZ,OAAO,GAAG,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,GAAG,CAAC;YACb,KAAK,iBAAiB;gBACpB,OAAO,IAAI,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC;YACd;gBACE,OAAO,GAAG,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAtZD,4DAsZC;AAED,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,IAAI,sBAAsB,GAAoC,IAAI,CAAC;AAEnE;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,YAAqB;IAErB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QACD,sBAAsB,GAAG,IAAI,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,6DAA6D;AAC7D,SAAgB,qBAAqB;IACnC,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC;AAmBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,qBAAqB;IAIhC,YAAY,aAAuB;QAF3B,YAAO,GAAmD,EAAE,CAAC;QAGnE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,4EAA4E;IAC5E,UAAU;IACV,4EAA4E;IAE5E;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,GAAc;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAErC,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;gBACrB,kBAAkB,EAAE,MAAM;gBAC1B,KAAK;gBACL,MAAM;gBACN,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E,wDAAwD;IACxD,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,8DAA8D;IAC9D,SAAS,CAAC,YAAoB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAE5E;;;OAGG;IACH,4BAA4B;QAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,IAAI,KAAK,CAAC,QAAQ;oBAAE,SAAS;gBAC7B,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;yBAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;yBAC5B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;yBACpD,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,QAAQ,CAAC,IAAI,CAAC,MAAM,UAAU,YAAY,SAAS,OAAO,KAAK,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM;YACjB,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACH,gCAAgC;QAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAiB,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,GAAG,CAAC,MAAM;oBACb,QAAQ,CAAC,IAAI,CAAC,MAAM,UAAU,UAAU,OAAO,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,8BAA8B;QAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACxC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnD,CAAC,CAAC,OAAO,CAAC;oBACZ,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;4BACxC,QAAQ,CAAC,IAAI,CACX,MAAM,UAAU,KAAK,SAAS,KAAK,UAAU,OAAO,QAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,CACpF,CAAC;oBACN,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM;YACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E,gBAAgB;QACd,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,uEAAuE;QACvE,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,iFAAiF,CAClF,CAAC;QACF,KAAK,CAAC,IAAI,CACR,mFAAmF,CACpF,CAAC;QAEF,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnD,0EAA0E;YAC1E,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBAClD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,yBAAiB,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YACrB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,GACxD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,UAAU,QAAQ,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,aAAa,GAAG;gBACxE,KAAK,kBAAkB,GAAG;gBAC1B,KAAK,UAAU,MAAM,UAAU,GAAG;gBAClC,KAAK,WAAW,MAAM,WAAW,IAAI,CACxC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,uEAAuE;QACvE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,UAAU,aAAa,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAiB,CAAC,CAAC;YACrD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,yBAAiB,CACjC,CAAC;YAEF,mDAAmD;YACnD,KAAK,CAAC,IAAI,CACR,sFAAsF,CACvF,CAAC;YACF,KAAK,CAAC,IAAI,CACR,yFAAyF,CAC1F,CAAC;YAEF,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM;oBAC7C,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACxD,CAAC,CAAC,GAAG,CAAC;gBACR,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,CAAC,YAAY,QAAQ,WAAW,MAAM,KAAK,IAAI,KAAK,CAAC,aAAa,GAAG;oBAC/E,KAAK,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,SAAS,GAAG;oBACnE,KAAK,KAAK,CAAC,WAAW,MAAM,KAAK,CAAC,WAAW,MAAM,KAAK,CAAC,UAAU,IAAI,CAC1E,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,6BAA6B;YAC7B,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACzD,KAAK,CAAC,IAAI,CACR,gCAAgC,KAAK,IAAI,WAAW,CAAC,aAAa,KAAK;oBACrE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClE,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,iEAAiE;YACjE,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM;oBAC7C,CAAC,CAAC,iBAAiB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC3E,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,KAAK,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC,CAAC;gBACpE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBAEtD,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBACvC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;oBACnE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;oBACpE,gDAAgD;oBAChD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACzC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnD,CAAC,CAAC,OAAO,CAAC;oBACZ,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,MAAM,WAAW,QAAQ,GAAG,CAAC,UAAU,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,CACrF,CAAC;gBACJ,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEf,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;wBAAE,SAAS;oBAClD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACzC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnD,CAAC,CAAC,OAAO,CAAC;oBACZ,KAAK,CAAC,IAAI,CAAC,mCAAmC,WAAW,mBAAmB,CAAC,CAAC;oBAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;oBACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;wBACtC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,QAAQ,MAAM,IAAI,CAAC,UAAU,IAAI,SAAS,IAAI,CAAC,CAAC;oBAC3E,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,iFAAiF;IACjF,oBAAoB;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAEpD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YAC3E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAEpE,mBAAmB,CACzB,MAA6D;QAE7D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,CACtE,CAAC;QACF,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC;QACnE,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAChC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,eAAe,CAAC,MAA6D;QAQnF,IAAI,SAAS,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;QAClD,IAAI,UAAU,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC;YAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YACjF,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC;YAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC;QACzF,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IACrF,CAAC;IAEO,UAAU,CAAC,MAAyE;QAC1F,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC;YAC3B,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC;YAC3B,KAAK,iBAAiB,CAAC,CAAC,OAAO,IAAI,CAAC;YACpC,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC;YAC5B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAjUD,sDAiUC;AAED,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,IAAI,mBAAmB,GAAiC,IAAI,CAAC;AAE7D;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,aAAwB;IAExB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;QACJ,CAAC;QACD,mBAAmB,GAAG,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,4EAA4E;AAC5E,SAAgB,0BAA0B;IACxC,mBAAmB,GAAG,IAAI,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * workflow_status.ts
3
+ *
4
+ * Lightweight per-suite result tracker.
5
+ * Each test's afterAll calls `registerWorkflowResult(...)` to append
6
+ * one entry to `test-results/workflow-status.json` on disk.
7
+ * Jest globalSetup clears the file before the run starts.
8
+ * Jest globalTeardown reads all entries and prints the cross-workflow table.
9
+ *
10
+ * File is written synchronously to avoid race conditions when Jest runs suites
11
+ * sequentially (--runInBand, the recommended mode for GitHub API integration tests).
12
+ */
13
+ export interface WorkflowStatusEntry {
14
+ /** The caller workflow name (e.g. "Test - ci-scan with coverage generation") */
15
+ workflowName: string;
16
+ /** Overall test result derived from Jest pass/fail counts */
17
+ result: 'passed' | 'failed' | 'skipped';
18
+ /** GitHub Actions run ID, if known */
19
+ runId?: number;
20
+ /** Total Jest tests in this suite */
21
+ totalTests: number;
22
+ /** Jest tests that passed */
23
+ passedTests: number;
24
+ /** Jest tests that failed */
25
+ failedTests: number;
26
+ /** Job-level pass/fail/skipped from the reporter rollup */
27
+ jobs: {
28
+ total: number;
29
+ passed: number;
30
+ failed: number;
31
+ skipped: number;
32
+ };
33
+ /** Per-job breakdown โ€” name + actual conclusion from the GitHub API */
34
+ jobDetails?: {
35
+ name: string;
36
+ conclusion: string | null;
37
+ }[];
38
+ /** Full per-workflow Markdown report (Workflow Summary + Job Summary + Detailed Results + Artifacts).
39
+ * Stored here so globalTeardown can attach it to the Check Run output instead of GITHUB_STEP_SUMMARY. */
40
+ reportMarkdown?: string;
41
+ /** ISO timestamp of when this entry was written */
42
+ recordedAt: string;
43
+ }
44
+ export interface WorkflowStatusFile {
45
+ entries: WorkflowStatusEntry[];
46
+ }
47
+ /** Resolved at import time so it always points to the package root. */
48
+ export declare const STATUS_DIR: string;
49
+ export declare const STATUS_FILE: string;
50
+ /**
51
+ * Append one entry to the shared `workflow-status.json`.
52
+ * Creates the file / directory if they don't exist yet.
53
+ */
54
+ export declare function registerWorkflowResult(entry: WorkflowStatusEntry): void;
55
+ export declare function readWorkflowStatus(): WorkflowStatusFile;
56
+ export declare function generateCrossWorkflowMarkdown(data: WorkflowStatusFile): string;
57
+ //# sourceMappingURL=workflow_status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_status.d.ts","sourceRoot":"","sources":["../src/workflow_status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,uEAAuE;IACvE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAC3D;6GACyG;IACzG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAMD,uEAAuE;AACvE,eAAO,MAAM,UAAU,QAAgD,CAAC;AACxE,eAAO,MAAM,WAAW,QAAgD,CAAC;AAMzE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAsBvE;AAMD,wBAAgB,kBAAkB,IAAI,kBAAkB,CAOvD;AAMD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAsE9E"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ /**
3
+ * workflow_status.ts
4
+ *
5
+ * Lightweight per-suite result tracker.
6
+ * Each test's afterAll calls `registerWorkflowResult(...)` to append
7
+ * one entry to `test-results/workflow-status.json` on disk.
8
+ * Jest globalSetup clears the file before the run starts.
9
+ * Jest globalTeardown reads all entries and prints the cross-workflow table.
10
+ *
11
+ * File is written synchronously to avoid race conditions when Jest runs suites
12
+ * sequentially (--runInBand, the recommended mode for GitHub API integration tests).
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.STATUS_FILE = exports.STATUS_DIR = void 0;
49
+ exports.registerWorkflowResult = registerWorkflowResult;
50
+ exports.readWorkflowStatus = readWorkflowStatus;
51
+ exports.generateCrossWorkflowMarkdown = generateCrossWorkflowMarkdown;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ // ---------------------------------------------------------------------------
55
+ // Constants
56
+ // ---------------------------------------------------------------------------
57
+ /** Resolved at import time so it always points to the package root. */
58
+ exports.STATUS_DIR = path.resolve(__dirname, '..', 'test-results');
59
+ exports.STATUS_FILE = path.join(exports.STATUS_DIR, 'workflow-status.json');
60
+ // ---------------------------------------------------------------------------
61
+ // Writers (called from test afterAll)
62
+ // ---------------------------------------------------------------------------
63
+ /**
64
+ * Append one entry to the shared `workflow-status.json`.
65
+ * Creates the file / directory if they don't exist yet.
66
+ */
67
+ function registerWorkflowResult(entry) {
68
+ try {
69
+ fs.mkdirSync(exports.STATUS_DIR, { recursive: true });
70
+ let data = { entries: [] };
71
+ if (fs.existsSync(exports.STATUS_FILE)) {
72
+ try {
73
+ data = JSON.parse(fs.readFileSync(exports.STATUS_FILE, 'utf8'));
74
+ }
75
+ catch {
76
+ data = { entries: [] };
77
+ }
78
+ }
79
+ // Replace existing entry for the same workflow name (suite re-run scenario)
80
+ data.entries = data.entries.filter((e) => e.workflowName !== entry.workflowName);
81
+ data.entries.push(entry);
82
+ fs.writeFileSync(exports.STATUS_FILE, JSON.stringify(data, null, 2), 'utf8');
83
+ console.log(`๐Ÿ“ Registered workflow status: [${entry.result.toUpperCase()}] ${entry.workflowName}`);
84
+ }
85
+ catch (err) {
86
+ console.warn(`โš ๏ธ Could not write workflow status: ${err}`);
87
+ }
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // Readers (called from globalTeardown)
91
+ // ---------------------------------------------------------------------------
92
+ function readWorkflowStatus() {
93
+ if (!fs.existsSync(exports.STATUS_FILE))
94
+ return { entries: [] };
95
+ try {
96
+ return JSON.parse(fs.readFileSync(exports.STATUS_FILE, 'utf8'));
97
+ }
98
+ catch {
99
+ return { entries: [] };
100
+ }
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Markdown generation (used by globalTeardown)
104
+ // ---------------------------------------------------------------------------
105
+ function generateCrossWorkflowMarkdown(data) {
106
+ if (data.entries.length === 0)
107
+ return '';
108
+ const lines = [];
109
+ lines.push('# ๐Ÿ—‚๏ธ Cross-Workflow Test Summary');
110
+ lines.push('');
111
+ lines.push(`**Suites run:** ${data.entries.length}`);
112
+ lines.push('');
113
+ // โ”€โ”€ Overall table โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
114
+ lines.push('## ๐Ÿ“Š Overall Results');
115
+ lines.push('');
116
+ lines.push('| Workflow | Result | Tests โœ… | Tests โŒ | Tests Total | Jobs โœ… | Jobs โŒ | Jobs โญ๏ธ | Jobs Total | Run ID |');
117
+ lines.push('|----------|--------|----------|----------|-------------|---------|---------|---------|------------|--------|');
118
+ for (const e of data.entries) {
119
+ const resultIcon = e.result === 'passed' ? 'โœ…' : e.result === 'failed' ? 'โŒ' : 'โญ๏ธ';
120
+ const runLink = e.runId ? `[${e.runId}]` : 'โ€”';
121
+ lines.push(`| ${resultIcon} \`${e.workflowName}\` | **${e.result}** ` +
122
+ `| ${e.passedTests} | ${e.failedTests} | ${e.totalTests} ` +
123
+ `| ${e.jobs.passed} | ${e.jobs.failed} | ${e.jobs.skipped} | ${e.jobs.total} ` +
124
+ `| ${runLink} |`);
125
+ }
126
+ // โ”€โ”€ Totals row โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
127
+ const totalTests = data.entries.reduce((s, e) => s + e.totalTests, 0);
128
+ const passedTests = data.entries.reduce((s, e) => s + e.passedTests, 0);
129
+ const failedTests = data.entries.reduce((s, e) => s + e.failedTests, 0);
130
+ const totalJobs = data.entries.reduce((s, e) => s + e.jobs.total, 0);
131
+ const passedJobs = data.entries.reduce((s, e) => s + e.jobs.passed, 0);
132
+ const failedJobs = data.entries.reduce((s, e) => s + e.jobs.failed, 0);
133
+ const skippedJobs = data.entries.reduce((s, e) => s + e.jobs.skipped, 0);
134
+ const allPassed = data.entries.every((e) => e.result === 'passed');
135
+ lines.push(`| **TOTAL** | ${allPassed ? 'โœ… all passed' : 'โŒ some failed'} ` +
136
+ `| **${passedTests}** | **${failedTests}** | **${totalTests}** ` +
137
+ `| **${passedJobs}** | **${failedJobs}** | **${skippedJobs}** | **${totalJobs}** | โ€” |`);
138
+ lines.push('');
139
+ // โ”€โ”€ Per-workflow job detail (collapsible) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
140
+ const failedEntries = data.entries.filter((e) => e.result !== 'passed');
141
+ if (failedEntries.length > 0) {
142
+ lines.push('## ๐Ÿ” Job Detail (failed workflows)');
143
+ lines.push('');
144
+ for (const e of failedEntries) {
145
+ if (!e.jobDetails || e.jobDetails.length === 0)
146
+ continue;
147
+ lines.push(`<details><summary><strong>${e.workflowName}</strong> โ€” job conclusions</summary>`);
148
+ lines.push('');
149
+ lines.push('| Job | Conclusion |');
150
+ lines.push('|-----|------------|');
151
+ for (const { name, conclusion } of e.jobDetails) {
152
+ const icon = conclusion === 'success' ? 'โœ…' :
153
+ conclusion === 'skipped' ? 'โญ๏ธ' :
154
+ conclusion === 'neutral' ? 'โ„น๏ธ' :
155
+ conclusion === null ? '๐Ÿ•' : 'โŒ';
156
+ lines.push(`| ${icon} \`${name}\` | ${conclusion ?? 'in-progress'} |`);
157
+ }
158
+ lines.push('');
159
+ lines.push('</details>');
160
+ lines.push('');
161
+ }
162
+ }
163
+ return lines.join('\n');
164
+ }
165
+ //# sourceMappingURL=workflow_status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_status.js","sourceRoot":"","sources":["../src/workflow_status.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gha-workflow-testing",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "TypeScript library for testing GitHub Actions workflows with detailed reporting",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,10 +17,9 @@
17
17
  "workflow",
18
18
  "testing",
19
19
  "ci-cd",
20
- "typescript",
21
- "dops"
20
+ "typescript"
22
21
  ],
23
- "author": "DOPS Team",
22
+ "author": "Rohit Patil",
24
23
  "license": "MIT",
25
24
  "files": [
26
25
  "dist",
@@ -29,12 +28,12 @@
29
28
  ],
30
29
  "repository": {
31
30
  "type": "git",
32
- "url": "git+https://github.com/global-data-analytics/dops-gha-tests.git"
31
+ "url": "git+tobeadded"
33
32
  },
34
33
  "bugs": {
35
- "url": "https://github.com/global-data-analytics/dops-gha-tests/issues"
34
+ "url": "https://github.com/tba/issues"
36
35
  },
37
- "homepage": "https://github.com/global-data-analytics/dops-gha-tests#readme",
36
+ "homepage": "https://github.com/tba/#readme",
38
37
  "devDependencies": {
39
38
  "@types/jest": "^29.5.0",
40
39
  "@types/node": "^20.0.0",
@@ -0,0 +1,122 @@
1
+ /**
2
+ * check_run.ts
3
+ *
4
+ * Creates one GitHub Check Run per workflow test suite after all suites
5
+ * have finished (called from globalTeardown).
6
+ *
7
+ * Requirements (automatically satisfied when running inside GitHub Actions):
8
+ * - GITHUB_TOKEN โ€” needs `checks: write` permission
9
+ * - GITHUB_REPOSITORY โ€” set automatically
10
+ * - GITHUB_SHA โ€” commit SHA the check attaches to
11
+ *
12
+ * When any of the above are absent (local dev run) the function is a no-op.
13
+ */
14
+
15
+ import axios from 'axios';
16
+ import { WorkflowStatusFile, WorkflowStatusEntry } from './workflow_status';
17
+
18
+ // ---------------------------------------------------------------------------
19
+ // Helpers
20
+ // ---------------------------------------------------------------------------
21
+
22
+ /** Build the Markdown body for a single Check Run's "details" pane. */
23
+ function buildCheckRunBody(e: WorkflowStatusEntry): string {
24
+ const lines: string[] = [];
25
+
26
+ lines.push(`## Test suite: \`${e.workflowName}\``);
27
+ lines.push('');
28
+ lines.push(`| Metric | Value |`);
29
+ lines.push(`|--------|-------|`);
30
+ lines.push(`| Result | **${e.result}** |`);
31
+ lines.push(`| Tests passed | ${e.passedTests} / ${e.totalTests} |`);
32
+ lines.push(`| Tests failed | ${e.failedTests} |`);
33
+ lines.push(`| Jobs passed | ${e.jobs.passed} / ${e.jobs.total} |`);
34
+ lines.push(`| Jobs failed | ${e.jobs.failed} |`);
35
+ lines.push(`| Jobs skipped | ${e.jobs.skipped} |`);
36
+ if (e.runId) lines.push(`| Run ID | \`${e.runId}\` |`);
37
+ lines.push('');
38
+
39
+ if (e.jobDetails && e.jobDetails.length > 0) {
40
+ lines.push('### Job conclusions');
41
+ lines.push('');
42
+ lines.push('| Job | Conclusion |');
43
+ lines.push('|-----|------------|');
44
+ for (const { name, conclusion } of e.jobDetails) {
45
+ const icon =
46
+ conclusion === 'success' ? 'โœ…' :
47
+ conclusion === 'skipped' ? 'โญ๏ธ' :
48
+ conclusion === 'neutral' ? 'โ„น๏ธ' :
49
+ conclusion === null ? '๐Ÿ•' : 'โŒ';
50
+ lines.push(`| ${icon} \`${name}\` | ${conclusion ?? 'in-progress'} |`);
51
+ }
52
+ }
53
+
54
+ return lines.join('\n');
55
+ }
56
+
57
+ // ---------------------------------------------------------------------------
58
+ // Public API
59
+ // ---------------------------------------------------------------------------
60
+
61
+ /**
62
+ * Post one Check Run per suite to the GitHub Checks API.
63
+ * Safe to call unconditionally โ€” skips silently outside of GitHub Actions.
64
+ */
65
+ export async function createCheckRuns(data: WorkflowStatusFile): Promise<void> {
66
+ const token = process.env.GITHUB_TOKEN;
67
+ const repo = process.env.GITHUB_REPOSITORY;
68
+ const sha = process.env.GITHUB_SHA;
69
+
70
+ if (!token || !repo || !sha) {
71
+ console.log('โ„น๏ธ Skipping Check Run creation (not running in GitHub Actions)');
72
+ return;
73
+ }
74
+
75
+ const client = axios.create({
76
+ baseURL: 'https://api.github.com',
77
+ headers: {
78
+ Authorization: `Bearer ${token}`,
79
+ Accept: 'application/vnd.github+json',
80
+ },
81
+ });
82
+
83
+ for (const e of data.entries) {
84
+ const conclusion: 'success' | 'failure' =
85
+ e.result === 'passed' ? 'success' : 'failure';
86
+
87
+ const failedJobNames = (e.jobDetails ?? [])
88
+ .filter((j) => j.conclusion !== 'success' && j.conclusion !== 'skipped' && j.conclusion !== 'neutral' && j.conclusion !== null)
89
+ .map((j) => j.name);
90
+
91
+ const summary =
92
+ conclusion === 'success'
93
+ ? `โœ… All ${e.totalTests} tests passed across ${e.jobs.total} jobs.`
94
+ : `โŒ ${e.failedTests} test(s) failed. Failed jobs: ${failedJobNames.join(', ') || 'see details'}.`;
95
+
96
+ const payload = {
97
+ name: `${e.workflowName} โ€” Test Suite`,
98
+ head_sha: sha,
99
+ status: 'completed' as const,
100
+ conclusion,
101
+ completed_at: e.recordedAt,
102
+ output: {
103
+ title: `${conclusion === 'success' ? 'โœ…' : 'โŒ'} ${e.workflowName}: ${e.passedTests}/${e.totalTests} tests passed`,
104
+ summary,
105
+ // Full workflow report: Workflow Summary + Job Summary + Detailed Results + Artifacts
106
+ text: e.reportMarkdown ?? buildCheckRunBody(e),
107
+ },
108
+ };
109
+
110
+ try {
111
+ const resp = await client.post(`/repos/${repo}/check-runs`, payload);
112
+ console.log(
113
+ `โœ… Check Run created: "${payload.name}" โ†’ ${conclusion} ` +
114
+ `(id: ${resp.data.id}, url: ${resp.data.html_url})`
115
+ );
116
+ } catch (err: any) {
117
+ const status = err?.response?.status;
118
+ const message = err?.response?.data?.message ?? err?.message;
119
+ console.warn(`โš ๏ธ Could not create Check Run for "${e.workflowName}": [${status}] ${message}`);
120
+ }
121
+ }
122
+ }
package/src/github-api.ts CHANGED
@@ -3,6 +3,8 @@ import axios, { AxiosInstance } from 'axios';
3
3
  export interface JobInfo {
4
4
  status: string;
5
5
  conclusion: string | null;
6
+ /** The name of the reusable workflow that defined this job (from `workflow_name` in the API) */
7
+ workflowName?: string;
6
8
  }
7
9
 
8
10
  export interface Jobs {
@@ -53,22 +55,50 @@ export class GitHubAPI {
53
55
  }
54
56
 
55
57
  async getLatestRun(workflowName: string): Promise<number> {
56
- const url = `/repos/${this.repo}/actions/runs`;
57
- console.log(`๐Ÿ“ก Fetching workflow runs from: ${url}`);
58
-
59
- const response = await this.client.get(url);
60
- const runs = response.data.workflow_runs;
61
- console.log(`Found ${runs.length} total workflow runs`);
58
+ // Step 1: find the workflow definition by display name so we can query
59
+ // its runs directly instead of scanning all recent runs (avoids pagination issues).
60
+ console.log(`๐Ÿ“ก Looking up workflow definition for: ${workflowName}`);
61
+ const wfResponse = await this.client.get(`/repos/${this.repo}/actions/workflows`, {
62
+ params: { per_page: 100 },
63
+ });
64
+ const workflow = (wfResponse.data.workflows as any[]).find(
65
+ (w) => w.name === workflowName
66
+ );
67
+
68
+ if (workflow) {
69
+ console.log(`โœ… Found workflow definition: ${workflowName} (id: ${workflow.id})`);
70
+ const runsResponse = await this.client.get(
71
+ `/repos/${this.repo}/actions/workflows/${workflow.id}/runs`,
72
+ { params: { per_page: 1 } }
73
+ );
74
+ const runs = runsResponse.data.workflow_runs as any[];
75
+ if (runs.length > 0) {
76
+ console.log(`โœ… Latest run ID: ${runs[0].id}`);
77
+ return runs[0].id;
78
+ }
79
+ throw new Error(`Workflow '${workflowName}' found but has no runs`);
80
+ }
62
81
 
63
- for (const run of runs) {
64
- if (run.name === workflowName) {
65
- console.log(`โœ… Found matching workflow: ${workflowName} (ID: ${run.id})`);
66
- return run.id;
82
+ // Fallback: scan recent runs across all workflows (handles workflows whose
83
+ // display name differs from what /actions/workflows returns).
84
+ console.log(`โš ๏ธ Workflow definition not found, falling back to paginated run search`);
85
+ for (let page = 1; page <= 5; page++) {
86
+ const response = await this.client.get(`/repos/${this.repo}/actions/runs`, {
87
+ params: { per_page: 100, page },
88
+ });
89
+ const runs = response.data.workflow_runs as any[];
90
+ console.log(` Page ${page}: ${runs.length} runs`);
91
+ for (const run of runs) {
92
+ if (run.name === workflowName) {
93
+ console.log(`โœ… Found matching run on page ${page}: ${workflowName} (ID: ${run.id})`);
94
+ return run.id;
95
+ }
67
96
  }
97
+ if (runs.length < 100) break; // no more pages
68
98
  }
69
99
 
70
- console.log(`โŒ Workflow '${workflowName}' not found in recent runs`);
71
- throw new Error('Workflow run not found');
100
+ console.log(`โŒ Workflow '${workflowName}' not found`);
101
+ throw new Error(`Workflow run not found: '${workflowName}'`);
72
102
  }
73
103
 
74
104
  async getJobs(runId: number): Promise<Jobs> {
@@ -84,6 +114,8 @@ export class GitHubAPI {
84
114
  result[job.name] = {
85
115
  status: job.status,
86
116
  conclusion: job.conclusion,
117
+ // workflow_name identifies which reusable workflow defined this job
118
+ workflowName: job.workflow_name ?? undefined,
87
119
  };
88
120
  }
89
121
 
@@ -0,0 +1,16 @@
1
+ /**
2
+ * global_setup.ts
3
+ *
4
+ * Jest globalSetup โ€” runs once before any test suite.
5
+ * Clears the shared workflow-status.json so stale results from a previous
6
+ * run don't bleed into the new one.
7
+ */
8
+
9
+ import * as fs from 'fs';
10
+ import { STATUS_DIR, STATUS_FILE } from './workflow_status';
11
+
12
+ module.exports = async function globalSetup(): Promise<void> {
13
+ fs.mkdirSync(STATUS_DIR, { recursive: true });
14
+ fs.writeFileSync(STATUS_FILE, JSON.stringify({ entries: [] }, null, 2), 'utf8');
15
+ console.log(`\n๐Ÿงน Cleared workflow status file: ${STATUS_FILE}`);
16
+ };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * global_teardown.ts
3
+ *
4
+ * Jest globalTeardown โ€” runs once after all test suites complete.
5
+ * Reads the accumulated workflow-status.json and:
6
+ * 1. Prints the cross-workflow table to the console.
7
+ * 2. Appends it to GITHUB_STEP_SUMMARY (when running in CI).
8
+ */
9
+
10
+ import * as fs from 'fs';
11
+ import {
12
+ readWorkflowStatus,
13
+ generateCrossWorkflowMarkdown,
14
+ STATUS_FILE,
15
+ } from './workflow_status';
16
+ import { createCheckRuns } from './check_run';
17
+
18
+ module.exports = async function globalTeardown(): Promise<void> {
19
+ console.log('\n' + '='.repeat(80));
20
+ console.log('๐Ÿ—‚๏ธ CROSS-WORKFLOW SUMMARY');
21
+ console.log('='.repeat(80));
22
+
23
+ const data = readWorkflowStatus();
24
+
25
+ if (data.entries.length === 0) {
26
+ console.log('โš ๏ธ No workflow results recorded โ€” did any test call registerWorkflowResult()?');
27
+ console.log('='.repeat(80) + '\n');
28
+ return;
29
+ }
30
+
31
+ const markdown = generateCrossWorkflowMarkdown(data);
32
+
33
+ // โ”€โ”€ Console output โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
34
+ console.log(markdown);
35
+ console.log('='.repeat(80) + '\n');
36
+
37
+ // โ”€โ”€ GitHub Actions step summary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
38
+ const summaryFile = process.env.GITHUB_STEP_SUMMARY;
39
+ if (summaryFile) {
40
+ try {
41
+ fs.appendFileSync(summaryFile, markdown, 'utf8');
42
+ console.log('โœ… Cross-workflow summary written to GITHUB_STEP_SUMMARY');
43
+ } catch (err) {
44
+ console.warn(`โš ๏ธ Could not write to GITHUB_STEP_SUMMARY: ${err}`);
45
+ }
46
+ }
47
+
48
+ // โ”€โ”€ Keep the file around for debugging; optionally remove it โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
49
+ console.log(`๐Ÿ“„ Detailed results: ${STATUS_FILE}`);
50
+
51
+ // โ”€โ”€ GitHub Check Runs (one per suite) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
52
+ await createCheckRuns(data);
53
+ };
package/src/index.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  export * from './github-api';
2
2
  export * from './assertions';
3
3
  export * from './reporter';
4
+ export * from './reusable_reporter';
5
+ export * from './workflow_status';
6
+ export * from './check_run';