github-issue-tower-defence-management 1.52.1 → 1.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +2 -2
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +45 -31
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/domain/entities/WorkflowStatus.js +5 -7
  6. package/bin/domain/entities/WorkflowStatus.js.map +1 -1
  7. package/bin/domain/usecases/HandleScheduledEventUseCase.js +8 -1
  8. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  9. package/bin/domain/usecases/IssueRejectionEvaluator.js +80 -0
  10. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -0
  11. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +4 -67
  12. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  13. package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js +42 -0
  14. package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js.map +1 -0
  15. package/bin/domain/usecases/SetupTowerDefenceProjectUseCase.js +19 -3
  16. package/bin/domain/usecases/SetupTowerDefenceProjectUseCase.js.map +1 -1
  17. package/package.json +1 -1
  18. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +8 -0
  19. package/src/domain/entities/WorkflowStatus.ts +5 -6
  20. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +58 -0
  21. package/src/domain/usecases/HandleScheduledEventUseCase.ts +11 -0
  22. package/src/domain/usecases/IssueRejectionEvaluator.ts +114 -0
  23. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +15 -89
  24. package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.test.ts +376 -0
  25. package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts +88 -0
  26. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +177 -9
  27. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.ts +34 -2
  28. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  29. package/types/domain/entities/WorkflowStatus.d.ts +4 -2
  30. package/types/domain/entities/WorkflowStatus.d.ts.map +1 -1
  31. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +6 -1
  32. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  33. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +20 -0
  34. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -0
  35. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +1 -1
  36. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
  37. package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts +15 -0
  38. package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts.map +1 -0
  39. package/types/domain/usecases/SetupTowerDefenceProjectUseCase.d.ts +2 -0
  40. package/types/domain/usecases/SetupTowerDefenceProjectUseCase.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":";;;AAIA,+DAKoC;AACpC,uEAGmC;AAEnC,MAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,QAAgB;QAC1B,KAAK,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AACD,MAAa,uBAAwB,SAAQ,KAAK;IAChD,YACE,QAAgB,EAChB,aAA4B,EAC5B,cAA6B;QAE7B,KAAK,CACH,4BAA4B,QAAQ,cAAc,cAAc,aAAa,aAAa,EAAE,CAC7F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAXD,0DAWC;AAMD,MAAa,qCAAqC;IAGhD,YACmB,iBAAsD,EACtD,eAShB,EACgB,sBAGhB,EACgB,iBAGhB;QAlBgB,sBAAiB,GAAjB,iBAAiB,CAAqC;QACtD,oBAAe,GAAf,eAAe,CAS/B;QACgB,2BAAsB,GAAtB,sBAAsB,CAGtC;QACgB,sBAAiB,GAAjB,iBAAiB,CAGjC;QAKH,QAAG,GAAG,KAAK,EAAE,MAKZ,EAAiB,EAAE;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAEzE,MAAM,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAChE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,+CAA8B,CACjD,CAAC;YACF,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CACX,qCAAqC,+CAA8B,yBAAyB,CAC7F,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,gCAAgC,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CACnE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mDAAkC,CACrD,CAAC;YACF,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CACX,yCAAyC,mDAAkC,yBAAyB,CACrG,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAChE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,+CAA8B,CACjD,CAAC;YACF,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CACX,qCAAqC,+CAA8B,yBAAyB,CAC7F,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEvE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,KAAK,wCAAuB,EAAE,CAAC;gBACpD,MAAM,IAAI,uBAAuB,CAC/B,MAAM,CAAC,QAAQ,EACf,KAAK,CAAC,MAAM,EACZ,wCAAuB,CACxB,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACjE,OAAO,EACP,CAAC,CACF,CAAC;oBACF,KAAK,MAAM,WAAW,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;wBAClD,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAC3B,CAAC;wBACF,IAAI,iBAAiB,EAAE,CAAC;4BACtB,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;4BAC9D,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CACV,2DAA2D,EAC3D,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,MAAM,GAAG,+CAA8B,CAAC;gBAC9C,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,OAAO,EACP,KAAK,EACL,6BAA6B,CAAC,EAAE,CACjC,CAAC;gBACF,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC7C,KAAK,EACL,mCAAmC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACnE,KAAK,CAAC,MAAM,GAAG,+CAA8B,CAAC;gBAC9C,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,OAAO,EACP,KAAK,EACL,6BAA6B,CAAC,EAAE,CACjC,CAAC;gBACF,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC7C,KAAK,EACL,0DAA0D,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,MAAM,oBAAoB,KAAK,CAAC,cAAc,IAAI,MAAM,EAAE,CAC5J,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAEhE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAChE,KAAK,EACL,QAAQ,CACT,CAAC;YAEF,MAAM,sBAAsB,GAC1B,UAAU,CAAC,MAAM,GAAG,CAAC;gBACnB,CAAC,CAAC,gCAAgC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrF,CAAC,CAAC,6BAA6B,CAAC;YAEpC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CACvC,CAAC,MAAM,CAAC,sBAAsB,GAAG,CAAC,CACnC,CAAC;YACF,IACE,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACpC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAC1D,CAAC,MAAM,IAAI,MAAM,CAAC,sBAAsB;gBACzC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,OAAO,CAAC,OAAO;qBACZ,WAAW,EAAE;qBACb,QAAQ,CAAC,wCAAwC,CAAC,CACtD,EACD,CAAC;gBACD,KAAK,CAAC,MAAM,GAAG,+CAA8B,CAAC;gBAC9C,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,OAAO,EACP,KAAK,EACL,6BAA6B,CAAC,EAAE,CACjC,CAAC;gBACF,MAAM,oBAAoB,GACxB,UAAU,CAAC,MAAM,GAAG,CAAC;oBACnB,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,+DAA+D,CAAC;gBACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;oBACtD,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC7C,KAAK,EACL,GAAG,oBAAoB,kDAAkD,MAAM,CAAC,sBAAsB,QAAQ,CAC/G,CAAC;gBACF,MAAM,IAAI,CAAC,+BAA+B,CACxC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,iCAAiC,EACxC,OAAO,CACR,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,GAAG,mDAAkC,CAAC;gBAClD,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,OAAO,EACP,KAAK,EACL,gCAAgC,CAAC,EAAE,CACpC,CAAC;gBACF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;oBAC3B,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,IAAI,CAAC,+BAA+B,CACxC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,iCAAiC,EACxC,OAAO,CACR,CAAC;gBACF,OAAO;YACT,CAAC;YAED,KAAK,CAAC,MAAM,GAAG,+CAA8B,CAAC;YAC9C,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,OAAO,EACP,KAAK,EACL,6BAA6B,CAAC,EAAE,CACjC,CAAC;YAEF,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC7C,KAAK,EACL,sBAAsB,CACvB,CAAC;QACJ,CAAC,CAAC;QAEM,sBAAiB,GAAG,KAAK,EAC/B,KAAuD,EACvD,QAA+B,EAI9B,EAAE;YACH,MAAM,UAAU,GAAmD,EAAE,CAAC;YAEtE,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7D,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,0BAA0B;oBAChC,MAAM,EAAE,0BAA0B;iBACnC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3D,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,sBAAsB;oBAC5B,MAAM,EAAE,sBAAsB;iBAC/B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,GAC/C,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrD,OAAO,EAAE,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;QACzE,CAAC,CAAC;QAEM,0BAAqB,GAAG,CAAC,IAAY,EAAW,EAAE;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,UAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,sDAAsD,EACtD,KAAK,CACN,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1D,OAAO,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS,CAAC;QAC/D,CAAC,CAAC;QAEM,wBAAmB,GAAG,KAAK,EACjC,KAAa,EACb,OAA8C,EAC/B,EAAE;YACjB,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;YAClC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAC7C,KAAK,EACL,OAAO,EACP,cAAc,CACf,CAAC;QACJ,CAAC,CAAC;QAEM,oCAA+B,GAAG,KAAK,EAC7C,QAAgB,EAChB,kBAAiC,EACjC,OAA4D,EAC7C,EAAE;YACjB,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACjE,OAAO,EACP,CAAC,CACF,CAAC;gBAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACjE,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,CAC3B,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;oBACpD,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAC7D,CAAC;gBAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,OAAO;gBACT,CAAC;gBAED,MAAM,OAAO,GAAG,8BAA8B,QAAQ,EAAE,CAAC;gBACzD,MAAM,UAAU,GAAG,kBAAkB;qBAClC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;qBAC9C,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;gBAErD,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC;QAhSA,IAAI,CAAC,uBAAuB,GAAG,IAAI,iDAAuB,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;CAgSF;AAzTD,sFAyTC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RevertNotReadyAwaitingQualityCheckUseCase = void 0;
