Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4fe2bf75c0 | |||
| c42e190aa7 | |||
| 62d6eb169c |
@@ -55,9 +55,11 @@ pointe de `main`.
|
||||
### Ce qu'est une version
|
||||
|
||||
Un tag git `vMAJEUR.MINEUR.CORRECTIF` (semver), pose sur `main`. Le meme numero
|
||||
est ecrit dans quatre fichiers, que l'outillage tient d'accord entre eux :
|
||||
`pyproject.toml`, `src/plesna_gerance/__init__.py`, `frontend/package.json` et
|
||||
`packaging/installer.iss` (version affichee par l'installeur Windows).
|
||||
est ecrit dans cinq fichiers, que l'outillage tient d'accord entre eux :
|
||||
`pyproject.toml`, `src/plesna_gerance/__init__.py`, `frontend/package.json`,
|
||||
`frontend/package-lock.json` (qui porte lui aussi la version du paquet racine,
|
||||
sans quoi `npm ci` peut refuser de tourner en CI) et `packaging/installer.iss`
|
||||
(version affichee par l'installeur Windows).
|
||||
|
||||
Quand incrementer quoi :
|
||||
|
||||
|
||||
@@ -7,8 +7,11 @@
|
||||
FROM node:22-alpine AS frontend
|
||||
|
||||
WORKDIR /frontend
|
||||
COPY frontend/package.json frontend/package-lock.json* ./
|
||||
RUN npm install
|
||||
# `npm ci` (et non `npm install`) : l'image doit installer exactement l'arbre
|
||||
# du lock, sinon deux builds du même tag peuvent embarquer des dépendances
|
||||
# différentes. Le lock n'est donc plus optionnel.
|
||||
COPY frontend/package.json frontend/package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY frontend/ ./
|
||||
RUN npm run build
|
||||
|
||||
|
||||
1139
frontend/package-lock.json
generated
1139
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "plesna-gerance-frontend",
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
@@ -17,11 +17,11 @@
|
||||
"vue-router": "^4.6.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"@vitejs/plugin-vue": "^6.0.8",
|
||||
"autoprefixer": "^10.4.18",
|
||||
"postcss": "^8.4.35",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"vite": "^5.1.6",
|
||||
"vite": "^7.3.6",
|
||||
"vitest": "^4.1.10"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
; idéal pour un poste personnel. Crée un raccourci Bureau et menu Démarrer.
|
||||
|
||||
#define AppName "Plesna Gérance"
|
||||
#define AppVersion "0.1.0"
|
||||
#define AppVersion "0.1.1"
|
||||
#define AppPublisher "Plesna"
|
||||
#define AppExeName "PlesnaGerance.exe"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "plesna-gerance"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
description = "Extracteur de comptes rendus de gérance Oralia/ICS"
|
||||
requires-python = ">=3.10"
|
||||
dependencies = [
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
"""Pose une version : aligne les fichiers, commite, tague.
|
||||
|
||||
Le numéro de version est écrit à quatre endroits qui doivent rester d'accord
|
||||
(paquet Python, module, frontend, installeur Windows). Les tenir à jour à la
|
||||
main, c'est publier tôt ou tard un tag `v0.3.0` sur un code qui se déclare
|
||||
`0.1.0`. Ce script fait la mise à jour d'un bloc et refuse d'avancer au moindre
|
||||
doute plutôt que de produire une version à moitié cohérente.
|
||||
Le numéro de version est écrit dans cinq fichiers qui doivent rester d'accord
|
||||
(paquet Python, module, frontend, son lock, installeur Windows). Les tenir à
|
||||
jour à la main, c'est publier tôt ou tard un tag `v0.3.0` sur un code qui se
|
||||
déclare `0.1.0`. Ce script fait la mise à jour d'un bloc et refuse d'avancer au
|
||||
moindre doute plutôt que de produire une version à moitié cohérente.
|
||||
|
||||
uv run python scripts/release.py 0.2.0
|
||||
|
||||
@@ -20,25 +20,48 @@ from pathlib import Path
|
||||
|
||||
RACINE = Path(__file__).resolve().parent.parent
|
||||
|
||||
# Un fichier, le motif qui y porte la version, et le remplacement. Le motif doit
|
||||
# capturer la version dans le groupe 1 pour que l'on puisse relire l'ancienne
|
||||
# valeur, et matcher **exactement une fois** (vérifié plus bas).
|
||||
# Un fichier, le motif qui y porte la version, le remplacement, et le nombre
|
||||
# d'occurrences attendues. Le motif doit capturer la version dans son dernier
|
||||
# groupe pour que l'on puisse relire l'ancienne valeur ; le compte est verifie
|
||||
# a chaque passage, pour que le script s'arrete si un fichier change de forme
|
||||
# plutot que de laisser filer une version a moitie posee.
|
||||
PORTEURS_DE_VERSION = [
|
||||
("pyproject.toml", re.compile(r'^version = "([^"]+)"$', re.M), 'version = "{v}"'),
|
||||
(
|
||||
"pyproject.toml",
|
||||
re.compile(r'^version = "([^"]+)"$', re.M),
|
||||
'version = "{v}"',
|
||||
1,
|
||||
),
|
||||
(
|
||||
"src/plesna_gerance/__init__.py",
|
||||
re.compile(r'^__version__ = "([^"]+)"$', re.M),
|
||||
'__version__ = "{v}"',
|
||||
1,
|
||||
),
|
||||
(
|
||||
"frontend/package.json",
|
||||
re.compile(r'^ "version": "([^"]+)",$', re.M),
|
||||
' "version": "{v}",',
|
||||
1,
|
||||
),
|
||||
# Le lock porte la version du paquet racine a deux endroits (en-tete et
|
||||
# packages[""]). Les laisser en arriere fait diverger lock et package.json,
|
||||
# ce que `npm ci` peut refuser en CI selon la version de npm. On s'ancre sur
|
||||
# le nom du paquet, qui n'apparait qu'a ces deux endroits.
|
||||
(
|
||||
"frontend/package-lock.json",
|
||||
re.compile(
|
||||
r'(^(\s*)"name": "plesna-gerance-frontend",\n\s*"version": ")([^"]+)',
|
||||
re.M,
|
||||
),
|
||||
r"\g<1>{v}",
|
||||
2,
|
||||
),
|
||||
(
|
||||
"packaging/installer.iss",
|
||||
re.compile(r'^#define AppVersion "([^"]+)"$', re.M),
|
||||
'#define AppVersion "{v}"',
|
||||
1,
|
||||
),
|
||||
]
|
||||
|
||||
@@ -86,19 +109,23 @@ def verifier_le_depot(version: str, autoriser_hors_main: bool) -> None:
|
||||
def appliquer_la_version(version: str) -> list[str]:
|
||||
"""Écrit la version dans les fichiers porteurs. Renvoie ceux qui ont changé."""
|
||||
modifies = []
|
||||
for chemin_relatif, motif, remplacement in PORTEURS_DE_VERSION:
|
||||
for chemin_relatif, motif, remplacement, attendues in PORTEURS_DE_VERSION:
|
||||
chemin = RACINE / chemin_relatif
|
||||
contenu = chemin.read_text(encoding="utf-8")
|
||||
|
||||
occurrences = motif.findall(contenu)
|
||||
if len(occurrences) != 1:
|
||||
# Le dernier groupe capture la version elle-même, quel que soit le
|
||||
# nombre de groupes servant à l'ancrage.
|
||||
trouvees = [
|
||||
correspondance.groups()[-1] for correspondance in motif.finditer(contenu)
|
||||
]
|
||||
if len(trouvees) != attendues:
|
||||
raise Refus(
|
||||
f"{chemin_relatif} : {len(occurrences)} ligne(s) de version trouvée(s), "
|
||||
"une seule attendue. Le fichier a changé de forme : "
|
||||
f"{chemin_relatif} : {len(trouvees)} version(s) trouvée(s), "
|
||||
f"{attendues} attendue(s). Le fichier a changé de forme : "
|
||||
"corriger le motif dans scripts/release.py."
|
||||
)
|
||||
|
||||
if occurrences[0] == version:
|
||||
if all(trouvee == version for trouvee in trouvees):
|
||||
continue
|
||||
|
||||
chemin.write_text(
|
||||
|
||||
@@ -5,7 +5,7 @@ Ce package extrait les informations structurées des PDFs de comptes rendus
|
||||
de gérance générés par le logiciel de gestion immobilière Oralia/ICS.
|
||||
"""
|
||||
|
||||
__version__ = "0.1.0"
|
||||
__version__ = "0.1.1"
|
||||
|
||||
from .extractor import extract_compte_rendu
|
||||
|
||||
|
||||
Reference in New Issue
Block a user