f6ff0d6ca0
This change ensures that the tables in the database during migration have at least one row of "real" data, which should help catch issues in the future where we forget to set column defaults and other such schema oversights that can only be truly tested with non-empty tables Fixes https://jira.coreos.com/browse/QUAY-913
145 lines
3.8 KiB
Bash
Executable file
145 lines
3.8 KiB
Bash
Executable file
set -e
|
|
|
|
PARSED_DOCKER_HOST=`echo $DOCKER_HOST | sed 's/tcp:\/\///' | sed 's/:.*//'`
|
|
DOCKER_IP="${PARSED_DOCKER_HOST:-127.0.0.1}"
|
|
MYSQL_CONFIG_OVERRIDE="{\"DB_URI\":\"mysql+pymysql://root:password@$DOCKER_IP/genschema\"}"
|
|
PERCONA_CONFIG_OVERRIDE="{\"DB_URI\":\"mysql+pymysql://root:password@$DOCKER_IP/genschema\"}"
|
|
PGSQL_CONFIG_OVERRIDE="{\"DB_URI\":\"postgresql://postgres@$DOCKER_IP/genschema\"}"
|
|
|
|
up_mysql() {
|
|
# Run a SQL database on port 3306 inside of Docker.
|
|
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
|
|
|
|
echo 'Sleeping for 25...'
|
|
sleep 25
|
|
|
|
# Add the database to mysql.
|
|
docker run --rm --link mysql:mysql mysql sh -c 'echo "create database genschema" | mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -ppassword'
|
|
}
|
|
|
|
down_mysql() {
|
|
docker kill mysql || true
|
|
docker rm -v mysql || true
|
|
}
|
|
|
|
up_mariadb() {
|
|
# Run a SQL database on port 3306 inside of Docker.
|
|
docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mariadb
|
|
|
|
echo 'Sleeping for 25...'
|
|
sleep 25
|
|
|
|
# Add the database to mysql.
|
|
docker run --rm --link mariadb:mariadb mariadb sh -c 'echo "create database genschema" | mysql -h"$MARIADB_PORT_3306_TCP_ADDR" -P"$MARIADB_PORT_3306_TCP_PORT" -uroot -ppassword'
|
|
}
|
|
|
|
down_mariadb() {
|
|
docker kill mariadb || true
|
|
docker rm -v mariadb || true
|
|
}
|
|
|
|
up_percona() {
|
|
# Run a SQL database on port 3306 inside of Docker.
|
|
docker run --name percona -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d percona
|
|
|
|
echo 'Sleeping for 25...'
|
|
sleep 25
|
|
|
|
# Add the daabase to mysql.
|
|
docker run --rm --link percona:percona percona sh -c 'echo "create database genschema" | mysql -h $PERCONA_PORT_3306_TCP_ADDR -uroot -ppassword'
|
|
}
|
|
|
|
down_percona() {
|
|
docker kill percona || true
|
|
docker rm -v percona || true
|
|
}
|
|
|
|
up_postgres() {
|
|
# Run a SQL database on port 5432 inside of Docker.
|
|
docker run --name postgres -p 5432:5432 -d postgres
|
|
|
|
# Sleep for 5s to get SQL get started.
|
|
echo 'Sleeping for 5...'
|
|
sleep 5
|
|
|
|
# Add the database to postgres.
|
|
docker run --rm --link postgres:postgres postgres sh -c 'echo "create database genschema" | psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
|
|
}
|
|
|
|
down_postgres() {
|
|
docker kill postgres || true
|
|
docker rm -v postgres || true
|
|
}
|
|
|
|
gen_migrate() {
|
|
# Generate a database with the schema as defined by the existing alembic model.
|
|
QUAY_OVERRIDE_CONFIG=$1 PYTHONPATH=. alembic upgrade head
|
|
|
|
|
|
# Generate the migration to the current model.
|
|
QUAY_OVERRIDE_CONFIG=$1 PYTHONPATH=. alembic revision --autogenerate -m "$2"
|
|
}
|
|
|
|
test_migrate() {
|
|
# Generate a database with the schema as defined by the existing alembic model.
|
|
echo '> Running upgrade'
|
|
TEST_MIGRATE=true QUAY_OVERRIDE_CONFIG=$1 PYTHONPATH=. alembic upgrade head
|
|
|
|
# Downgrade to verify it works in both directions.
|
|
echo '> Running downgrade'
|
|
COUNT=`ls data/migrations/versions/*.py | wc -l | tr -d ' '`
|
|
TEST_MIGRATE=true QUAY_OVERRIDE_CONFIG=$1 PYTHONPATH=. alembic downgrade "-$COUNT"
|
|
}
|
|
|
|
down_mysql
|
|
down_postgres
|
|
down_mariadb
|
|
down_percona
|
|
|
|
# Test (and generate, if requested) via MySQL.
|
|
echo '> Starting MySQL'
|
|
up_mysql
|
|
|
|
if [ ! -z "$@" ]
|
|
then
|
|
set +e
|
|
echo '> Generating Migration'
|
|
gen_migrate $MYSQL_CONFIG_OVERRIDE "$@"
|
|
set -e
|
|
fi
|
|
|
|
echo '> Testing Migration (mysql)'
|
|
set +e
|
|
test_migrate $MYSQL_CONFIG_OVERRIDE
|
|
set -e
|
|
down_mysql
|
|
|
|
# Test via Postgres.
|
|
echo '> Starting Postgres'
|
|
up_postgres
|
|
|
|
echo '> Testing Migration (postgres)'
|
|
set +e
|
|
test_migrate $PGSQL_CONFIG_OVERRIDE
|
|
set -e
|
|
down_postgres
|
|
|
|
# Test via MariaDB.
|
|
echo '> Starting MariaDB'
|
|
up_mariadb
|
|
|
|
echo '> Testing Migration (mariadb)'
|
|
set +e
|
|
test_migrate $MYSQL_CONFIG_OVERRIDE
|
|
set -e
|
|
down_mariadb
|
|
|
|
# Test via Percona.
|
|
echo '> Starting Percona'
|
|
up_percona
|
|
|
|
echo '> Testing Migration (percona)'
|
|
set +e
|
|
test_migrate $PERCONA_CONFIG_OVERRIDE
|
|
set -e
|
|
down_percona
|