Skip to content
Draft
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ DB_PORT=5432
POSTGRES_USER='user'
POSTGRES_PASSWORD='password'
POSTGRES_DATABASE='socialpredict_db'
POSTGRES_VOLUME='pgdata'

FRONTEND_CONTAINER_NAME=socialpredict-frontend-container
FRONTEND_IMAGE_NAME=ghcr.io/openpredictionmarkets/socialpredict-frontend
Expand All @@ -37,6 +38,5 @@ NGINX_PORT=80
DOMAIN='domain.com'
DOMAIN_URL='domain.com'
API_URL='domain.com'
EMAIL='john@doe.com'

TRAEFIK_CONTAINER_NAME=socialpredict-traefik-container
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,5 @@ tmp/

# Apple Silicon Docker Compose Override
docker-compose.override.yml

.vscode
233 changes: 103 additions & 130 deletions SocialPredict
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
#!/bin/bash
#!/usr/bin/env bash

set -e # Stop script on error
set -a # Automatically export all variables
set -euo pipefail

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Function to print colored output
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}

print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}

# Determine script's directory
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Expand All @@ -15,144 +32,100 @@ fi

# --- Main SocialPredict Functionality ---

# Ensure .env file exists before resolving path
if [ ! -f "$SCRIPT_DIR/.env" ]; then
echo ".env file not found."

if [ -f "$SCRIPT_DIR/scripts/dev/env_writer_dev.sh" ]; then
echo "Initializing .env file using env_writer_dev.sh (first-run only)..."
export CALLED_FROM_SOCIALPREDICT=yes
SCRIPT_INTERACTIVE=true source "$SCRIPT_DIR/scripts/dev/env_writer_dev.sh"
unset CALLED_FROM_SOCIALPREDICT
else
echo "Cannot continue. .env file is missing and env_writer_dev.sh was not found."
exit 1
fi
fi

# Calculate the absolute path to the .env file
ENV_PATH="$( readlink -f "$SCRIPT_DIR/.env" )"
ENV_FILE="--env-file $ENV_PATH"

# Function to check if a command exists
command_exists() {
command -v "$1" &> /dev/null 2>&1
command -v "$1" &> /dev/null 2>&1
}

