@jonit-dev/night-watch-cli 1.8.14-beta.0 → 1.8.14-beta.2

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/dist/cli.js CHANGED
@@ -378,7 +378,18 @@ var init_job_registry = __esm({
378
378
  { name: "minReviewScore", type: "number", defaultValue: 80 },
379
379
  { name: "branchPatterns", type: "string[]", defaultValue: [] },
380
380
  { name: "rebaseBeforeMerge", type: "boolean", defaultValue: true },
381
- { name: "maxPrsPerRun", type: "number", defaultValue: 0 }
381
+ { name: "maxPrsPerRun", type: "number", defaultValue: 0 },
382
+ {
383
+ name: "ciPolicy",
384
+ type: "enum",
385
+ enumValues: ["ci-only", "fallback-local", "ignore"],
386
+ defaultValue: "fallback-local"
387
+ },
388
+ {
389
+ name: "localCheckCommand",
390
+ type: "string",
391
+ defaultValue: "yarn install --frozen-lockfile && yarn verify && yarn test"
392
+ }
382
393
  ],
383
394
  defaultConfig: {
384
395
  enabled: false,
@@ -388,7 +399,9 @@ var init_job_registry = __esm({
388
399
  minReviewScore: 80,
389
400
  branchPatterns: [],
390
401
  rebaseBeforeMerge: true,
391
- maxPrsPerRun: 0
402
+ maxPrsPerRun: 0,
403
+ ciPolicy: "fallback-local",
404
+ localCheckCommand: "yarn install --frozen-lockfile && yarn verify && yarn test"
392
405
  }
393
406
  }
394
407
  ];
@@ -410,7 +423,7 @@ function resolveProviderBucketKey(provider, providerEnv) {
410
423
  return `claude-proxy:${baseUrl}`;
411
424
  }
412
425
  }
