feat(tools): add docker scripts
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
# clean_docker.sh - Remove a PostgreSQL Docker container
|
||||
# Usage: ./clean_docker.sh [container_name]
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
CONTAINER="${1:-postgres}"
|
||||
|
||||
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Container $CONTAINER does not exist"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Stopping container $CONTAINER"
|
||||
docker stop "$CONTAINER"
|
||||
fi
|
||||
|
||||
echo "Removing container $CONTAINER"
|
||||
docker rm "$CONTAINER"
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
# install_docker.sh - Install the PostgreSQL extension to a Docker container
|
||||
# Usage: ./install_docker.sh [container_name] [project_name] [version]
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
CONTAINER="${1:-postgres}"
|
||||
PROJECT_FILENAME="${2:-pg_morbac}"
|
||||
PROJECT_VERSION="${3}"
|
||||
|
||||
if [ -z "$PROJECT_VERSION" ]; then
|
||||
SCRIPT_DIR=$(dirname "$0")
|
||||
CONTROL_FILE="${PROJECT_FILENAME}.control"
|
||||
PROJECT_VERSION=$("$SCRIPT_DIR/get_version.sh" "$CONTROL_FILE")
|
||||
fi
|
||||
|
||||
if [ -z "$PROJECT_VERSION" ]; then
|
||||
echo "Error: could not detect version" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SQL_FILE="${PROJECT_FILENAME}--${PROJECT_VERSION}.sql"
|
||||
CONTROL_FILE="${PROJECT_FILENAME}.control"
|
||||
|
||||
if [ ! -f "$SQL_FILE" ]; then
|
||||
echo "Error: versioned SQL file not found: $SQL_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONTROL_FILE" ]; then
|
||||
echo "Error: control file not found: $CONTROL_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Error: Docker container not running: $CONTAINER" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker exec "$CONTAINER" mkdir -p /tmp/pg_morbac
|
||||
docker cp "$CONTROL_FILE" "$CONTAINER:/tmp/pg_morbac/"
|
||||
docker cp "$SQL_FILE" "$CONTAINER:/tmp/pg_morbac/"
|
||||
|
||||
docker exec "$CONTAINER" sh -c "
|
||||
EXTDIR=\$(pg_config --sharedir)/extension
|
||||
cp /tmp/pg_morbac/${CONTROL_FILE} \$EXTDIR/
|
||||
cp /tmp/pg_morbac/${SQL_FILE} \$EXTDIR/
|
||||
rm -rf /tmp/pg_morbac
|
||||
"
|
||||
|
||||
echo "Installed ${PROJECT_FILENAME} v${PROJECT_VERSION} to container ${CONTAINER}"
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
# start_docker.sh - Start a PostgreSQL Docker container
|
||||
# Usage: ./start_docker.sh [container_name] [port]
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
CONTAINER="${1:-postgres}"
|
||||
PORT="${2:-5432}"
|
||||
POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-postgres}"
|
||||
POSTGRES_USER="${POSTGRES_USER:-postgres}"
|
||||
|
||||
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Container $CONTAINER is already running"
|
||||
exit 0
|
||||
else
|
||||
echo "Starting existing container $CONTAINER"
|
||||
docker start "$CONTAINER"
|
||||
sleep 2
|
||||
fi
|
||||
else
|
||||
echo "Creating and starting container $CONTAINER"
|
||||
docker run -d \
|
||||
--name "$CONTAINER" \
|
||||
-e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
|
||||
-e POSTGRES_USER="$POSTGRES_USER" \
|
||||
-p "${PORT}:5432" \
|
||||
postgres:latest
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
echo "Waiting for PostgreSQL to be ready..."
|
||||
for i in {1..30}; do
|
||||
if docker exec "$CONTAINER" psql -U "$POSTGRES_USER" -c '\q' 2>/dev/null; then
|
||||
echo "PostgreSQL is ready in container $CONTAINER"
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "Error: PostgreSQL did not become ready in time" >&2
|
||||
exit 1
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
# stop_docker.sh - Stop a PostgreSQL Docker container
|
||||
# Usage: ./stop_docker.sh [container_name]
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
CONTAINER="${1:-postgres}"
|
||||
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Container $CONTAINER is not running"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Stopping container $CONTAINER"
|
||||
docker stop "$CONTAINER"
|
||||
Executable
+41
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
|
||||
# test_docker.sh - Run tests in a Docker container
|
||||
# Usage: ./test_docker.sh [container_name] [database_name] [sql_file]
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
CONTAINER="${1:-postgres}"
|
||||
DB="${2:-morbac_test}"
|
||||
SQL_FILE="${3:-pg_morbac.sql}"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
if [ ! -f "$PROJECT_DIR/$SQL_FILE" ]; then
|
||||
echo "Error: SQL file not found: $SQL_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Error: Docker container not running: $CONTAINER" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker exec "$CONTAINER" psql -U postgres -c '\q' 2>/dev/null; then
|
||||
echo "Error: PostgreSQL not accessible in container: $CONTAINER" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker exec "$CONTAINER" psql -U postgres -c "DROP DATABASE IF EXISTS $DB" -q
|
||||
docker exec "$CONTAINER" psql -U postgres -c "CREATE DATABASE $DB" -q
|
||||
|
||||
docker exec "$CONTAINER" mkdir -p /tmp/pg_morbac_test/tools
|
||||
docker cp "$PROJECT_DIR/$SQL_FILE" "$CONTAINER:/tmp/pg_morbac_test/"
|
||||
docker cp "$PROJECT_DIR/tests" "$CONTAINER:/tmp/pg_morbac_test/"
|
||||
docker cp "$SCRIPT_DIR/test.sh" "$CONTAINER:/tmp/pg_morbac_test/tools/"
|
||||
|
||||
docker exec -w /tmp/pg_morbac_test "$CONTAINER" bash tools/test.sh "$DB" "$SQL_FILE"
|
||||
|
||||
docker exec "$CONTAINER" psql -U postgres -c "DROP DATABASE $DB" -q
|
||||
docker exec "$CONTAINER" rm -rf /tmp/pg_morbac_test
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
# uninstall_docker.sh - Uninstall the PostgreSQL extension from a Docker container
|
||||
# Usage: ./uninstall_docker.sh [container_name] [project_name]
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
CONTAINER="${1:-postgres}"
|
||||
PROJECT_FILENAME="${2:-pg_morbac}"
|
||||
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Error: Docker container not running: $CONTAINER" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker exec "$CONTAINER" sh -c "
|
||||
EXTDIR=\$(pg_config --sharedir)/extension
|
||||
rm -f \$EXTDIR/${PROJECT_FILENAME}.control
|
||||
rm -f \$EXTDIR/${PROJECT_FILENAME}--*.sql
|
||||
"
|
||||
|
||||
echo "Uninstalled ${PROJECT_FILENAME} from container ${CONTAINER}"
|
||||
Reference in New Issue
Block a user