2026-02-15 01:07:25 -05:00
<!-- - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- multilingual suffix: en, fr -->
<!-- no suffix: en -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- [en] -->
# Release
A guide on how to generate a release.
<!-- [fr] -->
# Publication
2026-03-07 00:29:49 -05:00
Un guide sur la génération d'une publication.
2026-02-15 01:07:25 -05:00
<!-- [en] -->
## Clean environment before generating new release
Before the cleaning, check if existing file isn't committed, not pushed or in stash.
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
## Nettoyer l'environnement avant de générer une nouvelle publication
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Avant le nettoyage, vérifiez si des fichiers existants ne sont pas commités, poussés ou dans le stash.
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
.venv.erplibre/bin/repo forall -pc "git stash list"
./script/git/git_show_code_diff_repo_manifest.py
```
<!-- [en] -->
This will erase everything in addons. Useful before creating docker, manifest and do a release.
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Ceci effacera tout dans les addons. Utile avant de créer un docker, un manifeste et de faire une publication.
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
./script/git/clean_repo_manifest.sh
```
<!-- [en] -->
And update all from dev to merge into prod.
Test all supported Odoo version :
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Et mettre à jour tout depuis dev pour fusionner dans prod.
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Tester toutes les versions Odoo supportées :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
make install_odoo_all_version
```
<!-- [en] -->
## Validate environment
- Check if each manifest version like [manifest/default.dev.odoo16.0.xml ](../manifest/default.dev.odoo16.0.xml ) is ready for production.
- Run test :
<!-- [fr] -->
## Valider l'environnement
2026-03-07 00:29:49 -05:00
- Vérifier si chaque version de manifeste comme [manifest/default.dev.odoo16.0.xml ](../manifest/default.dev.odoo16.0.xml ) est prête pour la production.
- Exécuter les tests :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
make test_full_fast
```
<!-- [en] -->
### Format code
To format all code, run:
<!-- [fr] -->
### Formater le code
2026-03-07 00:29:49 -05:00
Pour formater tout le code, exécutez :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
make format
```
<!-- [en] -->
### Update documentations
To generate Markdown in directory `./doc` , run:
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
### Mettre à jour les documentations
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Pour générer le Markdown dans le répertoire `./doc` , exécutez :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
make doc_markdown
```
<!-- [en] -->
### Test docker generate
To generate a docker, run:
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
### Tester la génération docker
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Pour générer un docker, exécutez :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
2026-02-16 10:30:53 -05:00
make docker_build_odoo_18
2026-02-15 01:07:25 -05:00
```
<!-- [en] -->
### Rename old version to new version
Search old version, like :
<!-- [fr] -->
### Renommer l'ancienne version vers la nouvelle version
Rechercher l'ancienne version, comme :
<!-- [common] -->
```bash
grep --color=always --exclude-dir={.repo,.venv,.git} --exclude="*.svg" -nri v1.6.0
```
<!-- [en] -->
Replace if need it to new version.
Update file `./pyproject.toml` in [tool.poetry], line `version =` .
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Remplacer si nécessaire par la nouvelle version.
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Mettre à jour le fichier `./pyproject.toml` dans [tool.poetry], ligne `version =` .
2026-02-15 01:07:25 -05:00
<!-- [en] -->
### Test production Ubuntu environment
Follow instructions in [PRODUCTION.md ](./PRODUCTION.md ).
Test installation with code generator Geomap:
<!-- [fr] -->
### Tester l'environnement de production Ubuntu
Suivre les instructions dans [PRODUCTION.md ](./PRODUCTION.md ).
2026-03-07 00:29:49 -05:00
Tester l'installation avec le générateur de code Geomap :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
make addons_install_code_generator_full
```
<!-- [en] -->
### Update image_db
To generate database images in directory `./image_db` , run:
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
### Mettre à jour image_db
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Pour générer les images de base de données dans le répertoire `./image_db` , exécutez :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
make db_clean_cache
make config_gen_all
make image_db_create_all_parallel
```
<!-- [en] -->
To test it, you need to clean caches and install it:
<!-- [fr] -->
Pour le tester, vous devez nettoyer les caches et l'installer :
<!-- [common] -->
```bash
./script/database/db_restore.py --clean_cache
./script/database/db_restore.py --database test --image erplibre_website
```
<!-- [en] -->
## Generate new prod and release
Generate production manifest and freeze all repos versions.
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
## Générer la nouvelle production et publication
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Générer le manifeste de production et geler toutes les versions des dépôts.
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
.venv.erplibre/bin/repo manifest -r -o ./default.xml
```
<!-- [en] -->
Update ERPLIBRE_VERSION variable in [env_var.sh ](../env_var.sh ), [Dockerfile.prod ](../docker/Dockerfile.prod.pkg )
and [docker-compose ](../docker-compose.yml ).
Generate [poetry ](./POETRY.md ) and keep only missing dependencies, remove updates.
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Mettre à jour la variable ERPLIBRE_VERSION dans [env_var.sh ](../env_var.sh ), [Dockerfile.prod ](../docker/Dockerfile.prod.pkg )
2026-02-15 01:07:25 -05:00
et [docker-compose ](../docker-compose.yml ).
2026-03-07 00:29:49 -05:00
Générer [poetry ](./POETRY.md ) et garder uniquement les dépendances manquantes, retirer les mises à jour.
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
./script/poetry/poetry_update.py
```
<!-- [en] -->
When running script ./script/poetry/poetry_update.py, note manually inserted dependencies, stash all changes and add it
manually.
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Lors de l'exécution du script ./script/poetry/poetry_update.py, noter les dépendances insérées manuellement, stasher tous les changements et les ajouter
2026-02-15 01:07:25 -05:00
manuellement.
<!-- [common] -->
```bash
poetry add DEPENDENCY
```
<!-- [en] -->
Understand differences from last release:
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Comprendre les différences depuis la dernière publication :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
# Get all differences between the last tag and HEAD, to update the CHANGELOG.md
# ERPLibre
git diff v#.#.#..HEAD
# All repo
.venv.erplibre/bin/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
```
<!-- [en] -->
Simplification tools:
<!-- [fr] -->
Outils de simplification :
<!-- [common] -->
```bash
# Show all divergence repository with production
make repo_diff_manifest_production
# Short version with statistics
make repo_diff_stat_from_last_version
# Long version
make repo_diff_from_last_version
```
<!-- [en] -->
Update file [CHANGELOG.md ](../CHANGELOG.md ) and create a section with new version, use next command to read all changes.
Create a branch release/#.#.# and create a pull request to branch master with your commit:
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Mettre à jour le fichier [CHANGELOG.md ](../CHANGELOG.md ) et créer une section avec la nouvelle version, utiliser la commande suivante pour lire tous les changements.
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Créer une branche release/#.#.# et créer une demande de fusion vers la branche master avec votre commit :
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
git commit -am "Release v#.#.#"
```
<!-- [en] -->
Review by your peers, test the docker file and **merge to master** .
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
Faire réviser par vos pairs, tester le fichier docker et **fusionner dans master** .
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
git checkout master
git merge --no-ff RELEASE_BRANCH
```
<!-- [en] -->
Add comment `Release v#.#.#` .
<!-- [fr] -->
Ajouter le commentaire `Release v#.#.#` .
<!-- [en] -->
## Create tag
Add a tag on the commit in branch master with your release. When adding tag, be sure to update default.xml
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
## Créer le tag
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Ajouter un tag sur le commit dans la branche master avec votre publication. Lors de l'ajout du tag, assurez-vous de mettre à jour default.xml
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
git tag v#.#.#
# Push your tags
git push --tags
# Add tags for all repo
.venv.erplibre/bin/repo forall -pc "git tag ERPLibre/v#.#.#"
make tag_push_all
```
<!-- [en] -->
## Generate and push docker
Important to generate container after push git tags, otherwise the git version will be wrong.
When building your docker with script
> make docker_build_release
List your docker version
> docker images
You need to push your docker image and update your tag, like 1.0.1:
> docker push technolibre/erplibre:VERSION
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
## Générer et pousser le docker
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Important de générer le conteneur après avoir poussé les tags git, sinon la version git sera incorrecte.
2026-02-15 01:07:25 -05:00
Lors de la construction de votre docker avec le script
> make docker_build_release
Lister votre version docker
> docker images
2026-03-07 00:29:49 -05:00
Vous devez pousser votre image docker et mettre à jour votre tag, comme 1.0.1 :
2026-02-15 01:07:25 -05:00
> docker push technolibre/erplibre:VERSION
<!-- [en] -->
## Do a release on github
Visit `https://github.com/ERPLibre/ERPLibre/releases/new` and create a release named `v#.#.#` and copy information from
CHANGELOG.md.
<!-- [fr] -->
## Faire une publication sur github
2026-03-07 00:29:49 -05:00
Visiter `https://github.com/ERPLibre/ERPLibre/releases/new` et créer une publication nommée `v#.#.#` et copier les informations depuis
2026-02-15 01:07:25 -05:00
CHANGELOG.md.
<!-- [en] -->
# TIPS
## Compare repo differences with another ERPLibre project
To generate a list of differences between repo git commit
<!-- [fr] -->
# ASTUCES
2026-03-07 00:29:49 -05:00
## Comparer les différences de dépôts avec un autre projet ERPLibre
2026-02-15 01:07:25 -05:00
2026-03-07 00:29:49 -05:00
Pour générer une liste de différences entre les commits git des dépôts
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```bash
./script/git/git_change_remote.py --sync_to /path/to/directory
```
<!-- [en] -->
## Semantic versioning
<!-- [fr] -->
2026-03-07 00:29:49 -05:00
## Versionnage sémantique
2026-02-15 01:07:25 -05:00
<!-- [common] -->
```
< valid semver > ::= < version core > "-" < pre-release > "+" < build >
```