Lasciare che un LLM revisioni le nostre pull request (così non devi farlo tu)

created: venerdì, ago 8, 2025

Amiamo l’automazione. La usiamo per alimentare la nostra infrastruttura, per scalare i carichi di lavoro fino a zero e—sempre più spesso—per ridurre la quantità di attenzione umana necessaria per consegnare codice di alta qualità. Un ambito che restava ostinatamente manuale erano le review delle pull request. Tra Cursor come IDE, ChatGPT/Codex per il prototipaggio e gemini-cli per controlli rapidi, i nostri flussi locali erano veloci—ma la CI continuava a dipendere da un umano.

Ci siamo quindi posti una domanda semplice: potevamo permettere a un modello di linguaggio di leggere il diff, individuare problemi e commentare direttamente la PR?

Risultato: sì. Sono bastate poche righe di “colla” in GitHub Actions per ottenere revisioni utili e strutturate su ogni pull request.


L’obiettivo

Non cercavamo di sostituire gli esseri umani. Volevamo un primo passaggio che:

Se una modifica va bene, vogliamo che il bot lo dica semplicemente e si tolga di mezzo.


Gli strumenti nel nostro stack


Il flusso di lavoro, end to end

Ecco l’Action completa che eseguiamo. Inseriscila in .github/workflows/gemini-pr.yml:

name: gemini-pr
on:
  workflow_dispatch:
  pull_request:
jobs:
  build:
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: 'true'
        fetch-depth: 0
    - uses: actions-rust-lang/setup-rust-toolchain@v1
      with:
        components: rustfmt, clippy
        cache: false
    - uses: actions/setup-node@v4
      with:
        node-version: 20
    - name: install gemini
      run: |
        npm install -g @google/gemini-cli
    - name: gemini
      run: |
        echo "merging into ${{ github.base_ref }}"
        git diff origin/${{ github.base_ref }} > pr.diff
        echo $PROMPT | gemini > review.md
        cat review.md >> $GITHUB_STEP_SUMMARY
        gh pr comment ${{ github.event.pull_request.number }} --body-file review.md
      env:
        GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        PROMPT: >
          please review the changes of @pr.diff (this pull request) and suggest improvements or provide insights into potential issues. 
          do not document or comment on existing changes, if everything looks good, just say so.
          can you categorise the changes and improvesments into low, medium and high priority?
          Whenever you find an issue, please always provide an file and line number as reference information. if multiple files are affected, please provide a list of files and line numbers.
          provide the output in markdown format and do not include any other text.

Cosa fa ogni parte


Il prompt che lo rende utile

Gli output degli LLM sono buoni quanto le istruzioni. Il nostro mantiene le cose pratiche:

Abbiamo iterato un po’ per arrivarci. Le modifiche più influenti sono state: insistere sulle referenze file/linea e vietare prose extra.


Come appare la revisione

Github Action Comment showing various errors

Su una PR tipica, vediamo sezioni come:

Se tutto va bene, otteniamo una riga: “Looks good.” Perfetto—è esattamente ciò che vogliamo.


Avvertenze e note pratiche


Perché è importante (oltre la comodità)

Le revisioni automatiche rendono gli esseri umani più selettivi con la loro attenzione. Diminuiamo il tempo speso su “rinomina questa variabile” e lo rivediamo su architettura, flussi di dati e confini di sicurezza. Questo significa:

È anche sorprendentemente efficace per la coerenza. Un LLM non dimenticherà il pattern concordato di gestione degli errori tra i servizi o la nostra struttura di logging preferita; applica quei controlli in modo uniforme su ogni PR.


Variazioni che potresti provare

Questo schema funziona con quasi qualsiasi modello o CLI. Alcune estensioni semplici:


Risultati finora

Niente di tutto questo sostituisce l’approvazione umana di un merge. È un filtro leggero che si ripaga già dal primo giorno.