Auto merge dev → main (#1226)
* add tssbot PM2 entry + extend webhook updater to handle TSSBOT - TSSBOT/ecosystem.config.js: defines just the tssbot app for now. Uses system python3 (skeleton has no deps); switch to .venv/bin/python once TSSBOT/BOT/botscript.py and a real dependency set exist. - TSSBOT/start_bot.py: change the stub from exit-immediately to an idle loop with SIGTERM/SIGINT handling so PM2 doesn't restart-loop the placeholder. - SREBOT/github_webhook_updater.py: same listener handles the whole monorepo. Add a tssbot restart rule that triggers on TSSBOT/BOT/, TSSBOT root .py, TSSBOT/start_bot.py, TSSBOT/ecosystem.config.js, or SHARED/ changes. A push to SHARED restarts both bots; pushes scoped to one bot only restart that bot. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * update game files and start tssbot --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
require('dotenv').config();
|
||||||
|
|
||||||
|
// __dirname resolves to BOTS/TSSBOT on disk. Override with TSSBOT_DEPLOY_PATH if
|
||||||
|
// you need to point at a different checkout (e.g. local dev).
|
||||||
|
const DEPLOY_PATH = process.env.TSSBOT_DEPLOY_PATH || __dirname;
|
||||||
|
|
||||||
|
// Default to system python until TSSBOT grows its own dependency set.
|
||||||
|
// When BOT/botscript.py lands, create TSSBOT/.venv and switch this to
|
||||||
|
// `${DEPLOY_PATH}/.venv/bin/python`.
|
||||||
|
const PY_INTERPRETER = process.env.TSSBOT_PY_INTERPRETER || 'python3';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
apps: [
|
||||||
|
// Discord Bot (skeleton — currently just idles, see TSSBOT/start_bot.py)
|
||||||
|
{
|
||||||
|
name: 'tssbot',
|
||||||
|
script: 'start_bot.py',
|
||||||
|
interpreter: PY_INTERPRETER,
|
||||||
|
cwd: DEPLOY_PATH,
|
||||||
|
instances: 1,
|
||||||
|
autorestart: true,
|
||||||
|
watch: false,
|
||||||
|
max_memory_restart: '8000M',
|
||||||
|
env: {
|
||||||
|
NODE_ENV: 'production',
|
||||||
|
PYTHONUNBUFFERED: '1'
|
||||||
|
},
|
||||||
|
log_file: './logs/bot_combined.log',
|
||||||
|
out_file: './logs/bot_out.log',
|
||||||
|
error_file: './logs/bot_error.log',
|
||||||
|
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
|
||||||
|
merge_logs: true,
|
||||||
|
kill_timeout: 5000,
|
||||||
|
restart_delay: 3000
|
||||||
|
}
|
||||||
|
// tssbot-api and tssbot-web will be added here once the API server and
|
||||||
|
// web frontend exist under TSSBOT/server.js and TSSBOT/web/server.js.
|
||||||
|
]
|
||||||
|
};
|
||||||
+16
-6
@@ -1,14 +1,24 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""Entry point for TSSBOT. Skeleton only."""
|
"""Entry point for TSSBOT. Skeleton — idles until BOT/botscript.py is wired."""
|
||||||
|
import signal
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
# Ensure TSSBOT root and BOTS/SHARED are importable
|
# Make TSSBOT root and BOTS/SHARED importable.
|
||||||
_HERE = Path(__file__).resolve().parent
|
_HERE = Path(__file__).resolve().parent
|
||||||
_SHARED = _HERE.parent / "SHARED"
|
|
||||||
sys.path.insert(0, str(_HERE))
|
sys.path.insert(0, str(_HERE))
|
||||||
sys.path.insert(0, str(_SHARED))
|
sys.path.insert(0, str(_HERE.parent / "SHARED"))
|
||||||
|
|
||||||
|
|
||||||
|
def _handle_signal(signum, _frame):
|
||||||
|
print(f"[tssbot] received signal {signum}, exiting")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("TSSBOT skeleton — implement BOT/botscript.py and wire it in here.")
|
signal.signal(signal.SIGTERM, _handle_signal)
|
||||||
sys.exit(0)
|
signal.signal(signal.SIGINT, _handle_signal)
|
||||||
|
print("[tssbot] skeleton booted — replace with real bot once BOT/botscript.py exists")
|
||||||
|
while True:
|
||||||
|
time.sleep(60)
|
||||||
|
|||||||
Reference in New Issue
Block a user