name: CI # Las comillas de "18.0" hacen falta: sin ellas YAML lo lee como un número y # Forgejo descarta el workflow entero, sin avisar. on: push: branches: ["18.0"] pull_request: branches: ["18.0"] jobs: lint: # Misma imagen que el bot de incidencias: ya trae Python y pre-commit, y # el runner le monta la caché con los entornos de los hooks. Así el job no # depende de descargar Python de GitHub en cada ejecución. runs-on: issue-bot steps: - uses: actions/checkout@v4 - name: Run pre-commit run: pre-commit run --all-files --show-diff-on-failure test: # Misma imagen que el bot de incidencias: trae las dependencias de Odoo y # Chromium, y el runner le monta OCB y los repos OCA en /odoo-src. Ver # tools/issue_bot/README.md. runs-on: issue-bot # El runner lanza los contenedores en la red del host (hace falta para # llegar a Forgejo en localhost), y ahí los servicios no tienen nombre: se # llega a PostgreSQL por 127.0.0.1. Escucha solo en esa dirección y en un # puerto propio para no quedar expuesto ni chocar con otro PostgreSQL de # la máquina. El de ecocentral usa el 54329, y su runner y el de este # repo son registros distintos en la misma máquina: un job test de cada # uno puede correr a la vez. services: db: image: postgres:16 env: POSTGRES_USER: odoo POSTGRES_PASSWORD: odoo POSTGRES_DB: postgres PGPORT: "54330" cmd: ["postgres", "-c", "listen_addresses=127.0.0.1"] env: PGHOST: 127.0.0.1 PGPORT: "54330" PGUSER: odoo PGPASSWORD: odoo PGDATABASE: test ODOO_SRC: /odoo-src/18.0 # El runner es el de ecocentral, y su /odoo-src/18.0 trae un clon de # este repo (ecocentral depende de él): se prueba el checkout del PR, # no ese clon. ODOO_SRC_SKIP: addons-cm # Si los tests pasan, deja aquí el .pot de cada addon para el job review. # Está en la caché que el runner monta en todos los jobs. BOT_POT_DIR: /root/.cache/eco-pr-bot/pot steps: - uses: actions/checkout@v4 - name: Tests de los addons run: python3 tools/ci/run_tests.py review: # Revisión del PR por IA (seguridad, idiomas y flujos de Odoo): solo en los # PR que no están marcados como WIP, y después de pasar lint y test. El # resto de filtros (etiqueta no-bot, commit ya revisado) los aplica # review.py. Ver tools/pr_bot/README.md. needs: [lint, test] if: github.event_name == 'pull_request' && !github.event.pull_request.draft runs-on: issue-bot steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # review.py pone las credenciales de la cuenta del bot al hacer push. persist-credentials: false - name: Run bot env: BOT_FORGEJO_URL: ${{ github.server_url }} BOT_FORGEJO_REPO: ${{ github.repository }} # La rama por defecto del repo es 16.0: sin esto el bot tomaría # esa como base. BOT_BASE_BRANCH: "18.0" BOT_FORGEJO_TOKEN: ${{ secrets.BOT_FORGEJO_TOKEN }} # Basta con uno de los dos. CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} BOT_REPO_DIR: ${{ github.workspace }} BOT_ODOO_SRC: /odoo-src/18.0:/odoo-src/18.0-oca BOT_POT_DIR: /root/.cache/eco-pr-bot/pot run: >- python3 tools/pr_bot/review.py run "${{ github.event.pull_request.number }}" --ci-passed