# Function to check if Docker && Docker Compose are installed
docker_check() {
if command_exists docker && docker compose version &> /dev/null; then
echo "Found docker compose."
COMPOSE='docker compose'
elif command_exists docker-compose; then
echo "Error: Found docker-compose V1. Please update to V2."
echo "https://docs.docker.com/compose/migrate/"
exit 1

else
echo "Error: Docker Compose is not installed."
exit 1
fi
# Initial Checks
# Check if docker compose is installed. Fails if not found.
# Check if .env file exists. Fails if not found.
check_docker() {
print_status "Checking that docker compose is installed..."
if command_exists docker && docker compose version &> /dev/null; then
print_status "Found docker compose."
elif command_exists docker-compose; then
print_warning "Found docker-compose V1. Please update to V2."
print_warning "https://docs.docker.com/compose/migrate/"
exit 1
else
print_error "Docker Compose is not installed."
exit 1
fi
}

# Function to Source the .env file
source_env() {
if [ -f "${SCRIPT_DIR}/.env" ]; then
source "${SCRIPT_DIR}/.env"
else
echo "Error: .env file not found."
init() {
check_docker
if [ ! -f "$SCRIPT_DIR/.env" ]; then
print_status "Looks like this is the first time running SocialPredict."
print_warning "Please run './SocialPredict install' to initialize the application."
exit 1
else
print_status "Loading configuration from .env file"
source "$SCRIPT_DIR/.env"
fi
}

if [ "$1" = "install" ]; then
# Echo initial message
echo "### Building and Deploying SocialPredict ..."
echo
sleep 1;

# Check that docker is installed
echo "### Checking that docker compose is installed ..."
docker_check
echo
sleep 1;

# Ask user input for Application Environment
echo "### Select Application Environment: "
PS3='Please enter your choice: '
options=("Development" "Localhost" "Production" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Development")
echo
echo "Building for Development"
echo
export CALLED_FROM_SOCIALPREDICT=yes
source "$SCRIPT_DIR/scripts/dev.sh"
unset CALLED_FROM_SOCIALPREDICT
break
;;
"Localhost")
echo
echo "Building for Localhost"
echo
export CALLED_FROM_SOCIALPREDICT=yes
source "$SCRIPT_DIR/scripts/localhost.sh"
unset CALLED_FROM_SOCIALPREDICT
break
;;
"Production")
echo
echo "Building for Production"
echo
export CALLED_FROM_SOCIALPREDICT=yes
source "$SCRIPT_DIR/scripts/prod.sh"
unset CALLED_FROM_SOCIALPREDICT
break
;;
"Quit")
break
;;
*) echo "Invalid option $REPLY";;
esac
done
fi
print_help() {
cat <<EOF
Usage: ./SocialPredict COMMAND

# Run Docker Exec
if [ "$1" = "exec" ]; then
source_env
export CALLED_FROM_SOCIALPREDICT=yes
if [ -z "$3" ]; then
source "$SCRIPT_DIR/scripts/docker-commands.sh" exec "$2"
else
source "$SCRIPT_DIR/scripts/docker-commands.sh" exec "$2" "$3"
fi
unset CALLED_FROM_SOCIALPREDICT
fi
Commands:
install Initialize SocialPredict
up Start SocialPredict containers
down Stop SocialPredict containers
exec Execute command on SocialPredict containers
backup Backup operations on SocialPredict

# Run docker compose up
if [ "$1" = "up" ]; then
source_env
export CALLED_FROM_SOCIALPREDICT=yes
source "$SCRIPT_DIR/scripts/docker-commands.sh" up
unset CALLED_FROM_SOCIALPREDICT
fi
Run './SocialPredict COMMAND --help' for more information on a command.

# Run docker compose down
if [ "$1" = "down" ]; then
source_env
export CALLED_FROM_SOCIALPREDICT=yes
source "$SCRIPT_DIR/scripts/docker-commands.sh" down
unset CALLED_FROM_SOCIALPREDICT
fi
For more help on how to use SocialPredict, head to https://github.com/openpredictionmarkets/socialpredict/
EOF
}

# Database backup/restore
if [ "$1" = "backup" ]; then
source_env
export CALLED_FROM_SOCIALPREDICT=yes
shift
# Pass remaining args to the backup script, e.g. --save / --list / --restore <file> / --restore-latest
source "$SCRIPT_DIR/scripts/backup/db_backup.sh" "$@"
unset CALLED_FROM_SOCIALPREDICT
fi
COMMAND="${1:-"--help"}"
case "$COMMAND" in
install)
check_docker
shift
export CALLED_FROM_SOCIALPREDICT=yes
source "${SCRIPT_DIR}/scripts/install.sh"
unset CALLED_FROM_SOCIALPREDICT
;;
up)
init
export CALLED_FROM_SOCIALPREDICT=yes
source "${SCRIPT_DIR}/scripts/docker-commands.sh" up
unset CALLED_FROM_SOCIALPREDICT
;;
down)
init
export CALLED_FROM_SOCIALPREDICT=yes
source "${SCRIPT_DIR}/scripts/docker-commands.sh" down
unset CALLED_FROM_SOCIALPREDICT
;;
exec)
init
export CALLED_FROM_SOCIALPREDICT=yes
shift
source "${SCRIPT_DIR}/scripts/docker-commands.sh" exec "$@"
unset CALLED_FROM_SOCIALPREDICT
;;
backup)
init
export CALLED_FROM_SOCIALPREDICT=yes
shift
# Pass remaining args to the backup script, e.g. --save / --list / --restore <file>
source "${SCRIPT_DIR}/scripts/backup/db_backup.sh" "$@"
unset CALLED_FROM_SOCIALPREDICT
;;
--help|-h|help)
print_help
;;
*)
echo "Unknown command: $COMMAND"
echo
print_help
exit 1
;;
esac
Loading
Loading