413
- var DEFAULT_DEFAULT_BRANCH, DEFAULT_PRD_DIR, DEFAULT_SUMMARY_WINDOW_HOURS, DEFAULT_MAX_RUNTIME, DEFAULT_REVIEWER_MAX_RUNTIME, DEFAULT_CRON_SCHEDULE, DEFAULT_REVIEWER_SCHEDULE, DEFAULT_CRON_SCHEDULE_OFFSET, DEFAULT_MAX_RETRIES, DEFAULT_REVIEWER_MAX_RETRIES, DEFAULT_REVIEWER_RETRY_DELAY, DEFAULT_REVIEWER_MAX_PRS_PER_RUN, DEFAULT_FEEDBACK, DEFAULT_BRANCH_PREFIX, DEFAULT_BRANCH_PATTERNS, DEFAULT_MIN_REVIEW_SCORE, DEFAULT_MAX_LOG_SIZE, DEFAULT_PROVIDER, DEFAULT_EXECUTOR_ENABLED, DEFAULT_REVIEWER_ENABLED, DEFAULT_PROVIDER_ENV, DEFAULT_FALLBACK_ON_RATE_LIMIT, DEFAULT_CLAUDE_MODEL, DEFAULT_PRIMARY_FALLBACK_MODEL, DEFAULT_SECONDARY_FALLBACK_MODEL, VALID_CLAUDE_MODELS, CLAUDE_MODEL_IDS, DEFAULT_NOTIFICATIONS, DEFAULT_PRD_PRIORITY, DEFAULT_SLICER_SCHEDULE, DEFAULT_SLICER_MAX_RUNTIME, DEFAULT_ROADMAP_SCANNER, DEFAULT_TEMPLATES_DIR, DEFAULT_BOARD_PROVIDER, DEFAULT_LOCAL_BOARD_INFO, DEFAULT_AUTO_MERGE, DEFAULT_AUTO_MERGE_METHOD, VALID_MERGE_METHODS, DEFAULT_QA_ENABLED, DEFAULT_QA_SCHEDULE, DEFAULT_QA_MAX_RUNTIME, DEFAULT_QA_ARTIFACTS, DEFAULT_QA_SKIP_LABEL, DEFAULT_QA_AUTO_INSTALL_PLAYWRIGHT, DEFAULT_QA_VALIDATED_LABEL, DEFAULT_QA, QA_LOG_NAME, DEFAULT_AUDIT_ENABLED, DEFAULT_AUDIT_SCHEDULE, DEFAULT_AUDIT_MAX_RUNTIME, DEFAULT_AUDIT_CREATE_ISSUES, DEFAULT_AUDIT_TARGET_COLUMN, DEFAULT_AUDIT, DEFAULT_ANALYTICS_ENABLED, DEFAULT_ANALYTICS_SCHEDULE, DEFAULT_ANALYTICS_MAX_RUNTIME, DEFAULT_ANALYTICS_LOOKBACK_DAYS, DEFAULT_ANALYTICS_TARGET_COLUMN, DEFAULT_ANALYTICS_PROMPT, DEFAULT_ANALYTICS, DEFAULT_PR_RESOLVER_ENABLED, DEFAULT_PR_RESOLVER_SCHEDULE, DEFAULT_PR_RESOLVER_MAX_RUNTIME, DEFAULT_PR_RESOLVER_MAX_PRS_PER_RUN, DEFAULT_PR_RESOLVER_PER_PR_TIMEOUT, DEFAULT_PR_RESOLVER_AI_CONFLICT_RESOLUTION, DEFAULT_PR_RESOLVER_AI_REVIEW_RESOLUTION, DEFAULT_PR_RESOLVER_READY_LABEL, DEFAULT_PR_RESOLVER, DEFAULT_MERGER_ENABLED, DEFAULT_MERGER_SCHEDULE, DEFAULT_MERGER_MAX_RUNTIME, DEFAULT_MERGER_MERGE_METHOD, DEFAULT_MERGER_MIN_REVIEW_SCORE, DEFAULT_MERGER_REBASE_BEFORE_MERGE, DEFAULT_MERGER_MAX_PRS_PER_RUN, DEFAULT_MERGER, MERGER_LOG_NAME, AUDIT_LOG_NAME, PLANNER_LOG_NAME, ANALYTICS_LOG_NAME, PR_RESOLVER_LOG_NAME, VALID_PROVIDERS, VALID_JOB_TYPES, DEFAULT_JOB_PROVIDERS, DEFAULT_PROVIDER_SCHEDULE_OVERRIDES, DEFAULT_WEBHOOK_TRIGGER_SECRET_ENV, DEFAULT_WEBHOOK_TRIGGER_MAX_SKEW_SECONDS, DEFAULT_WEBHOOK_TRIGGERS, BUILT_IN_PRESETS, BUILT_IN_PRESET_IDS, PROVIDER_COMMANDS, CONFIG_FILE_NAME, LOCK_FILE_PREFIX, LOG_DIR, CLAIM_FILE_EXTENSION, EXECUTOR_LOG_NAME, REVIEWER_LOG_NAME, EXECUTOR_LOG_FILE, REVIEWER_LOG_FILE, LOG_FILE_NAMES, GLOBAL_CONFIG_DIR, REGISTRY_FILE_NAME, HISTORY_FILE_NAME, PRD_STATES_FILE_NAME, STATE_DB_FILE_NAME, GLOBAL_NOTIFICATIONS_FILE_NAME, MAX_HISTORY_RECORDS_PER_PRD, DEFAULT_QUEUE_ENABLED, DEFAULT_QUEUE_MODE, DEFAULT_QUEUE_MAX_CONCURRENCY, DEFAULT_QUEUE_MAX_WAIT_TIME, DEFAULT_QUEUE_PRIORITY, DEFAULT_QUEUE, DEFAULT_SCHEDULING_PRIORITY;
426
+ var DEFAULT_DEFAULT_BRANCH, DEFAULT_PRD_DIR, DEFAULT_SUMMARY_WINDOW_HOURS, DEFAULT_MAX_RUNTIME, DEFAULT_REVIEWER_MAX_RUNTIME, DEFAULT_CRON_SCHEDULE, DEFAULT_REVIEWER_SCHEDULE, DEFAULT_CRON_SCHEDULE_OFFSET, DEFAULT_MAX_RETRIES, DEFAULT_REVIEWER_MAX_RETRIES, DEFAULT_REVIEWER_RETRY_DELAY, DEFAULT_REVIEWER_MAX_PRS_PER_RUN, DEFAULT_FEEDBACK, DEFAULT_BRANCH_PREFIX, DEFAULT_BRANCH_PATTERNS, DEFAULT_MIN_REVIEW_SCORE, DEFAULT_MAX_LOG_SIZE, DEFAULT_PROVIDER, DEFAULT_EXECUTOR_ENABLED, DEFAULT_REVIEWER_ENABLED, DEFAULT_PROVIDER_ENV, DEFAULT_FALLBACK_ON_RATE_LIMIT, DEFAULT_CLAUDE_MODEL, DEFAULT_PRIMARY_FALLBACK_MODEL, DEFAULT_SECONDARY_FALLBACK_MODEL, VALID_CLAUDE_MODELS, CLAUDE_MODEL_IDS, DEFAULT_NOTIFICATIONS, DEFAULT_PRD_PRIORITY, DEFAULT_SLICER_SCHEDULE, DEFAULT_SLICER_MAX_RUNTIME, DEFAULT_ROADMAP_SCANNER, DEFAULT_TEMPLATES_DIR, DEFAULT_BOARD_PROVIDER, DEFAULT_LOCAL_BOARD_INFO, DEFAULT_AUTO_MERGE, DEFAULT_AUTO_MERGE_METHOD, VALID_MERGE_METHODS, DEFAULT_QA_ENABLED, DEFAULT_QA_SCHEDULE, DEFAULT_QA_MAX_RUNTIME, DEFAULT_QA_ARTIFACTS, DEFAULT_QA_SKIP_LABEL, DEFAULT_QA_AUTO_INSTALL_PLAYWRIGHT, DEFAULT_QA_VALIDATED_LABEL, DEFAULT_QA, QA_LOG_NAME, DEFAULT_AUDIT_ENABLED, DEFAULT_AUDIT_SCHEDULE, DEFAULT_AUDIT_MAX_RUNTIME, DEFAULT_AUDIT_CREATE_ISSUES, DEFAULT_AUDIT_TARGET_COLUMN, DEFAULT_AUDIT, DEFAULT_ANALYTICS_ENABLED, DEFAULT_ANALYTICS_SCHEDULE, DEFAULT_ANALYTICS_MAX_RUNTIME, DEFAULT_ANALYTICS_LOOKBACK_DAYS, DEFAULT_ANALYTICS_TARGET_COLUMN, DEFAULT_ANALYTICS_PROMPT, DEFAULT_ANALYTICS, DEFAULT_PR_RESOLVER_ENABLED, DEFAULT_PR_RESOLVER_SCHEDULE, DEFAULT_PR_RESOLVER_MAX_RUNTIME, DEFAULT_PR_RESOLVER_MAX_PRS_PER_RUN, DEFAULT_PR_RESOLVER_PER_PR_TIMEOUT, DEFAULT_PR_RESOLVER_AI_CONFLICT_RESOLUTION, DEFAULT_PR_RESOLVER_AI_REVIEW_RESOLUTION, DEFAULT_PR_RESOLVER_READY_LABEL, DEFAULT_PR_RESOLVER, DEFAULT_MERGER_ENABLED, DEFAULT_MERGER_SCHEDULE, DEFAULT_MERGER_MAX_RUNTIME, DEFAULT_MERGER_MERGE_METHOD, DEFAULT_MERGER_MIN_REVIEW_SCORE, DEFAULT_MERGER_REBASE_BEFORE_MERGE, DEFAULT_MERGER_MAX_PRS_PER_RUN, DEFAULT_MERGER_CI_POLICY, DEFAULT_MERGER_LOCAL_CHECK_COMMAND, DEFAULT_MERGER, MERGER_LOG_NAME, AUDIT_LOG_NAME, PLANNER_LOG_NAME, ANALYTICS_LOG_NAME, PR_RESOLVER_LOG_NAME, VALID_PROVIDERS, VALID_JOB_TYPES, DEFAULT_JOB_PROVIDERS, DEFAULT_PROVIDER_SCHEDULE_OVERRIDES, DEFAULT_WEBHOOK_TRIGGER_SECRET_ENV, DEFAULT_WEBHOOK_TRIGGER_MAX_SKEW_SECONDS, DEFAULT_WEBHOOK_TRIGGERS, BUILT_IN_PRESETS, BUILT_IN_PRESET_IDS, PROVIDER_COMMANDS, CONFIG_FILE_NAME, LOCK_FILE_PREFIX, LOG_DIR, CLAIM_FILE_EXTENSION, EXECUTOR_LOG_NAME, REVIEWER_LOG_NAME, EXECUTOR_LOG_FILE, REVIEWER_LOG_FILE, LOG_FILE_NAMES, GLOBAL_CONFIG_DIR, REGISTRY_FILE_NAME, HISTORY_FILE_NAME, PRD_STATES_FILE_NAME, STATE_DB_FILE_NAME, GLOBAL_NOTIFICATIONS_FILE_NAME, MAX_HISTORY_RECORDS_PER_PRD, DEFAULT_QUEUE_ENABLED, DEFAULT_QUEUE_MODE, DEFAULT_QUEUE_MAX_CONCURRENCY, DEFAULT_QUEUE_MAX_WAIT_TIME, DEFAULT_QUEUE_PRIORITY, DEFAULT_QUEUE, DEFAULT_SCHEDULING_PRIORITY;
414
427
  var init_constants = __esm({
415
428
  "../core/dist/constants.js"() {
416
429
  "use strict";
@@ -547,6 +560,8 @@ If no issues are warranted, output an empty array: []`;
547
560
  DEFAULT_MERGER_MIN_REVIEW_SCORE = 80;
548
561
  DEFAULT_MERGER_REBASE_BEFORE_MERGE = true;
549
562
  DEFAULT_MERGER_MAX_PRS_PER_RUN = 0;
563
+ DEFAULT_MERGER_CI_POLICY = "fallback-local";
564
+ DEFAULT_MERGER_LOCAL_CHECK_COMMAND = "yarn install --frozen-lockfile && yarn verify && yarn test";
550
565
  DEFAULT_MERGER = {
551
566
  enabled: DEFAULT_MERGER_ENABLED,
552
567
  schedule: DEFAULT_MERGER_SCHEDULE,
@@ -555,7 +570,9 @@ If no issues are warranted, output an empty array: []`;
555
570
  minReviewScore: DEFAULT_MERGER_MIN_REVIEW_SCORE,
556
571
  branchPatterns: [],
557
572
  rebaseBeforeMerge: DEFAULT_MERGER_REBASE_BEFORE_MERGE,
558
- maxPrsPerRun: DEFAULT_MERGER_MAX_PRS_PER_RUN
573
+ maxPrsPerRun: DEFAULT_MERGER_MAX_PRS_PER_RUN,
574
+ ciPolicy: DEFAULT_MERGER_CI_POLICY,
575
+ localCheckCommand: DEFAULT_MERGER_LOCAL_CHECK_COMMAND
559
576
  };
560
577
  MERGER_LOG_NAME = "merger";
561
578
  AUDIT_LOG_NAME = "audit";
@@ -9776,7 +9793,9 @@ __export(dist_exports, {
9776
9793
  DEFAULT_MAX_RETRIES: () => DEFAULT_MAX_RETRIES,
9777
9794
  DEFAULT_MAX_RUNTIME: () => DEFAULT_MAX_RUNTIME,
9778
9795
  DEFAULT_MERGER: () => DEFAULT_MERGER,
9796
+ DEFAULT_MERGER_CI_POLICY: () => DEFAULT_MERGER_CI_POLICY,
9779
9797
  DEFAULT_MERGER_ENABLED: () => DEFAULT_MERGER_ENABLED,
9798
+ DEFAULT_MERGER_LOCAL_CHECK_COMMAND: () => DEFAULT_MERGER_LOCAL_CHECK_COMMAND,
9780
9799
  DEFAULT_MERGER_MAX_PRS_PER_RUN: () => DEFAULT_MERGER_MAX_PRS_PER_RUN,
9781
9800
  DEFAULT_MERGER_MAX_RUNTIME: () => DEFAULT_MERGER_MAX_RUNTIME,
9782
9801
  DEFAULT_MERGER_MERGE_METHOD: () => DEFAULT_MERGER_MERGE_METHOD,
@@ -20683,6 +20702,8 @@ function buildEnvVars7(config, options) {
20683
20702
  env.NW_MERGER_BRANCH_PATTERNS = (config.merger.branchPatterns.length > 0 ? config.merger.branchPatterns : config.branchPatterns).join(",");
20684
20703
  env.NW_MERGER_REBASE_BEFORE_MERGE = config.merger.rebaseBeforeMerge ? "1" : "0";
20685
20704
  env.NW_MERGER_MAX_PRS_PER_RUN = String(config.merger.maxPrsPerRun);
20705
+ env.NW_MERGER_CI_POLICY = config.merger.ciPolicy;
20706
+ env.NW_MERGER_LOCAL_CHECK_COMMAND = config.merger.localCheckCommand;
20686
20707
  return env;
20687
20708
  }
20688
20709
  function applyCliOverrides6(config, options) {
@@ -20728,6 +20749,8 @@ function printDryRun(config, envVars, scriptPath, projectDir) {
20728
20749
  "Max PRs Per Run",
20729
20750
  config.merger.maxPrsPerRun === 0 ? "Unlimited" : String(config.merger.maxPrsPerRun)
20730
20751
  ]);
20752
+ configTable.push(["CI Policy", config.merger.ciPolicy]);
20753
+ configTable.push(["Local Check Command", config.merger.localCheckCommand]);
20731
20754
  console.log(configTable.toString());
20732
20755
  header("Environment Variables");
20733
20756
  for (const [key, value] of Object.entries(envVars)) {
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EAalB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAgBnB;AAgED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4GnD"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EAalB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,iBAAiB,CAgBnB;AAkED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4GnD"}
@@ -18,6 +18,8 @@ export function buildEnvVars(config, options) {
18
18
  env.NW_MERGER_BRANCH_PATTERNS = (config.merger.branchPatterns.length > 0 ? config.merger.branchPatterns : config.branchPatterns).join(',');
19
19
  env.NW_MERGER_REBASE_BEFORE_MERGE = config.merger.rebaseBeforeMerge ? '1' : '0';
20
20
  env.NW_MERGER_MAX_PRS_PER_RUN = String(config.merger.maxPrsPerRun);
21
+ env.NW_MERGER_CI_POLICY = config.merger.ciPolicy;
22
+ env.NW_MERGER_LOCAL_CHECK_COMMAND = config.merger.localCheckCommand;
21
23
  return env;
22
24
  }
23
25
  /**
@@ -75,6 +77,8 @@ function printDryRun(config, envVars, scriptPath, projectDir) {
75
77
  'Max PRs Per Run',
76
78
  config.merger.maxPrsPerRun === 0 ? 'Unlimited' : String(config.merger.maxPrsPerRun),
77
79
  ]);
80
+ configTable.push(['CI Policy', config.merger.ciPolicy]);
81
+ configTable.push(['Local Check Command', config.merger.localCheckCommand]);
78
82
  console.log(configTable.toString());
79
83
  header('Environment Variables');
80
84
  for (const [key, value] of Object.entries(envVars)) {
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ set -euo pipefail
14
14
  # NW_MERGER_BRANCH_PATTERNS= - Comma-separated branch prefixes (empty = all)
15
15
  # NW_MERGER_REBASE_BEFORE_MERGE=1 - Set to 1 to rebase before merging
16
16
  # NW_MERGER_MAX_PRS_PER_RUN=0 - Max PRs to merge per run (0 = unlimited)
17
+ # NW_MERGER_CI_POLICY=fallback-local - CI gate: ci-only|fallback-local|ignore
18
+ # NW_MERGER_LOCAL_CHECK_COMMAND=... - Command run in temp PR worktree for local fallback
17
19
  # NW_MERGER_CI_MAX_WAIT=300 - Max seconds to wait for checks after rebase
18
20
  # NW_MERGER_CI_POLL_INTERVAL=15 - Seconds between check polls after rebase
19
21
  # NW_DRY_RUN=0 - Set to 1 for dry-run mode
@@ -30,6 +32,8 @@ REBASE_BEFORE_MERGE="${NW_MERGER_REBASE_BEFORE_MERGE:-1}"
30
32
  MAX_PRS_PER_RUN="${NW_MERGER_MAX_PRS_PER_RUN:-0}"
31
33
  CI_MAX_WAIT="${NW_MERGER_CI_MAX_WAIT:-300}"
32
34
  CI_POLL_INTERVAL="${NW_MERGER_CI_POLL_INTERVAL:-15}"
35
+ CI_POLICY="${NW_MERGER_CI_POLICY:-fallback-local}"
36
+ LOCAL_CHECK_COMMAND="${NW_MERGER_LOCAL_CHECK_COMMAND:-yarn install --frozen-lockfile && yarn verify && yarn test}"
33
37
  BRANCH_PATTERNS_RAW="${NW_MERGER_BRANCH_PATTERNS:-}"
34
38
  READY_TO_MERGE_LABEL="${NW_PR_RESOLVER_READY_LABEL:-ready-to-merge}"
35
39
  SCRIPT_START_TIME=$(date +%s)
@@ -55,6 +59,10 @@ case "${MERGE_METHOD}" in
55
59
  squash|merge|rebase) ;;
56
60
  *) MERGE_METHOD="squash" ;;
57
61
  esac
62
+ case "${CI_POLICY}" in
63
+ ci-only|fallback-local|ignore) ;;
64
+ *) CI_POLICY="fallback-local" ;;
65
+ esac
58
66
 
59
67
  mkdir -p "${LOG_DIR}"
60
68
 
@@ -261,6 +269,160 @@ wait_for_ci_passing_on_head() {
261
269
  [ "${LAST_CI_STATUS}" = "passing" ]
262
270
  }
263
271
 
272
+ find_existing_worktree_for_head() {
273
+ local pr_branch="${1}"
274
+ local expected_head="${2}"
275
+ local project_real=""
276
+ local worktree_path=""
277
+ local branch=""
278
+ local head=""
279
+
280
+ project_real=$(cd "${PROJECT_DIR}" && pwd -P 2>/dev/null || echo "${PROJECT_DIR}")
281
+
282
+ while IFS= read -r line; do
283
+ if [[ "${line}" == worktree\ * ]]; then
284
+ worktree_path="${line#worktree }"
285
+ branch=""
286
+ head=""
287
+ continue
288
+ fi
289
+ if [[ "${line}" == HEAD\ * ]]; then
290
+ head="${line#HEAD }"
291
+ continue
292
+ fi
293
+ if [[ "${line}" == branch\ * ]]; then
294
+ branch="${line#branch refs/heads/}"
295
+ if [ -n "${worktree_path}" ] \
296
+ && [ "${branch}" = "${pr_branch}" ] \
297
+ && [ "${head}" = "${expected_head}" ] \
298
+ && [ -d "${worktree_path}" ]; then
299
+ local worktree_real=""
300
+ worktree_real=$(cd "${worktree_path}" && pwd -P 2>/dev/null || echo "${worktree_path}")
301
+ if [ "${worktree_real}" = "${project_real}" ]; then
302
+ continue
303
+ fi
304
+ if git -C "${worktree_path}" diff --quiet >/dev/null 2>&1 \
305
+ && git -C "${worktree_path}" diff --cached --quiet >/dev/null 2>&1; then
306
+ printf "%s" "${worktree_path}"
307
+ return 0
308
+ fi
309
+ fi
310
+ fi
311
+ done < <(git worktree list --porcelain 2>/dev/null || true)
312
+
313
+ return 1
314
+ }
315
+
316
+ run_local_check_command_in_dir() {
317
+ local pr_number="${1}"
318
+ local expected_head="${2}"
319
+ local check_dir="${3}"
320
+ local check_exit=1
321
+
322
+ set +e
323
+ (
324
+ cd "${check_dir}"
325
+ bash -lc "${LOCAL_CHECK_COMMAND}"
326
+ ) 2>&1 | tee -a "${LOG_FILE}"
327
+ check_exit=${PIPESTATUS[0]}
328
+ set -e
329
+
330
+ if [ "${check_exit}" -eq 0 ]; then
331
+ log "INFO: PR #${pr_number}: Local checks passed for head ${expected_head}"
332
+ return 0
333
+ fi
334
+
335
+ log "INFO: PR #${pr_number}: Local checks failed for head ${expected_head} (exit ${check_exit})"
336
+ return 1
337
+ }
338
+
339
+ run_local_checks_for_head() {
340
+ local pr_number="${1}"
341
+ local pr_branch="${2}"
342
+ local expected_head="${3}"
343
+ local temp_parent=""
344
+ local worktree_dir=""
345
+ local existing_worktree_dir=""
346
+ local temp_ref=""
347
+
348
+ if [ -z "${LOCAL_CHECK_COMMAND}" ]; then
349
+ log "INFO: PR #${pr_number}: Local check command is empty, treating fallback as failed"
350
+ return 1
351
+ fi
352
+
353
+ if existing_worktree_dir=$(find_existing_worktree_for_head "${pr_branch}" "${expected_head}"); then
354
+ log "INFO: PR #${pr_number}: Reusing existing worktree for local checks: ${existing_worktree_dir}"
355
+ run_local_check_command_in_dir "${pr_number}" "${expected_head}" "${existing_worktree_dir}"
356
+ return $?
357
+ fi
358
+
359
+ temp_parent=$(mktemp -d "${TMPDIR:-/tmp}/night-watch-merger-${pr_number}.XXXXXX")
360
+ worktree_dir="${temp_parent}/worktree"
361
+ temp_ref="refs/night-watch/merger/${pr_number}-${expected_head}"
362
+
363
+ cleanup_local_check_worktree() {
364
+ git worktree remove --force "${worktree_dir}" >/dev/null 2>&1 || true
365
+ git update-ref -d "${temp_ref}" >/dev/null 2>&1 || true
366
+ rm -rf "${temp_parent}" >/dev/null 2>&1 || true
367
+ }
368
+
369
+ log "INFO: PR #${pr_number}: Running local checks for head ${expected_head}: ${LOCAL_CHECK_COMMAND}"
370
+
371
+ if ! git cat-file -e "${expected_head}^{commit}" >/dev/null 2>&1; then
372
+ log "INFO: PR #${pr_number}: Fetching PR head ${expected_head} for local checks"
373
+ git fetch --quiet --force origin "pull/${pr_number}/head:${temp_ref}" >/dev/null 2>&1 || {
374
+ log "INFO: PR #${pr_number}: Unable to fetch PR head for local checks"
375
+ cleanup_local_check_worktree
376
+ return 1
377
+ }
378
+ fi
379
+
380
+ if ! git worktree add --detach --quiet "${worktree_dir}" "${expected_head}" >/dev/null 2>&1; then
381
+ if ! git worktree add --detach --quiet "${worktree_dir}" "${temp_ref}" >/dev/null 2>&1; then
382
+ log "INFO: PR #${pr_number}: Unable to create local check worktree"
383
+ cleanup_local_check_worktree
384
+ return 1
385
+ fi
386
+ fi
387
+
388
+ run_local_check_command_in_dir "${pr_number}" "${expected_head}" "${worktree_dir}"
389
+ local check_result=$?
390
+
391
+ cleanup_local_check_worktree
392
+
393
+ return "${check_result}"
394
+ }
395
+
396
+ ci_gate_allows_head() {
397
+ local pr_number="${1}"
398
+ local pr_branch="${2}"
399
+ local expected_head="${3}"
400
+ local context="${4:-CI}"
401
+ local ci_status
402
+
403
+ if [ "${CI_POLICY}" = "ignore" ]; then
404
+ log "INFO: PR #${pr_number} (${pr_branch}): CI policy is ignore; skipping ${context} gate for head ${expected_head}"
405
+ return 0
406
+ fi
407
+
408
+ ci_status=$(ci_status_for_head "${pr_number}" "${expected_head}")
409
+ if [ "${ci_status}" = "passing" ]; then
410
+ return 0
411
+ fi
412
+
413
+ if [ "${CI_POLICY}" = "fallback-local" ]; then
414
+ log "INFO: PR #${pr_number} (${pr_branch}): ${context} not passing on head ${expected_head} (${ci_status}); trying local checks"
415
+ if run_local_checks_for_head "${pr_number}" "${pr_branch}" "${expected_head}"; then
416
+ return 0
417
+ fi
418
+ log "INFO: PR #${pr_number} (${pr_branch}): Local check fallback failed, skipping"
419
+ return 1
420
+ fi
421
+
422
+ log "INFO: PR #${pr_number} (${pr_branch}): ${context} not passing on head ${expected_head} (${ci_status}), skipping"
423
+ return 1
424
+ }
425
+
264
426
  # Rebase a PR against its base branch
265
427
  rebase_pr() {
266
428
  local pr_number="${1}"
@@ -308,7 +470,7 @@ cd "${PROJECT_DIR}"
308
470
 
309
471
  log "========================================"
310
472
  log "RUN-START: merger invoked project=${PROJECT_DIR} dry_run=${DRY_RUN}"
311
- log "CONFIG: merge_method=${MERGE_METHOD} min_review_score=${MIN_REVIEW_SCORE} rebase_before_merge=${REBASE_BEFORE_MERGE} max_prs=${MAX_PRS_PER_RUN} max_runtime=${MAX_RUNTIME}s ready_label=${READY_TO_MERGE_LABEL} branch_patterns=${BRANCH_PATTERNS_RAW:-<all>}"
473
+ log "CONFIG: merge_method=${MERGE_METHOD} min_review_score=${MIN_REVIEW_SCORE} rebase_before_merge=${REBASE_BEFORE_MERGE} max_prs=${MAX_PRS_PER_RUN} max_runtime=${MAX_RUNTIME}s ci_policy=${CI_POLICY} local_check_command=${LOCAL_CHECK_COMMAND} ready_label=${READY_TO_MERGE_LABEL} branch_patterns=${BRANCH_PATTERNS_RAW:-<all>}"
312
474
  log "========================================"
313
475
 
314
476
  if ! acquire_lock "${LOCK_FILE}"; then
@@ -391,10 +553,8 @@ while IFS= read -r pr_json; do
391
553
  continue
392
554
  fi
393
555
 
394
- # Check CI status
395
- ci_status=$(ci_status_for_head "${pr_number}" "${pr_head_oid}")
396
- if [ "${ci_status}" != "passing" ]; then
397
- log "INFO: PR #${pr_number} (${pr_branch}): CI not passing on head ${pr_head_oid} (${ci_status}), skipping"
556
+ # Check CI status, optionally falling back to local checks for provider/billing failures.
557
+ if ! ci_gate_allows_head "${pr_number}" "${pr_branch}" "${pr_head_oid}" "CI"; then
398
558
  continue
399
559
  fi
400
560
 
@@ -436,10 +596,22 @@ while IFS= read -r pr_json; do
436
596
  log "INFO: PR #${pr_number}: Head unchanged after rebase (${pr_head_after_rebase}); confirming CI"
437
597
  fi
438
598
 
439
- # Poll CI until all checks attached to the post-rebase head are complete and passing.
440
- if ! wait_for_ci_passing_on_head "${pr_number}" "${pr_head_after_rebase}"; then
441
- log "INFO: PR #${pr_number}: Fresh CI not passing on head ${pr_head_after_rebase} after rebase (${LAST_CI_STATUS}, waited ${CI_MAX_WAIT}s), skipping"
442
- continue
599
+ if [ "${CI_POLICY}" = "ignore" ]; then
600
+ log "INFO: PR #${pr_number}: CI policy is ignore; skipping fresh CI gate after rebase"
601
+ else
602
+ # Poll CI until all checks attached to the post-rebase head are complete and passing.
603
+ if ! wait_for_ci_passing_on_head "${pr_number}" "${pr_head_after_rebase}"; then
604
+ log "INFO: PR #${pr_number}: Fresh CI not passing on head ${pr_head_after_rebase} after rebase (${LAST_CI_STATUS}, waited ${CI_MAX_WAIT}s)"
605
+ if [ "${CI_POLICY}" = "fallback-local" ]; then
606
+ if ! run_local_checks_for_head "${pr_number}" "${pr_branch}" "${pr_head_after_rebase}"; then
607
+ log "INFO: PR #${pr_number}: Fresh local check fallback failed after rebase, skipping"
608
+ continue
609
+ fi
610
+ else
611
+ log "INFO: PR #${pr_number}: Skipping because CI policy requires GitHub CI"
612
+ continue
613
+ fi
614
+ fi
443
615
  fi
444
616
  fi
445
617