Create table to store merge request compliance violations
What does this MR do and why?
In groupcompliance we are stepping up our ability to track compliance violations in merge requests and provide a record of these to users.
The first step in this direction is to create a new domain model to hold the violations that occur (this MR), followed by saving the violations (the next MR to be created) and providing these via GraphQL to be rendered (future MR).
This MR specifically creates a new merge_requests_compliance_violations
table, along with its associated indexes and foreign keys. Then adds this table via the ComplianceViolation
modal to the MergeRequest
model. Each violation is stored as its own class to encapsulate its logic. These classes are called by the ComplianceViolation
class on the processing of a MergeRequest
.
The next MR will take the ComplianceViolation
model and asynchronously process any violations upon merging of an MR.
How to set up and validate locally
- Test the migration using
bundle exec rails db:migrate
andbundle exec rails db:rollback STEP=3
- Add the migration and test that merge requests are created, updated, merged, closed and deleted without errors
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Database review
Output of `db:check-migrations` job
$ git merge-base master HEAD
7063e00793ff4691736e8f20a33daad6e67e1299
$ git diff --name-only --diff-filter=A 7063e00793ff4691736e8f20a33daad6e67e1299 -- db/migrate db/post_migrate
db/migrate/20211111112425_create_merge_requests_compliance_violations.rb
db/migrate/20211111112639_add_fk_compliance_violations_merge_request.rb
db/migrate/20211111112713_add_fk_compliance_violations_violating_user.rb
$ bin/rails db:migrate:down VERSION=20211111112713
== 20211111112713 AddFkComplianceViolationsViolatingUser: reverting ===========
-- transaction_open?()
-> 0.0001s
-- remove_foreign_key(:merge_requests_compliance_violations, {:column=>:violating_user_id})
-> 0.0727s
== 20211111112713 AddFkComplianceViolationsViolatingUser: reverted (0.1636s) ==
$ bin/rails db:migrate:down VERSION=20211111112639
== 20211111112639 AddFkComplianceViolationsMergeRequest: reverting ============
-- transaction_open?()
-> 0.0000s
-- remove_foreign_key(:merge_requests_compliance_violations, {:column=>:merge_request_id})
-> 0.0086s
== 20211111112639 AddFkComplianceViolationsMergeRequest: reverted (0.0246s) ===
$ bin/rails db:migrate:down VERSION=20211111112425
== 20211111112425 CreateMergeRequestsComplianceViolations: reverting ==========
-- drop_table(:merge_requests_compliance_violations, {})
-> 0.0087s
== 20211111112425 CreateMergeRequestsComplianceViolations: reverted (0.0127s) =
$ git diff 7063e00793ff4691736e8f20a33daad6e67e1299 -- db/structure.sql
$ bin/rails db:migrate
== 20211111112425 CreateMergeRequestsComplianceViolations: migrating ==========
-- create_table(:merge_requests_compliance_violations, {})
-> 0.0342s
== 20211111112425 CreateMergeRequestsComplianceViolations: migrated (0.0344s) =
== 20211111112639 AddFkComplianceViolationsMergeRequest: migrating ============
-- transaction_open?()
-> 0.0000s
-- foreign_keys(:merge_requests_compliance_violations)
-> 0.0062s
-- transaction_open?()
-> 0.0000s
-- execute("ALTER TABLE merge_requests_compliance_violations\nADD CONSTRAINT fk_290ec1ab02\nFOREIGN KEY (merge_request_id)\nREFERENCES merge_requests (id)\nON DELETE CASCADE\nNOT VALID;\n")
-> 0.0101s
-- execute("SET statement_timeout TO 0")
-> 0.0011s
-- execute("ALTER TABLE merge_requests_compliance_violations VALIDATE CONSTRAINT fk_290ec1ab02;")
-> 0.0280s
-- execute("RESET statement_timeout")
-> 0.0014s
== 20211111112639 AddFkComplianceViolationsMergeRequest: migrated (0.0623s) ===
== 20211111112713 AddFkComplianceViolationsViolatingUser: migrating ===========
-- transaction_open?()
-> 0.0000s
-- foreign_keys(:merge_requests_compliance_violations)
-> 0.0061s
-- transaction_open?()
-> 0.0000s
-- execute("ALTER TABLE merge_requests_compliance_violations\nADD CONSTRAINT fk_ec881c1c6f\nFOREIGN KEY (violating_user_id)\nREFERENCES users (id)\nON DELETE CASCADE\nNOT VALID;\n")
-> 0.0063s
-- execute("ALTER TABLE merge_requests_compliance_violations VALIDATE CONSTRAINT fk_ec881c1c6f;")
-> 0.0233s
== 20211111112713 AddFkComplianceViolationsViolatingUser: migrated (0.0459s) ==
$ git diff -- db/structure.sql
$ git add -A -n db/schema_migrations
Related to #347323 (closed)