fix(ci): harden migration audit logging
All checks were successful
Code Review / ai-code-review (push) Successful in 11s

This commit is contained in:
Your Name
2026-05-07 10:32:41 +08:00
parent 32e8a045f4
commit 08097f4070
2 changed files with 47 additions and 3 deletions

View File

@@ -17,6 +17,7 @@ on:
branches: [main]
paths:
- 'apps/api/migrations/*.sql'
workflow_dispatch:
env:
TELEGRAM_ALERT_CHAT_ID: "-1003711974679"
@@ -116,10 +117,24 @@ jobs:
if: steps.diff.outputs.new_files != ''
env:
PGURL: ${{ secrets.MIGRATION_DATABASE_URL }}
OWNER_PGURL: ${{ secrets.DATABASE_URL }}
run: |
set -euo pipefail
if [ -z "$PGURL" ]; then
echo "::error::MIGRATION_DATABASE_URL secret not set in Gitea"
exit 1
fi
PGURL_PSQL="${PGURL/postgresql+asyncpg:\/\//postgresql:\/\/}"
OWNER_PGURL_PSQL="${OWNER_PGURL/postgresql+asyncpg:\/\//postgresql:\/\/}"
FILES_JSON=$(echo "${{ steps.diff.outputs.new_files }}" | jq -Rn '[inputs | select(length > 0)]')
psql "$PGURL_PSQL" -c "
seed_audit() {
local url="$1"
psql "$url" \
-v ON_ERROR_STOP=1 \
-v commit_sha="${{ github.sha }}" \
-v files_json="$FILES_JSON" \
-c "
INSERT INTO asset_discovery_run (
run_id, triggered_by, scope, scan_depth, status,
started_at, ended_at, tools_used, summary
@@ -134,11 +149,29 @@ jobs:
'{\"psql\": 1, \"gitea_ci\": 1}'::jsonb,
jsonb_build_object(
'type', 'ci_migration',
'commit_sha', '${{ github.sha }}',
'files', $FILES_JSON
'commit_sha', :'commit_sha',
'files', :'files_json'::jsonb
)
);
"
}
audit_err="$(mktemp)"
if ! seed_audit "$PGURL_PSQL" 2>"$audit_err"; then
if grep -q "permission denied for table asset_discovery_run" "$audit_err"; then
if [ -z "$OWNER_PGURL_PSQL" ]; then
cat "$audit_err" >&2
echo "::error::audit requires table insert privilege but DATABASE_URL secret is not set"
exit 1
fi
echo "::warning::audit requires owner connection; retrying with owner connection"
seed_audit "$OWNER_PGURL_PSQL"
else
cat "$audit_err" >&2
exit 1
fi
fi
rm -f "$audit_err"
- name: Notify Telegram (if configured)
if: always()

View File

@@ -5317,6 +5317,17 @@ transaction rollback insert violation_type='swap_over_threshold' 通過,不留
Log:
套用後近 3 分鐘未再看到 capacity_violation_event_type_valid /
capacity_violation_write_failed。
Gitea:
run-migration #1867 的 DDL 實際套用成功,但 audit step 失敗。
原因是 workflow 把 jq 產生的 JSON array 直接插入 SQLPostgreSQL 解析到 `[` 後報 syntax error。
手動補寫 asset_discovery_run 稽核記錄:
triggered_by=codex:gitea-migration-audit-repair
summary.type=ci_migration_manual_repair
後續修正:
.gitea/workflows/run-migration.yml 改為 psql 變數綁定 JSON / commit_sha
並在 asset_discovery_run 權限不足時使用 owner connection fallback。
```
**進度校準**