4
+ const IssueRejectionEvaluator_1 = require("./IssueRejectionEvaluator");
5
+ const WorkflowStatus_1 = require("../entities/WorkflowStatus");
6
+ class RevertNotReadyAwaitingQualityCheckUseCase {
7
+ constructor(projectRepository, issueRepository, issueCommentRepository) {
8
+ this.projectRepository = projectRepository;
9
+ this.issueRepository = issueRepository;
10
+ this.issueCommentRepository = issueCommentRepository;
11
+ this.run = async (params) => {
12
+ const projectId = await this.projectRepository.findProjectIdByUrl(params.projectUrl);
13
+ if (!projectId) {
14
+ throw new Error(`Project not found. projectUrl: ${params.projectUrl}`);
15
+ }
16
+ const project = await this.projectRepository.getProject(projectId);
17
+ if (!project) {
18
+ throw new Error(`Project not found. projectId: ${projectId} projectUrl: ${params.projectUrl}`);
19
+ }
20
+ const awaitingWorkspaceStatusOption = project.status.statuses.find((s) => s.name === WorkflowStatus_1.AWAITING_WORKSPACE_STATUS_NAME);
21
+ if (!awaitingWorkspaceStatusOption) {
22
+ return;
23
+ }
24
+ const { issues } = await this.issueRepository.getAllIssues(projectId, params.allowIssueCacheMinutes);
25
+ const awaitingQualityCheckIssues = issues.filter((issue) => issue.status === WorkflowStatus_1.AWAITING_QUALITY_CHECK_STATUS_NAME);
26
+ for (const issue of awaitingQualityCheckIssues) {
27
+ const hasLlmAgentLabel = issue.labels.some((l) => l === 'llm-agent' || l.startsWith('llm-agent:'));
28
+ if (hasLlmAgentLabel) {
29
+ continue;
30
+ }
31
+ const { rejections } = await this.issueRejectionEvaluator.evaluate(issue);
32
+ if (rejections.length > 0) {
33
+ await this.issueRepository.updateStatus(project, issue, awaitingWorkspaceStatusOption.id);
34
+ await this.issueCommentRepository.createComment(issue, `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`);
35
+ }
36
+ }
37
+ };
38
+ this.issueRejectionEvaluator = new IssueRejectionEvaluator_1.IssueRejectionEvaluator(issueRepository);
39
+ }
40
+ }
41
+ exports.RevertNotReadyAwaitingQualityCheckUseCase = RevertNotReadyAwaitingQualityCheckUseCase;
42
+ //# sourceMappingURL=RevertNotReadyAwaitingQualityCheckUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevertNotReadyAwaitingQualityCheckUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts"],"names":[],"mappings":";;;AAGA,uEAAoE;AACpE,+DAGoC;AAEpC,MAAa,yCAAyC;IAGpD,YACmB,iBAGhB,EACgB,eAMhB,EACgB,sBAGhB;QAdgB,sBAAiB,GAAjB,iBAAiB,CAGjC;QACgB,oBAAe,GAAf,eAAe,CAM/B;QACgB,2BAAsB,GAAtB,sBAAsB,CAGtC;QAKH,QAAG,GAAG,KAAK,EAAE,MAGZ,EAAiB,EAAE;YAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAC/D,MAAM,CAAC,UAAU,CAClB,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,iCAAiC,SAAS,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAC9E,CAAC;YACJ,CAAC;YAED,MAAM,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAChE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,+CAA8B,CACjD,CAAC;YACF,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACxD,SAAS,EACT,MAAM,CAAC,sBAAsB,CAC9B,CAAC;YAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,mDAAkC,CAC/D,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,0BAA0B,EAAE,CAAC;gBAC/C,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CACvD,CAAC;gBACF,IAAI,gBAAgB,EAAE,CAAC;oBACrB,SAAS;gBACX,CAAC;gBAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,OAAO,EACP,KAAK,EACL,6BAA6B,CAAC,EAAE,CACjC,CAAC;oBACF,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC7C,KAAK,EACL,gCAAgC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAzDA,IAAI,CAAC,uBAAuB,GAAG,IAAI,iDAAuB,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;CAyDF;AA9ED,8FA8EC"}
@@ -8,14 +8,21 @@ class SetupTowerDefenceProjectUseCase {
8
8
  this.run = async (params) => {
9
9
  const project = await this.projectRepository.getByUrl(params.projectUrl);
10
10
  const existing = project.status.statuses;
11
- if (SetupTowerDefenceProjectUseCase.hasRequiredStatusesInCanonicalOrder(existing)) {
11
+ const hasMigratedFromName = existing.some((s) => SetupTowerDefenceProjectUseCase.MIGRATED_FROM_NAMES.has(s.name));
12
+ if (!hasMigratedFromName &&
13
+ SetupTowerDefenceProjectUseCase.hasRequiredStatusesInCanonicalOrder(existing)) {
12
14
  return;
13
15
  }
14
16
  const requiredNames = new Set(WorkflowStatus_1.REQUIRED_WORKFLOW_STATUSES.map((s) => s.name));
15
- const others = existing.filter((status) => !requiredNames.has(status.name));
17
+ const others = existing.filter((status) => !requiredNames.has(status.name) &&
18
+ !SetupTowerDefenceProjectUseCase.MIGRATED_FROM_NAMES.has(status.name));
16
19
  const newStatusList = [
17
20
  ...WorkflowStatus_1.REQUIRED_WORKFLOW_STATUSES.map((required) => {
18
- const found = existing.find((status) => status.name === required.name);
21
+ const legacyName = SetupTowerDefenceProjectUseCase.LEGACY_STATUS_NAMES[required.name];
22
+ const found = existing.find((status) => status.name === required.name) ??
23
+ (legacyName !== undefined
24
+ ? existing.find((status) => status.name === legacyName)
25
+ : undefined);
19
26
  return {
20
27
  id: found ? found.id : null,
21
28
  name: required.name,
@@ -35,6 +42,15 @@ class SetupTowerDefenceProjectUseCase {
35
42
  }
36
43
  }
37
44
  exports.SetupTowerDefenceProjectUseCase = SetupTowerDefenceProjectUseCase;
45
+ SetupTowerDefenceProjectUseCase.LEGACY_STATUS_NAMES = {
46
+ [WorkflowStatus_1.TODO_STATUS_NAME]: WorkflowStatus_1.LEGACY_TODO_STATUS_NAME,
47
+ [WorkflowStatus_1.IN_TMUX_STATUS_NAME]: WorkflowStatus_1.LEGACY_IN_TMUX_STATUS_NAME,
48
+ };
49
+ SetupTowerDefenceProjectUseCase.MIGRATED_FROM_NAMES = new Set([
50
+ WorkflowStatus_1.LEGACY_TODO_STATUS_NAME,
51
+ WorkflowStatus_1.LEGACY_IN_TMUX_STATUS_NAME,
52
+ WorkflowStatus_1.PC_TODO_STATUS_NAME,
53
+ ]);
38
54
  SetupTowerDefenceProjectUseCase.hasRequiredStatusesInCanonicalOrder = (existing) => {
39
55
  if (existing.length < WorkflowStatus_1.REQUIRED_WORKFLOW_STATUSES.length) {
40
56
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"SetupTowerDefenceProjectUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/SetupTowerDefenceProjectUseCase.ts"],"names":[],"mappings":";;;AAEA,+DAGoC;AAEpC,MAAa,+BAA+B;IAC1C,YACmB,iBAGhB;QAHgB,sBAAiB,GAAjB,iBAAiB,CAGjC;QAGH,QAAG,GAAG,KAAK,EAAE,MAA8B,EAAiB,EAAE;YAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YAEzC,IACE,+BAA+B,CAAC,mCAAmC,CACjE,QAAQ,CACT,EACD,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,2CAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAC;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAE5E,MAAM,aAAa,GAEZ;gBACL,GAAG,2CAA0B,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACvE,OAAO;wBACL,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;wBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,WAAW,EAAE,EAAE;qBAChB,CAAC;gBACJ,CAAC,CAAC;gBACF,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACxB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;aACJ,CAAC;YAEF,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACxE,CAAC,CAAC;IAxCC,CAAC;;AANN,0EAiEC;AAjBgB,mEAAmC,GAAG,CACnD,QAAuB,EACd,EAAE;IACX,IAAI,QAAQ,CAAC,MAAM,GAAG,2CAA0B,CAAC,MAAM,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,2CAA0B,CAAC,KAAK,CACrC,CAAC,QAAkC,EAAE,KAAa,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,CACL,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAC7B,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;YAC/B,MAAM,CAAC,WAAW,KAAK,EAAE,CAC1B,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,AAhBiD,CAgBhD"}
1
+ {"version":3,"file":"SetupTowerDefenceProjectUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/SetupTowerDefenceProjectUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.52.1",
3
+ "version": "1.54.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -36,6 +36,7 @@ import { StartPreparationUseCase } from '../../../domain/usecases/StartPreparati
36
36
  import { NodeLocalCommandRunner } from '../../repositories/NodeLocalCommandRunner';
37
37
  import { OauthAPIProxyClaudeRepository } from '../../repositories/OauthAPIProxyClaudeRepository';
38
38
  import { RevertOrphanedPreparationUseCase } from '../../../domain/usecases/RevertOrphanedPreparationUseCase';
39
+ import { RevertNotReadyAwaitingQualityCheckUseCase } from '../../../domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase';
39
40
  import { GitHubIssueCommentRepository } from '../../repositories/GitHubIssueCommentRepository';
40
41
  import { SetupTowerDefenceProjectUseCase } from '../../../domain/usecases/SetupTowerDefenceProjectUseCase';
41
42
  import {
@@ -232,6 +233,12 @@ export class HandleScheduledEventUseCaseHandler {
232
233
  issueCommentRepository,
233
234
  nodeLocalCommandRunner,
234
235
  );
236
+ const revertNotReadyAwaitingQualityCheckUseCase =
237
+ new RevertNotReadyAwaitingQualityCheckUseCase(
238
+ projectRepository,
239
+ issueRepository,
240
+ issueCommentRepository,
241
+ );
235
242
 
236
243
  const handleScheduledEventUseCase = new HandleScheduledEventUseCase(
237
244
  setupTowerDefenceProjectUseCase,
@@ -250,6 +257,7 @@ export class HandleScheduledEventUseCaseHandler {
250
257
  updateIssueStatusByLabelUseCase,
251
258
  startPreparationUseCase,
252
259
  revertOrphanedPreparationUseCase,
260
+ revertNotReadyAwaitingQualityCheckUseCase,
253
261
  systemDateRepository,
254
262
  googleSpreadsheetRepository,
255
263
  projectRepository,
@@ -6,12 +6,15 @@ export const AWAITING_WORKSPACE_STATUS_NAME = 'Awaiting Workspace';
6
6
  export const PREPARATION_STATUS_NAME = 'Preparation';
7
7
  export const FAILED_PREPARATION_STATUS_NAME = 'Failed Preparation';
8
8
  export const AWAITING_QUALITY_CHECK_STATUS_NAME = 'Awaiting Quality Check';
9
- export const TODO_STATUS_NAME = 'Todo';
9
+ export const TODO_STATUS_NAME = 'Todo by human';
10
10
  export const PC_TODO_STATUS_NAME = 'PC Todo';
11
- export const IN_TMUX_STATUS_NAME = 'In Tmux';
11
+ export const IN_TMUX_STATUS_NAME = 'In Tmux by human';
12
12
  export const DONE_STATUS_NAME = 'Done';
13
13
  export const ICEBOX_STATUS_NAME = 'Icebox';
14
14
 
15
+ export const LEGACY_TODO_STATUS_NAME = 'Todo';
16
+ export const LEGACY_IN_TMUX_STATUS_NAME = 'In Tmux';
17
+
15
18
  export type WorkflowStatusDefinition = {
16
19
  name: string;
17
20
  color: FieldOption['color'];
@@ -46,10 +49,6 @@ export const REQUIRED_WORKFLOW_STATUSES: WorkflowStatusDefinition[] = [
46
49
  name: TODO_STATUS_NAME,
47
50
  color: 'PINK',
48
51
  },
49
- {
50
- name: PC_TODO_STATUS_NAME,
51
- color: 'PINK',
52
- },
53
52
  {
54
53
  name: IN_TMUX_STATUS_NAME,
55
54
  color: 'RED',
@@ -21,6 +21,7 @@ import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueTo
21
21
  import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
22
22
  import { StartPreparationUseCase } from './StartPreparationUseCase';
23
23
  import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
24
+ import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
24
25
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
25
26
 
26
27
  describe('HandleScheduledEventUseCase', () => {
@@ -109,6 +110,8 @@ describe('HandleScheduledEventUseCase', () => {
109
110
  const mockStartPreparationUseCase = mock<StartPreparationUseCase>();
110
111
  const mockRevertOrphanedPreparationUseCase =
111
112
  mock<RevertOrphanedPreparationUseCase>();
113
+ const mockRevertNotReadyAwaitingQualityCheckUseCase =
114
+ mock<RevertNotReadyAwaitingQualityCheckUseCase>();
112
115
  const mockDateRepository = mock<DateRepository>();
113
116
  const mockSpreadsheetRepository = mock<SpreadsheetRepository>();
114
117
  const mockProjectRepository = mock<ProjectRepository>();
@@ -131,6 +134,7 @@ describe('HandleScheduledEventUseCase', () => {
131
134
  mockUpdateIssueStatusByLabelUseCase,
132
135
  mockStartPreparationUseCase,
133
136
  mockRevertOrphanedPreparationUseCase,
137
+ mockRevertNotReadyAwaitingQualityCheckUseCase,
134
138
  mockDateRepository,
135
139
  mockSpreadsheetRepository,
136
140
  mockProjectRepository,
@@ -309,6 +313,60 @@ describe('HandleScheduledEventUseCase', () => {
309
313
  );
310
314
  });
311
315
 
316
+ it('should invoke revertNotReadyAwaitingQualityCheckUseCase when notifyFinishedPreparation is configured', async () => {
317
+ const input = {
318
+ projectName: 'test-project',
319
+ org: 'test-org',
320
+ projectUrl: 'https://github.com/test-org/test-project',
321
+ manager: 'test-manager',
322
+ workingReport: {
323
+ repo: 'test-repo',
324
+ members: ['member1'],
325
+ spreadsheetUrl: 'https://docs.google.com/spreadsheets/test',
326
+ },
327
+ urlOfStoryView: 'https://github.com/test-org/test-project/issues',
328
+ disabled: false,
329
+ allowIssueCacheMinutes: 60,
330
+ notifyFinishedPreparation: {},
331
+ };
332
+
333
+ mockProjectRepository.getProject.mockResolvedValue(mock<Project>());
334
+ await useCase.run(input);
335
+
336
+ expect(
337
+ mockRevertNotReadyAwaitingQualityCheckUseCase.run,
338
+ ).toHaveBeenCalledWith(
339
+ expect.objectContaining({
340
+ projectUrl: 'https://github.com/test-org/test-project',
341
+ allowIssueCacheMinutes: 60,
342
+ }),
343
+ );
344
+ });
345
+
346
+ it('should not invoke revertNotReadyAwaitingQualityCheckUseCase when notifyFinishedPreparation is absent', async () => {
347
+ const input = {
348
+ projectName: 'test-project',
349
+ org: 'test-org',
350
+ projectUrl: 'https://github.com/test-org/test-project',
351
+ manager: 'test-manager',
352
+ workingReport: {
353
+ repo: 'test-repo',
354
+ members: ['member1'],
355
+ spreadsheetUrl: 'https://docs.google.com/spreadsheets/test',
356
+ },
357
+ urlOfStoryView: 'https://github.com/test-org/test-project/issues',
358
+ disabled: false,
359
+ allowIssueCacheMinutes: 60,
360
+ };
361
+
362
+ mockProjectRepository.getProject.mockResolvedValue(mock<Project>());
363
+ await useCase.run(input);
364
+
365
+ expect(
366
+ mockRevertNotReadyAwaitingQualityCheckUseCase.run,
367
+ ).not.toHaveBeenCalled();
368
+ });
369
+
312
370
  describe('story issue creation progress logs', () => {
313
371
  const storyInput = {
314
372
  projectName: 'test-project',
@@ -21,6 +21,7 @@ import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueTo
21
21
  import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
22
22
  import { StartPreparationUseCase } from './StartPreparationUseCase';
23
23
  import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
24
+ import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
24
25
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
25
26
 
26
27
  export class ProjectNotFoundError extends Error {
@@ -50,6 +51,7 @@ export class HandleScheduledEventUseCase {
50
51
  readonly updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase,
51
52
  readonly startPreparationUseCase: StartPreparationUseCase,
52
53
  readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase,
54
+ readonly revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase,
53
55
  readonly dateRepository: DateRepository,
54
56
  readonly spreadsheetRepository: SpreadsheetRepository,
55
57
  readonly projectRepository: ProjectRepository,
@@ -83,6 +85,9 @@ export class HandleScheduledEventUseCase {
83
85
  awLogStaleThresholdMinutes?: number;
84
86
  awaitingQualityCheckStatus?: string | null;
85
87
  } | null;
88
+ notifyFinishedPreparation?: {
89
+ awaitingQualityCheckStatusName?: string | null;
90
+ } | null;
86
91
  }): Promise<{
87
92
  project: Project;
88
93
  issues: Issue[];
@@ -252,6 +257,12 @@ ${JSON.stringify(e)}
252
257
  storyObjectMap,
253
258
  );
254
259
  }
260
+ if (input.notifyFinishedPreparation) {
261
+ await this.revertNotReadyAwaitingQualityCheckUseCase.run({
262
+ projectUrl: input.projectUrl,
263
+ allowIssueCacheMinutes: input.allowIssueCacheMinutes,
264
+ });
265
+ }
255
266
  if (input.startPreparation) {
256
267
  if (input.startPreparation.preparationProcessCheckCommand) {
257
268
  await this.revertOrphanedPreparationUseCase.run({
@@ -0,0 +1,114 @@
1
+ import {
2
+ IssueRepository,
3
+ RelatedPullRequest,
4
+ } from './adapter-interfaces/IssueRepository';
5
+
6
+ export type PrRejectedReasonType =
7
+ | 'PULL_REQUEST_NOT_FOUND'
8
+ | 'MULTIPLE_PULL_REQUESTS_FOUND'
9
+ | 'PULL_REQUEST_CONFLICTED'
10
+ | 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS'
11
+ | 'REQUIRED_CI_JOB_NEVER_STARTED'
12
+ | 'ANY_REVIEW_COMMENT_NOT_RESOLVED';
13
+
14
+ export type PrRejectionResult = {
15
+ rejections: { type: PrRejectedReasonType; detail: string }[];
16
+ approvedPrUrl: string | null;
17
+ };
18
+
19
+ export class IssueRejectionEvaluator {
20
+ constructor(
21
+ private readonly issueRepository: Pick<
22
+ IssueRepository,
23
+ 'findRelatedOpenPRs' | 'getOpenPullRequest'
24
+ >,
25
+ ) {}
26
+
27
+ evaluate = async (issue: {
28
+ url: string;
29
+ labels: string[];
30
+ isPr: boolean;
31
+ }): Promise<PrRejectionResult> => {
32
+ const rejections: { type: PrRejectedReasonType; detail: string }[] = [];
33
+ let approvedPrUrl: string | null = null;
34
+
35
+ const categoryLabels = issue.labels.filter((label) =>
36
+ label.startsWith('category:'),
37
+ );
38
+ const hasLlmAgentLabel = issue.labels.some(
39
+ (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
40
+ );
41
+
42
+ if (
43
+ !hasLlmAgentLabel &&
44
+ (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
45
+ ) {
46
+ const prsToCheck = issue.isPr
47
+ ? await this.resolveOpenPrsForPrItem(issue.url)
48
+ : await this.issueRepository.findRelatedOpenPRs(issue.url);
49
+
50
+ if (prsToCheck.length <= 0) {
51
+ rejections.push({
52
+ type: 'PULL_REQUEST_NOT_FOUND',
53
+ detail: 'PULL_REQUEST_NOT_FOUND',
54
+ });
55
+ } else if (prsToCheck.length > 1) {
56
+ rejections.push({
57
+ type: 'MULTIPLE_PULL_REQUESTS_FOUND',
58
+ detail: `MULTIPLE_PULL_REQUESTS_FOUND: ${prsToCheck.map((pr) => pr.url).join(', ')}`,
59
+ });
60
+ } else {
61
+ const pr = prsToCheck[0];
62
+ if (pr.isConflicted) {
63
+ rejections.push({
64
+ type: 'PULL_REQUEST_CONFLICTED',
65
+ detail: `PULL_REQUEST_CONFLICTED: ${pr.url}`,
66
+ });
67
+ }
68
+ if (!pr.isPassedAllCiJob) {
69
+ const missingChecks = pr.missingRequiredCheckNames;
70
+ const missingSuffix =
71
+ missingChecks.length > 0
72
+ ? ` (missing: ${missingChecks.join(', ')})`
73
+ : '';
74
+ if (pr.isCiStateSuccess && missingChecks.length > 0) {
75
+ rejections.push({
76
+ type: 'REQUIRED_CI_JOB_NEVER_STARTED',
77
+ detail: `REQUIRED_CI_JOB_NEVER_STARTED: ${pr.url}${missingSuffix}`,
78
+ });
79
+ } else {
80
+ rejections.push({
81
+ type: 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS',
82
+ detail: `ANY_CI_JOB_FAILED_OR_IN_PROGRESS: ${pr.url}${missingSuffix}`,
83
+ });
84
+ }
85
+ }
86
+ if (!pr.isResolvedAllReviewComments) {
87
+ rejections.push({
88
+ type: 'ANY_REVIEW_COMMENT_NOT_RESOLVED',
89
+ detail: `ANY_REVIEW_COMMENT_NOT_RESOLVED: ${pr.url}`,
90
+ });
91
+ }
92
+ if (
93
+ !pr.isConflicted &&
94
+ pr.isPassedAllCiJob &&
95
+ pr.isResolvedAllReviewComments
96
+ ) {
97
+ approvedPrUrl = pr.url;
98
+ }
99
+ }
100
+ }
101
+
102
+ return { rejections, approvedPrUrl };
103
+ };
104
+
105
+ private resolveOpenPrsForPrItem = async (
106
+ prUrl: string,
107
+ ): Promise<RelatedPullRequest[]> => {
108
+ const pr = await this.issueRepository.getOpenPullRequest(prUrl);
109
+ if (pr === null) {
110
+ return [];
111
+ }
112
+ return [pr];
113
+ };
114
+ }
@@ -1,7 +1,4 @@
1
- import {
2
- IssueRepository,
3
- RelatedPullRequest,
4
- } from './adapter-interfaces/IssueRepository';
1
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
5
2
  import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
6
3
  import { IssueCommentRepository } from './adapter-interfaces/IssueCommentRepository';
7
4
  import { WebhookRepository } from './adapter-interfaces/WebhookRepository';
@@ -11,6 +8,10 @@ import {
11
8
  FAILED_PREPARATION_STATUS_NAME,
12
9
  PREPARATION_STATUS_NAME,
13
10
  } from '../entities/WorkflowStatus';
11
+ import {
12
+ IssueRejectionEvaluator,
13
+ PrRejectedReasonType,
14
+ } from './IssueRejectionEvaluator';
14
15
 
15
16
  export class IssueNotFoundError extends Error {
16
17
  constructor(issueUrl: string) {
@@ -33,14 +34,11 @@ export class IllegalIssueStatusError extends Error {
33
34
  type RejectedReasonType =
34
35
  | 'NO_REPORT_FROM_AGENT_BOT'
35
36
  | 'REPORT_HAS_NEXT_STEP'
36
- | 'PULL_REQUEST_NOT_FOUND'
37
- | 'MULTIPLE_PULL_REQUESTS_FOUND'
38
- | 'PULL_REQUEST_CONFLICTED'
39
- | 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS'
40
- | 'REQUIRED_CI_JOB_NEVER_STARTED'
41
- | 'ANY_REVIEW_COMMENT_NOT_RESOLVED';
37
+ | PrRejectedReasonType;
42
38
 
43
39
  export class NotifyFinishedIssuePreparationUseCase {
40
+ private readonly issueRejectionEvaluator: IssueRejectionEvaluator;
41
+
44
42
  constructor(
45
43
  private readonly projectRepository: Pick<ProjectRepository, 'getByUrl'>,
46
44
  private readonly issueRepository: Pick<
@@ -61,7 +59,9 @@ export class NotifyFinishedIssuePreparationUseCase {
61
59
  WebhookRepository,
62
60
  'sendGetRequest'
63
61
  >,
64
- ) {}
62
+ ) {
63
+ this.issueRejectionEvaluator = new IssueRejectionEvaluator(issueRepository);
64
+ }
65
65
 
66
66
  run = async (params: {
67
67
  projectUrl: string;
@@ -257,7 +257,7 @@ export class NotifyFinishedIssuePreparationUseCase {
257
257
  approvedPrUrl: string | null;
258
258
  }> => {
259
259
  const rejections: { type: RejectedReasonType; detail: string }[] = [];
260
- let approvedPrUrl: string | null = null;
260
+
261
261
  const lastComment = comments[comments.length - 1];
262
262
  if (!lastComment || !lastComment.content.startsWith('From:')) {
263
263
  rejections.push({
@@ -271,83 +271,9 @@ export class NotifyFinishedIssuePreparationUseCase {
271
271
  });
272
272
  }
273
273
 
274
- const categoryLabels = issue.labels.filter((label) =>
275
- label.startsWith('category:'),
276
- );
277
- const hasLlmAgentLabel = issue.labels.some(
278
- (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
279
- );
280
- if (
281
- !hasLlmAgentLabel &&
282
- (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
283
- ) {
284
- const prsToCheck = issue.isPr
285
- ? await this.resolveOpenPrsForPrItem(issue.url)
286
- : await this.issueRepository.findRelatedOpenPRs(issue.url);
287
-
288
- if (prsToCheck.length <= 0) {
289
- rejections.push({
290
- type: 'PULL_REQUEST_NOT_FOUND',
291
- detail: 'PULL_REQUEST_NOT_FOUND',
292
- });
293
- } else if (prsToCheck.length > 1) {
294
- rejections.push({
295
- type: 'MULTIPLE_PULL_REQUESTS_FOUND',
296
- detail: `MULTIPLE_PULL_REQUESTS_FOUND: ${prsToCheck.map((pr) => pr.url).join(', ')}`,
297
- });
298
- } else {
299
- const pr = prsToCheck[0];
300
- if (pr.isConflicted) {
301
- rejections.push({
302
- type: 'PULL_REQUEST_CONFLICTED',
303
- detail: `PULL_REQUEST_CONFLICTED: ${pr.url}`,
304
- });
305
- }
306
- if (!pr.isPassedAllCiJob) {
307
- const missingChecks = pr.missingRequiredCheckNames;
308
- const missingSuffix =
309
- missingChecks.length > 0
310
- ? ` (missing: ${missingChecks.join(', ')})`
311
- : '';
312
- if (pr.isCiStateSuccess && missingChecks.length > 0) {
313
- rejections.push({
314
- type: 'REQUIRED_CI_JOB_NEVER_STARTED',
315
- detail: `REQUIRED_CI_JOB_NEVER_STARTED: ${pr.url}${missingSuffix}`,
316
- });
317
- } else {
318
- rejections.push({
319
- type: 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS',
320
- detail: `ANY_CI_JOB_FAILED_OR_IN_PROGRESS: ${pr.url}${missingSuffix}`,
321
- });
322
- }
323
- }
324
- if (!pr.isResolvedAllReviewComments) {
325
- rejections.push({
326
- type: 'ANY_REVIEW_COMMENT_NOT_RESOLVED',
327
- detail: `ANY_REVIEW_COMMENT_NOT_RESOLVED: ${pr.url}`,
328
- });
329
- }
330
- if (
331
- !pr.isConflicted &&
332
- pr.isPassedAllCiJob &&
333
- pr.isResolvedAllReviewComments
334
- ) {
335
- approvedPrUrl = pr.url;
336
- }
337
- }
338
- }
339
-
340
- return { rejections, approvedPrUrl };
341
- };
342
-
343
- private resolveOpenPrsForPrItem = async (
344
- prUrl: string,
345
- ): Promise<RelatedPullRequest[]> => {
346
- const pr = await this.issueRepository.getOpenPullRequest(prUrl);
347
- if (pr === null) {
348
- return [];
349
- }
350
- return [pr];
274
+ const { rejections: prRejections, approvedPrUrl } =
275
+ await this.issueRejectionEvaluator.evaluate(issue);
276
+ return { rejections: [...rejections, ...prRejections], approvedPrUrl };
351
277
  };
352
278
 
353
279
  private reportBodyHasNextStep = (body: string): boolean => {