gabriel / musehub public
0024_drop_ci_tables.py python
137 lines 7.4 KB
Raw
sha256:a10adeeb7a0169cb9900f9806ed7a973047258abb6283724fe55e8eb68ff3f0a init: musehub initial commit Human 171 days ago
1 """Drop CI tables — CI is a pro-tier feature removed before launch.
2
3 Tables dropped:
4 musehub_ci_test_mappings
5 musehub_ci_steps
6 musehub_ci_jobs
7 musehub_ci_runs
8 musehub_ci_secrets
9
10 Column dropped:
11 musehub_repos.ci_gate_config
12
13 Revision ID: 0024
14 Revises: 0023
15 """
16 from __future__ import annotations
17
18 import sqlalchemy as sa
19 from alembic import op
20
21 revision = "0024"
22 down_revision = "0023"
23 branch_labels = None
24 depends_on = None
25
26
27 def upgrade() -> None:
28 op.drop_column("musehub_repos", "ci_gate_config")
29 op.drop_table("musehub_ci_test_mappings")
30 op.drop_table("musehub_ci_steps")
31 op.drop_table("musehub_ci_jobs")
32 op.drop_table("musehub_ci_runs")
33 op.drop_table("musehub_ci_secrets")
34
35
36 def downgrade() -> None:
37 # Restore ci_gate_config on repos
38 op.add_column(
39 "musehub_repos",
40 sa.Column("ci_gate_config", sa.JSON(), nullable=False, server_default="{}"),
41 )
42
43 # Recreate musehub_ci_runs (includes gate_results added by 0012).
44 # proposal FK omitted — the original FK referenced musehub_pull_requests which was
45 # renamed to musehub_proposals in 0011; omitting avoids name ambiguity.
46 op.create_table(
47 "musehub_ci_runs",
48 sa.Column("run_id", sa.String(36), primary_key=True),
49 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
50 sa.Column("commit_id", sa.String(255), nullable=False),
51 sa.Column("branch", sa.String(255), nullable=False),
52 sa.Column("pr_id", sa.String(36), nullable=True),
53 sa.Column("trigger", sa.String(20), nullable=False, server_default="push"),
54 sa.Column("workflow_name", sa.String(255), nullable=False, server_default="CI"),
55 sa.Column("workflow_object_id", sa.String(255), nullable=True),
56 sa.Column("status", sa.String(20), nullable=False, server_default="pending"),
57 sa.Column("changed_symbols", sa.JSON, nullable=False, server_default="[]"),
58 sa.Column("triggered_by", sa.String(255), nullable=False, server_default="system"),
59 sa.Column("gate_results", sa.JSON(), nullable=False, server_default="{}"),
60 sa.Column("started_at", sa.DateTime(timezone=True), nullable=True),
61 sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True),
62 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
63 )
64 op.create_index("ix_musehub_ci_runs_repo_id", "musehub_ci_runs", ["repo_id"])
65 op.create_index("ix_musehub_ci_runs_repo_status", "musehub_ci_runs", ["repo_id", "status"])
66 op.create_index("ix_musehub_ci_runs_commit_id", "musehub_ci_runs", ["commit_id"])
67 op.create_index("ix_musehub_ci_runs_pr_id", "musehub_ci_runs", ["pr_id"])
68 op.create_index("ix_musehub_ci_runs_status", "musehub_ci_runs", ["status"])
69 op.create_index("ix_musehub_ci_runs_created_at", "musehub_ci_runs", ["created_at"])
70
71 op.create_table(
72 "musehub_ci_jobs",
73 sa.Column("job_id", sa.String(36), primary_key=True),
74 sa.Column("run_id", sa.String(36), sa.ForeignKey("musehub_ci_runs.run_id", ondelete="CASCADE"), nullable=False),
75 sa.Column("key", sa.String(255), nullable=False),
76 sa.Column("name", sa.String(500), nullable=False),
77 sa.Column("container_image", sa.String(500), nullable=False, server_default="python:3.14-slim"),
78 sa.Column("needs", sa.JSON, nullable=False, server_default="[]"),
79 sa.Column("condition", sa.Text, nullable=False, server_default=""),
80 sa.Column("env_vars", sa.JSON, nullable=False, server_default="{}"),
81 sa.Column("status", sa.String(20), nullable=False, server_default="pending"),
82 sa.Column("exit_code", sa.Integer, nullable=True),
83 sa.Column("runner_id", sa.String(255), nullable=True),
84 sa.Column("started_at", sa.DateTime(timezone=True), nullable=True),
85 sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True),
86 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
87 )
88 op.create_index("ix_musehub_ci_jobs_run_id", "musehub_ci_jobs", ["run_id"])
89 op.create_index("ix_musehub_ci_jobs_status", "musehub_ci_jobs", ["status"])
90
91 op.create_table(
92 "musehub_ci_steps",
93 sa.Column("step_id", sa.String(36), primary_key=True),
94 sa.Column("job_id", sa.String(36), sa.ForeignKey("musehub_ci_jobs.job_id", ondelete="CASCADE"), nullable=False),
95 sa.Column("order", sa.Integer, nullable=False, server_default="0"),
96 sa.Column("name", sa.String(500), nullable=False, server_default=""),
97 sa.Column("run_cmd", sa.Text, nullable=False),
98 sa.Column("status", sa.String(20), nullable=False, server_default="pending"),
99 sa.Column("log_output", sa.Text, nullable=False, server_default=""),
100 sa.Column("exit_code", sa.Integer, nullable=True),
101 sa.Column("started_at", sa.DateTime(timezone=True), nullable=True),
102 sa.Column("completed_at", sa.DateTime(timezone=True), nullable=True),
103 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
104 )
105 op.create_index("ix_musehub_ci_steps_job_id", "musehub_ci_steps", ["job_id"])
106 op.create_index("ix_musehub_ci_steps_status", "musehub_ci_steps", ["status"])
107
108 op.create_table(
109 "musehub_ci_secrets",
110 sa.Column("secret_id", sa.String(36), primary_key=True),
111 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
112 sa.Column("name", sa.String(255), nullable=False),
113 sa.Column("encrypted_value", sa.Text, nullable=False),
114 sa.Column("description", sa.String(500), nullable=False, server_default=""),
115 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
116 sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
117 sa.UniqueConstraint("repo_id", "name", name="uq_musehub_ci_secrets_repo_name"),
118 )
119 op.create_index("ix_musehub_ci_secrets_repo_id", "musehub_ci_secrets", ["repo_id"])
120
121 op.create_table(
122 "musehub_ci_test_mappings",
123 sa.Column("mapping_id", sa.String(36), primary_key=True),
124 sa.Column("run_id", sa.String(36), sa.ForeignKey("musehub_ci_runs.run_id", ondelete="CASCADE"), nullable=False, unique=True),
125 sa.Column("repo_id", sa.String(36), sa.ForeignKey("musehub_repos.repo_id", ondelete="CASCADE"), nullable=False),
126 sa.Column("commit_id", sa.String(255), nullable=False),
127 sa.Column("changed_symbols", sa.JSON(), nullable=False, server_default="[]"),
128 sa.Column("selected_tests", sa.JSON(), nullable=False, server_default="[]"),
129 sa.Column("covered_addresses", sa.JSON(), nullable=False, server_default="[]"),
130 sa.Column("uncovered_addresses", sa.JSON(), nullable=False, server_default="[]"),
131 sa.Column("coverage_fraction", sa.Float(), nullable=False, server_default="0.0"),
132 sa.Column("selected_count", sa.Integer(), nullable=False, server_default="0"),
133 sa.Column("total_estimated", sa.Integer(), nullable=False, server_default="0"),
134 sa.Column("created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("NOW()")),
135 )
136 op.create_index("ix_musehub_ci_test_mappings_run_id", "musehub_ci_test_mappings", ["run_id"])
137 op.create_index("ix_musehub_ci_test_mappings_repo_id", "musehub_ci_test_mappings", ["repo_id"])
File History 1 commit
sha256:a10adeeb7a0169cb9900f9806ed7a973047258abb6283724fe55e8eb68ff3f0a init: musehub initial commit Human 171 days ago