Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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='[email protected]'

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