ognibit-logo
Menu
  • Home
  • Chi Sono
  • Contatti
  • Servizi
  • Computer Science
  • Blog
  • Informativa sulla privacy
Menu

Bumpversion – Come gestire le versioni del software

Posted on Maggio 31, 2019Agosto 4, 2022 by omar

La gestione delle versioni del software spesso dà vita a dibattiti infiniti nei team di sviluppo, soprattutto per i nomi non numerici. Un metodo universalmente riconosciuto per dare un numero alle modifiche apportate al software è stato definito molti anni fa e si chiama Semantic Versioning. Nulla di nuovo per chi utilizza i software opensource: si tratta di tre numeri (major, minor, patch), crescenti nel tempo, che indicano l’impatto delle modifiche rispetto alla precedente versione.

Su questo principio si basa anche Bumpversion, il tool che vedremo in questo articolo. Sebbene sia molto diffuso soprattutto tra i progetti Python, nulla vieta di usarlo nel proprio codice sorgente. Esso, infatti, rimpiazza una versione con la successiva, e se si utilizza GIT, si arrangia a mettere il tag giusto.

Installare Bumpversion

Bumpversion fa parte dell’ecosistema Python e può venire facilmente installato attraverso pip.

pip install --upgrade bumpversion

Una volta terminata l’installazione avrete a disposizione il tool da riga di comando per gestire le versioni del software.

Configurare Bumpversion

Bumpversion permette di gestire le versioni del software in modo molto snello, senza stravolgimenti del proprio metodo di sviluppo. Basta infatti introdurre nella cartella principale del vostro progetto il file .bumpversion.cfg e inserire al suo interno queste poche righe:

[bumpversion]
current_version = 0.1.0
commit = True
tag = True

[bumpversion:file:README.md]
[bumpversion:file:transaction/__init__.py]

Le sezioni [bumpversion:file:] indicano in quali file il tool dovrà cercare e sostituire il numero di versione. Quando configurate bumpversion dovete solo accertarvi che il valore di current_version coincida esattamente con la stringa che indica la versione nei vari file sorgenti.

Bumpversion: Esempio Pratico

Vediamo di seguito come ho introdotto il versionamento nel mio progetto IngCsv.

I file con versione

Ho deciso di inserire la versione in due punti nel codice. Il primo è il file __init__.py nel quale viene impostato l’attributo __version__ come da PEP 396.

# __init__.py
__version__ = '0.1.0'

L’ho poi inserito nel README.md per versionare anche la documentazione.

### Status
Version: 0.1.0

Infine ho aggiunto del codice nel main del programma per visualizzazione la versione con il parametro --version tipico dei programmi Unix.

from transaction import EstrattoConto, read_csv, __version__
[...]
ap.add_argument("-v", "--version", action="version", version='%(prog)s ' + __version__)

Bumpversion e Git

Di seguito ho predisposto una lista di comandi utili quando si lavora con Bumpversion. I primi permettono di avere un’anteprima delle modifiche che verranno fatte per aggiornare la versione. Il tool incrementa automaticamente di 1 il valore, mantenendo la coerenza. Quindi se siamo alla versione 1.2.3 e si chiede una minor, avremo 1.3.0.

La migrazione vera e propria è il comando dopo il commit:

bumpversion --dry-run --allow-dirty --verbose patch
# bumpversion --dry-run --allow-dirty --verbose minor
# bumpversion --dry-run --allow-dirty --verbose major

git add .
git commit -m "Started Versioning"
bumpversion patch

python ingcsv.py --version
 ingcsv.py 0.1.1

Avendo inserito nella configurazione l’abilitazione a commit e tag, con un solo comando avremo il nostro repository in ordine e con un tag dedicato solo al cambio versione.

Articoli recenti

  • Python Multilingua con GetText
  • PyData Venice #0 @ ESC
  • Python CLI con Fire
  • Bumpversion – Come gestire le versioni del software
  • PyConX 2019 – Python a Firenze

Categorie

  • Artificial Intelligence
  • Conferenze
  • Data Scientist Tool
  • progetti
  • python
© 2023 Omar Rampado | Powered by Minimalist Blog WordPress Theme