name: Daily Meta Optimizer Formación on: # schedule: # - cron: '0 4 * * *' # 6:00 AM hora española — antes que Viviful (07:00), evita competir por rate limit de la misma cuenta Meta workflow_dispatch: jobs: run: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install dependencies run: pip install -r requirements.txt - name: Run optimizer env: META_APP_ID: ${{ secrets.META_APP_ID }} META_APP_SECRET: ${{ secrets.META_APP_SECRET }} META_ACCESS_TOKEN: ${{ secrets.META_ACCESS_TOKEN }} META_AD_ACCOUNT_ID: ${{ secrets.META_AD_ACCOUNT_ID }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} BASEROW_URL: ${{ secrets.BASEROW_URL }} BASEROW_TOKEN: ${{ secrets.BASEROW_TOKEN }} BASEROW_TABLE_ACTIONS: ${{ secrets.BASEROW_TABLE_ACTIONS }} BASEROW_TABLE_CREATIVES: ${{ secrets.BASEROW_TABLE_CREATIVES }} BASEROW_TABLE_LOGS: ${{ secrets.BASEROW_TABLE_LOGS }} BASEROW_TABLE_SNAPSHOTS: ${{ secrets.BASEROW_TABLE_SNAPSHOTS }} AIRTABLE_TOKEN: ${{ secrets.AIRTABLE_TOKEN }} AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }} SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }} SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }} META_CAMPAIGN_PREFIX: RoiFormacion DRY_RUN: ${{ vars.DRY_RUN }} run: python run.py - name: Upload log if: always() uses: actions/upload-artifact@v4 with: name: meta-optimizer-formacion-log-${{ github.run_id }} path: logs/ retention-days: 30