@idea1/cli 1.8.2 → 1.9.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 (147) hide show
  1. package/README.md +205 -69
  2. package/dist/cli/resolver.d.ts +1 -0
  3. package/dist/cli/resolver.d.ts.map +1 -1
  4. package/dist/cli/resolver.js +5 -0
  5. package/dist/cli/resolver.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +2 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/approve-pr.d.ts.map +1 -1
  10. package/dist/commands/approve-pr.js +24 -41
  11. package/dist/commands/approve-pr.js.map +1 -1
  12. package/dist/commands/attach-project-item.d.ts.map +1 -1
  13. package/dist/commands/attach-project-item.js +27 -7
  14. package/dist/commands/attach-project-item.js.map +1 -1
  15. package/dist/commands/close-worktree.d.ts.map +1 -1
  16. package/dist/commands/close-worktree.js +4 -3
  17. package/dist/commands/close-worktree.js.map +1 -1
  18. package/dist/commands/help.d.ts.map +1 -1
  19. package/dist/commands/help.js +17 -11
  20. package/dist/commands/help.js.map +1 -1
  21. package/dist/commands/index.d.ts +2 -1
  22. package/dist/commands/index.d.ts.map +1 -1
  23. package/dist/commands/index.js +3 -1
  24. package/dist/commands/index.js.map +1 -1
  25. package/dist/commands/integrate.d.ts +13 -0
  26. package/dist/commands/integrate.d.ts.map +1 -0
  27. package/dist/commands/integrate.js +128 -0
  28. package/dist/commands/integrate.js.map +1 -0
  29. package/dist/commands/join-project-item.d.ts.map +1 -1
  30. package/dist/commands/join-project-item.js +22 -48
  31. package/dist/commands/join-project-item.js.map +1 -1
  32. package/dist/commands/next-workflow-step.d.ts.map +1 -1
  33. package/dist/commands/next-workflow-step.js +20 -21
  34. package/dist/commands/next-workflow-step.js.map +1 -1
  35. package/dist/commands/ready-for-approval.d.ts.map +1 -1
  36. package/dist/commands/ready-for-approval.js +27 -19
  37. package/dist/commands/ready-for-approval.js.map +1 -1
  38. package/dist/commands/release.d.ts +6 -0
  39. package/dist/commands/release.d.ts.map +1 -1
  40. package/dist/commands/release.js +189 -25
  41. package/dist/commands/release.js.map +1 -1
  42. package/dist/commands/ship-local-changes.d.ts +8 -0
  43. package/dist/commands/ship-local-changes.d.ts.map +1 -0
  44. package/dist/commands/ship-local-changes.js +34 -0
  45. package/dist/commands/ship-local-changes.js.map +1 -0
  46. package/dist/commands/start-agent-implementation.js +2 -2
  47. package/dist/commands/start-agent-implementation.js.map +1 -1
  48. package/dist/commands/start-dev-implementation.d.ts.map +1 -1
  49. package/dist/commands/start-dev-implementation.js +8 -3
  50. package/dist/commands/start-dev-implementation.js.map +1 -1
  51. package/dist/commands/start-project-item.d.ts +27 -0
  52. package/dist/commands/start-project-item.d.ts.map +1 -0
  53. package/dist/commands/start-project-item.js +325 -0
  54. package/dist/commands/start-project-item.js.map +1 -0
  55. package/dist/commands/start.d.ts +8 -2
  56. package/dist/commands/start.d.ts.map +1 -1
  57. package/dist/commands/start.js +76 -35
  58. package/dist/commands/start.js.map +1 -1
  59. package/dist/index.js +0 -0
  60. package/dist/interactive.d.ts.map +1 -1
  61. package/dist/interactive.js +164 -0
  62. package/dist/interactive.js.map +1 -1
  63. package/dist/jobs/job.d.ts +81 -0
  64. package/dist/jobs/job.d.ts.map +1 -0
  65. package/dist/jobs/job.js +258 -0
  66. package/dist/jobs/job.js.map +1 -0
  67. package/dist/jobs/targets.d.ts +58 -0
  68. package/dist/jobs/targets.d.ts.map +1 -0
  69. package/dist/jobs/targets.js +215 -0
  70. package/dist/jobs/targets.js.map +1 -0
  71. package/dist/lib/claude-options.d.ts +3 -2
  72. package/dist/lib/claude-options.d.ts.map +1 -1
  73. package/dist/lib/claude-options.js +15 -4
  74. package/dist/lib/claude-options.js.map +1 -1
  75. package/dist/lib/logger.d.ts +10 -0
  76. package/dist/lib/logger.d.ts.map +1 -1
  77. package/dist/lib/logger.js +16 -0
  78. package/dist/lib/logger.js.map +1 -1
  79. package/dist/lib/prompt.d.ts +7 -0
  80. package/dist/lib/prompt.d.ts.map +1 -1
  81. package/dist/lib/prompt.js +29 -0
  82. package/dist/lib/prompt.js.map +1 -1
  83. package/dist/lib/settings.d.ts +13 -3
  84. package/dist/lib/settings.d.ts.map +1 -1
  85. package/dist/lib/settings.js +12 -3
  86. package/dist/lib/settings.js.map +1 -1
  87. package/dist/lib/shell.d.ts +2 -1
  88. package/dist/lib/shell.d.ts.map +1 -1
  89. package/dist/lib/shell.js +17 -1
  90. package/dist/lib/shell.js.map +1 -1
  91. package/dist/services/git.d.ts +41 -13
  92. package/dist/services/git.d.ts.map +1 -1
  93. package/dist/services/git.js +85 -46
  94. package/dist/services/git.js.map +1 -1
  95. package/dist/services/github.d.ts +28 -0
  96. package/dist/services/github.d.ts.map +1 -1
  97. package/dist/services/github.js +82 -3
  98. package/dist/services/github.js.map +1 -1
  99. package/dist/services/setup.d.ts +4 -2
  100. package/dist/services/setup.d.ts.map +1 -1
  101. package/dist/services/setup.js +61 -37
  102. package/dist/services/setup.js.map +1 -1
  103. package/dist/services/workflow.d.ts +17 -0
  104. package/dist/services/workflow.d.ts.map +1 -0
  105. package/dist/services/workflow.js +39 -0
  106. package/dist/services/workflow.js.map +1 -0
  107. package/dist/services/worktree.js +1 -1
  108. package/dist/services/worktree.js.map +1 -1
  109. package/dist/types/index.d.ts +25 -24
  110. package/dist/types/index.d.ts.map +1 -1
  111. package/dist/version.d.ts +2 -1
  112. package/dist/version.d.ts.map +1 -1
  113. package/dist/version.js +3 -2
  114. package/dist/version.js.map +1 -1
  115. package/dist/workflow/engine/approval-flow.d.ts +10 -2
  116. package/dist/workflow/engine/approval-flow.d.ts.map +1 -1
  117. package/dist/workflow/engine/approval-flow.js +58 -9
  118. package/dist/workflow/engine/approval-flow.js.map +1 -1
  119. package/dist/workflow/engine/handlers/agent-implementation.d.ts.map +1 -1
  120. package/dist/workflow/engine/handlers/agent-implementation.js +4 -11
  121. package/dist/workflow/engine/handlers/agent-implementation.js.map +1 -1
  122. package/dist/workflow/engine/handlers/approve-pr.d.ts.map +1 -1
  123. package/dist/workflow/engine/handlers/approve-pr.js +9 -3
  124. package/dist/workflow/engine/handlers/approve-pr.js.map +1 -1
  125. package/dist/workflow/engine/handlers/dev-implementation.d.ts +2 -2
  126. package/dist/workflow/engine/handlers/dev-implementation.d.ts.map +1 -1
  127. package/dist/workflow/engine/handlers/dev-implementation.js +13 -7
  128. package/dist/workflow/engine/handlers/dev-implementation.js.map +1 -1
  129. package/dist/workflow/engine/handlers/ready-for-approval.d.ts +5 -0
  130. package/dist/workflow/engine/handlers/ready-for-approval.d.ts.map +1 -1
  131. package/dist/workflow/engine/handlers/ready-for-approval.js +11 -7
  132. package/dist/workflow/engine/handlers/ready-for-approval.js.map +1 -1
  133. package/dist/workflow/engine/{release-flow.d.ts → release-engine.d.ts} +83 -6
  134. package/dist/workflow/engine/release-engine.d.ts.map +1 -0
  135. package/dist/workflow/engine/{release-flow.js → release-engine.js} +291 -19
  136. package/dist/workflow/engine/release-engine.js.map +1 -0
  137. package/dist/workflow/engine/ship-flow.d.ts +87 -0
  138. package/dist/workflow/engine/ship-flow.d.ts.map +1 -0
  139. package/dist/workflow/engine/ship-flow.js +221 -0
  140. package/dist/workflow/engine/ship-flow.js.map +1 -0
  141. package/dist/workflow/engine/workflow-engine.d.ts +85 -15
  142. package/dist/workflow/engine/workflow-engine.d.ts.map +1 -1
  143. package/dist/workflow/engine/workflow-engine.js +195 -66
  144. package/dist/workflow/engine/workflow-engine.js.map +1 -1
  145. package/package.json +3 -3
  146. package/dist/workflow/engine/release-flow.d.ts.map +0 -1
  147. package/dist/workflow/engine/release-flow.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { logger } from '../lib/logger.js';
