fbf8844f25
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 3s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 2s
AI Code Review / AI Code Review (pull_request) Failing after 3s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Check push changed paths (push) Successful in 8s
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 46s
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Successful in 16s
CI/CD Pipeline / Build Staging API Image (push) Successful in 36s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 21s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m52s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 2s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m8s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 2m52s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m33s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m57s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 2m54s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 3m31s
CI/CD Pipeline / Integration Tests (push) Successful in 7m15s
CI/CD Pipeline / Validate - Style (push) Successful in 7m58s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 8m57s
CI/CD Pipeline / Unit Tests (push) Successful in 13m56s
CI/CD Pipeline / Validate - Security (push) Successful in 22m56s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Canary Release to Production (push) Has been skipped
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
59 lines
2.7 KiB
Python
59 lines
2.7 KiB
Python
"""add gpu_lipsync_tasks and gpu_workers tables for MuseTalk reverse-poll worker
|
|
|
|
Revision ID: 081_add_gpu_lipsync
|
|
Revises: 080_edit_plan_clips_atom_clip_id
|
|
Create Date: 2026-09-18
|
|
"""
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import op
|
|
|
|
revision = "081_add_gpu_lipsync"
|
|
down_revision = "080_edit_plan_clips_atom_clip_id"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# GPU Worker 注册表
|
|
op.create_table(
|
|
"gpu_workers",
|
|
sa.Column("worker_id", sa.String(100), primary_key=True),
|
|
sa.Column("hostname", sa.String(200), nullable=False, server_default=""),
|
|
sa.Column("gpu_name", sa.String(200), nullable=False, server_default=""),
|
|
sa.Column("free_vram_mb", sa.Integer(), nullable=False, server_default=sa.text("0")),
|
|
sa.Column("capabilities", sa.String(500), nullable=False, server_default=""),
|
|
sa.Column("last_heartbeat_at", sa.DateTime(), nullable=True, index=True),
|
|
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=sa.func.now()),
|
|
)
|
|
|
|
# GPU 口型同步任务表
|
|
op.create_table(
|
|
"gpu_lipsync_tasks",
|
|
sa.Column("id", sa.String(36), primary_key=True),
|
|
sa.Column("lipsync_job_id", sa.String(36), nullable=False, server_default="", index=True),
|
|
sa.Column("user_id", sa.String(36), nullable=False, server_default="", index=True),
|
|
sa.Column("project_id", sa.String(36), nullable=False, server_default="", index=True),
|
|
sa.Column("video_url", sa.Text(), nullable=False),
|
|
sa.Column("audio_url", sa.Text(), nullable=False),
|
|
sa.Column("result_url", sa.Text(), nullable=False, server_default=""),
|
|
sa.Column("result_duration", sa.Float(), nullable=False, server_default=sa.text("0.0")),
|
|
sa.Column("status", sa.String(20), nullable=False, server_default="pending", index=True),
|
|
sa.Column("worker_id", sa.String(100), nullable=False, server_default="", index=True),
|
|
sa.Column("attempt", sa.Integer(), nullable=False, server_default=sa.text("0")),
|
|
sa.Column("error_msg", sa.Text(), nullable=False, server_default=""),
|
|
sa.Column("created_at", sa.DateTime(), nullable=False, server_default=sa.func.now()),
|
|
sa.Column("started_at", sa.DateTime(), nullable=True),
|
|
sa.Column("finished_at", sa.DateTime(), nullable=True),
|
|
sa.Column("updated_at", sa.DateTime(), nullable=False, server_default=sa.func.now()),
|
|
sa.Column("last_heartbeat_at", sa.DateTime(), nullable=True),
|
|
)
|
|
op.create_index("ix_gpu_lipsync_status_created", "gpu_lipsync_tasks", ["status", "created_at"])
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("ix_gpu_lipsync_status_created", table_name="gpu_lipsync_tasks")
|
|
op.drop_table("gpu_lipsync_tasks")
|
|
op.drop_table("gpu_workers")
|