pipeline { agent { label 'macmini' } options { timeout(time: 15, unit: 'MINUTES') timestamps() buildDiscarder(logRotator(numToKeepStr: '10')) disableConcurrentBuilds() } triggers { cron('H/30 * * * *') } stages { stage('Checkout Code') { steps { checkout scm } } stage('Setup Python & Install Dependencies') { steps { sh ''' set -e cd "$WORKSPACE" # Crea el venv python3 -m venv venv # Usa python3 -m pip per evitar problemes de shebang amb sh/dash "$WORKSPACE/venv/bin/python3" -m pip install --upgrade pip wheel setuptools "$WORKSPACE/venv/bin/python3" -m pip install -U \ atproto \ tweety-ns \ playwright \ httpx \ arrow \ python-dotenv \ moviepy \ grapheme # Verificació moviepy "$WORKSPACE/venv/bin/python3" -m pip list | grep moviepy \ || { echo 'MoviePy installation failed!'; exit 1; } # Verificació FFmpeg ffmpeg -version \ || { echo 'FFmpeg is not installed!'; exit 1; } # Verificació imports "$WORKSPACE/venv/bin/python3" -c "import moviepy; print('moviepy OK')" "$WORKSPACE/venv/bin/python3" -c "import atproto; print('atproto OK')" "$WORKSPACE/venv/bin/python3" -c "import playwright; print('playwright OK')" # Instal·lació binaris Playwright PLAYWRIGHT_BROWSERS_PATH=/var/jenkins_home/.playwright-browsers \ "$WORKSPACE/venv/bin/python3" -m playwright install chromium ''' } } stage('Run Script') { steps { // Securely inject Jenkins credentials as environment variables withCredentials([ string(credentialsId: 'TWITTER_USERNAME', variable: 'TWITTER_USERNAME'), string(credentialsId: 'TWITTER_PASSWORD', variable: 'TWITTER_PASSWORD'), string(credentialsId: 'TWITTER_CAT112_EMAIL', variable: 'TWITTER_CAT112_EMAIL'), string(credentialsId: 'TWITTER_EMERGENCIESCAT_HANDLE', variable: 'TWITTER_EMERGENCIESCAT_HANDLE'), string(credentialsId: 'BSKY_CAT112_HANDLE', variable: 'BSKY_CAT112_HANDLE'), string(credentialsId: 'BSKY_CAT112_PASSWORD', variable: 'BSKY_CAT112_PASSWORD') ]) { sh ''' # Activate the exact same virtual environment so Python finds Playwright and Arrow . venv/bin/activate # Run the daemon with the injected credentials python3 twitter2bsky.py \ --twitter-username "$TWITTER_USERNAME" \ --twitter-password "$TWITTER_PASSWORD" \ --twitter-email "$TWITTER_CAT112_EMAIL" \ --twitter-handle "$TWITTER_EMERGENCIESCAT_HANDLE" \ --bsky-handle "$BSKY_CAT112_HANDLE" \ --bsky-password "$BSKY_CAT112_PASSWORD" \ --bsky-base-url https://eurosky.social \ --bsky-langs ca ''' } } } } }