Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aggiunge automazione per formattare il codice prima di ogni commit #115

Merged
merged 12 commits into from
Sep 27, 2023

Conversation

guizzo
Copy link
Contributor

@guizzo guizzo commented Sep 19, 2023

👋 Hello world! 🌏

Ho avuto questa pensata: perché non impostiamo un automatismo tale che ANCHE chi non ha VSCode configurato per eseguire il "format on save" comunque pusherà codice formattato?

Magari potrà tornare utile, magari non servirà affatto: nel dubbio io PR la faccio 😄

@guizzo guizzo requested a review from a team September 19, 2023 07:00
@guizzo guizzo changed the title Aggiunta automazione per formattare il codice prima di ogni commit Aggiunge automazione per formattare il codice prima di ogni commit Sep 19, 2023
Cadienvan
Cadienvan previously approved these changes Sep 19, 2023
@Cadienvan
Copy link
Member

@Balastrong ho voluto taggarti perché eri stato il primo a buttare giù un'idea di automatismo, che ne pensi?

@nicolaerario
Copy link
Member

L'unico dettaglio che mi sento di aggiungere sull'argomento è che normalmente evito git hooks: mi rallentano nei processi di riscrittura della storia (ops... git hook... disabilita... come si fa...) piuttosto che darmi dei vantaggi reali. Potrebbe essere un mio limite, lo ammetto 😎

@Cadienvan
Copy link
Member

E se mettessimo in piedi una Github action?
Un po' di Google e SO mi hanno portato qui, è un esempio, che ne dite?

name: Format
on:
  pull_request:
    branches: [main]
jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}
      - uses: actions/setup-node@v2
        with:
          node-version: "14.x"
      - run: npm ci
      - run: npm run format
      - name: Commit changes
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Apply formatting changes
          branch: ${{ github.head_ref }}

@Balastrong
Copy link
Contributor

Il problema della github action è che ti fa un altro commit dopo che hai pushato, quindi se dimentichi di fare pull e rifai modifiche sulle stesse parti potresti avere conflitti.

L'hook con --write non è male, capisco il discorso di @nicolaerario se l'hook ti bloccasse il commit, ma così semplicemente applica la formattazione al file in locale prima di fare il commit, quindi non dovrebbe causare nessuna interferenza.

@Balastrong
Copy link
Contributor

Altra questione, se procediamo con questa PR sarebbe anche da aggiornare qua:

run: npx prettier --check "**/*.md"

Magari con un nuovo comando su package.json chiamato format:check o qualcosa di simile che rifà prettier --check "**/*.md" usando però stessa versione di prettier del lockfile

--

Ah poi da capire se ci serve formattare tutto a prescindere . o solamente i markdown **/*.md

@mateonunez
Copy link

Credo che la soluzione ideale possa essere quella di:

  • Mettere Husky sulla repository, utilizzare Prettier con il parametro --write utilizzando l'hook precommit, in questa maniera si potrà formattare il codice automaticamente prima di fare una commit oppure potrà essere lanciato manualmente (credo che debba essere definita anche la formattazione "standard" della repository).
    • format:write (o nome analogo)
  • Scrivere una action di GitHub che effettui dei controlli sulla corretta formattazione del codice.
    • format:check (o nome analogo)
  • Inoltre, per evitare dei push senza pull request, aggiungerei la policy direttamente sul branch principale in maniera tale che non sfugga a nessuno di fare PR.

💪

@davideimola
Copy link
Member

Concordo con @mateonunez husky forse è la soluzione migliore così formattiamo prima di committare!

@nohant
Copy link

nohant commented Sep 21, 2023

Non centro niente, ma la soluzione esposta da @mateonunez mi sembra quella piu corretta nella gestione di ambiente locale e integrazione con Git.

Usare l'hook del precommit evita un sacco di rotture di scatole e di rallentamenti e fa esattamente quello che volete voi.

La action è comunque comoda ma porta ogni tanto alla noia del push/pull con la pipeline

@guizzo
Copy link
Contributor Author

guizzo commented Sep 22, 2023

Come vogliamo procedere quindi con questa PR?

Direi di definire l'approccio da seguire, per poi sistemare di conseguenza e renderlo definitivo, che dite?

@Cadienvan
Copy link
Member

Io sono d'accordo con @mateonunez e @nohant , andrei in quella direzione e poi si può fare merge.

@guizzo
Copy link
Contributor Author

guizzo commented Sep 26, 2023

@Cadienvan @nohant @mateonunez

Quindi, se ho capito bene:

  • Installare la dipendenza husky nel progetto
  • Scrivere un comando npm che vada ad eseguire la formattazione della codebase
  • Impostare il comando sopracitato sull'hook pre-commit
  • Scrivere una Github Action che vada ad effettuare il check sulla formattazione
  • Impostare le policy sul branch main che inibiscano la possibilità di portare codice dentro senza PR

Ho capito bene? È tutto?

@Cadienvan
Copy link
Member

Sì, direi che hai capito bene!
Come nomenclatura sono d'accordo sul chiamare i due comandi format:check e format:write, danno l'idea dell'operazione da svolgere.

La Github action già la abbiamo ma chiaramente andrà modificata perché cambia il nome del comando.

@guizzo
Copy link
Contributor Author

guizzo commented Sep 26, 2023

@Cadienvan Ok, quindi direi che:

  • Installare la dipendenza husky nel progetto
  • Scrivere un comando npm che vada ad eseguire la formattazione della codebase - Lo rinomino
  • Impostare il comando sopracitato sull'hook pre-commit
  • Scrivere una Github Action che vada ad effettuare il check sulla formattazione - Qui ci può pensarci?
  • Impostare le policy sul branch main che inibiscano la possibilità di portare codice dentro senza PR - Qui credo serva qualcuno con i permessi per operare sulle options

@guizzo guizzo force-pushed the automate-code-format branch from f487043 to 52f8795 Compare September 26, 2023 08:40
@guizzo
Copy link
Contributor Author

guizzo commented Sep 26, 2023

E quindi ora:

  • Installare la dipendenza husky nel progetto
  • Scrivere un comando npm che vada ad eseguire la formattazione della codebase
  • Impostare il comando sopracitato sull'hook pre-commit
  • Scrivere una Github Action che vada ad effettuare il check sulla formattazione - Qui ci può pensarci?
  • Impostare le policy sul branch main che inibiscano la possibilità di portare codice dentro senza PR

@Balastrong
Copy link
Contributor

@guizzo la GitHub Action in teoria c'è già, sarebbe da aggiungere su package.json il comando format:check e richiamarlo qua

run: npx prettier --check "**/*.md"