2
+ import { promptInput, promptSelect } from '../lib/prompt.js';
3
+ import { resolveNamedList } from '../cli/named-lists.js';
4
+ import * as git from '../services/git.js';
5
+ import * as github from '../services/github.js';
6
+ import * as worktree from '../services/worktree.js';
7
+ import { INTEGRATION_KIND, PR_MODE_OPTION, createGatedPr, runPrMode, validateSourceBranch } from '../services/release-flow.js';
8
+ /**
9
+ * The integration branch to integrate: the one given, else the current branch when it is one,
10
+ * else a pick from the integration branches on origin.
11
+ */
12
+ async function resolveIntegrationBranch(cliBranch) {
13
+ const integrationBranches = await worktree.listExistingIntegrationBranches();
14
+ if (cliBranch) {
15
+ if (!integrationBranches.includes(cliBranch)) {
16
+ throw new Error(`'${cliBranch}' is not an integration branch on origin.` +
17
+ (integrationBranches.length > 0 ? `\nIntegration branches: ${integrationBranches.join(', ')}` : ''));
18
+ }
19
+ return cliBranch;
20
+ }
21
+ const currentBranch = await git.getCurrentBranch();
22
+ if (integrationBranches.includes(currentBranch)) {
23
+ return currentBranch;
24
+ }
25
+ if (integrationBranches.length === 0) {
26
+ throw new Error('No integration branches exist on origin.');
27
+ }
28
+ return promptSelect('Which integration branch?', integrationBranches.map(branch => ({ label: branch, value: branch })));
29
+ }
30
+ async function promptAssignee() {
31
+ return promptSelect('Who approves this integration by merging its PR? (the approver of record)', await resolveNamedList('github-members'));
32
+ }
33
+ async function promptPrTitle(integrationBranch) {
34
+ const integrationName = await worktree.extractIntegrationName(integrationBranch);
35
+ const defaultTitle = `Integration ${integrationName} ${new Date().toISOString().split('T')[0]}`;
36
+ return promptInput('Enter PR title:', { default: defaultTitle });
37
+ }
38
+ /**
39
+ * Stage 1 of change management for an integration branch (change-management-policy.md clause 2):
40
+ * the work items merged into `working/integration/<name>-main` were each approved there by their
41
+ * assignee; this command carries the integration branch into the release branch through its own
42
+ * PR, assigned to its approver. The assignee approves by merging it - after the required CI/CD
43
+ * checks pass - with the same sequence and the same recorded admin override as `idea1 release`.
44
+ *
45
+ * Creating the PR and merging it are usually done by different people at different times, so
46
+ * the command reuses an open PR when one exists and the assignee runs it in `merge` mode.
47
+ */
48
+ export const integrateCommand = {
49
+ name: 'integrate',
50
+ aliases: ['int'],
51
+ description: 'Open the PR from an integration branch into the release branch, assigned to its approver, and (as the assignee) merge it once the checks pass',
52
+ options: [
53
+ {
54
+ longName: 'branch',
55
+ shortName: 'b',
56
+ description: 'Integration branch to integrate (default: the current branch, or a pick from origin)',
57
+ defaultValue: '',
58
+ promptWhenDefaultExists: false
59
+ },
60
+ {
61
+ longName: 'target',
62
+ shortName: 't',
63
+ description: 'Branch to integrate into (default: baseBranch)',
64
+ defaultValue: '',
65
+ promptWhenDefaultExists: false
66
+ },
67
+ {
68
+ longName: 'assignee',
69
+ shortName: 'a',
70
+ description: 'Who approves the integration by merging its PR - the approver of record (prompted when the PR is created)',
71
+ defaultValue: '',
72
+ promptWhenDefaultExists: false
73
+ },
74
+ PR_MODE_OPTION,
75
+ {
76
+ longName: 'title',
77
+ description: 'PR title',
78
+ defaultValue: '',
79
+ promptWhenDefaultExists: false
80
+ }
81
+ ],
82
+ async execute(resolved) {
83
+ const branchArg = resolved['branch'] || undefined;
84
+ const targetArg = resolved['target'] || undefined;
85
+ const assigneeArg = resolved['assignee'] || undefined;
86
+ const prMode = resolved['pr-mode'];
87
+ const titleArg = resolved['title'] || undefined;
88
+ await github.ensureGitHubCli();
89
+ const integrationBranch = await resolveIntegrationBranch(branchArg);
90
+ const targetBranch = targetArg ?? await worktree.resolveBaseBranch();
91
+ logger.header(`Integration: ${integrationBranch} -> ${targetBranch}`);
92
+ logger.newline();
93
+ logger.info(`PR mode: ${prMode}`);
94
+ logger.newline();
95
+ const existingPr = await github.checkPrExists(integrationBranch, targetBranch);
96
+ let prUrl;
97
+ if (existingPr) {
98
+ logger.info(`Using the open PR #${existingPr.number}`);
99
+ prUrl = existingPr.url;
100
+ }
101
+ else {
102
+ await validateSourceBranch(integrationBranch);
103
+ const assignee = assigneeArg ?? await promptAssignee();
104
+ const prTitle = titleArg ?? await promptPrTitle(integrationBranch);
105
+ logger.info(`Using title: ${prTitle}`);
106
+ logger.newline();
107
+ prUrl = await createGatedPr({
108
+ sourceBranch: integrationBranch,
109
+ targetBranch,
110
+ title: prTitle,
111
+ assignee,
112
+ kind: INTEGRATION_KIND
113
+ });
114
+ }
115
+ logger.newline();
116
+ await runPrMode({
117
+ mode: prMode,
118
+ sourceBranch: integrationBranch,
119
+ targetBranch,
120
+ prUrl,
121
+ kind: INTEGRATION_KIND,
122
+ openActionsAfterMerge: false
123
+ });
124
+ logger.newline();
125
+ logger.hint(`PR: ${prUrl}`);
126
+ }
127
+ };
128
+ //# sourceMappingURL=integrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/commands/integrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"join-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,eAAO,MAAM,sBAAsB,EAAE,OAoGpC,CAAC"}
1
+ {"version":3,"file":"join-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAiBjD,eAAO,MAAM,sBAAsB,EAAE,OA2EpC,CAAC"}
@@ -1,40 +1,24 @@
1
1
  import { logger } from '../lib/logger.js';
