Files
iOSBuildServer/backend/models.py
T
shenleiandClaude Opus 5 5582aadc09 feat: 支持按 Tag 打包,分支管理可添加 Tag
- 分支管理新增「分支 / Tag」类型选择,Tag 存于 config["tags"],与分支不可重名
- 每个 Tag 与分支一样拥有同名独立版本轨道,默认上架轨
- 打包页按「分支」「Tag」分组选择;任务新增 ref_type 字段记录引用类型
- Tag 打包时 fetch --tags --force 后以游离 HEAD 检出 refs/tags/<tag>
- 历史记录与下载页按类型显示「分支」或「Tag」

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:59:18 +09:00

86 lines
2.7 KiB
Python

"""数据库模型"""
from datetime import datetime
from sqlalchemy import Column, String, Boolean, Text, TIMESTAMP
from .database import Base
class Task(Base):
"""打包任务表"""
__tablename__ = "tasks"
id = Column(String, primary_key=True)
app_id = Column(String, nullable=False)
app_name = Column(String, nullable=False)
build_type = Column(String, nullable=False)
scheme_id = Column(String, nullable=False)
scheme_name = Column(String, nullable=False)
obfuscation = Column(Boolean, default=False)
branch = Column(String, default="main") # 分支名或 Tag 名,由 ref_type 区分
ref_type = Column(String, default="branch") # branch/tag
# 状态
status = Column(String, default="pending") # pending/running/completed/failed/cancelled
current_step = Column(String)
# 时间
created_at = Column(TIMESTAMP, default=datetime.utcnow)
started_at = Column(TIMESTAMP)
completed_at = Column(TIMESTAMP)
# 同一 OSS 对象被后续成功打包覆盖时标记;默认历史列表不展示。
superseded_at = Column(TIMESTAMP)
# 产物
ipa_path = Column(String)
oss_url = Column(String)
dsym_path = Column(String)
dsym_url = Column(String)
obfuscation_maps_path = Column(String)
qr_code_path = Column(String)
build_dir = Column(String)
# 错误
error_message = Column(Text)
error_category = Column(String) # certificate/provisioning/compilation/dependency/git/config/build/unknown
# 配置快照
config_json = Column(Text)
class BuildConfig(Base):
"""打包配置表"""
__tablename__ = "build_config"
key = Column(String, primary_key=True)
value = Column(String)
updated_at = Column(TIMESTAMP, default=datetime.utcnow, onupdate=datetime.utcnow)
class User(Base):
"""用户表"""
__tablename__ = "users"
id = Column(String, primary_key=True)
username = Column(String, unique=True, nullable=False)
password_hash = Column(String, nullable=False)
is_admin = Column(Boolean, default=False)
created_at = Column(TIMESTAMP, default=datetime.utcnow)
class OperationLog(Base):
"""用户关键操作的审计与统计记录。"""
__tablename__ = "operation_logs"
id = Column(String, primary_key=True)
created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False)
username = Column(String, nullable=False)
is_admin = Column(Boolean, default=False, nullable=False)
action = Column(String, nullable=False)
task_id = Column(String)
app_id = Column(String)
app_name = Column(String)
resource_type = Column(String)
resource_name = Column(String)
detail_json = Column(Text)
client_ip = Column(String)
user_agent = Column(String)