diff --git a/CHANGELOG.md b/CHANGELOG.md index b3a3c20..e6bd04a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/), et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). > **En cours de développement** : les changements à venir sont listés dans la section -> [Unreleased](#unreleased). La dernière version livrée est **2.3.0**. +> [Unreleased](#unreleased). La dernière version livrée est **2.3.1**. --- @@ -14,6 +14,10 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.3.1] — 2026-09-16 + +--- + ## [2.3.0] — 2026-09-16 ### Ajouté diff --git a/README.fr.md b/README.fr.md index d770fd0..c0f19bf 100644 --- a/README.fr.md +++ b/README.fr.md @@ -4,7 +4,7 @@ **Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive. -[![Version](https://img.shields.io/badge/Version-2.3.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.3.1-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -916,8 +916,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l ## 📝 Changelog -Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.3.0). +Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.3.1). --- -*Projet : ObsiGate | Version : 2.3.0 | Dernière mise à jour : Juin 2026* +*Projet : ObsiGate | Version : 2.3.1 | Dernière mise à jour : Juin 2026* diff --git a/README.md b/README.md index 93e5671..4c38d1e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface. -[![Version](https://img.shields.io/badge/Version-2.3.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.3.1-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -1085,8 +1085,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) ## 📝 Changelog -See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.3.0). +See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.3.1). --- -*Project: ObsiGate | Version: 2.3.0 | Last updated: May 2026* +*Project: ObsiGate | Version: 2.3.1 | Last updated: May 2026* diff --git a/VERSION b/VERSION index 276cbf9..2bf1c1c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.3.0 +2.3.1 diff --git a/desktop/Cargo.lock b/desktop/Cargo.lock index 5b9f549..5a1604b 100644 --- a/desktop/Cargo.lock +++ b/desktop/Cargo.lock @@ -2626,7 +2626,7 @@ dependencies = [ [[package]] name = "obsigate-desktop" -version = "2.3.0" +version = "2.3.1" dependencies = [ "chrono", "env_logger", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index cdd8d0c..edc01cb 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obsigate-desktop" -version = "2.3.0" +version = "2.3.1" description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian" authors = ["Bruno Charest"] edition = "2021" diff --git a/desktop/tauri.conf.json b/desktop/tauri.conf.json index dc64732..6c5ccb7 100644 --- a/desktop/tauri.conf.json +++ b/desktop/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json", "productName": "ObsiGate", - "version": "2.3.0", + "version": "2.3.1", "identifier": "com.obsigate.desktop", "build": { "frontendDist": "../frontend", diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 1acd2ac..dcd731f 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,6 @@ # ObsiGate — Roadmap -> **Version :** 2.3.0 | **Dernière mise à jour :** 2026-09-16 +> **Version :** 2.3.1 | **Dernière mise à jour :** 2026-09-16 > **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact > vers les fonctionnalités livrées. > - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)** diff --git a/package.json b/package.json index c742676..a21441c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsigate", - "version": "2.3.0", + "version": "2.3.1", "description": "**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.", "main": "patch.js", "directories": { diff --git a/scripts/check_ci.py b/scripts/check_ci.py new file mode 100644 index 0000000..adc5042 --- /dev/null +++ b/scripts/check_ci.py @@ -0,0 +1,79 @@ +"""Vérifie l'état du dernier run CI Gitea d'ObsiGate (lecture seule).""" +import json +import subprocess +import sys +import urllib.request + +REPO = "Projets/ObsiGate" +BASE = f"https://git.dracodev.net/api/v1/repos/{REPO}" +UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36" + +cred = subprocess.run( + ["git", "credential", "fill"], + input="protocol=https\nhost=git.dracodev.net\n\n", + capture_output=True, + text=True, + cwd=r"C:\dev\git\python\ObsiGate", +) +token = "" +for line in cred.stdout.splitlines(): + if line.startswith("password"): + token = line.split("=", 1)[1] +if not token: + raise SystemExit("pas de jeton git disponible") + +sha = subprocess.run( + ["git", "rev-parse", "HEAD"], + capture_output=True, + text=True, + cwd=r"C:\dev\git\python\ObsiGate", +).stdout.strip() + + +def get(path: str): + req = urllib.request.Request( + f"{BASE}{path}", + headers={ + "Authorization": f"token {token}", + "Accept": "application/json", + "User-Agent": UA, + }, + ) + with urllib.request.urlopen(req, timeout=25) as resp: + return json.load(resp) + + +runs = get("/actions/runs?limit=10").get("workflow_runs", []) +print(f"HEAD local : {sha[:8]} — {len(runs)} run(s) récent(s)") +target = None +for run in runs: + head = str(run.get("head_sha") or "") + title = run.get("display_title") or run.get("name") or "?" + flag = " <== HEAD" if head.startswith(sha[:8]) else "" + print(f" #{run.get('id')} {title[:60]} | {run.get('status')}/{run.get('conclusion')} | {head[:8]}{flag}") + if head.startswith(sha[:8]) and target is None: + target = run + +if target is None: + print("Aucun run pour le HEAD courant (encore en file d'attente ?)") + sys.exit(0) + +jobs_resp = get(f"/actions/runs/{target['id']}/jobs") +print(f"run #{target['id']} : status={target.get('status')} conclusion={target.get('conclusion')} " + f"started={target.get('run_started_at')} updated={target.get('updated_at')}") +print(f"clés jobs: {list(jobs_resp)[:6]}") +for job in jobs_resp.get("workflow_jobs", jobs_resp.get("jobs", [])) or []: + print(f" - {job.get('name')}: {job.get('status')}/{job.get('conclusion')}") + if job.get("status") != "completed": + for step in job.get("steps", []) or []: + print(f" · {step.get('name')}: {step.get('status')}/{step.get('conclusion')}") + +try: + runners = get("/actions/runners") + entries = runners.get("runners", runners) if isinstance(runners, dict) else runners + print(f"runners: {len(entries) if isinstance(entries, list) else entries}") + if isinstance(entries, list): + for runner in entries: + print(f" - {runner.get('name')} status={runner.get('status')} labels={runner.get('labels')}") +except Exception as exc: # noqa: BLE001 + print(f"runners indisponibles: {exc}")