fix. harden Go review flow
ci / test (pull_request) Successful in 21s
ci / publish (pull_request) Has been skipped

Fix runner bootstrap and auth handling, preserve queued SHAs, make event/job acceptance atomic, fence stale runs, correct retries and prompts, add fake end-to-end coverage, and fix deployment defaults.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Space-Banane
2026-07-12 22:20:48 +02:00
parent f19b271642
commit 85c0e735dc
19 changed files with 539 additions and 142 deletions
+57 -3
View File
@@ -1,3 +1,57 @@
-- The Go migrator creates this logical schema with dialect-specific SQL.
-- This file documents the compatibility baseline: webhook_events, review_jobs,
-- review_runs, and bot_comments with the constraints described in README.md.
-- MariaDB baseline schema. The Go startup migrator emits equivalent SQLite SQL.
CREATE TABLE IF NOT EXISTS webhook_events (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
delivery_id VARCHAR(255) NULL UNIQUE,
event_name VARCHAR(128) NOT NULL,
repo VARCHAR(255) NOT NULL,
comment_id BIGINT NULL,
payload_sha256 VARCHAR(64) NOT NULL,
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
UNIQUE KEY uq_webhook_events_repo_comment (repo, comment_id)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS review_jobs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
repo VARCHAR(255) NOT NULL,
pr_number INT NOT NULL,
head_sha VARCHAR(64) NOT NULL,
trigger_comment_id BIGINT NOT NULL,
command VARCHAR(64) NOT NULL,
command_args TEXT NULL,
requested_by VARCHAR(255) NOT NULL,
status VARCHAR(32) NOT NULL,
last_error TEXT NULL,
result_json JSON NULL,
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
started_at DATETIME(6) NULL,
finished_at DATETIME(6) NULL,
UNIQUE KEY uq_review_jobs_repo_trigger_comment (repo, trigger_comment_id),
KEY ix_review_jobs_lookup (repo, pr_number, head_sha, status, created_at)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS review_runs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
job_id BIGINT NOT NULL,
status VARCHAR(32) NOT NULL,
runner_container_id VARCHAR(128) NULL,
result_json JSON NULL,
error_message TEXT NULL,
started_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
finished_at DATETIME(6) NULL,
CONSTRAINT fk_review_runs_job FOREIGN KEY (job_id) REFERENCES review_jobs(id) ON DELETE CASCADE,
KEY ix_review_runs_job_status (job_id, status)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS bot_comments (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
repo VARCHAR(255) NOT NULL,
pr_number INT NOT NULL,
head_sha VARCHAR(64) NOT NULL,
gitea_comment_id BIGINT NOT NULL,
marker VARCHAR(255) NOT NULL,
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
UNIQUE KEY uq_bot_comments_marker (repo, pr_number, marker),
KEY ix_bot_comments_repo_pr (repo, pr_number)
) ENGINE=InnoDB;