-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TRUNK-6058 : Create CI Process to create liquibase snapshots #4474
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
#!/bin/bash | ||
# | ||
# This Source Code Form is subject to the terms of the Mozilla Public License, | ||
# v. 2.0. If a copy of the MPL was not distributed with this file, You can | ||
# obtain one at http:https://mozilla.org/MPL/2.0/. OpenMRS is also distributed under | ||
# the terms of the Healthcare Disclaimer located at http:https://openmrs.org/license. | ||
# | ||
# Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS | ||
# graphic logo is a trademark of OpenMRS Inc. | ||
# | ||
|
||
project_version=$(grep -m 1 '<version>' pom.xml | sed -n 's/.*<version>\(.*\)<\/version>.*/\1/p') | ||
|
||
|
||
function extract_versions() { | ||
openmrs_version=$(echo "$project_version" | sed "s/\([0-9]*\.[0-9]*\).*$/\1/") | ||
|
||
# Extract the major and minor version numbers separately | ||
major_version=$(echo "$openmrs_version" | cut -d'.' -f1) | ||
minor_version=$(echo "$openmrs_version" | cut -d'.' -f2) | ||
|
||
# Increment the minor version by 1 | ||
new_minor_version=$((minor_version + 1)) | ||
|
||
# Create the new OpenMRS version | ||
new_openmrs_version="${major_version}.${new_minor_version}" | ||
|
||
} | ||
|
||
function generate_liquibase_snapshots_and_update() { | ||
cd liquibase/ | ||
. scripts/create_liquibase_snapshots.sh "${1}" "${2}" | ||
. scripts/fix_liquibase_snapshots.sh | ||
cd .. | ||
} | ||
|
||
function move_updated_snapshots() { | ||
extract_versions | ||
mv liquibase/snapshots/liquibase-core-data-UPDATED-SNAPSHOT.xml api/src/main/resources/org/openmrs/liquibase/snapshots/core-data/"liquibase-core-data-$openmrs_version.x.xml" | ||
mv liquibase/snapshots/liquibase-schema-only-UPDATED-SNAPSHOT.xml api/src/main/resources/org/openmrs/liquibase/snapshots/schema-only/"liquibase-schema-only-$openmrs_version.x.xml" | ||
} | ||
|
||
function create_new_liquibase_update_file() { | ||
extract_versions | ||
new_liquibase_file="liquibase-update-to-latest-${new_openmrs_version}.x.xml" | ||
cp "api/src/main/resources/liquibase-update-to-latest-template.xml" "api/src/main/resources/org/openmrs/liquibase/updates/$new_liquibase_file" | ||
|
||
database_updater_class="api/src/test/java/org/openmrs/util/DatabaseUpdaterDatabaseIT.java" | ||
variable_name="CHANGE_SET_COUNT_FOR_GREATER_THAN_2_1_X" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why are we explicitly using 2.1.x here? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. according to the steps mentioned here, we are copying the liquibase-updates template and rename it to current version. That template file contains change set as below (this include a comment), So when adding a new change-set we need to increase the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. But the current version is not 2.1.? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. when adding new |
||
|
||
# Increase the variable value by 1 | ||
sed -i "s/\($variable_name *= *\)[0-9]\+/\1$(( $(grep -o "$variable_name *= *[0-9]\+" "$database_updater_class" | awk '{print $NF}') + 1 ))/" "$database_updater_class" | ||
|
||
insert_line=" <include file=\"org/openmrs/liquibase/updates/$new_liquibase_file\"/>" | ||
sed -i -e '$!N;$!N;$i\'"$insert_line" "api/src/main/resources/liquibase-update-to-latest-from-1.9.x.xml" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why are we using 1.9.x here? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if the liquibase snapshot update version is above 1.9.x , we add that names in this file. This also mentioned in here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In the documentation that you referenced above, isn't 1.9.x just an example. Where the actual value depends on the current version? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The file called liquibase-update-to-latest-from-1.9.x.xml is used for integration tests. When we make a new snapshot, we create a file for the next snapshot version using the format liquibase-update-.x.xml. After creating this new file, we need to add its path to the liquibase-update-to-latest-from-1.9.x.xml file. |
||
|
||
} | ||
|
||
function update_log_files_with_new_snapshots() { | ||
extract_versions | ||
sed -i 's/\(<include file="org\/openmrs\/liquibase\/snapshots\/schema-only\/liquibase-schema-only-\)\([^"]*\)\.x\.xml"\/>/\1'"$openmrs_version"'\.x.xml"\/>/' "api/src/main/resources/liquibase-schema-only.xml" | ||
sed -i 's/\(<include file="org\/openmrs\/liquibase\/snapshots\/core-data\/liquibase-core-data-\)\([^"]*\)\.x\.xml"\/>/\1'"$openmrs_version"'\.x.xml"\/>/' "api/src/main/resources/liquibase-core-data.xml" | ||
sed -i 's/\(<include file="org\/openmrs\/liquibase\/updates\/liquibase-update-to-latest-\)\([^"]*\)\.x\.xml"\/>/\1'"${new_openmrs_version}"'\.x.xml"\/>/' "api/src/main/resources/liquibase-update-to-latest.xml" | ||
} | ||
|
||
function update_snapshot_tests() { | ||
extract_versions | ||
change_log_java_file="api/src/main/java/org/openmrs/liquibase/ChangeLogVersions.java" | ||
sed -i '/private static final List<String> SNAPSHOT_VERSIONS = Arrays.asList(/s/);/,\ "'"${openmrs_version}.x"'"\);/' "$change_log_java_file" | ||
sed -i '/private static final List<String> UPDATE_VERSIONS = Arrays.asList(/s/);/,\ "'"${new_openmrs_version}.x"'"\);/' "$change_log_java_file" | ||
} | ||
|
||
function test_liquibase_snapshots() { | ||
cd liquibase/ | ||
. scripts/test_liquibase_snapshots.sh "${1}" "${2}" | ||
cd .. | ||
} | ||
|
||
function echo_usage() { | ||
echo "usage: . liquibase/scripts/create_liquibase_snapshots.sh <username> <password>" | ||
} | ||
|
||
|
||
|
||
if [ "${1}" == "" ] || [ "${2}" == "" ]; then | ||
echo_usage | ||
else | ||
echo "[INFO] generate liquibase snapshots" | ||
generate_liquibase_snapshots_and_update "${1}" "${2}" | ||
echo "[INFO] move updated snapshot files" | ||
move_updated_snapshots | ||
echo "[INFO] create new liquibase updated snapshots file" | ||
create_new_liquibase_update_file | ||
echo "[INFO] update the log files with new snapshot version" | ||
update_log_files_with_new_snapshots | ||
echo "[INFO] update the tests with new snapshot version" | ||
update_snapshot_tests | ||
echo "[INFO] generate liquibase snapshots successfully" | ||
fi | ||
# |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After running this script, can you list the files which will get created and their output locations?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dkayiwa I updated the read.me file by adding the details of created and updated files, along with their output locations.