autopilot-code 0.2.1 → 0.2.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autopilot-code",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "private": false,
5
5
  "description": "Repo-issue–driven autopilot runner",
6
6
  "license": "MIT",
@@ -28,6 +28,8 @@ import shutil
28
28
 
29
29
  STATE_DIR = ".autopilot"
30
30
  STATE_FILE = "state.json"
31
+ GLOBAL_CONFIG_DIR = Path.home() / ".config" / "autopilot"
32
+ GLOBAL_STATE_FILE = GLOBAL_CONFIG_DIR / "state.json"
31
33
  DEFAULT_HEARTBEAT_MAX_AGE_SECS = 60 * 60 # 1h
32
34
  DEFAULT_MAX_DEPTH = 3
33
35
  IGNORED_DIRS = {
@@ -621,9 +623,13 @@ def try_merge_pr(cfg: RepoConfig, issue_number: int, pr: dict[str, Any]) -> bool
621
623
  has_failure = any(c.get("conclusion") == "FAILURE" for c in checks)
622
624
  has_pending = any(c.get("conclusion") in ("PENDING", "QUEUED", None) for c in checks)
623
625
 
624
- if has_failure:
626
+ # If all checks are pending/queued and there are more than 0, it's pending
627
+ # But we should also check the rollup state if available
628
+ rollup_state = pr_details.get("statusCheckRollup", {}).get("state") if isinstance(pr_details.get("statusCheckRollup"), dict) else None
629
+
630
+ if has_failure or rollup_state == "FAILURE":
625
631
  check_status = "FAILED"
626
- elif has_pending:
632
+ elif has_pending or rollup_state == "PENDING":
627
633
  check_status = "PENDING"
628
634
  else:
629
635
  check_status = "PASSED"
@@ -431,16 +431,65 @@ I'm monitoring the CI checks and will auto-merge once they pass. This may take a
431
431
  elif [[ "$MERGE_STATE_STATUS" == "CLEAN" || "$MERGE_STATE_STATUS" == "HAS_HOOKS" ]]; then
432
432
  # Check statusCheckRollup - if null/empty, no checks configured, so PASSED
433
433
  if command -v jq >/dev/null 2>&1; then
434
- CHECK_STATUS=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup | if . == null or length == 0 then "PASSED" elif map(.conclusion) | any(. == "FAILURE") then "FAILED" elif map(.conclusion) | any(. == "PENDING") or any(. == "QUEUED") then "PENDING" else "PASSED" end')
434
+ # Debug: log the statusCheckRollup value
435
+ SCR_VALUE=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup')
436
+ echo "[run_opencode_issue.sh] Debug: statusCheckRollup value = $SCR_VALUE"
437
+
438
+ # Check if statusCheckRollup is null or empty array
439
+ SCR_IS_NULL=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup == null')
440
+ SCR_LENGTH=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup | length // 0')
441
+ echo "[run_opencode_issue.sh] Debug: statusCheckRollup is_null=$SCR_IS_NULL, length=$SCR_LENGTH"
442
+
443
+ if [[ "$SCR_IS_NULL" == "true" ]] || [[ "$SCR_LENGTH" == "0" ]]; then
444
+ CHECK_STATUS="PASSED"
445
+ echo "[run_opencode_issue.sh] No CI checks configured (statusCheckRollup is null/empty)"
446
+ else
447
+ # Has checks - determine status
448
+ CHECK_STATUS=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup | map(.conclusion) | if any(. == "FAILURE") then "FAILED" elif any(. == "PENDING") or any(. == "QUEUED") then "PENDING" else "PASSED" end')
449
+ echo "[run_opencode_issue.sh] CI checks found, status = $CHECK_STATUS"
450
+ fi
435
451
  else
452
+ # Python fallback
453
+ SCR_VALUE=$(python3 -c 'import json,sys; data=json.load(sys.stdin); print(data.get("statusCheckRollup", "null"))' <<<"$PR_STATUS_JSON")
454
+ echo "[run_opencode_issue.sh] Debug: statusCheckRollup value = $SCR_VALUE"
455
+
436
456
  CHECK_STATUS=$(python3 -c 'import json,sys; data=json.load(sys.stdin); scr=data.get("statusCheckRollup"); print("PASSED" if not scr or len(scr)==0 else "FAILED" if any(c.get("conclusion")=="FAILURE" for c in scr) else "PENDING" if any(c.get("conclusion") in ["PENDING","QUEUED"] for c in scr) else "PASSED")' <<<"$PR_STATUS_JSON")
457
+
458
+ if [[ "$SCR_VALUE" == "null" ]] || [[ "$SCR_VALUE" == "[]" ]]; then
459
+ echo "[run_opencode_issue.sh] No CI checks configured (statusCheckRollup is null/empty)"
460
+ fi
437
461
  fi
438
462
  elif [[ "$MERGE_STATE_STATUS" == "BLOCKED" ]]; then
439
463
  # If mergeStateStatus is BLOCKED, check if it's due to failed checks
464
+ echo "[run_opencode_issue.sh] mergeStateStatus is BLOCKED, checking if due to failed checks"
440
465
  if command -v jq >/dev/null 2>&1; then
441
- CHECK_STATUS=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup | if . == null or length == 0 then "PASSED" elif map(.conclusion) | any(. == "FAILURE") then "FAILED" elif map(.conclusion) | any(. == "PENDING") or any(. == "QUEUED") then "PENDING" else "PASSED" end')
466
+ # Debug: log the statusCheckRollup value
467
+ SCR_VALUE=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup')
468
+ echo "[run_opencode_issue.sh] Debug: statusCheckRollup value = $SCR_VALUE"
469
+
470
+ # Check if statusCheckRollup is null or empty array
471
+ SCR_IS_NULL=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup == null')
472
+ SCR_LENGTH=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup | length // 0')
473
+ echo "[run_opencode_issue.sh] Debug: statusCheckRollup is_null=$SCR_IS_NULL, length=$SCR_LENGTH"
474
+
475
+ if [[ "$SCR_IS_NULL" == "true" ]] || [[ "$SCR_LENGTH" == "0" ]]; then
476
+ CHECK_STATUS="FAILED"
477
+ echo "[run_opencode_issue.sh] No CI checks but mergeStateStatus is BLOCKED - other blocking issue"
478
+ else
479
+ # Has checks - determine status
480
+ CHECK_STATUS=$(echo "$PR_STATUS_JSON" | jq -r '.statusCheckRollup | map(.conclusion) | if any(. == "FAILURE") then "FAILED" elif any(. == "PENDING") or any(. == "QUEUED") then "PENDING" else "PASSED" end')
481
+ echo "[run_opencode_issue.sh] CI checks found, status = $CHECK_STATUS"
482
+ fi
442
483
  else
484
+ # Python fallback
485
+ SCR_VALUE=$(python3 -c 'import json,sys; data=json.load(sys.stdin); print(data.get("statusCheckRollup", "null"))' <<<"$PR_STATUS_JSON")
486
+ echo "[run_opencode_issue.sh] Debug: statusCheckRollup value = $SCR_VALUE"
487
+
443
488
  CHECK_STATUS=$(python3 -c 'import json,sys; data=json.load(sys.stdin); scr=data.get("statusCheckRollup"); print("PASSED" if not scr or len(scr)==0 else "FAILED" if any(c.get("conclusion")=="FAILURE" for c in scr) else "PENDING" if any(c.get("conclusion") in ["PENDING","QUEUED"] for c in scr) else "PASSED")' <<<"$PR_STATUS_JSON")
489
+
490
+ if [[ "$SCR_VALUE" == "null" ]] || [[ "$SCR_VALUE" == "[]" ]]; then
491
+ echo "[run_opencode_issue.sh] No CI checks but mergeStateStatus is BLOCKED - other blocking issue"
492
+ fi
444
493
  fi
445
494
  else
446
495
  # Other states (DRAFT, DIRTY, BEHIND) - mark as FAILED to exit