feat(ci): aggiungi workflow push per i test della CLI#16
Merged
Conversation
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.
|
📦 Modifiche nel diff con
|
| 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.js ↔ src/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.js ↔ src/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.js ↔ src/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.js ↔ src/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.js ↔ src/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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
--help) su ogni push a rami diversi damaine 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.Dettagli specifici del workflow:
pusha qualsiasi ramo trannemain, e su tutti gli eventipull_request. Ciò garantisce che i rami delle funzionalità e le modifiche proposte vengano testati.checkout,setup-node(utilizzando Node.js 20),install dependencies, e poi esegueyarn dev --help. Il comandoyarn dev --helpviene utilizzato come un semplice smoke test per confermare la funzionalità di base della CLI.È stata inclusa anche una piccola modifica correlata:
console.loginsrc/gemini.jsper indicare esplicitamente "No changes detected for branch name suggestion" quandogetDiff(false)restituisce null, migliorando la chiarezza per il debug o la comprensione del flusso.