Enable tray icon and fix build scripts
CI / lint (push) Successful in 25s
CI / security (push) Successful in 15s
CI / test (push) Successful in 30s
CI / build (push) Successful in 14s
CI / e2e (push) Failing after 25s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
CI / lint (push) Successful in 25s
CI / security (push) Successful in 15s
CI / test (push) Successful in 30s
CI / build (push) Successful in 14s
CI / e2e (push) Failing after 25s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled
This commit is contained in:
Generated
+5598
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -9,7 +9,7 @@ edition = "2021"
|
|||||||
tauri-build = { version = "2", features = [] }
|
tauri-build = { version = "2", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tauri = { version = "2", features = [] }
|
tauri = { version = "2", features = ["tray-icon"] }
|
||||||
tauri-plugin-shell = "2"
|
tauri-plugin-shell = "2"
|
||||||
tauri-plugin-dialog = "2"
|
tauri-plugin-dialog = "2"
|
||||||
tauri-plugin-notification = "2"
|
tauri-plugin-notification = "2"
|
||||||
|
|||||||
+35
-3
@@ -122,10 +122,42 @@ Produits :
|
|||||||
### Premier lancement
|
### Premier lancement
|
||||||
|
|
||||||
1. **Lance l'application** (menu ou ligne de commande)
|
1. **Lance l'application** (menu ou ligne de commande)
|
||||||
|
- 💡 *Premier lancement recommandé depuis un terminal* pour voir le mot de passe admin généré
|
||||||
2. Le backend Python démarre automatiquement → health check sur `127.0.0.1:17890`
|
2. Le backend Python démarre automatiquement → health check sur `127.0.0.1:17890`
|
||||||
3. La fenêtre s'ouvre sur l'interface ObsiGate
|
3. La fenêtre s'ouvre sur l'interface ObsiGate (écran de connexion si l'auth est activée)
|
||||||
4. **Sélectionne le dossier parent de tes vaults** Obsidian via le sélecteur natif
|
4. **Connecte-toi** avec le compte admin créé automatiquement (voir [Compte administrateur](#compte-administrateur))
|
||||||
5. L'indexation démarre automatiquement
|
5. **Sélectionne le dossier parent de tes vaults** Obsidian via le sélecteur natif
|
||||||
|
6. L'indexation démarre automatiquement
|
||||||
|
|
||||||
|
### Compte administrateur
|
||||||
|
|
||||||
|
Au premier démarrage, un compte administrateur est créé automatiquement :
|
||||||
|
|
||||||
|
- **Login** : `admin` (modifiable via la variable d'environnement `OBSIGATE_ADMIN_USER`)
|
||||||
|
- **Mot de passe** : généré aléatoirement (16 caractères) et affiché **une seule fois** dans les logs
|
||||||
|
|
||||||
|
Le mot de passe apparaît dans la sortie du terminal sous cette forme :
|
||||||
|
```
|
||||||
|
============================================================
|
||||||
|
PREMIER DÉMARRAGE — Compte admin créé automatiquement
|
||||||
|
Utilisateur : admin
|
||||||
|
Mot de passe : XXXXXXXXXXXXXXXX
|
||||||
|
CHANGEZ CE MOT DE PASSE dès la première connexion !
|
||||||
|
============================================================
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠️ **Note le mot de passe immédiatement** — il n'est affiché qu'une seule fois.
|
||||||
|
> Si tu rates les logs, supprime le dossier `data/` et relance l'application pour
|
||||||
|
> régénérer un nouveau compte.
|
||||||
|
|
||||||
|
**Prédéfinir le mot de passe** (recommandé) :
|
||||||
|
|
||||||
|
Avant le premier lancement, définis les variables d'environnement suivantes :
|
||||||
|
|
||||||
|
- **Windows** (PowerShell) : `$env:OBSIGATE_ADMIN_PASSWORD="MonMotDePasse"`
|
||||||
|
- **Linux** : `export OBSIGATE_ADMIN_PASSWORD="MonMotDePasse"`
|
||||||
|
|
||||||
|
Tu peux aussi définir `OBSIGATE_ADMIN_USER` pour changer le nom d'utilisateur.
|
||||||
|
|
||||||
### Lancements suivants
|
### Lancements suivants
|
||||||
|
|
||||||
|
|||||||
+14
-5
@@ -11,7 +11,7 @@ echo "========================================"
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# ── 1. Vérifier les prérequis ─────────────────────────────────
|
# ── 1. Vérifier les prérequis ─────────────────────────────────
|
||||||
echo "[1/4] Verifying prerequisites..."
|
echo "[1/5] Verifying prerequisites..."
|
||||||
command -v cargo >/dev/null 2>&1 || { echo "❌ Rust/Cargo not found. Install: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"; exit 1; }
|
command -v cargo >/dev/null 2>&1 || { echo "❌ Rust/Cargo not found. Install: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"; exit 1; }
|
||||||
command -v tauri >/dev/null 2>&1 || cargo install tauri-cli
|
command -v tauri >/dev/null 2>&1 || cargo install tauri-cli
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ fi
|
|||||||
echo "✅ Dependencies OK"
|
echo "✅ Dependencies OK"
|
||||||
|
|
||||||
# ── 2. Préparer Python 3.11 ────────────────────────────────────
|
# ── 2. Préparer Python 3.11 ────────────────────────────────────
|
||||||
echo "[2/4] Preparing Python environment..."
|
echo "[2/5] Preparing Python environment..."
|
||||||
python3 -m venv python-embed/venv
|
python3 -m venv python-embed/venv
|
||||||
source python-embed/venv/bin/activate
|
source python-embed/venv/bin/activate
|
||||||
pip install --upgrade pip -q
|
pip install --upgrade pip -q
|
||||||
@@ -30,13 +30,22 @@ pip install -r ../backend/requirements.txt -q
|
|||||||
echo "✅ Python environment ready"
|
echo "✅ Python environment ready"
|
||||||
|
|
||||||
# ── 3. Build Tauri ────────────────────────────────────────────
|
# ── 3. Build Tauri ────────────────────────────────────────────
|
||||||
echo "[3/4] Building Tauri application..."
|
echo "[3/5] Building Tauri application..."
|
||||||
cargo tauri build --target x86_64-unknown-linux-gnu --bundles deb,appimage
|
cargo tauri build --target x86_64-unknown-linux-gnu --bundles deb,appimage
|
||||||
echo "✅ Build successful"
|
echo "✅ Build successful"
|
||||||
|
|
||||||
# ── 4. Résultats ───────────────────────────────────────────────
|
# ── 4. Copier le runtime à côté de l'exécutable ───────────────
|
||||||
OUTDIR="target/x86_64-unknown-linux-gnu/release"
|
OUTDIR="target/x86_64-unknown-linux-gnu/release"
|
||||||
echo "[4/4] Results:"
|
echo "[4/5] Copying runtime to $OUTDIR..."
|
||||||
|
rm -rf "$OUTDIR/python-embed" "$OUTDIR/backend" "$OUTDIR/frontend"
|
||||||
|
cp -r python-embed "$OUTDIR/"
|
||||||
|
cp -r ../backend "$OUTDIR/"
|
||||||
|
cp -r ../frontend "$OUTDIR/"
|
||||||
|
echo "✅ Runtime + frontend copied"
|
||||||
|
|
||||||
|
# ── 5. Résultats ───────────────────────────────────────────────
|
||||||
|
OUTDIR="target/x86_64-unknown-linux-gnu/release"
|
||||||
|
echo "[5/5] Results:"
|
||||||
ls -lh "$OUTDIR/bundle/deb/"*.deb 2>/dev/null
|
ls -lh "$OUTDIR/bundle/deb/"*.deb 2>/dev/null
|
||||||
ls -lh "$OUTDIR/bundle/appimage/"*.AppImage 2>/dev/null
|
ls -lh "$OUTDIR/bundle/appimage/"*.AppImage 2>/dev/null
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -24,11 +24,14 @@ curl -L -o python-embed.zip "https://www.python.org/ftp/python/3.11.9/python-3.1
|
|||||||
powershell Expand-Archive -Path python-embed.zip -DestinationPath python-embed\
|
powershell Expand-Archive -Path python-embed.zip -DestinationPath python-embed\
|
||||||
del python-embed.zip
|
del python-embed.zip
|
||||||
|
|
||||||
REM Enable pip in embedded Python
|
REM Enable pip and site-packages in embedded Python
|
||||||
echo import site >> python-embed\python311._pth
|
echo import site >> python-embed\python311._pth
|
||||||
|
|
||||||
REM Bootstrap pip (embed Python doesn't include it)
|
REM Download get-pip.py (embed Python doesn't include ensurepip)
|
||||||
python-embed\python.exe -m ensurepip --upgrade
|
echo 📥 Downloading get-pip.py...
|
||||||
|
curl -L -o get-pip.py "https://bootstrap.pypa.io/get-pip.py"
|
||||||
|
python-embed\python.exe get-pip.py --no-cache-dir
|
||||||
|
del get-pip.py
|
||||||
|
|
||||||
REM Install dependencies
|
REM Install dependencies
|
||||||
python-embed\python.exe -m pip install --no-cache-dir -r ..\backend\requirements.txt
|
python-embed\python.exe -m pip install --no-cache-dir -r ..\backend\requirements.txt
|
||||||
@@ -48,9 +51,14 @@ echo [4/5] Copying runtime to output dir...
|
|||||||
set "OUTDIR=target\x86_64-pc-windows-msvc\release"
|
set "OUTDIR=target\x86_64-pc-windows-msvc\release"
|
||||||
if exist "%OUTDIR%\python-embed" rmdir /s /q "%OUTDIR%\python-embed"
|
if exist "%OUTDIR%\python-embed" rmdir /s /q "%OUTDIR%\python-embed"
|
||||||
if exist "%OUTDIR%\backend" rmdir /s /q "%OUTDIR%\backend"
|
if exist "%OUTDIR%\backend" rmdir /s /q "%OUTDIR%\backend"
|
||||||
|
if exist "%OUTDIR%\frontend" rmdir /s /q "%OUTDIR%\frontend"
|
||||||
xcopy /E /I /Q "python-embed" "%OUTDIR%\python-embed"
|
xcopy /E /I /Q "python-embed" "%OUTDIR%\python-embed"
|
||||||
xcopy /E /I /Q "..\backend" "%OUTDIR%\backend"
|
xcopy /E /I /Q "..\backend" "%OUTDIR%\backend"
|
||||||
echo ✅ Runtime copied
|
xcopy /E /I /Q "..\frontend" "%OUTDIR%\frontend"
|
||||||
|
|
||||||
|
REM Add parent directory to Python path so 'import backend' works at runtime
|
||||||
|
echo ..>> "%OUTDIR%\python-embed\python311._pth"
|
||||||
|
echo ✅ Runtime + frontend copied + sys.path fixed
|
||||||
|
|
||||||
REM ── 5. Résultats ───────────────────────────────────────────────
|
REM ── 5. Résultats ───────────────────────────────────────────────
|
||||||
echo [5/5] Results:
|
echo [5/5] Results:
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"default":{"identifier":"default","description":"Default capabilities for ObsiGate Desktop","local":true,"windows":["main"],"permissions":["core:default","shell:allow-open","shell:allow-execute","dialog:default","notification:default","fs:default","process:default"]}}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+14
-10
@@ -1,7 +1,7 @@
|
|||||||
use tauri::Manager;
|
|
||||||
use std::process::{Child, Command};
|
use std::process::{Child, Command};
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
use tauri::Manager;
|
||||||
|
|
||||||
// ── State ───────────────────────────────────────────────────────────────────
|
// ── State ───────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -26,11 +26,15 @@ fn spawn_backend() -> Result<Child, String> {
|
|||||||
let child = Command::new(&python)
|
let child = Command::new(&python)
|
||||||
.current_dir(&exe_dir)
|
.current_dir(&exe_dir)
|
||||||
.args([
|
.args([
|
||||||
"-m", "uvicorn",
|
"-m",
|
||||||
|
"uvicorn",
|
||||||
"backend.main:app",
|
"backend.main:app",
|
||||||
"--host", "127.0.0.1",
|
"--host",
|
||||||
"--port", "17890",
|
"127.0.0.1",
|
||||||
"--log-level", "info",
|
"--port",
|
||||||
|
"17890",
|
||||||
|
"--log-level",
|
||||||
|
"info",
|
||||||
])
|
])
|
||||||
.spawn()
|
.spawn()
|
||||||
.map_err(|e| format!("Failed to start Python backend: {}", e))?;
|
.map_err(|e| format!("Failed to start Python backend: {}", e))?;
|
||||||
@@ -70,10 +74,7 @@ fn get_backend_url() -> String {
|
|||||||
async fn pick_vault_folder(app: tauri::AppHandle) -> Result<String, String> {
|
async fn pick_vault_folder(app: tauri::AppHandle) -> Result<String, String> {
|
||||||
use tauri_plugin_dialog::DialogExt;
|
use tauri_plugin_dialog::DialogExt;
|
||||||
|
|
||||||
let path = app
|
let path = app.dialog().file().blocking_pick_folder();
|
||||||
.dialog()
|
|
||||||
.file()
|
|
||||||
.blocking_pick_folder();
|
|
||||||
|
|
||||||
match path {
|
match path {
|
||||||
Some(p) => Ok(p.to_string()),
|
Some(p) => Ok(p.to_string()),
|
||||||
@@ -122,7 +123,10 @@ fn main() {
|
|||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
// Navigate to the main app
|
// Navigate to the main app
|
||||||
if let Some(window) = handle.get_webview_window("main") {
|
if let Some(window) = handle.get_webview_window("main") {
|
||||||
let _ = window.eval("window.location.href = 'http://127.0.0.1:17890'");
|
match window.eval("window.location.href = 'http://127.0.0.1:17890'") {
|
||||||
|
Ok(_) => println!("✅ Redirect to backend initiated"),
|
||||||
|
Err(e) => eprintln!("❌ Redirect eval failed: {}", e),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"security": {
|
"security": {
|
||||||
"csp": "default-src 'self' http://127.0.0.1:*; script-src 'self' 'unsafe-inline' http://127.0.0.1:* https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://unpkg.com https://esm.sh; style-src 'self' 'unsafe-inline' http://127.0.0.1:* https://cdnjs.cloudflare.com https://fonts.googleapis.com; font-src 'self' http://127.0.0.1:* https://fonts.gstatic.com; img-src 'self' data: blob: http://127.0.0.1:* https:; connect-src 'self' http://127.0.0.1:* ws://127.0.0.1:*;"
|
"csp": "default-src 'self' http://127.0.0.1:*; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://127.0.0.1:* https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://unpkg.com https://esm.sh; style-src 'self' 'unsafe-inline' http://127.0.0.1:* https://cdnjs.cloudflare.com https://fonts.googleapis.com; font-src 'self' http://127.0.0.1:* https://fonts.gstatic.com; img-src 'self' data: blob: http://127.0.0.1:* https:; connect-src 'self' http://127.0.0.1:* ws://127.0.0.1:*;"
|
||||||
},
|
},
|
||||||
"trayIcon": {
|
"trayIcon": {
|
||||||
"iconPath": "icons/icon.png",
|
"iconPath": "icons/icon.png",
|
||||||
|
|||||||
Reference in New Issue
Block a user