diff --git a/script/danger/dangerfile.ts b/script/danger/dangerfile.ts index 99a29e51d9f..634d1df7ff0 100644 --- a/script/danger/dangerfile.ts +++ b/script/danger/dangerfile.ts @@ -61,6 +61,9 @@ if (includesIssueUrl) { ); } +const SCHEMA_CHANGE_ATTESTATION = + "The corresponding database schema migration has been created in the Cloud repo and applied to the production database."; + const MIGRATION_SCHEMA_FILES = [ "crates/collab/migrations/20251208000000_test_schema.sql", "crates/collab/migrations.sqlite/20221109000000_test_schema.sql", @@ -71,13 +74,24 @@ const modifiedSchemaFiles = danger.git.modified_files.filter((file) => ); if (modifiedSchemaFiles.length > 0) { - warn( - [ - "This PR modifies database schema files.", - "", - "If you are making database changes, a migration needs to be added in the Cloud repository.", - ].join("\n"), - ); + if (body.includes(SCHEMA_CHANGE_ATTESTATION)) { + message( + [ + "This PR modifies database schema files.", + "", + `The author has attested that ${SCHEMA_CHANGE_ATTESTATION.substring(0, 1).toLowerCase() + SCHEMA_CHANGE_ATTESTATION.substring(1)}`, + ].join("\n"), + ); + } else { + const modifiedSchemaFilesStr = modifiedSchemaFiles.map((path) => "`" + path + "`").join(", "); + fail( + [ + `This PR modifies database schema files (${modifiedSchemaFilesStr}), which requires creating a schema migration in the Cloud repository.`, + "Once the schema migraation has been created and applied, please add the following attestation to your PR description: ", + `"${SCHEMA_CHANGE_ATTESTATION}"`, + ].join("\n\n"), + ); + } } const FIXTURE_CHANGE_ATTESTATION = "Changes to test fixtures are intentional and necessary.";