From 26ef9ff86478c8d8d456ced6e764c0046cc40a00 Mon Sep 17 00:00:00 2001 From: GarethLancaster <31533575+Gareth40342@users.noreply.github.com> Date: Sun, 13 Oct 2024 13:30:33 +0100 Subject: [PATCH] Added new database migration file validation workflow --- .../check-database-migration-files.yml | 116 ++++++++++++++++++ .../V2024_09_10_1047__new_scenario-2.sql | 52 ++++++++ .../V2024_10_10_1047__new_scenario-1.sql | 52 ++++++++ .../V2024_10_20_1047__new_scenario-3.sql | 52 ++++++++ 4 files changed, 272 insertions(+) create mode 100644 .github/workflows/check-database-migration-files.yml create mode 100644 src/main/resources/db/migration/V2024_09_10_1047__new_scenario-2.sql create mode 100644 src/main/resources/db/migration/V2024_10_10_1047__new_scenario-1.sql create mode 100644 src/main/resources/db/migration/V2024_10_20_1047__new_scenario-3.sql diff --git a/.github/workflows/check-database-migration-files.yml b/.github/workflows/check-database-migration-files.yml new file mode 100644 index 00000000000..1ca384558ea --- /dev/null +++ b/.github/workflows/check-database-migration-files.yml @@ -0,0 +1,116 @@ +name: Flyway Migration Files + +on: + pull_request: + branches: + - '**' + +jobs: + validate: + runs-on: ubuntu-latest + + steps: + - name: Checkout current branch + uses: actions/checkout@v3 + + - name: Fetch base branch + run: | + git fetch origin +refs/heads/${{ github.base_ref }}:refs/remotes/origin/${{ github.base_ref }} + + - name: Check for new migration files + run: | + echo "Checking for new migration files..." + + # Set the directory for migrations + MIGRATION_DIR=src/main/resources/db/migration + + # Get existing migration files from the base branch + BASE_MIGRATION_FILES=$(git ls-tree -r --name-only origin/${{ github.base_ref }} -- $MIGRATION_DIR) + + # Initialize variable to hold the latest base file + LATEST_BASE_FILE="" + LATEST_BASE_TIMESTAMP="" + + # Determine the latest timestamp from the base branch + for BASE_FILE in $BASE_MIGRATION_FILES; do + BASE_TIMESTAMP=$(echo $BASE_FILE | grep -oP 'V\K[0-9_]{10,14}') + + # Check if this base timestamp is later than the current latest + if [[ "$LATEST_BASE_TIMESTAMP" < "$BASE_TIMESTAMP" ]]; then + LATEST_BASE_TIMESTAMP="$BASE_TIMESTAMP" + LATEST_BASE_FILE="$BASE_FILE" + fi + done + + echo " " + echo "Base migration file with the latest timestamp:" + echo " $LATEST_BASE_FILE" + + # Get the new migration files added in the current branch + NEW_MIGRATION_FILES=$(git diff --name-only origin/${{ github.base_ref }} -- $MIGRATION_DIR) + + # Output new migration files found in the current branch + echo " " + if [[ -z "$NEW_MIGRATION_FILES" ]]; then + echo "No new migration files found." + exit 0 + else + echo "New migration files in the current branch:" + # Output the new migration files with indentation + for FILE in $NEW_MIGRATION_FILES; do + echo " $FILE" + done + fi + + FORMAT_ERROR_FILES=() + BASE_BRANCH_NAME=${{ github.base_ref }} + CURRENT_BRANCH_NAME=${{ github.head_ref }} + + # First check for format validity + for FILE in $NEW_MIGRATION_FILES; do + FILENAME=$(basename "$FILE") # Extract just the filename from the full path + if ! [[ "$FILENAME" =~ ^V[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}__.*$ ]]; then + FORMAT_ERROR_FILES+=("$FILE") # Collect the full file path for invalid format + fi + done + + # Output errors for format + if [[ ${#FORMAT_ERROR_FILES[@]} -gt 0 ]]; then + echo " " + echo "Error: The following migration file names do not have a valid timestamp format:" + for FORMAT_ERROR_FILE in "${FORMAT_ERROR_FILES[@]}"; do + echo " $FORMAT_ERROR_FILE" + done + exit 1 # Exit with an error code + fi + + ERROR_FILES=() + + # Check for new migration files and their timestamps + for FILE in $NEW_MIGRATION_FILES; do + TIMESTAMP=$(echo $FILE | grep -oP 'V\K[0-9_]{10,14}') + # Ensure the timestamp is valid + if [[ -z "$TIMESTAMP" ]]; then + echo "Error: File $FILE does not have a valid timestamp." + exit 1 + fi + + # Validate against the latest base file timestamp + if [[ "$TIMESTAMP" < "$LATEST_BASE_TIMESTAMP" ]]; then + ERROR_FILES+=("$FILE") # Collect the file name for later output + fi + done + + # Output errors for timestamps + if [[ ${#ERROR_FILES[@]} -gt 0 ]]; then + echo " " + echo "Error: The following migration file names in the current branch [$CURRENT_BRANCH_NAME]:" + for ERROR_FILE in "${ERROR_FILES[@]}"; do + echo " $ERROR_FILE" + done + echo "Contain timestamps earlier than the latest migration file from the base branch [$BASE_BRANCH_NAME]:" + echo " $LATEST_BASE_FILE" + exit 1 # Exit with an error code + fi + + echo "All new migration files are valid." diff --git a/src/main/resources/db/migration/V2024_09_10_1047__new_scenario-2.sql b/src/main/resources/db/migration/V2024_09_10_1047__new_scenario-2.sql new file mode 100644 index 00000000000..f48028e7b61 --- /dev/null +++ b/src/main/resources/db/migration/V2024_09_10_1047__new_scenario-2.sql @@ -0,0 +1,52 @@ +/** + * Add scenario + */ +INSERT INTO dbs.scenario (name, notifications_to_delete, notifications_to_create) +VALUES ('Scenario.AAA6.JudgmentsOnline.IssuedCCJ.Claimant', + '{"Notice.AAA6.ClaimantIntent.CCJ.Requested.Claimant", + "Notice.AAA6.ClaimantIntent.RequestedCCJ.ClaimantAcceptedDefendantPlan.Claimant", + "Notice.AAA6.ClaimantIntent.RequestCCJ.ClaimantAcceptOrRejectPlan.SettlementRequested.NoDefResponse.Claimant", + "Notice.AAA6.ClaimantIntent.RequestCCJ.ClaimantAcceptOrRejectPlan.SettlementRequested.DefPaymentMissed.Claimant"}', + '{"Notice.AAA6.JudgmentsOnline.IssuedCCJ.Claimant": ["djClaimantNotificationMessage", "djClaimantNotificationMessageCy"]}'); + +/** + * Add notification template + */ +INSERT INTO dbs.dashboard_notifications_templates ( template_name, title_En, title_Cy, description_En, description_Cy + , notification_role) +VALUES ('Notice.AAA6.JudgmentsOnline.IssuedCCJ.Claimant', + 'A judgment against the defendant has been made', + 'Mae dyfarniad wedi’i wneud yn erbyn y diffynnydd', + '
The defendant should now pay you according to the terms of the judgment.
Once they do, you should confirm that they’ve paid you the full amount that you’re owed.
If they do not pay you by the date on the judgment, you can ask for enforcement action to be taken against them.
If you need to change the terms of payment within the judgment, such as the instalments you had previously agreed, you can ${djClaimantNotificationMessage}.
Dylai’r diffynnydd eich talu yn unol â thelerau’r dyfarniad.
Unwaith y byddant yn gwneud hynny, dylech gadarnhau eu bod wedi talu’r swm llawn sy’n ddyledus i chi.
Os na fyddant yn eich talu erbyn y dyddiad ar y dyfarniad, gallwch ofyn am gymryd camau gorfodi yn eu herbyn.
Os oes arnoch angen newid y telerau talu o fewn y dyfarniad, fel y rhandaliadau roeddech wedi cytuno arnynt yn flaenorol, gallwch ${djClaimantNotificationMessageCy}.
The defendant should now pay you according to the terms of the judgment.
Once they do, you should confirm that they’ve paid you the full amount that you’re owed.
If they do not pay you by the date on the judgment, you can ask for enforcement action to be taken against them.
If you need to change the terms of payment within the judgment, such as the instalments you had previously agreed, you can ${djClaimantNotificationMessage}.
Dylai’r diffynnydd eich talu yn unol â thelerau’r dyfarniad.
Unwaith y byddant yn gwneud hynny, dylech gadarnhau eu bod wedi talu’r swm llawn sy’n ddyledus i chi.
Os na fyddant yn eich talu erbyn y dyddiad ar y dyfarniad, gallwch ofyn am gymryd camau gorfodi yn eu herbyn.
Os oes arnoch angen newid y telerau talu o fewn y dyfarniad, fel y rhandaliadau roeddech wedi cytuno arnynt yn flaenorol, gallwch ${djClaimantNotificationMessageCy}.
The defendant should now pay you according to the terms of the judgment.
Once they do, you should confirm that they’ve paid you the full amount that you’re owed.
If they do not pay you by the date on the judgment, you can ask for enforcement action to be taken against them.
If you need to change the terms of payment within the judgment, such as the instalments you had previously agreed, you can ${djClaimantNotificationMessage}.
Dylai’r diffynnydd eich talu yn unol â thelerau’r dyfarniad.
Unwaith y byddant yn gwneud hynny, dylech gadarnhau eu bod wedi talu’r swm llawn sy’n ddyledus i chi.
Os na fyddant yn eich talu erbyn y dyddiad ar y dyfarniad, gallwch ofyn am gymryd camau gorfodi yn eu herbyn.
Os oes arnoch angen newid y telerau talu o fewn y dyfarniad, fel y rhandaliadau roeddech wedi cytuno arnynt yn flaenorol, gallwch ${djClaimantNotificationMessageCy}.