@Cadienvan
Copy link
Member

Main protetto:
Screenshot 2023-09-26 alle 11 17 48

@elgorditosalsero
Copy link
Member

Salve a tutti, apprezzo l'idea, ma vorrei proporre di usare lefthook al posto di Husky.

Perché?

Perché ha feature più interessanti, è più performante sotto alcuni contesti e può runnare più comandi in parallelo.

Sul resto, concordo, e posso anche prendere in carico la scrittura della action in questione, ma valuterei di switchare, in quanto potremmo sfruttare il parallelismo che offre lefthook per future implementazioni.

@guizzo
Copy link
Contributor Author

guizzo commented Sep 26, 2023

@elgorditosalsero Quindi non ho capito, prendi in carico te lo switch verso lefthook e la lavorazione della action?

Rimosso husky per la gestione dei git hook ed introdotto lefthook.
Refactorizzata l'action per il check della formattazione online.
Fixato il comando da usare per prettier nel repo
Fixato problema nella GHA per la formattazione
Fixata l'action di GHA per formattare usando node.
Aggiunto il file .nvmrc per settare la versione di node localmente.
@elgorditosalsero
Copy link
Member

Haloa 👋🏽

Ho fatto un po' di refactor, aggiungendo lefthook e rimuovendo husky.

Come git hooks ho settato:

  • pre-commit: lancia la formattazione degli .MD
  • pre-push: controlla che tutto sia formattato bene, sennò non ti fa pushare 🤟🏽

Ho anche refactorizzato l'action in modo che usi lo script npm.
Non dovrebbe mai fallire se si lavora localmente, dato che il pre-push dovrebbe bloccare il tutto 😄

lefthook

@@ -1,8 +1,11 @@
{
"scripts": {
"format": "prettier --write ."
"format:check": "npx prettier --check \"**/*.md\"",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggerimento: Non utilizzerei npx per avviare Prettier avendolo già installato nelle dipendenze.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, credo che sia stato inserito per evitare di installare le devDeps direttamente dalla action. È strettamente necessario secondo voi?

Personalmente "normalizzerei" gli scripts in maniera tale che vengano tutti avviati in un'unica maniera.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Al momento è l'unica action che abbiamo e che ha bisogno di node.

Volendo si può rimuovere node e lanciare il comando a mano, ma poi se si cambia nel package.json andrebbe cambiato anche nella actions.

Sinceramente non installerei le deps e non le metterei nemmeno in cache, o almeno, non al momento.

CONTRIBUTING.md Outdated Show resolved Hide resolved
package.json Outdated Show resolved Hide resolved
Copy link
Member

@corradopetrelli corradopetrelli left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfetta! Gran bel lavoro!

@Cadienvan
Copy link
Member

Bel lavoro ragazzi.

@corradopetrelli corradopetrelli self-requested a review September 26, 2023 20:42
Copy link
Member

@davideimola davideimola left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@elgorditosalsero elgorditosalsero merged commit a520ed9 into main Sep 27, 2023
@elgorditosalsero elgorditosalsero deleted the automate-code-format branch September 27, 2023 07:53
Cadienvan pushed a commit that referenced this pull request Sep 27, 2023
Aggiunto prettier e conventional commit per formattazione e stesura dei messaggi di commit
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.

9 participants