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 { withCredentials([ string(credentialsId: 'TWITTER_USERNAME', variable: 'TWITTER_USERNAME'), string(credentialsId: 'TWITTER_PASSWORD', variable: 'TWITTER_PASSWORD'), string(credentialsId: 'TWITTER_3CAT_EMAIL', variable: 'TWITTER_3CAT_EMAIL'), string(credentialsId: 'TWITTER_3CAT_HANDLE', variable: 'TWITTER_3CAT_HANDLE'), string(credentialsId: 'BSKY_3CAT_HANDLE', variable: 'BSKY_3CAT_HANDLE'), string(credentialsId: 'BSKY_3CAT_APP_PASSWORD', variable: 'BSKY_3CAT_APP_PASSWORD') ]) { sh ''' set -euxo pipefail "${VENV_DIR}/bin/python" twitter2bsky.py \ --twitter-username "$TWITTER_USERNAME" \ --twitter-password "$TWITTER_PASSWORD" \ --twitter-email "$TWITTER_3CAT_EMAIL" \ --twitter-handle "$TWITTER_3CAT_HANDLE" \ --bsky-handle "$BSKY_3CAT_HANDLE" \ --bsky-password "$BSKY_3CAT_APP_PASSWORD" \ --bsky-base-url https://eurosky.social \ --bsky-langs ca ''' } } } } post { always { // Optional: keep logs/artifacts if your script writes any archiveArtifacts artifacts: '*.log, *.json', allowEmptyArchive: true } } }