Compare commits

...
1 Commits
Author SHA1 Message Date
bruno 2f129c3f23 chore(scripts): outil de controle du CI Gitea (runs et jobs par head_sha)
scripts/check_ci.py : interroge l'API Gitea (jeton via git credential fill, User-Agent navigateur) et rapporte l'etat des jobs du run correspondant au HEAD local. Bump automatique de version = demonstration du hook prepare-commit-msg.
2026-09-16 11:20:13 -04:00
10 changed files with 96 additions and 13 deletions
+5 -1
View File
@@ -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é
+3 -3
View File
@@ -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*
+3 -3
View File
@@ -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*
+1 -1
View File
@@ -1 +1 @@
2.3.0
2.3.1
+1 -1
View File
@@ -2626,7 +2626,7 @@ dependencies = [
[[package]]
name = "obsigate-desktop"
version = "2.3.0"
version = "2.3.1"
dependencies = [
"chrono",
"env_logger",
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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",
+1 -1
View File
@@ -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)**
+1 -1
View File
@@ -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": {
+79
View File
@@ -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}")