Skip to content

feat(ci): aggiungi workflow push per i test della CLI#16

Merged
moris88 merged 5 commits into
mainfrom
feat/log-no-diff-for-branch-name
Aug 14, 2025
Merged

feat(ci): aggiungi workflow push per i test della CLI#16
moris88 merged 5 commits into
mainfrom
feat/log-no-diff-for-branch-name

Conversation

@moris88

@moris88 moris88 commented Aug 14, 2025

Copy link
Copy Markdown
Owner

Questo commit introduce un nuovo workflow di GitHub Actions per garantire la stabilità e la correttezza della CLI prima di qualsiasi deployment.

Le motivazioni principali per l'aggiunta di questo workflow sono:

  • Prevenire deployment interrotti: Eseguendo un "smoke test" di base (controllando l'output di --help) su ogni push a rami diversi da main e su ogni pull request, possiamo individuare i problemi in anticipo. Questo aiuta a prevenire la fusione di codice che potrebbe compromettere la CLI per gli utenti.
  • Feedback tempestivo per gli sviluppatori: Gli sviluppatori ottengono un feedback immediato sull'eventuale introduzione di regressioni o modifiche che compromettono la funzionalità di base della CLI.
  • Gate di qualità automatizzato: Questo funge da gate di qualità automatizzato, garantendo che la CLI possa almeno inizializzare e visualizzare il suo messaggio di aiuto, che è un requisito fondamentale.

Dettagli specifici del workflow:

  • Si attiva su push a qualsiasi ramo tranne main, e su tutti gli eventi pull_request. Ciò garantisce che i rami delle funzionalità e le modifiche proposte vengano testati.
  • Esegue un checkout, setup-node (utilizzando Node.js 20), install dependencies, e poi esegue yarn dev --help. Il comando yarn dev --help viene utilizzato come un semplice smoke test per confermare la funzionalità di base della CLI.

È stata inclusa anche una piccola modifica correlata:

  • Aggiunto un messaggio console.log in src/gemini.js per indicare esplicitamente "No changes detected for branch name suggestion" quando getDiff(false) restituisce null, migliorando la chiarezza per il debug o la comprensione del flusso.

Questo commit introduce un nuovo workflow di GitHub Actions per garantire la stabilità e la correttezza della CLI prima di qualsiasi deployment.

Le motivazioni principali per l'aggiunta di questo workflow sono:
- **Prevenire deployment interrotti:** Eseguendo un "smoke test" di base (controllando l'output di `--help`) su ogni push a rami diversi da `main` e su ogni pull request, possiamo individuare i problemi in anticipo. Questo aiuta a prevenire la fusione di codice che potrebbe compromettere la CLI per gli utenti.
- **Feedback tempestivo per gli sviluppatori:** Gli sviluppatori ottengono un feedback immediato sull'eventuale introduzione di regressioni o modifiche che compromettono la funzionalità di base della CLI.
- **Gate di qualità automatizzato:** Questo funge da gate di qualità automatizzato, garantendo che la CLI possa almeno inizializzare e visualizzare il suo messaggio di aiuto, che è un requisito fondamentale.

Dettagli specifici del workflow:
- Si attiva su `push` a qualsiasi ramo tranne `main`, e su tutti gli eventi `pull_request`. Ciò garantisce che i rami delle funzionalità e le modifiche proposte vengano testati.
- Esegue un `checkout`, `setup-node` (utilizzando Node.js 20), `install dependencies`, e poi esegue `yarn dev --help`. Il comando `yarn dev --help` viene utilizzato come un semplice smoke test per confermare la funzionalità di base della CLI.

È stata inclusa anche una piccola modifica correlata:
- Aggiunto un messaggio `console.log` in `src/gemini.js` per indicare esplicitamente "No changes detected for branch name suggestion" quando `getDiff(false)` restituisce null, migliorando la chiarezza per il debug o la comprensione del flusso.
feat: Implementare ESLint con Prettier e imporre il linting in CI

Questo commit introduce ESLint con l'integrazione di Prettier nel progetto, con l'obiettivo di standardizzare lo stile del codice e individuare precocemente potenziali problemi. Ciò migliora la qualità e la coerenza del codice in tutta la codebase.

Le modifiche includono:
- **`eslint.config.mjs`**: È stato aggiunto un nuovo file di configurazione ESLint.
  - Utilizza `@eslint/js` per le regole JavaScript raccomandate.
  - `eslint-plugin-prettier/recommended` assicura che le regole di formattazione di Prettier siano applicate come errori ESLint.
  - `eslint-plugin-simple-import-sort` è incluso per mantenere un ordinamento coerente delle importazioni.
  - Sono configurate regole specifiche per:
    - Trattare i problemi di formattazione di Prettier come errori.
    - Disabilitare `react/react-in-jsx-scope` (se JSX non è usato o gestito dalla trasformazione di un framework).
    - Disabilitare `no-unused-vars` e `no-debugger` per evitare conflitti durante lo sviluppo, specialmente quando il codice è generato o in fase di elaborazione.
    - Applicare `simple-import-sort/imports` e `simple-import-sort/exports` per importazioni organizzate.
  - `ignores` sono impostati per i comuni artefatti di build e i file di blocco per prevenire il linting di file non necessari.
- **`.github/workflows/push.yml`**: Il workflow CI per gli eventi di push è stato aggiornato per includere un passo ESLint.
  - Un nuovo passo "Run Eslint" è aggiunto prima del test di base della CLI, garantendo che i controlli di linting siano eseguiti automaticamente ad ogni push. Questo impedisce che codice non formattato o problematico venga unito.
- **`package.json`**: Sono stati aggiunti nuovi script `lint` e `format`, insieme alle loro controparti `:fix`.
  - `yarn lint`: Esegue ESLint con un massimo di 10 avvisi consentiti prima di fallire.
  - `yarn lint:fix`: Risolve automaticamente i problemi ESLint correggibili.
  - `npm run format`: Controlla il codice rispetto alle regole di formattazione di Prettier.
  - `npm run format:fix`: Formatta automaticamente il codice usando Prettier.
  - Sono state aggiunte nuove dipendenze di sviluppo per ESLint, Prettier e i plugin correlati.
- **`package-lock.json`**: Aggiornato per riflettere le nuove dipendenze.
- **`src/ai-provider.js`**, **`src/config.js`**, **`src/gemini.js`**, **`src/git.js`**, **`src/i18n.js`**, **`src/index.js`**, **`src/main.js`**, **`src/ollama.js`**, **`src/openai.js`**, **`src/prompt-loader.js`**, **`src/translator.js`**, **`src/ui.js`**: Modifiche di formattazione minori dovute alla formattazione automatica di Prettier, principalmente l'ordinamento delle importazioni e la spaziatura coerente. Inoltre, alcuni letterali numerici come `900_000` sono stati cambiati in `900000` per coerenza in tutti i file interessati da `prettier`.
- **`locales/en.json`**, **`locales/it.json`**: Piccole modifiche al testo per il messaggio `pushError` per coerenza.

Questa iniziativa è un passo cruciale verso il mantenimento di un elevato standard di qualità del codice e la semplificazione degli sforzi di sviluppo futuri, fornendo un feedback immediato sullo stile del codice e sui potenziali errori.
@github-actions

Copy link
Copy Markdown

📦 Modifiche nel diff con main: 📝 19 file cambiati, ➕ 1534 righe aggiunte, ➖ 157 rimosse 📈

⚠️ Duplicazione codice rilevata: 2.67% (📉 -5.88%) in 5 blocchi duplicati

📊 Statistiche sintetiche (per formato)
Formato Files Linee Cloni Righe duplicate (%)
javascript 13 1443 5 52 (3.60%)
json 3 263 0 0 (0.00%)
yaml 2 245 0 0 (0.00%)
Total 18 1951 5 52 (2.67%)
📄 Elenco duplicati (espandi per vedere i dettagli)
  • src/ollama.jssrc/openai.js (Linee 47-59 ↔ 31-43)
(config) {
  const diff = getDiff(true)
  if (!diff) {
    console.log(chalk.yellow(t('noStagedChanges')))
    process.exit(1)
  }

  const reviewPromptTemplate = getPrompt('review')
  const reviewPrompt = reviewPromptTemplate
    .replace('{minReviewScore}', config.minReviewScore || 6)
    .replace('{diff}', diff)

  return callOllama
  • src/ollama.jssrc/openai.js (Linee 62-73 ↔ 46-57)
(config) {
  const diff = getDiff(true)
  if (!diff) {
    console.log(chalk.yellow(t('noStagedChanges')))
    process.exit(1)
  }
  const commitPromptTemplate = getPrompt('commit')
  const prompt = commitPromptTemplate
    .replace('{maxSubjectLength}', config.maxSubjectLength || 50)
    .replace('{diff}', diff)

  return callOllama
  • src/main.jssrc/main.js (Linee 259-265 ↔ 238-244)
() {
  await initialize()
  const branches = getLocalBranches()
    .split('\n')
    .map((b) => b.trim())
    .filter((b) => b && !b.startsWith('*'))
  const targetBranch = await selectBranchToCheckout
  • src/gemini.jssrc/openai.js (Linee 37-49 ↔ 31-43)
(config) {
  const diff = getDiff(true)
  if (!diff) {
    console.log(chalk.yellow(t('noStagedChanges')))
    process.exit(1)
  }

  const reviewPromptTemplate = getPrompt('review')
  const reviewPrompt = reviewPromptTemplate
    .replace('{minReviewScore}', config.minReviewScore || 6)
    .replace('{diff}', diff)

  return callGemini
  • src/gemini.jssrc/openai.js (Linee 52-63 ↔ 46-57)
(config) {
  const diff = getDiff(true)
  if (!diff) {
    console.log(chalk.yellow(t('noStagedChanges')))
    process.exit(1)
  }
  const commitPromptTemplate = getPrompt('commit')
  const prompt = commitPromptTemplate
    .replace('{maxSubjectLength}', config.maxSubjectLength || 50)
    .replace('{diff}', diff)

  return callGemini

@moris88 moris88 merged commit 27d4ed9 into main Aug 14, 2025
3 checks passed
@moris88 moris88 deleted the feat/log-no-diff-for-branch-name branch August 14, 2025 10:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant