Hello from MCP server

List Files | Just Commands | Repo | Logs

← back |
project_root := ".."
frontend_dir := project_root + "/frontend"
backend_dir  := project_root + "/backend"

# Default command
default:
    @just --list

set shell := ["bash", "-cu"]
set dotenv-load := true

# Install Ansible locally (Debian/Ubuntu example)
install-ansible:
    sudo apt update
    sudo apt install -y ansible

# Run a playbook against a remote host defined in ~/.ssh/config
# Usage: just run-playbook host=myserver playbook=setup.yml
run-playbook host playbook:
    ansible-playbook -i "{{host}}," {{playbook}} --ssh-common-args="-F $HOME/.ssh/config"

# Quick connectivity test using Ansible ping module
# Usage: just ping-host host=myserver
ping-host host:
    ansible -i "{{host}}," all -m ping --ssh-common-args="-F $HOME/.ssh/config"

build-backend:
    @echo "Building Backend: pricebook-platform..."
    cd {{backend_dir}} && go build -o bin/pricebook-platform
    mkdir -p ./artifacts/
    cp {{backend_dir}}/bin/pricebook-platform ./artifacts/

build-frontend:
    @echo "Building Frontend..."
    cd {{frontend_dir}} && npm run build

build-mcp:
    @echo "Building MCP server..."
    cd mcp && go build -o ../artifacts/mcp .

# Run MCP server in dev mode (shows local project files)
run-mcp:
    cd mcp && DEV=1 go run .

# Run MCP server with auto-reload (rebuilds on file changes)
dev-mcp:
    cd mcp && DEV=1 air

build: build-backend build-frontend

# Check if the backend service is running on a remote host
# Usage: just check-service host=myserver
check-service host:
    ansible -i "{{host}}," all -m shell -a "systemctl status pricebook-platform --no-pager" --ssh-common-args="-F $HOME/.ssh/config"

# Full deployment: users, caddy, and backend
# Usage: just deploy host=myserver target=pricebook-platform-a
deploy host target="pricebook-platform-a":
    ansible-playbook -i "{{host}}," site.yml --ssh-common-args="-F $HOME/.ssh/config" -e "target={{target}}"

# Deploy backend only
# Usage: just deploy-backend host=myserver target=pricebook-platform-a app_port=8080
deploy-backend host target="pricebook-platform-a" app_port="8080":
    ansible-playbook -i "{{host}}," deploy_backend.yml --ssh-common-args="-F $HOME/.ssh/config" -e "target={{target}} app_port={{app_port}}"

# Deploy to slot A (port 8080)
deploy-a host:
    just deploy-backend {{host}} pricebook-platform-a 8080

# Deploy to slot B (port 8081)
deploy-b host:
    just deploy-backend {{host}} pricebook-platform-b 8081

# Build and deploy MCP server
deploy-mcp host:
    just build-mcp
    ansible-playbook -i "{{host}}," deploy_mcp.yml --ssh-common-args="-F $HOME/.ssh/config"

# Check MCP service status
check-mcp host:
    ansible -i "{{host}}," all -m shell -a "systemctl status mcp --no-pager" --ssh-common-args="-F $HOME/.ssh/config"

# Restart MCP service
restart-mcp host:
    ansible -i "{{host}}," all -m shell -a "systemctl restart mcp" --ssh-common-args="-F $HOME/.ssh/config" --become

# Deploy frontend only
# Usage: just deploy-frontend host=myserver target=pricebook-platform-a
deploy-frontend host target="pricebook-platform-a":
    ansible-playbook -i "{{host}}," deploy_frontend.yml --ssh-common-args="-F $HOME/.ssh/config" -e "target={{target}}"

# Restart all services (caddy + app servers + mcp)
restart-all host:
    ansible -i "{{host}}," all -m shell -a "systemctl restart caddy pricebook-platform-a pricebook-platform-b mcp" --ssh-common-args="-F $HOME/.ssh/config" --become

# Setup dev environment (git, ssh keys, clone repo)
setup-dev-env host:
    ansible-playbook -i "{{host}}," setup_dev_env.yml --ssh-common-args="-F $HOME/.ssh/config" -e "github_repo_ssh=$GITHUB_REPO_SSH"

# Show the dev user's SSH public key
show-dev-ssh-key host:
    ansible -i "{{host}}," all -m shell -a "cat /home/dev/.ssh/id_ed25519.pub" --ssh-common-args="-F $HOME/.ssh/config" --become

# Clone or update the dev repo on the server (requires SSH key added to GitHub)
# Uses GITHUB_REPO_SSH from .env for initial clone
sync-dev-repo host:
    ansible -i "{{host}}," all -m shell -a "cd /home/dev && if [ -d pricebook-platform ]; then cd pricebook-platform && git fetch --all && git pull; else git clone $GITHUB_REPO_SSH pricebook-platform; fi" --ssh-common-args="-F $HOME/.ssh/config" --become --become-user=dev

# Install and configure Litestream for SQLite backups to S3
# Reads S3_BUCKET, S3_REGION, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY from .env
install-litestream host:
    ansible-playbook -i "{{host}}," install_litestream.yml --ssh-common-args="-F $HOME/.ssh/config" -e "s3_bucket=$S3_BUCKET s3_region=$S3_REGION s3_access_key_id=$S3_ACCESS_KEY_ID s3_secret_access_key=$S3_SECRET_ACCESS_KEY"

# Check Litestream status
litestream-status host:
    ansible -i "{{host}}," all -m shell -a "systemctl status litestream --no-pager" --ssh-common-args="-F $HOME/.ssh/config"

# Restore database from S3 backup
# Usage: just litestream-restore host=myserver target=pricebook-platform-a
litestream-restore host target:
    @echo "Stopping {{target}} service..."
    ansible -i "{{host}}," all -m shell -a "systemctl stop {{target}}" --ssh-common-args="-F $HOME/.ssh/config" --become
    @echo "Restoring database from S3..."
    ansible -i "{{host}}," all -m shell -a "AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$S3_SECRET_ACCESS_KEY litestream restore -o /srv/apps/{{target}}/pb_data/data.db s3://$S3_BUCKET/{{target}}" --ssh-common-args="-F $HOME/.ssh/config" --become
    @echo "Starting {{target}} service..."
    ansible -i "{{host}}," all -m shell -a "systemctl start {{target}}" --ssh-common-args="-F $HOME/.ssh/config" --become