pipeline-worker 0.1.25 → 0.1.27
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/README.md +9 -2
- package/dist/agent/claude.js +32 -1
- package/dist/agent/claude.js.map +1 -1
- package/dist/agent/types.d.ts +18 -0
- package/dist/cli.js +30 -4
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.js +29 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/forge/github.d.ts +8 -0
- package/dist/forge/github.js +40 -0
- package/dist/forge/github.js.map +1 -1
- package/dist/forge/gitlab.js +24 -0
- package/dist/forge/gitlab.js.map +1 -1
- package/dist/forge/shared.d.ts +22 -2
- package/dist/forge/shared.js +61 -13
- package/dist/forge/shared.js.map +1 -1
- package/dist/forge/types.d.ts +28 -1
- package/dist/git/commit.d.ts +9 -0
- package/dist/git/commit.js +11 -0
- package/dist/git/commit.js.map +1 -1
- package/dist/git/squash.d.ts +8 -0
- package/dist/git/squash.js +26 -0
- package/dist/git/squash.js.map +1 -0
- package/dist/state/runState.d.ts +10 -1
- package/dist/state/runState.js +29 -3
- package/dist/state/runState.js.map +1 -1
- package/dist/types.d.ts +23 -1
- package/dist/ui/format.d.ts +8 -0
- package/dist/ui/format.js +17 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/renderer.d.ts +41 -0
- package/dist/ui/renderer.js +93 -0
- package/dist/ui/renderer.js.map +1 -0
- package/dist/ui/runTree.d.ts +106 -0
- package/dist/ui/runTree.js +133 -0
- package/dist/ui/runTree.js.map +1 -0
- package/dist/ui/sessions.js +12 -4
- package/dist/ui/sessions.js.map +1 -1
- package/dist/ui/steps.d.ts +82 -35
- package/dist/ui/steps.js +158 -97
- package/dist/ui/steps.js.map +1 -1
- package/dist/ui/treeRenderer.d.ts +89 -0
- package/dist/ui/treeRenderer.js +271 -0
- package/dist/ui/treeRenderer.js.map +1 -0
- package/dist/ui/welcome.d.ts +1 -1
- package/dist/ui/welcome.js +23 -14
- package/dist/ui/welcome.js.map +1 -1
- package/dist/workflow/adoptBranch.js +18 -12
- package/dist/workflow/adoptBranch.js.map +1 -1
- package/dist/workflow/captureIntent.d.ts +7 -2
- package/dist/workflow/captureIntent.js +1 -25
- package/dist/workflow/captureIntent.js.map +1 -1
- package/dist/workflow/openMergeRequest.d.ts +3 -3
- package/dist/workflow/openMergeRequest.js +31 -6
- package/dist/workflow/openMergeRequest.js.map +1 -1
- package/dist/workflow/orchestrate.d.ts +1 -1
- package/dist/workflow/orchestrate.js +88 -40
- package/dist/workflow/orchestrate.js.map +1 -1
- package/dist/workflow/runPlan.d.ts +18 -0
- package/dist/workflow/runPlan.js +53 -0
- package/dist/workflow/runPlan.js.map +1 -0
- package/dist/workflow/syncTargetBranch.d.ts +37 -0
- package/dist/workflow/syncTargetBranch.js +83 -0
- package/dist/workflow/syncTargetBranch.js.map +1 -0
- package/dist/workflow/watchPipeline.d.ts +48 -5
- package/dist/workflow/watchPipeline.js +199 -74
- package/dist/workflow/watchPipeline.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/pipeline-worker)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
Automate the last mile of your local changes: pipeline-worker takes the uncommitted diff in your repo and drives it — unattended to a
|
|
7
|
+
Automate the last mile of your local changes: pipeline-worker takes the uncommitted diff in your repo and drives it — unattended — all the way to a merged, locally-synced result.
|
|
8
8
|
|
|
9
9
|
1. Captures your staged + unstaged changes (your working tree is only read, not modified, up through this point).
|
|
10
10
|
2. Replays them in a disposable git worktree.
|
|
@@ -13,6 +13,9 @@ Automate the last mile of your local changes: pipeline-worker takes the uncommit
|
|
|
13
13
|
5. Commits, pushes, and opens a GitLab MR or GitHub PR — the branch name is composed from the configurable `branchPattern`.
|
|
14
14
|
6. Polls the CI pipeline; on failure it hands the pipeline URL to the agent, which pulls the failed jobs and logs itself via whatever GitLab/GitHub MCP tooling is available (pipeline-worker's own forge MCP server, or an external one the agent already has configured), commits the fix, pushes, and re-polls — capped at `maxFixAttempts` before escalating to a human with an MR comment.
|
|
15
15
|
7. Once the MR/PR is ready to merge (or, with `PIPELINE_WORKER_CLEANUP_EARLY`, as soon as the MR/PR is opened), resets your repo's current branch back to HEAD (see `PIPELINE_WORKER_CLEANUP` below) — your changes now live safely on the feature branch instead of sitting uncommitted locally too.
|
|
16
|
+
8. By default (`PIPELINE_WORKER_AUTO_MERGE_ON_GREEN`), waits for the forge to confirm the auto-merge actually landed, then (after a few seconds' grace for the ref to settle) fast-forwards your local target branch from origin — so your local main already contains the merged result when the run ends. Best-effort: if the merge is held up (e.g. by required approvals), you switched branches mid-run, or your local target branch diverged, it leaves everything untouched and tells you to `git pull` instead. Set `PIPELINE_WORKER_AUTO_MERGE_ON_GREEN=false` to go back to opening the MR/PR and merging it yourself.
|
|
17
|
+
|
|
18
|
+
While attached to a real terminal, the run renders as a live step tree — header line, then one row per step (capture, worktree, checks, ci-watch, merge, ...) with a status glyph, duration, and best-effort token count, updated in place. CI logs and piped output fall back to the previous append-only narration (or force it yourself with `PIPELINE_WORKER_PLAIN_OUTPUT=true`).
|
|
16
19
|
|
|
17
20
|
Polling is plain REST and costs zero agent tokens; the agent is invoked only when a pipeline actually fails, and fetches whatever pipeline/job detail it needs through pipeline-worker's token-efficient [TOON](https://github.com/toon-format/toon)-encoded MCP server (or an external forge MCP server, if the agent has one available).
|
|
18
21
|
|
|
@@ -84,9 +87,13 @@ pipeline-worker is configured entirely through real environment variables — se
|
|
|
84
87
|
| `PIPELINE_WORKER_BUILD` | auto-detected from toolchain | build command override; set to an empty string to skip the stage |
|
|
85
88
|
| `PIPELINE_WORKER_LINT` | auto-detected from toolchain | lint command override; set to an empty string to skip the stage |
|
|
86
89
|
| `PIPELINE_WORKER_TEST` | auto-detected from toolchain | test command override; set to an empty string to skip the stage |
|
|
87
|
-
| `PIPELINE_WORKER_MAX_FIX_ATTEMPTS` | `5` | how many CI-fix attempts before escalating to a human
|
|
90
|
+
| `PIPELINE_WORKER_MAX_FIX_ATTEMPTS` | `5` | how many CI-fix attempts before escalating to a human — tracked independently from merge-conflict-resolution attempts, so a long-lived PR needing several rebases can't exhaust the budget meant for real bug-fixing |
|
|
88
91
|
| `PIPELINE_WORKER_RUN_LINT_AND_TEST` | `true` | run the local lint and test stages (`false` to run only build — for repos where an earlier workflow, e.g. upstream CI, already verified lint/test) |
|
|
89
92
|
| `PIPELINE_WORKER_UPDATE_CHANGELOG` | `false` | once checks pass, add a bullet (from the captured intent's summary) under `CHANGELOG.md`'s `[Unreleased]` section — `feature`/`bugfix`/`chore` map to the `Added`/`Fixed`/`Changed` categories — creating the file, [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)-style, if the repo has none — and include it in the same commit |
|
|
93
|
+
| `PIPELINE_WORKER_AUTO_MERGE_ON_GREEN` | `true` | once the MR/PR opens, ask the forge to merge it automatically as soon as CI (and any required approvals) allow — best-effort; if the forge rejects it (auto-merge not enabled for the repo, pending approvals, ...) the run continues normally and you merge manually. Once the forge confirms the merge landed, the run also fast-forwards your local target branch from origin (waiting a few seconds for the ref to settle first), so your local main is already up to date when the run ends. Set to `false` to go back to opening the MR/PR and merging it yourself |
|
|
94
|
+
| `PIPELINE_WORKER_MERGE_METHOD` | `squash` | `merge`, `squash`, or `rebase` — passed to auto-merge. GitLab has no per-request rebase option; `rebase` there falls back to the project's own default merge method |
|
|
95
|
+
| `PIPELINE_WORKER_SQUASH_ON_MERGE` | `false` | once CI is green, collapse every commit this run made on the branch into one (titled from the captured intent) and force-push — keeps history clean regardless of the repo's merge-strategy setting. Off by default: rewrites published history (force-push), a materially different risk from everything else this tool does. Only reliable with auto-merge off — the forge may already have merged (and deleted) the branch before this step runs |
|
|
96
|
+
| `PIPELINE_WORKER_PLAIN_OUTPUT` | `false` | force the append-only, non-redrawing narration even on a real terminal (the same output CI/piped runs always get) — useful when pasting output into a bug report or feeding it to another tool |
|
|
90
97
|
|
|
91
98
|
### Branch naming
|
|
92
99
|
|
package/dist/agent/claude.js
CHANGED
|
@@ -131,6 +131,31 @@ async function runClaudeProcess(args, opts) {
|
|
|
131
131
|
throw new Error(formatProcessError(err));
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
+
function asCount(value) {
|
|
135
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : undefined;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Extracts best-effort token telemetry from the CLI's envelope. Cache
|
|
139
|
+
* creation/read tokens are folded into inputTokens — they are prompt-side
|
|
140
|
+
* spend either way, and one figure is what the per-step display needs. Any
|
|
141
|
+
* malformed or missing field degrades to undefined, never a throw: usage is
|
|
142
|
+
* decoration, and a CLI version that reshapes this part of the envelope must
|
|
143
|
+
* not break the run.
|
|
144
|
+
*/
|
|
145
|
+
function parseUsage(parsed) {
|
|
146
|
+
const rawUsage = parsed.usage;
|
|
147
|
+
const input = asCount(rawUsage?.input_tokens);
|
|
148
|
+
const cacheCreation = asCount(rawUsage?.cache_creation_input_tokens);
|
|
149
|
+
const cacheRead = asCount(rawUsage?.cache_read_input_tokens);
|
|
150
|
+
const inputTokens = input === undefined && cacheCreation === undefined && cacheRead === undefined ? undefined : (input ?? 0) + (cacheCreation ?? 0) + (cacheRead ?? 0);
|
|
151
|
+
const outputTokens = asCount(rawUsage?.output_tokens);
|
|
152
|
+
const totalTokens = inputTokens === undefined && outputTokens === undefined ? undefined : (inputTokens ?? 0) + (outputTokens ?? 0);
|
|
153
|
+
const costUsd = asCount(parsed.total_cost_usd);
|
|
154
|
+
const numTurns = asCount(parsed.num_turns);
|
|
155
|
+
if (totalTokens === undefined && costUsd === undefined && numTurns === undefined)
|
|
156
|
+
return undefined;
|
|
157
|
+
return { inputTokens, outputTokens, totalTokens, costUsd, numTurns };
|
|
158
|
+
}
|
|
134
159
|
function parseClaudeResult(stdout, start) {
|
|
135
160
|
try {
|
|
136
161
|
// duration_ms/session_id come straight from the CLI's own JSON envelope
|
|
@@ -138,7 +163,13 @@ function parseClaudeResult(stdout, start) {
|
|
|
138
163
|
// falling back to our own wall-clock reading only covers the
|
|
139
164
|
// never-observed case where that envelope omits duration_ms.
|
|
140
165
|
const parsed = JSON.parse(stdout);
|
|
141
|
-
return {
|
|
166
|
+
return {
|
|
167
|
+
text: parsed.result ?? stdout,
|
|
168
|
+
raw: parsed,
|
|
169
|
+
sessionId: parsed.session_id,
|
|
170
|
+
durationMs: parsed.duration_ms ?? Date.now() - start,
|
|
171
|
+
usage: parseUsage(parsed),
|
|
172
|
+
};
|
|
142
173
|
}
|
|
143
174
|
catch {
|
|
144
175
|
// --output-format json should always produce parseable JSON; fall back
|
package/dist/agent/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agent/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agent/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -28,11 +28,29 @@ export interface AgentInvokeOptions {
|
|
|
28
28
|
/** Optional model override (e.g. "haiku"), for adapters that support per-invocation model selection. */
|
|
29
29
|
model?: string;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Best-effort token/cost telemetry for one agent invocation. Only adapters
|
|
33
|
+
* whose CLI reports usage in its output format can fill this in (claude's
|
|
34
|
+
* `--output-format json` envelope does; pi and copilot print modes expose
|
|
35
|
+
* nothing, so their results simply omit it). Absence means "unknown", never
|
|
36
|
+
* "zero" — display code must omit the figure rather than render 0.
|
|
37
|
+
*/
|
|
38
|
+
export interface AgentUsage {
|
|
39
|
+
/** Prompt-side tokens, with any cache-creation/cache-read tokens folded in. */
|
|
40
|
+
inputTokens?: number;
|
|
41
|
+
outputTokens?: number;
|
|
42
|
+
/** input + output when both are known, else whichever side is known. */
|
|
43
|
+
totalTokens?: number;
|
|
44
|
+
costUsd?: number;
|
|
45
|
+
numTurns?: number;
|
|
46
|
+
}
|
|
31
47
|
export interface AgentInvokeResult {
|
|
32
48
|
/** The agent's final text answer (or, when jsonSchema was supplied, its raw JSON string). */
|
|
33
49
|
text: string;
|
|
34
50
|
/** The parsed structured payload, when the adapter's output format returns one. */
|
|
35
51
|
raw?: unknown;
|
|
52
|
+
/** Token/cost telemetry for this turn, when the adapter's CLI reports it (see AgentUsage). */
|
|
53
|
+
usage?: AgentUsage;
|
|
36
54
|
/**
|
|
37
55
|
* Identifier for the underlying agent CLI's own session, so a user can look
|
|
38
56
|
* up what it did later — `claude --resume <id>` or, for Copilot (which has
|
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,9 @@ import { loadRunState, listRunStates, recordEvent } from './state/runState.js';
|
|
|
14
14
|
import { printSessionList, printSessionDetail } from './ui/sessions.js';
|
|
15
15
|
import { isWorktreeOnBranch, checkoutExistingBranch, removeWorktree } from './git/worktree.js';
|
|
16
16
|
import { adoptBranch } from './workflow/adoptBranch.js';
|
|
17
|
+
import { maybeSyncTargetBranch } from './workflow/syncTargetBranch.js';
|
|
18
|
+
import { resumeSkeleton, adoptSkeleton } from './workflow/runPlan.js';
|
|
19
|
+
import { beginRun, endRun, runStep, seedRunTokens } from './ui/steps.js';
|
|
17
20
|
import { buildEnvelope, errorEnvelope } from './toon/envelope.js';
|
|
18
21
|
import { makeIdempotentCleanup, registerExitSignals } from './process/signalCleanup.js';
|
|
19
22
|
/**
|
|
@@ -48,10 +51,21 @@ async function resolveResumeWorktree(repoRoot, state) {
|
|
|
48
51
|
async function runResumeWatch(forge, config, agent, worktreePath, state, repoRoot, cleanup) {
|
|
49
52
|
try {
|
|
50
53
|
await watchPipeline(forge, config, agent, worktreePath, state.branch, state.targetBranch, state.mrIid, state, repoRoot);
|
|
54
|
+
// Same 'merge' tail as a fresh run (see orchestrate.ts's finalizeRun):
|
|
55
|
+
// when auto-merge landed the MR/PR, pull the merged result back into the
|
|
56
|
+
// local target branch so it doesn't sit stale after the run ends.
|
|
57
|
+
if (state.phase === 'done') {
|
|
58
|
+
await maybeSyncTargetBranch(forge, config, repoRoot, state.targetBranch, state.mrIid);
|
|
59
|
+
endRun('done', `MR/PR #${state.mrIid} finished green`);
|
|
60
|
+
}
|
|
61
|
+
else if (state.phase === 'escalated') {
|
|
62
|
+
endRun('escalated', 'see the MR/PR comment for what was tried and why');
|
|
63
|
+
}
|
|
51
64
|
}
|
|
52
65
|
catch (error) {
|
|
53
66
|
const message = error instanceof Error ? error.message : String(error);
|
|
54
67
|
recordEvent(repoRoot, state, `Resume failed: ${message}`, 'error');
|
|
68
|
+
endRun('failed', message);
|
|
55
69
|
throw error;
|
|
56
70
|
}
|
|
57
71
|
finally {
|
|
@@ -102,12 +116,24 @@ program
|
|
|
102
116
|
const forge = createForge(config);
|
|
103
117
|
const agent = selectAgent(config);
|
|
104
118
|
const existingState = loadRunState(repoRoot, opts.branch);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
119
|
+
let state;
|
|
120
|
+
let worktreePath;
|
|
121
|
+
if (existingState) {
|
|
122
|
+
const resumable = requireMrRecorded(opts.branch, existingState);
|
|
123
|
+
beginRun(resumeSkeleton(resumable.targetBranch), { title: opts.branch });
|
|
124
|
+
if (resumable.totalTokens !== undefined)
|
|
125
|
+
seedRunTokens(resumable.totalTokens);
|
|
126
|
+
worktreePath = await runStep('resume', 'reattach: reuse the crashed run\'s worktree, or recreate it from origin', () => resolveResumeWorktree(repoRoot, resumable));
|
|
127
|
+
state = resumable;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
beginRun(adoptSkeleton(opts.branch), { title: opts.branch });
|
|
131
|
+
state = await adoptBranch(repoRoot, config, forge, agent, opts.branch, opts.target);
|
|
132
|
+
worktreePath = state.worktreePath;
|
|
133
|
+
}
|
|
109
134
|
const { cleanup } = makeIdempotentCleanup(() => removeWorktree(repoRoot, worktreePath));
|
|
110
135
|
registerExitSignals((exitCode) => {
|
|
136
|
+
endRun('interrupted', `resume again with: pipeline-worker resume --branch ${opts.branch}`);
|
|
111
137
|
void cleanup().then(() => process.exit(exitCode));
|
|
112
138
|
});
|
|
113
139
|
await runResumeWatch(forge, config, agent, worktreePath, state, repoRoot, cleanup);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKxF;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,KAAe;IACxD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,sDAAsD,MAAM,mCAAmC,CAAC,CAAC;QAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAA0B,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,KAAwB;IAC7E,MAAM,YAAY,GAAG,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/E,CAAC,CAAC,KAAK,CAAC,YAAY;QACpB,CAAC,CAAC,MAAM,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,YAAY,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;QACxC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;QAClC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAAkB,EAClB,MAA4B,EAC5B,KAAmB,EACnB,YAAoB,EACpB,KAAwB,EACxB,QAAgB,EAChB,OAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKxF;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,KAAe;IACxD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,sDAAsD,MAAM,mCAAmC,CAAC,CAAC;QAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAA0B,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,KAAwB;IAC7E,MAAM,YAAY,GAAG,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/E,CAAC,CAAC,KAAK,CAAC,YAAY;QACpB,CAAC,CAAC,MAAM,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,YAAY,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;QACxC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;QAClC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAAkB,EAClB,MAA4B,EAC5B,KAAmB,EACnB,YAAoB,EACpB,KAAwB,EACxB,QAAgB,EAChB,OAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxH,uEAAuE;QACvE,yEAAyE;QACzE,kEAAkE;QAClE,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACtF,MAAM,CAAC,MAAM,EAAE,UAAU,KAAK,CAAC,KAAK,iBAAiB,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,WAAW,EAAE,kDAAkD,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,kBAAkB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1B,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAsC,CAAC;AAE9H,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,kEAAkE,CAAC,CAAC;AAChH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,8CAA8C,CAAC,CAAC;AAE9F,OAAO;KACJ,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACnC,WAAW,CAAC,8EAA8E,CAAC;KAC3F,MAAM,CAAC,eAAe,EAAE,0FAA0F,CAAC;KACnH,MAAM,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uEAAuE,CAAC;KACpF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CACV,oHAAoH;IAClH,2GAA2G,CAC9G;KACA,cAAc,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;KAC9E,MAAM,CACL,mBAAmB,EACnB,mIAAmI,CACpI;KACA,MAAM,CAAC,KAAK,EAAE,IAAyC,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,KAAwB,CAAC;QAC7B,IAAI,YAAoB,CAAC;QACzB,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAChE,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS;gBAAE,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC9E,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,yEAAyE,EAAE,GAAG,EAAE,CACrH,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAC3C,CAAC;YACF,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpF,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACpC,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QACxF,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/B,MAAM,CAAC,aAAa,EAAE,sDAAsD,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,qDAAqD,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,cAAc,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KACtE,MAAM,CAAC,CAAC,IAAwB,EAAE,EAAE;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,iCAAiC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qFAAqF,CAAC;KAClG,MAAM,CAAC,iBAAiB,EAAE,wEAAwE,CAAC;KACnG,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,gDAAgD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,GAAG,CAAC,IAAI,qCAAqC,GAAG,CAAC,IAAI,UAAU,CAAC;KAClG,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,CAAC,OAAO,0CAA0C,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC;IACvH,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,CAAC,IAAI,wCAAwC,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BD,CACA,CAAC;AAEF,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/config/loader.js
CHANGED
|
@@ -15,6 +15,7 @@ import { deriveProjectPath } from '../git/resolveProjectPath.js';
|
|
|
15
15
|
import { detectGithubRepo } from '../git/remote.js';
|
|
16
16
|
const AGENT_NAMES = ['claude', 'copilot', 'pi'];
|
|
17
17
|
const FORGE_NAMES = ['gitlab', 'github'];
|
|
18
|
+
const MERGE_METHODS = ['merge', 'squash', 'rebase'];
|
|
18
19
|
// build/lint/test defaults come from detectChecks(repoRoot) at load time.
|
|
19
20
|
const DEFAULT_CONFIG = {
|
|
20
21
|
agent: 'claude',
|
|
@@ -34,6 +35,13 @@ const DEFAULT_CONFIG = {
|
|
|
34
35
|
intentModel: 'haiku',
|
|
35
36
|
runLintAndTest: true,
|
|
36
37
|
updateChangelog: false,
|
|
38
|
+
// Default-on: a run is meant to go all the way to a merged, locally-synced
|
|
39
|
+
// result unattended (see maybeSyncTargetBranch) — merging remains
|
|
40
|
+
// best-effort and never fails the run, and PIPELINE_WORKER_AUTO_MERGE_ON_GREEN=false
|
|
41
|
+
// restores the old opt-in behavior for anyone who wants to merge by hand.
|
|
42
|
+
autoMergeOnGreen: true,
|
|
43
|
+
mergeMethod: 'squash',
|
|
44
|
+
squashOnMerge: false,
|
|
37
45
|
};
|
|
38
46
|
/** Loads <repoRoot>/.env into process.env; already-set variables always win. */
|
|
39
47
|
// fallow-ignore-next-line complexity
|
|
@@ -90,6 +98,21 @@ function resolveProjectId(value, fallback) {
|
|
|
90
98
|
const num = Number(value);
|
|
91
99
|
return Number.isFinite(num) && num > 0 ? num : value;
|
|
92
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* squashOnMerge force-pushes a collapsed history onto the branch after CI is
|
|
103
|
+
* green; with autoMergeOnGreen also on, the forge may already have merged
|
|
104
|
+
* (and possibly deleted) that branch via its own webhook before the squash
|
|
105
|
+
* push runs — see maybeSquashCommits, which reduces that race to a low-risk
|
|
106
|
+
* note rather than failing the run. Surfacing it here too, at config load
|
|
107
|
+
* time, means the user sees it before the run even starts.
|
|
108
|
+
*/
|
|
109
|
+
function warnIfSquashRacesAutoMerge(autoMergeOnGreen, squashOnMerge) {
|
|
110
|
+
if (autoMergeOnGreen && squashOnMerge) {
|
|
111
|
+
console.error('Warning: PIPELINE_WORKER_SQUASH_ON_MERGE is enabled alongside PIPELINE_WORKER_AUTO_MERGE_ON_GREEN — ' +
|
|
112
|
+
'the forge may merge (and delete) the branch before the squash push runs. This is best-effort and will ' +
|
|
113
|
+
'not fail the run, but the squash may silently no-op.');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
93
116
|
/** Warns once when no toolchain was auto-detected and none of the build/lint/test env overrides are set — checks will otherwise silently be skipped. */
|
|
94
117
|
// fallow-ignore-next-line complexity
|
|
95
118
|
function warnIfToolchainUndetected(repoRoot, detected) {
|
|
@@ -133,6 +156,9 @@ export function loadConfig(repoRoot) {
|
|
|
133
156
|
const detected = detectChecks(repoRoot);
|
|
134
157
|
warnIfToolchainUndetected(repoRoot, detected);
|
|
135
158
|
const repoBase = process.env.PIPELINE_WORKER_GITLAB_REPO_BASE;
|
|
159
|
+
const autoMergeOnGreen = boolean(process.env.PIPELINE_WORKER_AUTO_MERGE_ON_GREEN, DEFAULT_CONFIG.autoMergeOnGreen);
|
|
160
|
+
const squashOnMerge = boolean(process.env.PIPELINE_WORKER_SQUASH_ON_MERGE, DEFAULT_CONFIG.squashOnMerge);
|
|
161
|
+
warnIfSquashRacesAutoMerge(autoMergeOnGreen, squashOnMerge);
|
|
136
162
|
return {
|
|
137
163
|
agent: pickName(process.env.PIPELINE_WORKER_AGENT, AGENT_NAMES, DEFAULT_CONFIG.agent),
|
|
138
164
|
forge: pickName(process.env.PIPELINE_WORKER_FORGE, FORGE_NAMES, DEFAULT_CONFIG.forge),
|
|
@@ -149,6 +175,9 @@ export function loadConfig(repoRoot) {
|
|
|
149
175
|
intentModel: process.env.PIPELINE_WORKER_INTENT_MODEL || DEFAULT_CONFIG.intentModel,
|
|
150
176
|
runLintAndTest: boolean(process.env.PIPELINE_WORKER_RUN_LINT_AND_TEST, DEFAULT_CONFIG.runLintAndTest),
|
|
151
177
|
updateChangelog: boolean(process.env.PIPELINE_WORKER_UPDATE_CHANGELOG, DEFAULT_CONFIG.updateChangelog),
|
|
178
|
+
autoMergeOnGreen,
|
|
179
|
+
mergeMethod: pickName(process.env.PIPELINE_WORKER_MERGE_METHOD, MERGE_METHODS, DEFAULT_CONFIG.mergeMethod),
|
|
180
|
+
squashOnMerge,
|
|
152
181
|
};
|
|
153
182
|
}
|
|
154
183
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,GAAyB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACtE,MAAM,WAAW,GAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/github.d.ts
CHANGED
|
@@ -20,4 +20,12 @@ export interface WorkflowRun {
|
|
|
20
20
|
* canceled -> canceled; else success unless every run was skipped.
|
|
21
21
|
*/
|
|
22
22
|
export declare function aggregateRuns(runs: WorkflowRun[]): Pipeline | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* REST and GraphQL live at different paths: github.com's REST base is
|
|
25
|
+
* https://api.github.com, GraphQL is https://api.github.com/graphql. GitHub
|
|
26
|
+
* Enterprise Server's REST base ends in /api/v3; its GraphQL endpoint is
|
|
27
|
+
* .../api/graphql (not /api/v3/graphql) — the two APIs don't nest under the
|
|
28
|
+
* same versioned prefix there.
|
|
29
|
+
*/
|
|
30
|
+
export declare function githubGraphqlUrl(apiUrl: string): string;
|
|
23
31
|
export declare function createGithubForge(config: PipelineWorkerConfig): ForgeClient;
|
package/dist/forge/github.js
CHANGED
|
@@ -71,6 +71,23 @@ export function aggregateRuns(runs) {
|
|
|
71
71
|
function isFailedConclusion(conclusion) {
|
|
72
72
|
return conclusion !== null && !['success', 'skipped', 'neutral'].includes(conclusion);
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* REST and GraphQL live at different paths: github.com's REST base is
|
|
76
|
+
* https://api.github.com, GraphQL is https://api.github.com/graphql. GitHub
|
|
77
|
+
* Enterprise Server's REST base ends in /api/v3; its GraphQL endpoint is
|
|
78
|
+
* .../api/graphql (not /api/v3/graphql) — the two APIs don't nest under the
|
|
79
|
+
* same versioned prefix there.
|
|
80
|
+
*/
|
|
81
|
+
export function githubGraphqlUrl(apiUrl) {
|
|
82
|
+
return apiUrl.endsWith('/api/v3') ? `${apiUrl.slice(0, -'/api/v3'.length)}/api/graphql` : `${apiUrl}/graphql`;
|
|
83
|
+
}
|
|
84
|
+
const MERGE_METHOD_ENUM = { merge: 'MERGE', squash: 'SQUASH', rebase: 'REBASE' };
|
|
85
|
+
const ENABLE_AUTO_MERGE_MUTATION = 'mutation($pullRequestId: ID!, $mergeMethod: PullRequestMergeMethod!) { ' +
|
|
86
|
+
'enablePullRequestAutoMerge(input: { pullRequestId: $pullRequestId, mergeMethod: $mergeMethod }) { clientMutationId } }';
|
|
87
|
+
async function githubGraphqlRequest(auth, query, variables) {
|
|
88
|
+
const res = await forgeFetch('GitHub GraphQL', '/graphql', githubGraphqlUrl(auth.apiUrl), { Authorization: `Bearer ${auth.token}`, 'Content-Type': 'application/json' }, { method: 'POST', body: JSON.stringify({ query, variables }) });
|
|
89
|
+
return (await res.json());
|
|
90
|
+
}
|
|
74
91
|
export function createGithubForge(config) {
|
|
75
92
|
const auth = resolveGithubAuth(config);
|
|
76
93
|
const owner = auth.repo.split('/')[0];
|
|
@@ -136,6 +153,29 @@ export function createGithubForge(config) {
|
|
|
136
153
|
// not conflicts and must not trigger conflict resolution.
|
|
137
154
|
return pr.mergeable_state === 'dirty';
|
|
138
155
|
},
|
|
156
|
+
async isMrMerged(mrIid) {
|
|
157
|
+
const res = await githubRequest(auth, `/pulls/${mrIid}`);
|
|
158
|
+
const pr = (await res.json());
|
|
159
|
+
// `merged` is the authoritative flag; `state` alone can't distinguish
|
|
160
|
+
// merged from closed-without-merging (both read "closed").
|
|
161
|
+
return pr.merged === true;
|
|
162
|
+
},
|
|
163
|
+
async enableAutoMerge(mrIid, mergeMethod) {
|
|
164
|
+
const prRes = await githubRequest(auth, `/pulls/${mrIid}`);
|
|
165
|
+
const pr = (await prRes.json());
|
|
166
|
+
const body = await githubGraphqlRequest(auth, ENABLE_AUTO_MERGE_MUTATION, {
|
|
167
|
+
pullRequestId: pr.node_id,
|
|
168
|
+
mergeMethod: MERGE_METHOD_ENUM[mergeMethod],
|
|
169
|
+
});
|
|
170
|
+
if (body.errors?.length) {
|
|
171
|
+
throw new Error(`GitHub GraphQL enablePullRequestAutoMerge failed: ${body.errors.map((e) => e.message).join('; ')}`);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
// GitHub has no "custom CI config path" concept — Actions workflows are
|
|
175
|
+
// always under .github/workflows, so there's nothing to look up.
|
|
176
|
+
async getCiConfigPath() {
|
|
177
|
+
return undefined;
|
|
178
|
+
},
|
|
139
179
|
};
|
|
140
180
|
}
|
|
141
181
|
//# sourceMappingURL=github.js.map
|
package/dist/forge/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/forge/github.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/forge/github.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/gitlab.js
CHANGED
|
@@ -100,6 +100,30 @@ export function createGitlabForge(config) {
|
|
|
100
100
|
// computing yet and must not be treated as a conflict.
|
|
101
101
|
return mr.merge_status === 'cannot_be_merged';
|
|
102
102
|
},
|
|
103
|
+
async isMrMerged(mrIid) {
|
|
104
|
+
const res = await gitlabRequest(auth, `/merge_requests/${mrIid}`);
|
|
105
|
+
const mr = (await res.json());
|
|
106
|
+
// "merged" is a distinct state from "closed" (closed-without-merging)
|
|
107
|
+
// on GitLab, so the state field alone is authoritative here.
|
|
108
|
+
return mr.state === 'merged';
|
|
109
|
+
},
|
|
110
|
+
async enableAutoMerge(mrIid, mergeMethod) {
|
|
111
|
+
// GitLab has no per-request "rebase" option on this endpoint — merge
|
|
112
|
+
// strategy besides squash-or-not is a project-level setting, so
|
|
113
|
+
// mergeMethod: 'rebase' here silently falls back to the project's own
|
|
114
|
+
// default merge method (documented on ForgeClient.enableAutoMerge).
|
|
115
|
+
await gitlabRequest(auth, `/merge_requests/${mrIid}/merge`, {
|
|
116
|
+
method: 'PUT',
|
|
117
|
+
body: JSON.stringify({ merge_when_pipeline_succeeds: true, squash: mergeMethod === 'squash' }),
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
async getCiConfigPath() {
|
|
121
|
+
const res = await gitlabRequest(auth, '');
|
|
122
|
+
const project = (await res.json());
|
|
123
|
+
// Absent/null/empty all mean "using the default .gitlab-ci.yml path" —
|
|
124
|
+
// treat them identically rather than betting on one exact representation.
|
|
125
|
+
return project.ci_config_path || undefined;
|
|
126
|
+
},
|
|
103
127
|
};
|
|
104
128
|
}
|
|
105
129
|
//# sourceMappingURL=gitlab.js.map
|
package/dist/forge/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/forge/gitlab.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/forge/gitlab.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/shared.d.ts
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
/** Small pieces genuinely identical between the GitHub and GitLab ForgeClient implementations. */
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export interface ForgeRetryConfig {
|
|
3
|
+
/** Number of retries after the initial attempt (so maxRetries=4 means up to 5 total requests). */
|
|
4
|
+
maxRetries?: number;
|
|
5
|
+
baseDelayMs?: number;
|
|
6
|
+
maxDelayMs?: number;
|
|
7
|
+
}
|
|
8
|
+
/** 429 (rate limited) and 5xx (forge-side failure) are worth retrying; every other 4xx (401/403/404/422, ...) means retrying would just repeat the same rejection. */
|
|
9
|
+
export declare function isRetryableStatus(status: number): boolean;
|
|
10
|
+
/** Parses a `Retry-After` header (either delta-seconds or an HTTP-date) into milliseconds; undefined if absent or unparseable. */
|
|
11
|
+
export declare function parseRetryAfterMs(header: string | null): number | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Performs `fetch` with bounded retry/backoff, then throws a labeled error on
|
|
14
|
+
* a non-ok response that's either non-retryable or has exhausted its
|
|
15
|
+
* retries. The caller supplies the URL and headers since those differ per
|
|
16
|
+
* forge. Over a long CI-watch poll loop (up to 2 hours at ~15s intervals) a
|
|
17
|
+
* transient 429/5xx/network blip is expected sooner or later; without this,
|
|
18
|
+
* one such blip crashes the whole run and forces a manual `pipeline-worker
|
|
19
|
+
* resume`. Only 429/5xx and thrown network errors are retried — other 4xx
|
|
20
|
+
* (401/403/404/422, ...) fail on the first attempt, since retrying an auth or
|
|
21
|
+
* not-found error only delays surfacing a real problem.
|
|
22
|
+
*/
|
|
23
|
+
export declare function forgeFetch(apiLabel: string, path: string, url: string, headers: Record<string, string>, init?: RequestInit, retryConfig?: ForgeRetryConfig): Promise<Response>;
|
|
4
24
|
/** The `list.length > 0 ? map(list[0]) : undefined` idiom shared by both findExistingMr implementations. */
|
|
5
25
|
export declare function firstOrUndefined<T, R>(list: T[], map: (item: T) => R): R | undefined;
|
|
6
26
|
/** Both createMrNote implementations parse the response the same way, just against differently-shaped request paths. */
|
package/dist/forge/shared.js
CHANGED
|
@@ -1,19 +1,67 @@
|
|
|
1
1
|
/** Small pieces genuinely identical between the GitHub and GitLab ForgeClient implementations. */
|
|
2
|
-
|
|
2
|
+
const DEFAULT_RETRY = { maxRetries: 4, baseDelayMs: 500, maxDelayMs: 8000 };
|
|
3
|
+
function sleep(ms) {
|
|
4
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
|
+
}
|
|
6
|
+
/** 429 (rate limited) and 5xx (forge-side failure) are worth retrying; every other 4xx (401/403/404/422, ...) means retrying would just repeat the same rejection. */
|
|
7
|
+
export function isRetryableStatus(status) {
|
|
8
|
+
return status === 429 || (status >= 500 && status < 600);
|
|
9
|
+
}
|
|
10
|
+
/** Parses a `Retry-After` header (either delta-seconds or an HTTP-date) into milliseconds; undefined if absent or unparseable. */
|
|
11
|
+
export function parseRetryAfterMs(header) {
|
|
12
|
+
if (!header)
|
|
13
|
+
return undefined;
|
|
14
|
+
const seconds = Number(header);
|
|
15
|
+
if (Number.isFinite(seconds) && seconds >= 0)
|
|
16
|
+
return seconds * 1000;
|
|
17
|
+
const dateMs = Date.parse(header);
|
|
18
|
+
if (!Number.isNaN(dateMs))
|
|
19
|
+
return Math.max(0, dateMs - Date.now());
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
/** Exponential backoff with full jitter, capped at maxDelayMs; a Retry-After value (also capped, since a forge could send an unreasonably long one) takes priority when present. */
|
|
23
|
+
function backoffMs(attempt, cfg, retryAfterMs) {
|
|
24
|
+
if (retryAfterMs !== undefined)
|
|
25
|
+
return Math.min(retryAfterMs, cfg.maxDelayMs * 4);
|
|
26
|
+
return Math.random() * Math.min(cfg.maxDelayMs, cfg.baseDelayMs * 2 ** attempt);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Performs `fetch` with bounded retry/backoff, then throws a labeled error on
|
|
30
|
+
* a non-ok response that's either non-retryable or has exhausted its
|
|
31
|
+
* retries. The caller supplies the URL and headers since those differ per
|
|
32
|
+
* forge. Over a long CI-watch poll loop (up to 2 hours at ~15s intervals) a
|
|
33
|
+
* transient 429/5xx/network blip is expected sooner or later; without this,
|
|
34
|
+
* one such blip crashes the whole run and forces a manual `pipeline-worker
|
|
35
|
+
* resume`. Only 429/5xx and thrown network errors are retried — other 4xx
|
|
36
|
+
* (401/403/404/422, ...) fail on the first attempt, since retrying an auth or
|
|
37
|
+
* not-found error only delays surfacing a real problem.
|
|
38
|
+
*/
|
|
3
39
|
// fallow-ignore-next-line complexity
|
|
4
|
-
export async function forgeFetch(apiLabel, path, url, headers, init) {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
40
|
+
export async function forgeFetch(apiLabel, path, url, headers, init, retryConfig) {
|
|
41
|
+
const cfg = { ...DEFAULT_RETRY, ...retryConfig };
|
|
42
|
+
const method = init?.method ?? 'GET';
|
|
43
|
+
for (let attempt = 0;; attempt++) {
|
|
44
|
+
let res;
|
|
45
|
+
try {
|
|
46
|
+
res = await fetch(url, { ...init, headers: { ...headers, ...(init?.headers ?? {}) } });
|
|
47
|
+
}
|
|
48
|
+
catch (networkError) {
|
|
49
|
+
if (attempt >= cfg.maxRetries) {
|
|
50
|
+
const message = networkError instanceof Error ? networkError.message : String(networkError);
|
|
51
|
+
throw new Error(`${apiLabel} ${method} ${path} failed after ${attempt + 1} attempt(s): ${message}`);
|
|
52
|
+
}
|
|
53
|
+
await sleep(backoffMs(attempt, cfg, undefined));
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (res.ok)
|
|
57
|
+
return res;
|
|
58
|
+
if (!isRetryableStatus(res.status) || attempt >= cfg.maxRetries) {
|
|
59
|
+
const body = await res.text().catch(() => '');
|
|
60
|
+
throw new Error(`${apiLabel} ${method} ${path} failed: ${res.status} ${res.statusText} — ${body}`);
|
|
61
|
+
}
|
|
62
|
+
const retryAfterMs = res.status === 429 ? parseRetryAfterMs(res.headers.get('retry-after')) : undefined;
|
|
63
|
+
await sleep(backoffMs(attempt, cfg, retryAfterMs));
|
|
15
64
|
}
|
|
16
|
-
return res;
|
|
17
65
|
}
|
|
18
66
|
/** The `list.length > 0 ? map(list[0]) : undefined` idiom shared by both findExistingMr implementations. */
|
|
19
67
|
export function firstOrUndefined(list, map) {
|
package/dist/forge/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/forge/shared.ts"],"names":[],"mappings":"AAAA,kGAAkG;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/forge/shared.ts"],"names":[],"mappings":"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"}
|