You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: dojo/db_migrations/0264_cicd_infrastructure.py
+60-1Lines changed: 60 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,8 @@
2
2
3
3
fromdjango.dbimportmigrations, models
4
4
importdjango.db.models.deletion
5
+
importpgtrigger.compiler
6
+
importpgtrigger.migrations
5
7
6
8
logger=logging.getLogger(__name__)
7
9
@@ -115,7 +117,20 @@ class Migration(migrations.Migration):
115
117
migrate_tool_configs_to_cicd_infrastructure,
116
118
reverse_code=migrations.RunPython.noop,
117
119
),
118
-
# Step 4: Remove old FK fields from Engagement
120
+
# Step 4: Remove old pgtrigger triggers (they reference old column names)
121
+
pgtrigger.migrations.RemoveTrigger(
122
+
model_name='engagement',
123
+
name='insert_insert',
124
+
),
125
+
pgtrigger.migrations.RemoveTrigger(
126
+
model_name='engagement',
127
+
name='update_update',
128
+
),
129
+
pgtrigger.migrations.RemoveTrigger(
130
+
model_name='engagement',
131
+
name='delete_delete',
132
+
),
133
+
# Step 5: Remove old FK fields from Engagement
119
134
migrations.RemoveField(
120
135
model_name="engagement",
121
136
name="build_server",
@@ -128,4 +143,48 @@ class Migration(migrations.Migration):
128
143
model_name="engagement",
129
144
name="orchestration_engine",
130
145
),
146
+
# Step 6: Update pghistory event table FK fields to point to CICDInfrastructure
147
+
migrations.RenameField(
148
+
model_name="engagementevent",
149
+
old_name="build_server",
150
+
new_name="cicd_build_server",
151
+
),
152
+
migrations.RenameField(
153
+
model_name="engagementevent",
154
+
old_name="source_code_management_server",
155
+
new_name="cicd_scm_server",
156
+
),
157
+
migrations.RenameField(
158
+
model_name="engagementevent",
159
+
old_name="orchestration_engine",
160
+
new_name="cicd_orchestration_engine",
161
+
),
162
+
migrations.AlterField(
163
+
model_name='engagementevent',
164
+
name='cicd_build_server',
165
+
field=models.ForeignKey(blank=True, db_constraint=False, db_index=False, help_text='Build server used for this CI/CD engagement', limit_choices_to={'infrastructure_type': 'build_server'}, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', related_query_name='+', to='dojo.cicdinfrastructure', verbose_name='Build Server'),
166
+
),
167
+
migrations.AlterField(
168
+
model_name='engagementevent',
169
+
name='cicd_orchestration_engine',
170
+
field=models.ForeignKey(blank=True, db_constraint=False, db_index=False, help_text='Orchestration engine used for this CI/CD engagement', limit_choices_to={'infrastructure_type': 'orchestration'}, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', related_query_name='+', to='dojo.cicdinfrastructure', verbose_name='Orchestration Engine'),
171
+
),
172
+
migrations.AlterField(
173
+
model_name='engagementevent',
174
+
name='cicd_scm_server',
175
+
field=models.ForeignKey(blank=True, db_constraint=False, db_index=False, help_text='Source code management server used for this CI/CD engagement', limit_choices_to={'infrastructure_type': 'scm_server'}, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', related_query_name='+', to='dojo.cicdinfrastructure', verbose_name='SCM Server'),
176
+
),
177
+
# Step 7: Re-create pgtrigger triggers with new column names
trigger=pgtrigger.compiler.Trigger(name='update_update', sql=pgtrigger.compiler.UpsertTriggerSql(condition='WHEN (OLD."active" IS DISTINCT FROM (NEW."active") OR OLD."api_test" IS DISTINCT FROM (NEW."api_test") OR OLD."branch_tag" IS DISTINCT FROM (NEW."branch_tag") OR OLD."build_id" IS DISTINCT FROM (NEW."build_id") OR OLD."check_list" IS DISTINCT FROM (NEW."check_list") OR OLD."cicd_build_server_id" IS DISTINCT FROM (NEW."cicd_build_server_id") OR OLD."cicd_orchestration_engine_id" IS DISTINCT FROM (NEW."cicd_orchestration_engine_id") OR OLD."cicd_scm_server_id" IS DISTINCT FROM (NEW."cicd_scm_server_id") OR OLD."commit_hash" IS DISTINCT FROM (NEW."commit_hash") OR OLD."deduplication_on_engagement" IS DISTINCT FROM (NEW."deduplication_on_engagement") OR OLD."description" IS DISTINCT FROM (NEW."description") OR OLD."done_testing" IS DISTINCT FROM (NEW."done_testing") OR OLD."engagement_type" IS DISTINCT FROM (NEW."engagement_type") OR OLD."first_contacted" IS DISTINCT FROM (NEW."first_contacted") OR OLD."id" IS DISTINCT FROM (NEW."id") OR OLD."lead_id" IS DISTINCT FROM (NEW."lead_id") OR OLD."name" IS DISTINCT FROM (NEW."name") OR OLD."pen_test" IS DISTINCT FROM (NEW."pen_test") OR OLD."preset_id" IS DISTINCT FROM (NEW."preset_id") OR OLD."product_id" IS DISTINCT FROM (NEW."product_id") OR OLD."progress" IS DISTINCT FROM (NEW."progress") OR OLD."reason" IS DISTINCT FROM (NEW."reason") OR OLD."report_type_id" IS DISTINCT FROM (NEW."report_type_id") OR OLD."requester_id" IS DISTINCT FROM (NEW."requester_id") OR OLD."source_code_management_uri" IS DISTINCT FROM (NEW."source_code_management_uri") OR OLD."status" IS DISTINCT FROM (NEW."status") OR OLD."target_end" IS DISTINCT FROM (NEW."target_end") OR OLD."target_start" IS DISTINCT FROM (NEW."target_start") OR OLD."test_strategy" IS DISTINCT FROM (NEW."test_strategy") OR OLD."threat_model" IS DISTINCT FROM (NEW."threat_model") OR OLD."tmodel_path" IS DISTINCT FROM (NEW."tmodel_path") OR OLD."tracker" IS DISTINCT FROM (NEW."tracker") OR OLD."version" IS DISTINCT FROM (NEW."version"))', func='INSERT INTO "dojo_engagementevent" ("active", "api_test", "branch_tag", "build_id", "check_list", "cicd_build_server_id", "cicd_orchestration_engine_id", "cicd_scm_server_id", "commit_hash", "created", "deduplication_on_engagement", "description", "done_testing", "engagement_type", "first_contacted", "id", "lead_id", "name", "pen_test", "pgh_context_id", "pgh_created_at", "pgh_label", "pgh_obj_id", "preset_id", "product_id", "progress", "reason", "report_type_id", "requester_id", "source_code_management_uri", "status", "target_end", "target_start", "test_strategy", "threat_model", "tmodel_path", "tracker", "updated", "version") VALUES (NEW."active", NEW."api_test", NEW."branch_tag", NEW."build_id", NEW."check_list", NEW."cicd_build_server_id", NEW."cicd_orchestration_engine_id", NEW."cicd_scm_server_id", NEW."commit_hash", NEW."created", NEW."deduplication_on_engagement", NEW."description", NEW."done_testing", NEW."engagement_type", NEW."first_contacted", NEW."id", NEW."lead_id", NEW."name", NEW."pen_test", _pgh_attach_context(), NOW(), \'update\', NEW."id", NEW."preset_id", NEW."product_id", NEW."progress", NEW."reason", NEW."report_type_id", NEW."requester_id", NEW."source_code_management_uri", NEW."status", NEW."target_end", NEW."target_start", NEW."test_strategy", NEW."threat_model", NEW."tmodel_path", NEW."tracker", NEW."updated", NEW."version"); RETURN NULL;', hash='6a9569fa21d5d7ad16eb018bc4e6236e8401bced', operation='UPDATE', pgid='pgtrigger_update_update_65136', table='dojo_engagement', when='AFTER')),
0 commit comments