2
2
  import { isolationModeOption, resolveIsolationMode } from '../lib/isolation.js';
3
- import { validateProjectItemUrl } from '../lib/project-item-url.js';
3
+ import { isProjectItemUrl } from '../lib/project-item-url.js';
4
+ import { TARGET_OPTION_NAME, parseTargets } from '../jobs/targets.js';
4
5
  import * as git from '../services/git.js';
5
6
  import * as worktree from '../services/worktree.js';
6
- import * as github from '../services/github.js';
7
7
  import { WorkflowStates, normalizeWorkflowState } from '../workflow/data/workflow-states.js';
8
- import { advanceAsNeededTo, getProjectItemSummaryForBranch, requireLiveContext, resolveBranchForItem, resolveTransition } from '../workflow/engine/workflow-engine.js';
8
+ import { advanceAsNeededTo, getProjectItemSummaryForBranch, readTarget, requireLiveContext, resolveBranchForItem, resolveTransition } from '../workflow/engine/workflow-engine.js';
9
9
  export const joinProjectItemCommand = {
10
10
  name: 'join-project-item',
11
11
  aliases: ['j', 'join'],
12
12
  description: 'Join an in-progress project item by setting up a working environment on its existing branch',
13
13
  options: [
14
14
  {
15
- longName: 'project-item-url',
16
- description: 'Project item URL to join',
17
- exclusiveGroup: 'target',
18
- validate: validateProjectItemUrl
19
- },
20
- {
21
- longName: 'branch-name',
22
- shortName: 'n',
23
- description: 'Branch to join',
24
- exclusiveGroup: 'target',
25
- validate: (value) => (value.trim() ? undefined : 'A branch name is required')
26
- },
27
- {
28
- longName: 'pull-request-url',
29
- description: 'GitHub PR URL to join (resolves the head branch automatically)',
30
- exclusiveGroup: 'target',
15
+ longName: TARGET_OPTION_NAME,
16
+ description: 'Project item URL, branch name or GitHub PR URL to join',
31
17
  validate: (value) => {
32
- if (!value.trim())
33
- return 'A PR URL is required';
34
- if (!/^https:\/\/github\.com\/.+\/.+\/pull\/\d+/.test(value)) {
35
- return 'URL should be a GitHub PR URL (e.g., https://github.com/org/repo/pull/123)';
36
- }
37
- return undefined;
18
+ const targets = parseTargets(value);
19
+ if (targets.length === 0)
20
+ return 'A project item URL, branch name or PR URL is required';
21
+ return targets.length > 1 ? 'Give one target: join sets up one branch' : undefined;
38
22
  }
39
23
  },
40
24
  {
@@ -48,44 +32,34 @@ export const joinProjectItemCommand = {
48
32
  ],
49
33
  async execute(resolved) {
50
34
  const sourcePath = resolved['source-path'];
51
- const url = resolved['project-item-url'] || undefined;
52
- const branchArg = resolved['branch-name'] || undefined;
53
- const prUrl = resolved['pull-request-url'] || undefined;
35
+ const target = resolved[TARGET_OPTION_NAME].trim();
54
36
  const isolationMode = resolveIsolationMode(resolved);
55
37
  if (sourcePath) {
56
38
  process.chdir(sourcePath);
57
39
  }
58
40
  await git.fetchLatest();
59
- // Resolve the target branch (and, in URL mode, put the item under workflow
60
- // management when it has no live branch yet).
41
+ // Resolve the target branch (and, for an item, put it under workflow management when it has
42
+ // no live branch yet).
61
43
  let branch;
62
- if (url) {
63
- const resolvedBranch = await resolveBranchForItem(url);
44
+ if (isProjectItemUrl(target)) {
45
+ const resolvedBranch = await resolveBranchForItem(target);
64
46
  if (resolvedBranch) {
65
47
  branch = resolvedBranch;
66
- logger.info(`Resolved branch for ${url}: ${branch}`);
48
+ logger.info(`Resolved branch for ${target}: ${branch}`);
67
49
  }
68
50
  else {
69
- logger.info(`No branch found for ${url} — putting it under workflow management first.`);
70
- const transition = await resolveTransition({ projectItemUrl: url, options: resolved });
51
+ logger.info(`No branch found for ${target} — putting it under workflow management first.`);
52
+ const transition = await resolveTransition({ target, options: resolved });
71
53
  await advanceAsNeededTo(transition, WorkflowStates.BuildSpecInProgress);
72
54
  branch = requireLiveContext(transition).branchName;
73
55
  }
74
56
  }
75
- else if (prUrl) {
76
- logger.step(`Looking up PR: ${prUrl}`);
77
- const prInfo = await github.getBranchFromPrUrl(prUrl);
78
- if (!prInfo) {
79
- throw new Error(`Could not resolve branch from PR URL: ${prUrl}`);
80
- }
81
- branch = prInfo.headBranch;
82
- logger.info(`Resolved branch from PR: ${branch}`);
83
- if (!await git.branchExists(branch)) {
84
- throw new Error(`Branch '${branch}' does not exist locally or on origin. Cannot join.`);
85
- }
86
- }
87
57
  else {
88
- branch = branchArg;
58
+ const summary = await readTarget(target);
59
+ if (!summary.branchName) {
60
+ throw new Error(`${summary.label} has no live branch in this repository to join.`);
61
+ }
62
+ branch = summary.branchName;
89
63
  if (!await git.branchExists(branch)) {
90
64
  throw new Error(`Branch '${branch}' does not exist locally or on origin. Cannot join.`);
91
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"join-project-item.js","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"join-project-item.js","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"next-workflow-step.d.ts","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQjD,eAAO,MAAM,uBAAuB,EAAE,OAwDrC,CAAC"}
1
+ {"version":3,"file":"next-workflow-step.d.ts","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQjD,eAAO,MAAM,uBAAuB,EAAE,OAuDrC,CAAC"}
@@ -1,22 +1,15 @@
1
1
  import { logger } from '../lib/logger.js';
2
- import { validateProjectItemUrl } from '../lib/project-item-url.js';
3
2
  import { WORKFLOW_STATES, getNextWorkflowState, normalizeWorkflowState } from '../workflow/data/workflow-states.js';
4
3
  import { branchCreationOptions } from '../workflow/engine/branch-setup.js';
5
4
  import { advanceAsNeededTo, resolveTransition } from '../workflow/engine/workflow-engine.js';
6
5
  import { deferredHandlerOptions } from '../workflow/engine/handlers/index.js';
6
+ import { runForTargets, targetOption } from '../jobs/targets.js';
7
7
  export const nextWorkflowStepCommand = {
8
8
  name: 'next-workflow-step',
9
9
  aliases: ['next', 'n'],
10
- description: 'Advance the project item to the next workflow state (or through several, with --to), running the automation of every state entered',
10
+ description: 'Advance project items to their next workflow state (or through several, with --to), running the automation of every state entered; several run in parallel',
11
11
  options: [
12
- {
13
- longName: 'url',
14
- shortName: 'u',
15
- description: 'Project item URL (required when not on the item\'s branch)',
16
- defaultValue: '',
17
- promptWhenDefaultExists: false,
18
- validate: (value) => (value ? validateProjectItemUrl(value) : undefined)
19
- },
12
+ targetOption(false),
20
13
  {
21
14
  longName: 'to',
22
15
  description: 'Workflow state to advance to; every state between the current one and it is entered in order (nothing happens when the item is already there)',
@@ -43,17 +36,23 @@ export const nextWorkflowStepCommand = {
43
36
  if (sourcePath) {
44
37
  process.chdir(sourcePath);
45
38
  }
46
- const transition = await resolveTransition({ projectItemUrl: resolved['url'] || undefined, options: resolved });
47
- const targetState = resolveTargetState(transition.currentState, resolved['to']);
48
- if (!targetState) {
49
- logger.success('Workflow is complete! No more steps to perform.');
50
- logger.hint(`Project item: ${transition.projectItemUrl}`);
51
- return;
52
- }
53
- logger.info(`Current workflow state: ${transition.currentState ?? '(not started)'}`);
54
- // An item that was never started is put under workflow management by entering
55
- // the first state, which is the whole transition.
56
- await advanceAsNeededTo(transition, targetState);
39
+ await runForTargets(nextWorkflowStepCommand, resolved, {
40
+ advancesTo: currentState => resolveTargetState(currentState, resolved['to']),
41
+ itemlessBranches: false,
42
+ run: async (target) => {
43
+ const transition = await resolveTransition({ target, options: resolved });
44
+ const targetState = resolveTargetState(transition.currentState, resolved['to']);
45
+ if (!targetState) {
46
+ logger.success('Workflow is complete! No more steps to perform.');
47
+ logger.hint(`Project item: ${transition.projectItemUrl}`);
48
+ return;
49
+ }
50
+ logger.info(`Current workflow state: ${transition.currentState ?? '(not started)'}`);
51
+ // An item that was never started is put under workflow management by entering
52
+ // the first state, which is the whole transition.
53
+ await advanceAsNeededTo(transition, targetState);
54
+ }
55
+ });
57
56
  }
58
57
  };
59
58
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"next-workflow-step.js","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAsB,MAAM,qCAAqC,CAAC;AACxI,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAY;IAC9C,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACtB,WAAW,EAAE,oIAAoI;IACjJ,OAAO,EAAE;QACP;YACE,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,4DAA4D;YACzE,YAAY,EAAE,EAAE;YAChB,uBAAuB,EAAE,KAAK;YAC9B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACjF;QACD;YACE,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,+IAA+I;YAC5J,YAAY,EAAE,EAAE;YAChB,uBAAuB,EAAE,KAAK;YAC9B,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,sBAAsB,CAAC,KAAK,CAAC,KAAK,IAAI;gBAClF,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,2BAA2B,KAAK,cAAc,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAChF;QACD;YACE,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,0BAA0B;YACvC,YAAY,EAAE,EAAE;YAChB,uBAAuB,EAAE,KAAK;SAC/B;QACD,4EAA4E;QAC5E,kEAAkE;QAClE,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/E,GAAG,sBAAsB,CAAC,EAAE,CAAC;KAC9B;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEhH,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC,CAAC;QAErF,8EAA8E;QAC9E,kDAAkD;QAClD,MAAM,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,YAAkC,EAAE,SAAiB;IAC/E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"next-workflow-step.js","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ready-for-approval.d.ts","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAmFjD,eAAO,MAAM,uBAAuB,EAAE,OAiCrC,CAAC"}
1
+ {"version":3,"file":"ready-for-approval.d.ts","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAmFjD,eAAO,MAAM,uBAAuB,EAAE,OAuCrC,CAAC"}
@@ -6,8 +6,9 @@ import * as git from '../services/git.js';
6
6
  import * as github from '../services/github.js';
7
7
  import * as worktree from '../services/worktree.js';
8
8
  import { ensurePrReadyForApproval } from '../workflow/engine/approval-flow.js';
9
- import { validateSourceBranch } from '../workflow/engine/release-flow.js';
10
- import { advanceAsNeededTo, resolveTransitionIfManaged } from '../workflow/engine/workflow-engine.js';
9
+ import { validateSourceBranch } from '../workflow/engine/release-engine.js';
10
+ import { advanceAsNeededTo, resolveTarget } from '../workflow/engine/workflow-engine.js';
11
+ import { runForTargets, targetOption } from '../jobs/targets.js';
11
12
  import { deferredHandlerOptions } from '../workflow/engine/handlers/index.js';
12
13
  import { readyForApprovalHandler } from '../workflow/engine/handlers/ready-for-approval.js';
13
14
  /**
@@ -15,12 +16,8 @@ import { readyForApprovalHandler } from '../workflow/engine/handlers/ready-for-a
15
16
  * for instance: the PR into the base branch is opened when the branch has none, with the approval
16
17
  * chain of what it carries as its body, and gets its assignee. No workflow status is recorded.
17
18
  */
18
- async function readyForApprovalOnBranchWithNoItem(resolved) {
19
+ async function readyForApprovalOnBranchWithNoItem(branchName, resolved) {
19
20
  await github.ensureGitHubCli();
20
- const branchName = await git.getCurrentBranch();
21
- if (branchName === 'HEAD') {
22
- throw new Error('You are not on a branch (detached HEAD), so there is nothing to approve. Check out the branch you want approved.');
23
- }
24
21
  const existingPr = await github.getPrInfo(branchName);
25
22
  const openPr = existingPr && existingPr.state.toUpperCase() === 'OPEN' ? existingPr : null;
26
23
  const requestedBase = resolved['base-branch'] || null;
@@ -29,7 +26,7 @@ async function readyForApprovalOnBranchWithNoItem(resolved) {
29
26
  logger.warning(`PR #${openPr.number} targets ${openPr.baseRefName}; --base-branch ${requestedBase} is ignored. Retarget the PR in GitHub if that is wrong.`);
30
27
  }
31
28
  if (branchName === targetBranch) {
32
- throw new Error(`${targetBranch} is the branch changes are approved into, not a change to approve. Check out the branch you want approved.`);
29
+ throw new Error(`${targetBranch} is the branch changes are approved into, not a change to approve. Pass --target <the branch, item or PR to approve>.`);
33
30
  }
34
31
  const releaseTargetBranch = (await readBranchSettings(await git.getRepoRoot())).releaseTargetBranch;
35
32
  if (targetBranch === releaseTargetBranch) {
@@ -42,7 +39,11 @@ async function readyForApprovalOnBranchWithNoItem(resolved) {
42
39
  if (!await git.fetchRemoteBranch(branchName)) {
43
40
  throw new Error(`Branch ${branchName} is not on origin. Push it first: git push -u origin ${branchName}`);
44
41
  }
45
- await validateSourceBranch(branchName);
42
+ // A local checkout of the branch (the working directory, once the target is resolved) must
43
+ // carry exactly what origin has; a branch with no checkout here is what origin has.
44
+ if (await git.getCheckoutPathForBranch(branchName)) {
45
+ await validateSourceBranch(branchName);
46
+ }
46
47
  const title = openPr ? '' : (resolved['title'] || await promptPrTitle(branchName));
47
48
  await ensurePrReadyForApproval({
48
49
  branchName,
@@ -53,7 +54,7 @@ async function readyForApprovalOnBranchWithNoItem(resolved) {
53
54
  });
54
55
  logger.newline();
55
56
  logger.success('PR is ready for approval');
56
- logger.hint('The assignee approves it by running: idea1 approve-pr (which merges it)');
57
+ logger.hint(`The assignee approves it by running: idea1 approve-pr --target ${branchName} (which merges it)`);
57
58
  }
58
59
  /**
59
60
  * The PR title, defaulting to `Integration <name> <date>` for an integration branch and to the
@@ -69,8 +70,9 @@ async function promptPrTitle(branchName) {
69
70
  export const readyForApprovalCommand = {
70
71
  name: 'ready-for-approval',
71
72
  aliases: ['rfa'],
72
- description: 'Mark the PR ready for approval and set its assignee (the approver) - on a project item\'s branch (advancing the item through every state before it) or any other branch',
73
+ description: 'Mark PRs ready for approval and set their assignee (the approver) - project items (advancing each through every state before it) or branches with no item; several run in parallel',
73
74
  options: [
75
+ targetOption(true),
74
76
  ...(readyForApprovalHandler.options ?? []),
75
77
  {
76
78
  longName: 'base-branch',
@@ -85,17 +87,23 @@ export const readyForApprovalCommand = {
85
87
  defaultValue: '',
86
88
  promptWhenDefaultExists: false
87
89
  },
88
- // On a project item's branch the item may be further back; the states it passes through on the
89
- // way ask for their own options.
90
+ // A project item may be further back; the states it passes through on the way ask for their
91
+ // own options.
90
92
  ...deferredHandlerOptions(readyForApprovalHandler.options ?? [])
91
93
  ],
92
94
  async execute(resolved) {
93
- const transition = await resolveTransitionIfManaged({ options: resolved });
94
- if (transition) {
95
- await advanceAsNeededTo(transition, WorkflowStates.NeedsApprovalForRelease);
96
- return;
97
- }
98
- await readyForApprovalOnBranchWithNoItem(resolved);
95
+ await runForTargets(readyForApprovalCommand, resolved, {
96
+ advancesTo: () => WorkflowStates.NeedsApprovalForRelease,
97
+ itemlessBranches: true,
98
+ run: async (target) => {
99
+ const resolvedTarget = await resolveTarget({ target, options: resolved });
100
+ if (resolvedTarget.kind === 'item') {
101
+ await advanceAsNeededTo(resolvedTarget.transition, WorkflowStates.NeedsApprovalForRelease);
102
+ return;
103
+ }
104
+ await readyForApprovalOnBranchWithNoItem(resolvedTarget.branchName, resolved);
105
+ }
106
+ });
99
107
  }
100
108
  };
101
109
  //# sourceMappingURL=ready-for-approval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ready-for-approval.js","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ready-for-approval.js","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAE5F;;;;GAIG;AACH,KAAK,UAAU,kCAAkC,CAAC,UAAkB,EAAE,QAAgC;IACpG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3F,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,EAAE,WAAW,IAAI,aAAa,IAAI,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAChG,IAAI,MAAM,EAAE,WAAW,IAAI,aAAa,IAAI,MAAM,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;QACjF,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,WAAW,mBAAmB,aAAa,0DAA0D,CAAC,CAAC;IAC/J,CAAC;IAED,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,uHAAuH,CAAC,CAAC;IAC1J,CAAC;IACD,MAAM,mBAAmB,GAAG,CAAC,MAAM,kBAAkB,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACpG,IAAI,YAAY,KAAK,mBAAmB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,6BAA6B,MAAM,QAAQ,CAAC,iBAAiB,EAAE,yBAAyB,mBAAmB,IAAI;YAC/G,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,uBAAuB,UAAU,OAAO,YAAY,EAAE,CAAC,CAAC;IACtE,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACnF,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,IAAI,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,wDAAwD,UAAU,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,2FAA2F;IAC3F,oFAAoF;IACpF,IAAI,MAAM,GAAG,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAEnF,MAAM,wBAAwB,CAAC;QAC7B,UAAU;QACV,UAAU,EAAE,YAAY;QACxB,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC;QAC9B,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;QACtC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;KAC7C,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,kEAAkE,UAAU,oBAAoB,CAAC,CAAC;AAChH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAC,UAAkB;IAC7C,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,+BAA+B,EAAE,CAAC;IAC7E,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3D,CAAC,CAAC,eAAe,MAAM,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9G,CAAC,CAAC,UAAU,CAAC;IACf,OAAO,WAAW,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAY;IAC9C,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,WAAW,EAAE,oLAAoL;IACjM,OAAO,EAAE;QACP,YAAY,CAAC,IAAI,CAAC;QAClB,GAAG,CAAC,uBAAuB,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C;YACE,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,2HAA2H;YACxI,YAAY,EAAE,EAAE;YAChB,uBAAuB,EAAE,KAAK;SAC/B;QACD;YACE,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,mFAAmF;YAChG,YAAY,EAAE,EAAE;YAChB,uBAAuB,EAAE,KAAK;SAC/B;QACD,4FAA4F;QAC5F,eAAe;QACf,GAAG,sBAAsB,CAAC,uBAAuB,CAAC,OAAO,IAAI,EAAE,CAAC;KACjE;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,aAAa,CAAC,uBAAuB,EAAE,QAAQ,EAAE;YACrD,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,uBAAuB;YACxD,gBAAgB,EAAE,IAAI;YACtB,GAAG,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;gBAClB,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC1E,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACnC,MAAM,iBAAiB,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAC;oBAC3F,OAAO;gBACT,CAAC;gBACD,MAAM,kCAAkC,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAChF,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -5,6 +5,12 @@ import type { Command } from '../types/index.js';
5
5
  * releaser and the approver, and their merge is the recorded approval. No review is required:
6
6
  * every change in the release was already approved on its own PR, and the body lists them. What
7
7
  * this stage gates is the build - the required CI/CD checks must pass before the merge.
8
+ *
9
+ * Before the PR is opened, the packages that changed since the last release get their version
10
+ * bumps, committed and pushed to the release branch by this command. `--approve` instead approves
11
+ * and merges the release PR that is already open. With `--target`, the named project items and
12
+ * branches are approved into the release branch first, and the release follows once all of them
13
+ * have merged.
8
14
  */
9
15
  export declare const releaseCommand: Command;
10
16
  //# sourceMappingURL=release.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA4DjD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,OAuE5B,CAAC"}
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAmOjD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,EAAE,OAmH5B,CAAC"}