added venv to script
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
FROM --platform=$TARGETPLATFORM python:3.12-slim-bookworm
|
||||||
|
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
PIP_NO_CACHE_DIR=1
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install Python dependencies first to leverage layer caching.
|
||||||
|
COPY requirements.txt ./
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy application source.
|
||||||
|
COPY jira_jotty_sync.py ./
|
||||||
|
COPY sync_config.json.template ./
|
||||||
|
|
||||||
|
# Run as non-root for better container security.
|
||||||
|
RUN useradd --create-home --uid 10001 appuser && chown -R appuser:appuser /app
|
||||||
|
USER appuser
|
||||||
|
|
||||||
|
# Run every 5 minutes via cron
|
||||||
|
CMD echo "*/5 * * * * cd /app && python jira_jotty_sync.py --direction both >> /tmp/sync.log 2>&1" | crontab - && \
|
||||||
|
crond -f
|
||||||
+45
-2
@@ -14,11 +14,54 @@ Usage:
|
|||||||
Configuration is stored in sync_config.json (see template below).
|
Configuration is stored in sync_config.json (see template below).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Auto-venv setup: if not running inside a virtual environment, create one,
|
||||||
|
# install requirements, and re-execute this script with the venv Python.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def _ensure_venv():
|
||||||
|
"""Create .venv if missing, install requirements, then re-execute self."""
|
||||||
|
# Check if we're already in a venv
|
||||||
|
in_venv = getattr(sys, "prefix", None) != getattr(sys, "base_prefix", None)
|
||||||
|
if in_venv:
|
||||||
|
return
|
||||||
|
|
||||||
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
venv_path = os.path.join(script_dir, ".venv")
|
||||||
|
requirements_file = os.path.join(script_dir, "requirements.txt")
|
||||||
|
|
||||||
|
# Create virtual environment if it doesn't exist
|
||||||
|
if not os.path.isdir(venv_path):
|
||||||
|
print(f"[setup] Creating virtual environment in {venv_path} ...")
|
||||||
|
subprocess.run([sys.executable, "-m", "venv", venv_path], check=True)
|
||||||
|
|
||||||
|
# Determine the venv python executable (cross-platform)
|
||||||
|
if os.name == "nt": # Windows
|
||||||
|
venv_python = os.path.join(venv_path, "Scripts", "python.exe")
|
||||||
|
else:
|
||||||
|
venv_python = os.path.join(venv_path, "bin", "python")
|
||||||
|
|
||||||
|
# Install requirements if not already installed
|
||||||
|
print(f"[setup] Installing dependencies ...")
|
||||||
|
subprocess.run(
|
||||||
|
[venv_python, "-m", "pip", "install", "--upgrade", "-r", requirements_file],
|
||||||
|
check=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Re-execute this script using the venv Python
|
||||||
|
print("[setup] Relaunching with virtual environment ...")
|
||||||
|
sys.exit(subprocess.call([venv_python, __file__] + sys.argv[1:]))
|
||||||
|
|
||||||
|
|
||||||
|
_ensure_venv()
|
||||||
|
del _ensure_venv # Clean up namespace
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import time
|
import time
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|||||||
Reference in New Issue
Block a user