Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
3caf5d7
feat(create-pr): align with gh-aw create-pull-request implementation
jamesadevine Apr 11, 2026
65e5099
fix(create-pr): address review feedback
jamesadevine Apr 11, 2026
68b7f15
fix(create-pr): address review feedback — format-patch, binary files,…
jamesadevine Apr 12, 2026
d3656dd
fix(create-pr): address review round 3 feedback
jamesadevine Apr 12, 2026
3013ac7
fix(create-pr): address review round 4 feedback
jamesadevine Apr 12, 2026
cd4eb07
fix(create-pr): address review round 5 feedback
jamesadevine Apr 12, 2026
2ef5723
fix(create-pr): address review round 6 feedback
jamesadevine Apr 13, 2026
92def85
fix(create-pr): address review round 7 feedback
jamesadevine Apr 13, 2026
5d555e6
Merge remote-tracking branch 'origin/main' into feat/create-pr-gh-aw-…
jamesadevine Apr 13, 2026
f71b754
fix(create-pr): address review round 8 feedback
jamesadevine Apr 13, 2026
2d12eab
fix(create-pr): remove record-branch-on-failure serde alias
jamesadevine Apr 13, 2026
b6d1a33
fix(create-pr): address review round 9 feedback
jamesadevine Apr 14, 2026
629f301
fix(create-pr): address review round 10 feedback
jamesadevine Apr 14, 2026
10a5028
Merge remote-tracking branch 'origin/main' into feat/create-pr-gh-aw-…
jamesadevine Apr 14, 2026
26dbb0a
fix(create-pr): gh-aw parity — bugs, security, and missing features
jamesadevine Apr 14, 2026
e9d6d2e
fix(create-pr): truncate error body in failure message, document base…
jamesadevine Apr 14, 2026
175a85a
fix(create-pr): root-commit fallback only for truly single-commit repos
jamesadevine Apr 14, 2026
6a64f80
fix(create-pr): replace git diff --check with targeted conflict marke…
jamesadevine Apr 14, 2026
9ea0451
fix(create-pr): use ERE instead of PCRE for conflict marker detection
jamesadevine Apr 14, 2026
689024f
fix(create-pr): remove git from default bash allowlist
jamesadevine Apr 14, 2026
a9875ba
fix(create-pr): update tool description to match synthetic commit beh…
jamesadevine Apr 14, 2026
79dda3f
fix(create-pr): address latest review — draft+auto-complete warning, …
jamesadevine Apr 14, 2026
d95f141
refactor(create-pr): replace patch content filtering with git --exclu…
jamesadevine Apr 14, 2026
15ff03f
fix(create-pr): fix --exclude flag ordering and protected-files exclu…
jamesadevine Apr 14, 2026
cf8b266
fix(create-pr): fix glob_match_simple for **/ patterns, remove dead r…
jamesadevine Apr 14, 2026
1c67bee
fix(create-pr): address review round — dedup, copies, title length, s…
jamesadevine Apr 14, 2026
a159cfb
fix(create-pr): conflict markers, Unicode title, file count, TOCTOU r…
jamesadevine Apr 14, 2026
4917471
fix(create-pr): git am does not support --exclude, use git apply dire…
jamesadevine Apr 14, 2026
f775292
fix(create-pr): align validate_patch_paths with extract_paths_from_patch
jamesadevine Apr 14, 2026
b8bf084
refactor(create-pr): use glob-match crate, improve merge-base error m…
jamesadevine Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 50 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ terminal_size = "0.4.3"
url = "2.5.8"
axum = { version = "0.8.8", features = ["tokio"] }
subtle = "2.6.1"
rand = "0.10.1"
base64 = "0.22.1"
glob-match = "0.2.1"

[dev-dependencies]
reqwest = { version = "0.12", features = ["blocking"] }
22 changes: 16 additions & 6 deletions src/execute.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,15 @@ pub async fn execute_safe_outputs(

match execute_safe_output(entry, ctx).await {
Ok((tool_name, result)) => {
if result.success {
if result.is_warning() {
warn!(
"[{}/{}] {} warning: {}",
i + 1,
entries.len(),
tool_name,
result.message
);
} else if result.success {
info!(
"[{}/{}] {} succeeded: {}",
i + 1,
Expand All @@ -173,12 +181,13 @@ pub async fn execute_safe_outputs(
result.message
);
}
let symbol = if result.is_warning() { "⚠" } else if result.success { "✓" } else { "✗" };
println!(
"[{}/{}] {} - {} - {}",
i + 1,
entries.len(),
tool_name,
if result.success { "✓" } else { "✗" },
symbol,
result.message
);
results.push(result);
Expand All @@ -193,11 +202,12 @@ pub async fn execute_safe_outputs(
}

// Log final summary
let success_count = results.iter().filter(|r| r.success).count();
let failure_count = results.len() - success_count;
let success_count = results.iter().filter(|r| r.success && !r.is_warning()).count();
let warning_count = results.iter().filter(|r| r.is_warning()).count();
let failure_count = results.iter().filter(|r| !r.success).count();
info!(
"Stage 2 execution complete: {} succeeded, {} failed",
success_count, failure_count
"Stage 2 execution complete: {} succeeded, {} warnings, {} failed",
success_count, warning_count, failure_count
);

Ok(results)
Expand Down
12 changes: 9 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -254,19 +254,25 @@ async fn main() -> Result<()> {
}

// Print summary
let success_count = results.iter().filter(|r| r.success).count();
let failure_count = results.len() - success_count;
let success_count = results.iter().filter(|r| r.success && !r.is_warning()).count();
let warning_count = results.iter().filter(|r| r.is_warning()).count();
let failure_count = results.iter().filter(|r| !r.success).count();

println!("\n--- Execution Summary ---");
println!(
"Total: {} | Success: {} | Failed: {}",
"Total: {} | Success: {} | Warnings: {} | Failed: {}",
results.len(),
success_count,
warning_count,
failure_count
);

if failure_count > 0 {
std::process::exit(1);
} else if warning_count > 0 {
// Exit code 2 signals "succeeded with issues" — the pipeline
// step wraps this to emit ##vso[task.complete result=SucceededWithIssues;]
std::process::exit(2);
}
}
Commands::Proxy { allowed_hosts } => {
Expand Down
Loading
Loading