#!/bin/bash echo "[boot] Configuring Kaggle credentials..." if [ -n "$KAGGLE_USERNAME" ] && [ -n "$KAGGLE_KEY" ]; then mkdir -p ~/.kaggle printf '{"username":"%s","key":"%s"}' "$KAGGLE_USERNAME" "$KAGGLE_KEY" > ~/.kaggle/kaggle.json chmod 600 ~/.kaggle/kaggle.json fi echo "[boot] Configuring YouTube client secrets..." if [ -n "$YOUTUBE_CLIENT_ID" ] && [ -n "$YOUTUBE_CLIENT_SECRET" ]; then python3 -c " import json,os d={'installed':{'client_id':os.environ['YOUTUBE_CLIENT_ID'],'project_id':'yt-ai-bot','auth_uri':'https://accounts.google.com/o/oauth2/auth','token_uri':'https://oauth2.googleapis.com/token','auth_provider_x509_cert_url':'https://www.googleapis.com/oauth2/v1/certs','client_secret':os.environ['YOUTUBE_CLIENT_SECRET'],'redirect_uris':['http://localhost']}} open('/app/client_secrets.json','w').write(json.dumps(d)) print('[boot] client_secrets.json written')" fi echo "[boot] Pulling state from HF Dataset..." python3 -c " import sys; sys.path.insert(0,'/app') try: from sync_hub import pull_state from pathlib import Path pull_state(Path('/app')) except Exception as e: print(f'[boot] Hub pull skipped: {e}') " echo "[boot] Starting nginx..." nginx echo "[boot] Starting Ollama..." OLLAMA_HOST=127.0.0.1 ollama serve & echo "[boot] Starting status server on port 8080..." python3 -c " import http.server, threading, os, time class Handler(http.server.BaseHTTPRequestHandler): def do_GET(self): try: log = open('/app/pipeline.log').read()[-3000:] except: log = 'No log yet.' body = f'''
Space is running. Pipeline log (last 3000 chars, auto-refreshes every 30s):
{log}
'''.encode()
self.send_response(200)
self.send_header('Content-Type','text/html')
self.send_header('Content-Length',str(len(body)))
self.end_headers()
self.wfile.write(body)
def log_message(self, *a): pass
httpd = http.server.HTTPServer(('0.0.0.0', 8080), Handler)
print('[status] Server running on port 8080')
httpd.serve_forever()
" &
echo "[boot] Waiting for Ollama..."
for i in $(seq 1 60); do
if curl -sf http://127.0.0.1:11434/api/tags > /dev/null 2>&1; then
echo "[boot] Ollama ready after ${i}s"; break
fi
sleep 2
done
echo "[boot] Pulling qwen2.5-coder:7b-instruct..."
ollama pull qwen2.5-coder:7b-instruct
echo "[boot] Starting pipeline..."
python3 /app/automation.py >> /app/pipeline.log 2>&1 &
echo "[boot] Pipeline PID: $!"
echo "[boot] Trying OpenClaw (optional)..."
export OLLAMA_HOST=http://127.0.0.1:11434
openclaw gateway start || echo "[boot] OpenClaw unavailable, status server is active"
sleep infinity