@rsaglobaltech/specgate 0.21.0 → 0.22.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.
- package/CHANGELOG.md +116 -0
- package/README.md +81 -96
- package/dist/packages/core/src/domain/BriefCards.js +320 -0
- package/dist/packages/core/src/domain/BriefCards.js.map +1 -0
- package/dist/packages/core/src/domain/DraftChecklist.js +5 -1
- package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
- package/dist/packages/core/src/domain/QuotedText.js +5 -0
- package/dist/packages/core/src/domain/QuotedText.js.map +1 -1
- package/dist/packages/core/src/domain/TicketText.js +337 -0
- package/dist/packages/core/src/domain/TicketText.js.map +1 -0
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +7 -3
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
- package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js +48 -0
- package/dist/packages/core/src/infrastructure/IdsAcrossBranches.js.map +1 -0
- package/dist/packages/mcp-spec-driven/src/native-tools.js +1 -1
- package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
- package/dist/scripts/agents/commands.js +8 -6
- package/dist/scripts/agents/commands.js.map +1 -1
- package/dist/scripts/agents/contract-file.js +44 -0
- package/dist/scripts/agents/contract-file.js.map +1 -1
- package/dist/scripts/alm/cli.js +16 -4
- package/dist/scripts/alm/cli.js.map +1 -1
- package/dist/scripts/alm/port.js +1 -1
- package/dist/scripts/alm/port.js.map +1 -1
- package/dist/scripts/alm/providers/http-client.js +46 -3
- package/dist/scripts/alm/providers/http-client.js.map +1 -1
- package/dist/scripts/alm/providers/jira.js +108 -32
- package/dist/scripts/alm/providers/jira.js.map +1 -1
- package/dist/scripts/cli/commands/alm/PrCommand.js +198 -0
- package/dist/scripts/cli/commands/alm/PrCommand.js.map +1 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js +32 -6
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/change/TicketCommand.js +657 -0
- package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -0
- package/dist/scripts/cli/commands/harness/RunCommand.js +4 -2
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/AdoptCommand.js +58 -0
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/UpdateCommand.js +4 -0
- package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/CheckCommand.js +12 -0
- package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DraftCommand.js +240 -27
- package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ExploreCommand.js +13 -13
- package/dist/scripts/cli/commands/spec/ExploreCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +18 -6
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/docs/journey-storyboard.js +67 -44
- package/dist/scripts/docs/journey-storyboard.js.map +1 -1
- package/dist/scripts/docs/nav.js +156 -139
- package/dist/scripts/docs/nav.js.map +1 -1
- package/dist/scripts/docs/record-journey.js +139 -49
- package/dist/scripts/docs/record-journey.js.map +1 -1
- package/dist/scripts/docs/terminal-storyboard.js +15 -11
- package/dist/scripts/docs/terminal-storyboard.js.map +1 -1
- package/dist/scripts/draft/brief-check.js +34 -0
- package/dist/scripts/draft/brief-check.js.map +1 -0
- package/dist/scripts/draft/brief-setup.js +182 -17
- package/dist/scripts/draft/brief-setup.js.map +1 -1
- package/dist/scripts/draft/drafting-guide.js +43 -1
- package/dist/scripts/draft/drafting-guide.js.map +1 -1
- package/dist/scripts/draft/ticket-guide.js +129 -0
- package/dist/scripts/draft/ticket-guide.js.map +1 -0
- package/dist/scripts/lib/surface.js +2 -0
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/lib/ticket-keys.js +140 -0
- package/dist/scripts/lib/ticket-keys.js.map +1 -0
- package/dist/scripts/propose.js +8 -2
- package/dist/scripts/propose.js.map +1 -1
- package/dist/scripts/vcs/github-pr.js +88 -0
- package/dist/scripts/vcs/github-pr.js.map +1 -0
- package/package.json +1 -1
- package/templates/base/AGENTS.md.tpl +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-file.js","sourceRoot":"","sources":["../../../scripts/agents/contract-file.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,sCASC;AAGD,oCAKC;AAKD,gCAGC;AAoBD,wDAEC;AAQD,sCAsBC;AAOD,wCAkBC;AAMD,wCAoBC;
|
|
1
|
+
{"version":3,"file":"contract-file.js","sourceRoot":"","sources":["../../../scripts/agents/contract-file.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,sCASC;AAGD,oCAKC;AAKD,gCAGC;AAoBD,wDAEC;AAQD,sCAsBC;AAOD,wCAkBC;AAMD,wCAoBC;AAUD,0CAkCC;AApLD,4CAA8B;AAC9B,gDAAkC;AAClC,sDAAkD;AAErC,QAAA,KAAK,GAAG,0EAA0E,CAAC;AACnF,QAAA,GAAG,GAAG,uBAAuB,CAAC;AAE3C,mDAAmD;AACnD,SAAgB,aAAa,CAAC,QAAuB,EAAE,QAAgB;IACrE,MAAM,KAAK,GAAG,GAAG,aAAK,KAAK,QAAQ,CAAC,OAAO,EAAE,KAAK,WAAG,IAAI,CAAC;IAC1D,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAG,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,WAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,GAAG,KAAK,KAAK,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED,qDAAqD;AACrD,SAAgB,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAG,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,WAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED,+EAA+E;AAE/E,oEAAoE;AACpE,SAAgB,UAAU,CAAC,IAAY,EAAE,IAAY;IACnD,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,wBAAwB,IAAI,wBAAwB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC;AAED,6FAA6F;AAC7F,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,CAAC,GAAG,6EAA6E,CAAC,IAAI,CAC1F,IAAI,CACL,CAAC;IACF,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,cAAc,GAAG;IACrB,uEAAuE;IACvE,yEAAyE;CAC1E,CAAC;AAEF,SAAgB,sBAAsB,CAAC,IAAY;IACjD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAa,EAAE,UAAkB;IAC7D,MAAM,IAAI,GAAG,IAAA,0BAAW,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3F,MAAM,IAAI,GAA2B;QACnC,YAAY,EAAE,CACZ,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;YAC5B,SAAS,CAAC,KAAK,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CACxC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAC3B,YAAY,EAAE,UAAU;QACxB,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,SAAS;QAC5D,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,aAAa;QACpD,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW;QAChD,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,UAAU;QAC/F,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,WAAW;QACpD,WAAW,EAAE,2CAA2C;QACxD,2BAA2B,EAAE,EAAE;QAC/B,mBAAmB,EAAE,EAAE;KACxB,CAAC;IACF,OAAO,CACL,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAC5F,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAC5B,UAAkB,EAClB,OAA6B,EAAE;IAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,0EAA0E;IAC1E,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAC5F,IAAI,CACL,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC5B,UAAkB,EAClB,OAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9C,EAAE,CAAC,aAAa,CACd,IAAI,EACJ,GAAG,OAAO,8CAA8C,KAAK,IAAI,EACjE,MAAM,CACP,CAAC;QACF,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC7B,UAAkB,EAClB,OAA6B,EAAE;IAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAG,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,gEAAgE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAG,IAAA,0BAAW,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3F,MAAM,IAAI,GAA2B;QACnC,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7D,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU;QACvC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS;QAC9C,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,aAAa;QAC5C,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW;QAChD,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,UAAU;QACjD,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,WAAW;QACpD,WAAW,EAAE,KAAK;QAClB,2BAA2B,EAAE,EAAE;QAC/B,mBAAmB,EAAE,EAAE;KACxB,CAAC;IACF,MAAM,QAAQ,GACZ,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9F,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/scripts/alm/cli.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* specgate alm pull [--label <name>] [--project-dir <dir>] [--dry-run]
|
|
10
10
|
* specgate alm link <REQ-id> <issue-key> [--project-dir <dir>]
|
|
11
11
|
* specgate alm status [--project-dir <dir>]
|
|
12
|
+
* specgate alm pr <change> [--no-push] [--no-check] [--project-dir <dir>]
|
|
12
13
|
*/
|
|
13
14
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
15
|
if (k2 === undefined) k2 = k;
|
|
@@ -49,6 +50,7 @@ const core_1 = require("./core");
|
|
|
49
50
|
const clients_1 = require("./clients");
|
|
50
51
|
const diagnostics_1 = require("../lib/diagnostics");
|
|
51
52
|
const PullCommand_1 = require("../cli/commands/alm/PullCommand");
|
|
53
|
+
const PrCommand_1 = require("../cli/commands/alm/PrCommand");
|
|
52
54
|
const ui = __importStar(require("../lib/ui"));
|
|
53
55
|
function logInfo(msg) {
|
|
54
56
|
process.stdout.write(ui.logLine(msg));
|
|
@@ -64,13 +66,17 @@ function usage() {
|
|
|
64
66
|
" specgate alm sync [--project-dir <dir>] [--dry-run]\n" +
|
|
65
67
|
" specgate alm link <REQ-id> <issue-key> [--project-dir <dir>]\n" +
|
|
66
68
|
" specgate alm status [--project-dir <dir>]\n" +
|
|
67
|
-
" specgate alm pull [--label <name>] [--project-dir <dir>] [--dry-run]\n
|
|
69
|
+
" specgate alm pull [--label <name>] [--project-dir <dir>] [--dry-run]\n" +
|
|
70
|
+
" specgate alm pr <change> [--no-push] [--no-check] [--project-dir <dir>]\n\n" +
|
|
68
71
|
"sync Creates an ALM issue for every unlinked REQ, closes issues whose REQ\n" +
|
|
69
72
|
" is Implemented, and reports drift (issue done, REQ still open).\n" +
|
|
70
73
|
"link Manually map an existing issue to a requirement.\n" +
|
|
71
74
|
"status Print the current REQ ↔ issue mapping without network access.\n" +
|
|
72
|
-
"pull Open a change per labelled issue
|
|
73
|
-
"
|
|
75
|
+
"pull Open a change per labelled issue, from its title and description;\n" +
|
|
76
|
+
" the scenario is yours to write. To draft from a ticket's acceptance\n" +
|
|
77
|
+
" criteria, use specgate propose --from-ticket <KEY>.\n" +
|
|
78
|
+
"pr Push the ticket's branch and open, or update, its one pull request\n" +
|
|
79
|
+
" on GitHub (pr: in alm.config.yaml). Never merges.\n\n" +
|
|
74
80
|
"Configuration: alm.config.yaml at the project root (provider, base_url,\n" +
|
|
75
81
|
"project_key, token_env). Tokens come from the environment, never the file.\n");
|
|
76
82
|
}
|
|
@@ -174,6 +180,12 @@ async function main() {
|
|
|
174
180
|
process.exit(1);
|
|
175
181
|
}
|
|
176
182
|
}
|
|
183
|
+
if (sub === "pr") {
|
|
184
|
+
// Outside `scripts/alm/` too: a pull request belongs to the repository,
|
|
185
|
+
// not to the board (ADR-0039 §4).
|
|
186
|
+
await (0, PrCommand_1.main)(argv.slice(1));
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
177
189
|
if (sub === "pull") {
|
|
178
190
|
// Implemented outside `scripts/alm/` on purpose: ADR-0021 forbids this
|
|
179
191
|
// subsystem from writing the spec tree, and a pull has to produce files.
|
|
@@ -181,7 +193,7 @@ async function main() {
|
|
|
181
193
|
await (0, PullCommand_1.main)(argv.slice(1));
|
|
182
194
|
return;
|
|
183
195
|
}
|
|
184
|
-
logError(`Unknown alm sub-command: ${sub || "(none)"}. Expected: sync, link, status, pull`);
|
|
196
|
+
logError(`Unknown alm sub-command: ${sub || "(none)"}. Expected: sync, link, status, pull, pr`);
|
|
185
197
|
usage();
|
|
186
198
|
process.exit(2);
|
|
187
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../scripts/alm/cli.ts"],"names":[],"mappings":";;AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../scripts/alm/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/scripts/alm/port.js
CHANGED
|
@@ -50,7 +50,7 @@ exports.CAPABILITY_METHOD = {
|
|
|
50
50
|
listIssues: "listIssues",
|
|
51
51
|
};
|
|
52
52
|
/** Config keys the core itself reads, whatever the provider. */
|
|
53
|
-
exports.CORE_CONFIG_KEYS = ["alm_version", "provider"];
|
|
53
|
+
exports.CORE_CONFIG_KEYS = ["alm_version", "provider", "pr"];
|
|
54
54
|
/**
|
|
55
55
|
* Check a provider declaration is well formed.
|
|
56
56
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../scripts/alm/port.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;;;
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../scripts/alm/port.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpAlmClient = void 0;
|
|
4
|
+
exports.assertSecureUrl = assertSecureUrl;
|
|
4
5
|
/**
|
|
5
6
|
* What every HTTP-backed ALM connector shares: a credential read from the
|
|
6
7
|
* environment, a base URL that does not grow a doubled slash, and a refusal to
|
|
@@ -17,6 +18,7 @@ class HttpAlmClient {
|
|
|
17
18
|
// `https://host//rest/api` against a real server, so it is stripped once,
|
|
18
19
|
// here, rather than in each provider's URL building.
|
|
19
20
|
this.baseUrl = String(cfg.base_url ?? "").replace(/\/$/, "");
|
|
21
|
+
assertSecureUrl(this.baseUrl, "base_url");
|
|
20
22
|
this.fetchImpl = fetchImpl ?? globalThis.fetch;
|
|
21
23
|
}
|
|
22
24
|
/** Read a credential, naming the variable and how to set it when it is absent. */
|
|
@@ -30,13 +32,34 @@ class HttpAlmClient {
|
|
|
30
32
|
}
|
|
31
33
|
/** Perform a request and fail loudly, with the server's own words, when it is refused. */
|
|
32
34
|
async request(path, what, init) {
|
|
33
|
-
const res = await this.fetchImpl(`${this.
|
|
34
|
-
|
|
35
|
+
const res = await this.fetchImpl(`${await this.apiBase()}${path}`, init);
|
|
36
|
+
const status = this.refusedAs(res) ?? (res.ok ? undefined : res.status);
|
|
37
|
+
if (status !== undefined) {
|
|
35
38
|
const body = await res.text().catch(() => "");
|
|
36
|
-
|
|
39
|
+
const fix = this.fixFor(status);
|
|
40
|
+
throw new Error(`${what} failed: HTTP ${status} ${body.slice(0, 300)}` + (fix ? `\nFix: ${fix}` : ""));
|
|
37
41
|
}
|
|
38
42
|
return res;
|
|
39
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Where API requests go. The site itself, unless a provider's API lives
|
|
46
|
+
* elsewhere — Jira's scoped tokens only work through Atlassian's gateway.
|
|
47
|
+
*/
|
|
48
|
+
async apiBase() {
|
|
49
|
+
return this.baseUrl;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A response that says yes but means no. Some servers answer a refused
|
|
53
|
+
* credential as an anonymous request — 200 and an empty result — and say
|
|
54
|
+
* so only in a header; a provider maps that to the status it means.
|
|
55
|
+
*/
|
|
56
|
+
refusedAs(_res) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
/** A provider's own advice for a refused request; none by default. */
|
|
60
|
+
fixFor(_status) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
40
63
|
/** The same, returning the parsed body, which is what every caller wants. */
|
|
41
64
|
async requestJson(path, what, init) {
|
|
42
65
|
const res = await this.request(path, what, init);
|
|
@@ -44,4 +67,24 @@ class HttpAlmClient {
|
|
|
44
67
|
}
|
|
45
68
|
}
|
|
46
69
|
exports.HttpAlmClient = HttpAlmClient;
|
|
70
|
+
/**
|
|
71
|
+
* A URL a credential is sent to. `alm.config.yaml` is committed, so a change
|
|
72
|
+
* to it is a change to where the token goes: never in clear text. Only a
|
|
73
|
+
* server on this machine may be plain http, for local tests and proxies.
|
|
74
|
+
*/
|
|
75
|
+
function assertSecureUrl(url, key) {
|
|
76
|
+
if (!url)
|
|
77
|
+
return;
|
|
78
|
+
let parsed;
|
|
79
|
+
try {
|
|
80
|
+
parsed = new URL(url);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
throw new Error(`${key} '${url}' is not a URL.\nFix: write it as https://host.`);
|
|
84
|
+
}
|
|
85
|
+
const local = ["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname);
|
|
86
|
+
if (parsed.protocol !== "https:" && !(local && parsed.protocol === "http:")) {
|
|
87
|
+
throw new Error(`${key} '${url}' is not https: the token would travel in clear text.\nFix: use the https:// address.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
47
90
|
//# sourceMappingURL=http-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../../scripts/alm/providers/http-client.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../../scripts/alm/providers/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.jiraProvider = void 0;
|
|
3
|
+
exports.jiraProvider = exports.SEARCH_LIMIT = void 0;
|
|
4
4
|
const http_client_1 = require("./http-client");
|
|
5
|
+
const TicketText_1 = require("../../../packages/core/src/domain/TicketText");
|
|
6
|
+
/** Issues per page, the most `/search/jql` returns with these fields. */
|
|
7
|
+
const PAGE_SIZE = 100;
|
|
8
|
+
/** Where a search stops: a pull of more than this is a query to narrow, not a page to read. */
|
|
9
|
+
exports.SEARCH_LIMIT = 1000;
|
|
10
|
+
/** Atlassian's API gateway, the only door a token created with scopes opens. */
|
|
11
|
+
const GATEWAY = "https://api.atlassian.com/ex/jira";
|
|
5
12
|
/**
|
|
6
13
|
* Jira Cloud.
|
|
7
14
|
*
|
|
@@ -21,6 +28,9 @@ class JiraClient extends http_client_1.HttpAlmClient {
|
|
|
21
28
|
headers;
|
|
22
29
|
projectKey;
|
|
23
30
|
issueType;
|
|
31
|
+
cloudId;
|
|
32
|
+
acceptanceField;
|
|
33
|
+
gateway;
|
|
24
34
|
constructor(cfg, fetchImpl) {
|
|
25
35
|
super(cfg, fetchImpl);
|
|
26
36
|
const token = http_client_1.HttpAlmClient.requireEnv(cfg.token_env);
|
|
@@ -33,6 +43,49 @@ class JiraClient extends http_client_1.HttpAlmClient {
|
|
|
33
43
|
};
|
|
34
44
|
this.projectKey = String(cfg.project_key ?? "");
|
|
35
45
|
this.issueType = cfg.issue_type ?? "Task";
|
|
46
|
+
this.cloudId = cfg.cloud_id ? String(cfg.cloud_id).trim() : undefined;
|
|
47
|
+
this.acceptanceField = cfg.acceptance_field ? String(cfg.acceptance_field) : undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The site, or — with `cloud_id` — the gateway. `auto` asks the site for
|
|
51
|
+
* its id once, without credentials: `tenant_info` is public, and a token
|
|
52
|
+
* has no business travelling to an endpoint that does not need it.
|
|
53
|
+
*/
|
|
54
|
+
apiBase() {
|
|
55
|
+
if (!this.cloudId)
|
|
56
|
+
return Promise.resolve(this.baseUrl);
|
|
57
|
+
this.gateway ??= this.resolveCloudId().then((id) => `${GATEWAY}/${id}`);
|
|
58
|
+
return this.gateway;
|
|
59
|
+
}
|
|
60
|
+
async resolveCloudId() {
|
|
61
|
+
if (this.cloudId !== "auto")
|
|
62
|
+
return this.cloudId;
|
|
63
|
+
const res = await this.fetchImpl(`${this.baseUrl}/_edge/tenant_info`, {
|
|
64
|
+
headers: { Accept: "application/json" },
|
|
65
|
+
});
|
|
66
|
+
const body = res.ok ? (await res.json()) : {};
|
|
67
|
+
if (typeof body.cloudId !== "string" || !body.cloudId) {
|
|
68
|
+
throw new Error(`Jira: could not read the site id from ${this.baseUrl}/_edge/tenant_info (HTTP ${res.status}).\n` +
|
|
69
|
+
"Fix: check base_url, or set cloud_id to the site id itself.");
|
|
70
|
+
}
|
|
71
|
+
return body.cloudId;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Jira answers a credential it rejects as an anonymous request: a search
|
|
75
|
+
* returns 200 and no issues, and only `X-Seraph-LoginReason` tells. Read as
|
|
76
|
+
* a 401, so a scoped token sent to the site is not "nothing found".
|
|
77
|
+
*/
|
|
78
|
+
refusedAs(res) {
|
|
79
|
+
return res.headers?.get?.("x-seraph-loginreason") === "AUTHENTICATED_FAILED" ? 401 : undefined;
|
|
80
|
+
}
|
|
81
|
+
fixFor(status) {
|
|
82
|
+
if (status === 401 && !this.cloudId) {
|
|
83
|
+
return ("a token created with scopes only works through Atlassian's gateway — " +
|
|
84
|
+
"set `cloud_id: auto` in alm.config.yaml. Otherwise check the token and the account email.");
|
|
85
|
+
}
|
|
86
|
+
if (status === 401)
|
|
87
|
+
return "check the token, its scopes (read:jira-work) and the account email.";
|
|
88
|
+
return undefined;
|
|
36
89
|
}
|
|
37
90
|
async createIssue(reqId, title) {
|
|
38
91
|
const created = await this.requestJson("/rest/api/3/issue", `Jira create issue for ${reqId}`, {
|
|
@@ -50,11 +103,11 @@ class JiraClient extends http_client_1.HttpAlmClient {
|
|
|
50
103
|
return { key: created.key, url: `${this.baseUrl}/browse/${created.key}` };
|
|
51
104
|
}
|
|
52
105
|
async getIssueStatus(issueKey) {
|
|
53
|
-
const issue = await this.requestJson(`/rest/api/3/issue/${issueKey}?fields=status`, `Jira read ${issueKey}`, { headers: this.headers });
|
|
106
|
+
const issue = await this.requestJson(`/rest/api/3/issue/${issueKeyPath(issueKey)}?fields=status`, `Jira read ${issueKey}`, { headers: this.headers });
|
|
54
107
|
return issue.fields?.status?.statusCategory?.key === "done" ? "done" : "open";
|
|
55
108
|
}
|
|
56
109
|
/**
|
|
57
|
-
* Open issues carrying a label, via JQL.
|
|
110
|
+
* Open issues carrying a label, via JQL, page by page.
|
|
58
111
|
*
|
|
59
112
|
* The project is pinned as well as the label: a label is global in Jira, so
|
|
60
113
|
* searching on it alone reaches across every project the credential can see.
|
|
@@ -65,17 +118,48 @@ class JiraClient extends http_client_1.HttpAlmClient {
|
|
|
65
118
|
*/
|
|
66
119
|
async listIssues(label) {
|
|
67
120
|
const jql = `project = "${this.projectKey}" AND labels = "${label}" AND statusCategory != Done`;
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
121
|
+
const found = [];
|
|
122
|
+
let token;
|
|
123
|
+
// `/search/jql` pages with a token, not an offset: a page says whether it
|
|
124
|
+
// is the last, and the next one is asked for by the token the last gave.
|
|
125
|
+
do {
|
|
126
|
+
const result = await this.requestJson(`/rest/api/3/search/jql?jql=${encodeURIComponent(jql)}&fields=summary,description` +
|
|
127
|
+
`&maxResults=${PAGE_SIZE}` +
|
|
128
|
+
(token ? `&nextPageToken=${encodeURIComponent(token)}` : ""), `Jira search for issues labelled ${label}`, { headers: this.headers });
|
|
129
|
+
for (const issue of result.issues ?? []) {
|
|
130
|
+
found.push({
|
|
131
|
+
key: issue.key,
|
|
132
|
+
title: String(issue.fields?.summary ?? ""),
|
|
133
|
+
body: (0, TicketText_1.documentText)(issue.fields?.description),
|
|
134
|
+
url: `${this.baseUrl}/browse/${issue.key}`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
token = result.isLast ? undefined : result.nextPageToken;
|
|
138
|
+
if (token && found.length >= exports.SEARCH_LIMIT) {
|
|
139
|
+
process.stderr.write(`Jira: stopped after ${exports.SEARCH_LIMIT} issues labelled ${label}; narrow the label to pull the rest.\n`);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
} while (token);
|
|
143
|
+
return found;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* One issue, with the fields a ticket is read from. A key outside the
|
|
147
|
+
* configured project is refused before any request: the credential may see
|
|
148
|
+
* other projects, and this command has no business there.
|
|
149
|
+
*/
|
|
150
|
+
async readIssue(key) {
|
|
151
|
+
if (!new RegExp(`^${this.projectKey}-\\d+$`).test(key)) {
|
|
152
|
+
throw new Error(`Jira: ${key} is not an issue of project ${this.projectKey}.\n` +
|
|
153
|
+
"Fix: use a key of the project in alm.config.yaml, or export the issue and pass the file.");
|
|
154
|
+
}
|
|
155
|
+
const fields = ["summary", "issuetype", "parent", "labels", "description", "status"];
|
|
156
|
+
if (typeof this.acceptanceField === "string")
|
|
157
|
+
fields.push(this.acceptanceField);
|
|
158
|
+
return this.requestJson(`/rest/api/3/issue/${key}?fields=${fields.join(",")}`, `Jira read ${key}`, { headers: this.headers });
|
|
75
159
|
}
|
|
76
160
|
async closeIssue(issueKey) {
|
|
77
161
|
const transition = await this.findDoneTransition(issueKey);
|
|
78
|
-
await this.request(`/rest/api/3/issue/${issueKey}/transitions`, `Jira transition ${issueKey}`, {
|
|
162
|
+
await this.request(`/rest/api/3/issue/${issueKeyPath(issueKey)}/transitions`, `Jira transition ${issueKey}`, {
|
|
79
163
|
method: "POST",
|
|
80
164
|
headers: this.headers,
|
|
81
165
|
body: JSON.stringify({ transition: { id: transition.id } }),
|
|
@@ -83,7 +167,7 @@ class JiraClient extends http_client_1.HttpAlmClient {
|
|
|
83
167
|
}
|
|
84
168
|
/** The workflow decides which transition means done; there may be none. */
|
|
85
169
|
async findDoneTransition(issueKey) {
|
|
86
|
-
const { transitions } = await this.requestJson(`/rest/api/3/issue/${issueKey}/transitions`, `Jira list transitions for ${issueKey}`, { headers: this.headers });
|
|
170
|
+
const { transitions } = await this.requestJson(`/rest/api/3/issue/${issueKeyPath(issueKey)}/transitions`, `Jira list transitions for ${issueKey}`, { headers: this.headers });
|
|
87
171
|
const done = (transitions ?? []).find((t) => t.to?.statusCategory?.key === "done");
|
|
88
172
|
if (!done) {
|
|
89
173
|
throw new Error(`Jira: no transition to a done state available for ${issueKey}.`);
|
|
@@ -92,26 +176,15 @@ class JiraClient extends http_client_1.HttpAlmClient {
|
|
|
92
176
|
}
|
|
93
177
|
}
|
|
94
178
|
/**
|
|
95
|
-
* The
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* a shape this does not recognise yields "" rather than a stringified object.
|
|
179
|
+
* An issue key as a path segment. The map file and `alm link` hand keys in;
|
|
180
|
+
* one with a slash or a dot-dot would walk the authenticated request to
|
|
181
|
+
* another endpoint of the site.
|
|
99
182
|
*/
|
|
100
|
-
function
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const node = value;
|
|
106
|
-
if (typeof node.text === "string")
|
|
107
|
-
return node.text;
|
|
108
|
-
if (!Array.isArray(node.content))
|
|
109
|
-
return "";
|
|
110
|
-
return node.content
|
|
111
|
-
.map((child) => flattenAdf(child))
|
|
112
|
-
.filter(Boolean)
|
|
113
|
-
.join("\n")
|
|
114
|
-
.trim();
|
|
183
|
+
function issueKeyPath(key) {
|
|
184
|
+
if (!/^[A-Z][A-Z0-9_]+-\d+$/.test(key)) {
|
|
185
|
+
throw new Error(`Jira: '${key}' is not an issue key (PROJECT-123).`);
|
|
186
|
+
}
|
|
187
|
+
return encodeURIComponent(key);
|
|
115
188
|
}
|
|
116
189
|
exports.jiraProvider = {
|
|
117
190
|
id: "jira",
|
|
@@ -120,7 +193,10 @@ exports.jiraProvider = {
|
|
|
120
193
|
required: ["base_url", "project_key", "token_env"],
|
|
121
194
|
// Optional because $JIRA_USER is the conventional default. Naming the
|
|
122
195
|
// variable in the config is better, not compulsory.
|
|
123
|
-
|
|
196
|
+
// `cloud_id` routes a token created with scopes through Atlassian's
|
|
197
|
+
// gateway: a site id, or `auto` to read it from the site.
|
|
198
|
+
// `acceptance_field` and `epics` serve `propose --from-ticket` (ADR-0039).
|
|
199
|
+
optional: ["user_env", "issue_type", "cloud_id", "acceptance_field", "epics"],
|
|
124
200
|
},
|
|
125
201
|
capabilities: { create: true, readStatus: true, close: true, listIssues: true },
|
|
126
202
|
create: (cfg, fetchImpl) => new JiraClient(cfg, fetchImpl),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../../scripts/alm/providers/jira.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;
|
|
1
|
+
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../../scripts/alm/providers/jira.ts"],"names":[],"mappings":"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"}
|