digitalfabrik/integreat-cms

View on GitHub
tools/prune_database.sh

Summary

Maintainability
Test Coverage
#!/bin/bash

# This script can be used to prune the complete postgres database.
# It stops and removes the docker container and removes all database-related directories.

# Import utility functions
# shellcheck source=./tools/_functions.sh
source "$(dirname "${BASH_SOURCE[0]}")/_functions.sh"

# Check if local postgres server is running
if nc -z -w1 localhost "${INTEGREAT_CMS_DB_PORT}"; then

    if command -v pg-reset > /dev/null; then
        # Execute the database reset script provided by the flake.nix file
        pg-reset
        pg-stop
    else
        echo "Please delete and re-create your database manually, typically like this:

        user@host$ su postgres
        postgres@host$ psql

        > DROP DATABASE integreat;
        > CREATE DATABASE integreat;
        " | print_info
    fi

else

    # Check if docker is installed
    if command -v docker > /dev/null; then

        # Make sure script has the permission to remove the .postgres directory owned by docker daemon user
        ensure_docker_permission

        # Check if postgres container is running
        if [ "$(docker ps -q -f name="${DOCKER_CONTAINER_NAME}")" ]; then
            # Stop Postgres Docker container
            stop_docker_container
        fi
        # Check if a stopped database container exists
        if [ "$(docker ps -aq -f status=exited -f name="${DOCKER_CONTAINER_NAME}")" ]; then
            # Remove Postgres Docker container
            docker rm "${DOCKER_CONTAINER_NAME}" > /dev/null
            echo "Removed database container" | print_info
        fi

        # Remove database directory
        rm -rfv "${BASE_DIR:?}/.postgres"
        echo "Removed database contents" | print_info

    fi

fi

# Remove media files (because they are no longer usable without the corresponding database entries)
rm -rfv "${PACKAGE_DIR:?}/media"
echo "Removed media files" | print_info

if [[ -n "$INTEGREAT_CMS_REDIS_CACHE" ]]; then
    # Invalidate cache if enabled
    deescalate_privileges integreat-cms-cli invalidate all --verbosity "${SCRIPT_VERBOSITY}"
    echo "Invalidated Redis cache" | print_info
fi