@jonit-dev/night-watch-cli 1.8.14-beta.0 → 1.8.14-beta.1
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 +27 -4
- package/dist/commands/merge.d.ts.map +1 -1
- package/dist/commands/merge.js +4 -0
- package/dist/commands/merge.js.map +1 -1
- package/dist/scripts/night-watch-merger-cron.sh +118 -9
- package/dist/web/assets/index-6Yf-Q6Di.js +442 -0
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
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,
|
|
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"}
|
package/dist/commands/merge.js
CHANGED
|
@@ -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":"AAAA;;GAEG;AAGH,OAAO,EAEL,aAAa,EACb,WAAW,EACX,GAAG,EACH,uBAAuB,EACvB,aAAa,EACb,MAAM,EACN,IAAI,EACJ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,IAAI,OAAO,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAW7B;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAyB,EACzB,OAAsB;IAEtB,mDAAmD;IACnD,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/D,kDAAkD;IAClD,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,GAAG,CAAC,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;IACvD,GAAG,CAAC,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACtE,GAAG,CAAC,yBAAyB,GAAG,CAC9B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAC/F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChF,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAEL,aAAa,EACb,WAAW,EACX,GAAG,EACH,uBAAuB,EACvB,aAAa,EACb,MAAM,EACN,IAAI,EACJ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,IAAI,OAAO,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAW7B;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAyB,EACzB,OAAsB;IAEtB,mDAAmD;IACnD,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/D,kDAAkD;IAClD,GAAG,CAAC,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,GAAG,CAAC,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;IACvD,GAAG,CAAC,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACtE,GAAG,CAAC,yBAAyB,GAAG,CAC9B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAC/F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChF,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACnE,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IACjD,GAAG,CAAC,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAEpE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,EACzB,OAAsB;IAEtB,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IAE/D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACpB,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,iFAAiF;QACjF,UAAU,CAAC,oBAAoB,GAAG,OAAO,CAAC,QAAyC,CAAC;IACtF,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CACpC,QAAgB,EAChB,WAAmB,EACnB,WAAmB;IAEnB,IAAI,QAAQ,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,MAAyB,EACzB,OAA+B,EAC/B,UAAkB,EAClB,UAAkB;IAElB,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAEtC,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE5D,MAAM,CAAC,eAAe,CAAC,CAAC;IACxB,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAChE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;IAC/C,WAAW,CAAC,IAAI,CAAC;QACf,aAAa;QACb,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,MAAM;KACjF,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC;IAC9E,WAAW,CAAC,IAAI,CAAC;QACf,iBAAiB;QACjB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,CAAC,CAAC,aAAa;KAClB,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,WAAW,CAAC,IAAI,CAAC;QACf,iBAAiB;QACjB,MAAM,CAAC,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;KACpF,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,WAAW,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEpC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,CAAC;IAClB,GAAG,CAAC,UAAU,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;SAClE,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;SACrD,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAsB,EAAE,EAAE;QACvC,wDAAwD;QACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEjC,wCAAwC;QACxC,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,2BAA2B;QAC3B,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,8BAA8B;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,sBAAsB;QACtB,MAAM,UAAU,GAAG,aAAa,CAAC,4BAA4B,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,aAAa,CAAC,+BAA+B,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAClE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAChE,UAAU,EACV,CAAC,UAAU,CAAC,EACZ,OAAO,CACR,CAAC;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YAE/D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,YAAY,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACtC,OAAO,CAAC,OAAO,CAAC,8DAA8D,CAAC,CAAC;gBAClF,CAAC;qBAAM,IAAI,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,OAAO,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,qCAAqC;YACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAEpE,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAE5F,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,gBAAgB,CAAC;wBACf,MAAM;wBACN,QAAQ;wBACR,UAAU;wBACV,OAAO,EAAE,QAAQ;wBACjB,QAAQ,EAAE;4BACR,WAAW;4BACX,WAAW;4BACX,eAAe,EAAE,OAAO,CAAC,eAAe;4BACxC,aAAa,EAAE,OAAO,CAAC,iBAAiB;yBACzC;wBACD,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;wBAC5C,UAAU;wBACV,WAAW,EAAE,OAAO,CAAC,eAAe,IAAI,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC;wBAC5E,YAAY;wBACZ,SAAS;wBACT,MAAM;wBACN,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,6DAA6D;gBAC/D,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,iBAAiB,CAAC,MAAM,EAAE;oBAC9B,KAAK,EAAE,iBAAiB;oBACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACtC,QAAQ;oBACR,QAAQ,EAAE,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,iBAAiB,CAAC;iBACpF,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -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,97 @@ wait_for_ci_passing_on_head() {
|
|
|
261
269
|
[ "${LAST_CI_STATUS}" = "passing" ]
|
|
262
270
|
}
|
|
263
271
|
|
|
272
|
+
run_local_checks_for_head() {
|
|
273
|
+
local pr_number="${1}"
|
|
274
|
+
local expected_head="${2}"
|
|
275
|
+
local temp_parent=""
|
|
276
|
+
local worktree_dir=""
|
|
277
|
+
local temp_ref=""
|
|
278
|
+
local check_exit=1
|
|
279
|
+
|
|
280
|
+
if [ -z "${LOCAL_CHECK_COMMAND}" ]; then
|
|
281
|
+
log "INFO: PR #${pr_number}: Local check command is empty, treating fallback as failed"
|
|
282
|
+
return 1
|
|
283
|
+
fi
|
|
284
|
+
|
|
285
|
+
temp_parent=$(mktemp -d "${TMPDIR:-/tmp}/night-watch-merger-${pr_number}.XXXXXX")
|
|
286
|
+
worktree_dir="${temp_parent}/worktree"
|
|
287
|
+
temp_ref="refs/night-watch/merger/${pr_number}-${expected_head}"
|
|
288
|
+
|
|
289
|
+
cleanup_local_check_worktree() {
|
|
290
|
+
git worktree remove --force "${worktree_dir}" >/dev/null 2>&1 || true
|
|
291
|
+
git update-ref -d "${temp_ref}" >/dev/null 2>&1 || true
|
|
292
|
+
rm -rf "${temp_parent}" >/dev/null 2>&1 || true
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
log "INFO: PR #${pr_number}: Running local checks for head ${expected_head}: ${LOCAL_CHECK_COMMAND}"
|
|
296
|
+
|
|
297
|
+
if ! git cat-file -e "${expected_head}^{commit}" >/dev/null 2>&1; then
|
|
298
|
+
log "INFO: PR #${pr_number}: Fetching PR head ${expected_head} for local checks"
|
|
299
|
+
git fetch --quiet --force origin "pull/${pr_number}/head:${temp_ref}" >/dev/null 2>&1 || {
|
|
300
|
+
log "INFO: PR #${pr_number}: Unable to fetch PR head for local checks"
|
|
301
|
+
cleanup_local_check_worktree
|
|
302
|
+
return 1
|
|
303
|
+
}
|
|
304
|
+
fi
|
|
305
|
+
|
|
306
|
+
if ! git worktree add --detach --quiet "${worktree_dir}" "${expected_head}" >/dev/null 2>&1; then
|
|
307
|
+
if ! git worktree add --detach --quiet "${worktree_dir}" "${temp_ref}" >/dev/null 2>&1; then
|
|
308
|
+
log "INFO: PR #${pr_number}: Unable to create local check worktree"
|
|
309
|
+
cleanup_local_check_worktree
|
|
310
|
+
return 1
|
|
311
|
+
fi
|
|
312
|
+
fi
|
|
313
|
+
|
|
314
|
+
set +e
|
|
315
|
+
(
|
|
316
|
+
cd "${worktree_dir}"
|
|
317
|
+
bash -lc "${LOCAL_CHECK_COMMAND}"
|
|
318
|
+
) 2>&1 | tee -a "${LOG_FILE}"
|
|
319
|
+
check_exit=${PIPESTATUS[0]}
|
|
320
|
+
set -e
|
|
321
|
+
|
|
322
|
+
cleanup_local_check_worktree
|
|
323
|
+
|
|
324
|
+
if [ "${check_exit}" -eq 0 ]; then
|
|
325
|
+
log "INFO: PR #${pr_number}: Local checks passed for head ${expected_head}"
|
|
326
|
+
return 0
|
|
327
|
+
fi
|
|
328
|
+
|
|
329
|
+
log "INFO: PR #${pr_number}: Local checks failed for head ${expected_head} (exit ${check_exit})"
|
|
330
|
+
return 1
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
ci_gate_allows_head() {
|
|
334
|
+
local pr_number="${1}"
|
|
335
|
+
local pr_branch="${2}"
|
|
336
|
+
local expected_head="${3}"
|
|
337
|
+
local context="${4:-CI}"
|
|
338
|
+
local ci_status
|
|
339
|
+
|
|
340
|
+
if [ "${CI_POLICY}" = "ignore" ]; then
|
|
341
|
+
log "INFO: PR #${pr_number} (${pr_branch}): CI policy is ignore; skipping ${context} gate for head ${expected_head}"
|
|
342
|
+
return 0
|
|
343
|
+
fi
|
|
344
|
+
|
|
345
|
+
ci_status=$(ci_status_for_head "${pr_number}" "${expected_head}")
|
|
346
|
+
if [ "${ci_status}" = "passing" ]; then
|
|
347
|
+
return 0
|
|
348
|
+
fi
|
|
349
|
+
|
|
350
|
+
if [ "${CI_POLICY}" = "fallback-local" ]; then
|
|
351
|
+
log "INFO: PR #${pr_number} (${pr_branch}): ${context} not passing on head ${expected_head} (${ci_status}); trying local checks"
|
|
352
|
+
if run_local_checks_for_head "${pr_number}" "${expected_head}"; then
|
|
353
|
+
return 0
|
|
354
|
+
fi
|
|
355
|
+
log "INFO: PR #${pr_number} (${pr_branch}): Local check fallback failed, skipping"
|
|
356
|
+
return 1
|
|
357
|
+
fi
|
|
358
|
+
|
|
359
|
+
log "INFO: PR #${pr_number} (${pr_branch}): ${context} not passing on head ${expected_head} (${ci_status}), skipping"
|
|
360
|
+
return 1
|
|
361
|
+
}
|
|
362
|
+
|
|
264
363
|
# Rebase a PR against its base branch
|
|
265
364
|
rebase_pr() {
|
|
266
365
|
local pr_number="${1}"
|
|
@@ -308,7 +407,7 @@ cd "${PROJECT_DIR}"
|
|
|
308
407
|
|
|
309
408
|
log "========================================"
|
|
310
409
|
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>}"
|
|
410
|
+
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
411
|
log "========================================"
|
|
313
412
|
|
|
314
413
|
if ! acquire_lock "${LOCK_FILE}"; then
|
|
@@ -391,10 +490,8 @@ while IFS= read -r pr_json; do
|
|
|
391
490
|
continue
|
|
392
491
|
fi
|
|
393
492
|
|
|
394
|
-
# Check CI status
|
|
395
|
-
|
|
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"
|
|
493
|
+
# Check CI status, optionally falling back to local checks for provider/billing failures.
|
|
494
|
+
if ! ci_gate_allows_head "${pr_number}" "${pr_branch}" "${pr_head_oid}" "CI"; then
|
|
398
495
|
continue
|
|
399
496
|
fi
|
|
400
497
|
|
|
@@ -436,10 +533,22 @@ while IFS= read -r pr_json; do
|
|
|
436
533
|
log "INFO: PR #${pr_number}: Head unchanged after rebase (${pr_head_after_rebase}); confirming CI"
|
|
437
534
|
fi
|
|
438
535
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
536
|
+
if [ "${CI_POLICY}" = "ignore" ]; then
|
|
537
|
+
log "INFO: PR #${pr_number}: CI policy is ignore; skipping fresh CI gate after rebase"
|
|
538
|
+
else
|
|
539
|
+
# Poll CI until all checks attached to the post-rebase head are complete and passing.
|
|
540
|
+
if ! wait_for_ci_passing_on_head "${pr_number}" "${pr_head_after_rebase}"; then
|
|
541
|
+
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)"
|
|
542
|
+
if [ "${CI_POLICY}" = "fallback-local" ]; then
|
|
543
|
+
if ! run_local_checks_for_head "${pr_number}" "${pr_head_after_rebase}"; then
|
|
544
|
+
log "INFO: PR #${pr_number}: Fresh local check fallback failed after rebase, skipping"
|
|
545
|
+
continue
|
|
546
|
+
fi
|
|
547
|
+
else
|
|
548
|
+
log "INFO: PR #${pr_number}: Skipping because CI policy requires GitHub CI"
|
|
549
|
+
continue
|
|
550
|
+
fi
|
|
551
|
+
fi
|
|
443
552
|
fi
|
|
444
553
|
fi
|
|
445
554
|
|