Skip to content

Release 與 Revision

兩個常被搞混的名詞:

ReleaseRevision
是什麼一組變更的凍結版本已實際施加到 DB 的變更紀錄
時機提早凍結,準備多環境推進執行成功產生
對象Project(含多個 DB)單一 Database
可改?凍結後內容不可改append-only
用途版本管理 / 多環境推進「這個 DB 已經到哪版」

Release

是什麼

把一個 project 在某時間點要推的所有變更打包,標上版本。之後可以:

  • 推到 staging → 驗證 → 推到 prod
  • 在不同環境追蹤「目前在哪版」
  • 回溯:歷史上哪個 release 改了什麼

結構

text
Release v1.4.0
 ├─ Migration 001: add idx_orders_user_id (DDL)
 ├─ Migration 002: backfill orders.region (DML)
 └─ Migration 003: drop deprecated column orders.legacy_id (DDL)

每個 migration 對應一段 SQL + 元資料。

生命週期

text
draft ──> published ──> archived
狀態含意
draft編輯中
published已凍結;內容不可改;可被各環境引用推進
archived已下線;不能再用於新 rollout

與 Plan / Issue / Rollout 的關係

一個 published Release 可被多個 Issue 引用:

text
Release v1.4.0 (published)

   ├─── Issue #501 (dev → done)
   ├─── Issue #502 (staging → done)
   └─── Issue #503 (prod → in approval)

每個 Issue 自帶完整審批流程,但 SQL 內容統一來自 Release

為何要 Release

痛點Release 怎麼解
同一變更在三個環境跑,每次都複製貼上凍結一次,引用多次
環境間版本不一致,沒人知道 prod 缺什麼Release ID 對映到每個 DB 的 revision
緊急 hotfix 之後忘記補回低環境Release 提供 reconcile 機制

不變式

  • Published 的 Release 內容不可改。要改 → 發新 Release(v1.4.1
  • Release 屬於 Project,不可跨 Project 引用
  • Release 的 migration 順序固定,依序套用

Revision

是什麼

「這個 DB 已經施加過哪些變更」的歷史紀錄。每執行成功一個 Task,就會在目標 DB 上產生一筆 Revision。

結構

每筆 Revision:

欄位說明
database哪個 DB
version對應的 Release version(如 v1.4.0-001
sheet真正執行的 SQL 內容(凍結快照)
applied_at套用時間
applied_by觸發者
task_run對應的 TaskRun

怎麼用

  • diff:對比兩個 DB 的 revision 差異 → 「staging 跑了什麼 prod 沒跑」
  • drift detection:DB 上實際 schema vs revision 應有 schema 不符 → 報警
  • 稽核:「2026-04 prod.orders 改了哪些 schema?」直接讀 revision

不變式

  • Revision append-only:永不更新、永不刪除
  • 若需要回滾,不是刪 revision,而是新增一筆反向 revision
  • Revision 與 task_run 一對一

一張圖看清楚

text
Project

 ├─ Releases (凍結的版本)
 │    ├─ v1.4.0  (published)
 │    │    ├─ Migration 001
 │    │    ├─ Migration 002
 │    │    └─ Migration 003
 │    └─ v1.4.1  (published)

 └─ Databases
      ├─ dev.orders     ── Revisions: [v1.4.0-001, v1.4.0-002, v1.4.0-003, v1.4.1-001]
      ├─ staging.orders ── Revisions: [v1.4.0-001, v1.4.0-002, v1.4.0-003]
      └─ prod.orders    ── Revisions: [v1.4.0-001, v1.4.0-002] ← 還沒推完

從這張圖可以一眼看出:prod.orders 落後 staging 兩個 migration、落後 dev 三個。

UI 上的位置

  • Release:Projects → <p> → Releases
  • Revision:Database 詳情頁的 Revisions tab

對應 store

  • 表:release(複合 PK (project, id))、revision
  • proto:argus.v1.Releaseargus.v1.Revision

相關

Argus — 公司內部資料庫變更審計平台