FINERACT-2421: Add Verify Liquibase Backward Compatibility check
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
name: Verify Liquibase Backward Compatibility
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
liquibase-backward-compatibility-check:
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
|
||||
services:
|
||||
postgresql:
|
||||
image: postgres:17.4
|
||||
ports:
|
||||
- 5432:5432
|
||||
env:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
--health-cmd="pg_isready -q -d postgres -U root"
|
||||
--health-interval=5s
|
||||
--health-timeout=2s
|
||||
--health-retries=5
|
||||
|
||||
env:
|
||||
DB_USER: root
|
||||
DB_PASSWORD: postgres
|
||||
DB_NAME: fineract_default
|
||||
TZ: Asia/Kolkata
|
||||
|
||||
steps:
|
||||
- name: Checkout the base branch (`develop`)
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.base.repo.full_name }}
|
||||
ref: ${{ github.event.pull_request.base.ref }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'zulu'
|
||||
java-version: '21'
|
||||
|
||||
- name: Wait for PostgreSQL
|
||||
run: |
|
||||
until pg_isready -h localhost -U $DB_USER; do
|
||||
echo "Waiting for postgres..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
- name: Init base schema
|
||||
run: |
|
||||
./gradlew --no-daemon createPGDB -PdbName=fineract_tenants
|
||||
./gradlew --no-daemon createPGDB -PdbName=$DB_NAME
|
||||
|
||||
- name: Start backend on base branch
|
||||
run: |
|
||||
./gradlew :fineract-provider:devRun --args="\
|
||||
--spring.datasource.hikari.driverClassName=org.postgresql.Driver \
|
||||
--spring.datasource.hikari.jdbcUrl=jdbc:postgresql://localhost:5432/fineract_tenants \
|
||||
--spring.datasource.hikari.username=root \
|
||||
--spring.datasource.hikari.password=postgres \
|
||||
--fineract.tenant.host=localhost \
|
||||
--fineract.tenant.port=5432 \
|
||||
--fineract.tenant.username=root \
|
||||
--fineract.tenant.password=postgres" &
|
||||
BACKEND_PID=$!
|
||||
echo $BACKEND_PID > backend.pid
|
||||
|
||||
# Wait for Actuator to come up (adjust host/port/path if needed)
|
||||
ACTUATOR_URL="https://localhost:8443/fineract-provider/actuator/health"
|
||||
TIMEOUT_SECONDS=600
|
||||
INTERVAL_SECONDS=2
|
||||
|
||||
echo "Waiting for backend Actuator: $ACTUATOR_URL (timeout ${TIMEOUT_SECONDS}s)..."
|
||||
|
||||
start_ts=$(date +%s)
|
||||
while true; do
|
||||
# If the process died, fail fast
|
||||
if ! kill -0 "$BACKEND_PID" 2>/dev/null; then
|
||||
echo "Backend process exited before Actuator became available."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check endpoint
|
||||
if curl -kfsS "$ACTUATOR_URL" >/dev/null 2>&1; then
|
||||
echo "Actuator is up."
|
||||
break
|
||||
fi
|
||||
|
||||
# Timeout
|
||||
now_ts=$(date +%s)
|
||||
if [ $((now_ts - start_ts)) -ge "$TIMEOUT_SECONDS" ]; then
|
||||
echo "Timed out waiting for Actuator."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep "$INTERVAL_SECONDS"
|
||||
done
|
||||
|
||||
- name: Stop backend
|
||||
run: |
|
||||
kill $(cat backend.pid)
|
||||
sleep 10
|
||||
|
||||
- name: Checkout the PR branch
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v5
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Start backend on PR branch
|
||||
run: |
|
||||
./gradlew :fineract-provider:devRun --args="\
|
||||
--spring.datasource.hikari.driverClassName=org.postgresql.Driver \
|
||||
--spring.datasource.hikari.jdbcUrl=jdbc:postgresql://localhost:5432/fineract_tenants \
|
||||
--spring.datasource.hikari.username=root \
|
||||
--spring.datasource.hikari.password=postgres \
|
||||
--fineract.tenant.host=localhost \
|
||||
--fineract.tenant.port=5432 \
|
||||
--fineract.tenant.username=root \
|
||||
--fineract.tenant.password=postgres" &
|
||||
BACKEND_PID=$!
|
||||
echo $BACKEND_PID > backend.pid
|
||||
|
||||
# Wait for Actuator to come up (adjust host/port/path if needed)
|
||||
ACTUATOR_URL="https://localhost:8443/fineract-provider/actuator/health"
|
||||
TIMEOUT_SECONDS=600
|
||||
INTERVAL_SECONDS=2
|
||||
|
||||
echo "Waiting for backend Actuator: $ACTUATOR_URL (timeout ${TIMEOUT_SECONDS}s)..."
|
||||
|
||||
start_ts=$(date +%s)
|
||||
while true; do
|
||||
# If the process died, fail fast
|
||||
if ! kill -0 "$BACKEND_PID" 2>/dev/null; then
|
||||
echo "Backend process exited before Actuator became available."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check endpoint
|
||||
if curl -kfsS "$ACTUATOR_URL" >/dev/null 2>&1; then
|
||||
echo "Actuator is up."
|
||||
break
|
||||
fi
|
||||
|
||||
# Timeout
|
||||
now_ts=$(date +%s)
|
||||
if [ $((now_ts - start_ts)) -ge "$TIMEOUT_SECONDS" ]; then
|
||||
echo "Timed out waiting for Actuator."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep "$INTERVAL_SECONDS"
|
||||
done
|
||||
- name: Stop backend
|
||||
run: |
|
||||
kill $(cat backend.pid)
|
||||
sleep 10
|
||||
Reference in New Issue
Block a user