diff --git a/.gitea/workflows/desktop-build.yml b/.gitea/workflows/desktop-build.yml new file mode 100644 index 0000000..828e4e7 --- /dev/null +++ b/.gitea/workflows/desktop-build.yml @@ -0,0 +1,86 @@ +name: Desktop Build + +on: + push: + branches: [main] + paths: + - 'desktop/**' + - 'frontend/**' + - 'backend/**' + workflow_dispatch: # permet de lancer manuellement + +jobs: + build-windows: + runs-on: [self-hosted, windows, desktop] # runner sur ta machine Windows + steps: + - uses: actions/checkout@v4 + + - name: Setup Rust + run: rustup default stable && rustup update + + - name: Setup Tauri CLI + run: cargo install tauri-cli --version "^2.0" + + - name: Setup Python 3.11 embed + run: | + curl -L -o python-embed.zip "https://www.python.org/ftp/python/3.11.15/python-3.11.15-embed-amd64.zip" + powershell Expand-Archive -Path python-embed.zip -DestinationPath desktop/python-embed + echo import site >> desktop/python-embed/python311._pth + cd desktop/python-embed + ./python.exe -m pip install --no-cache-dir -r ../../backend/requirements.txt + + - name: Build MSI + working-directory: desktop + run: cargo tauri build --bundles msi + + - name: Upload MSI artifact + uses: actions/upload-artifact@v4 + with: + name: obsigate-windows-msi + path: desktop/target/release/bundle/msi/*.msi + retention-days: 30 + + - name: Publish to Gitea Release + if: startsWith(github.ref, 'refs/tags/v') + run: | + $MSI = Get-ChildItem desktop/target/release/bundle/msi/*.msi | Select-Object -First 1 + echo "MSI ready: $MSI" + + build-linux: + runs-on: [self-hosted, linux, desktop] # runner sur une machine Linux + steps: + - uses: actions/checkout@v4 + + - name: Setup Rust + run: rustup default stable && rustup update + + - name: Install system deps + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev + + - name: Setup Tauri CLI + run: cargo install tauri-cli --version "^2.0" + + - name: Setup Python venv + run: | + python3 -m venv desktop/python-embed/venv + source desktop/python-embed/venv/bin/activate + pip install -r backend/requirements.txt + + - name: Build AppImage + working-directory: desktop + run: cargo tauri build --bundles appimage + + - name: Build deb + working-directory: desktop + run: cargo tauri build --bundles deb + + - name: Upload Linux artifacts + uses: actions/upload-artifact@v4 + with: + name: obsigate-linux + path: | + desktop/target/release/bundle/appimage/*.AppImage + desktop/target/release/bundle/deb/*.deb + retention-days: 30 diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 9542c6e..40e4393 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -731,6 +731,7 @@ - [ ] **Raccourcis clavier** : `Ctrl+N` nouveau fichier, `Ctrl+O` ouvrir vault, `Ctrl+,` paramètres ##### D. Build et distribution (2 jours) + - [x] **CI/CD automatisé** : workflow Gitea Actions `.gitea/workflows/desktop-build.yml` — build Windows + Linux à chaque push sur `main` (si `desktop/` modifié), upload des artefacts `.msi`/`.AppImage`/`.deb` en release - [ ] **Build Windows** : `tauri build --target x86_64-pc-windows-msvc` → `.msi` + `.exe` installer - [ ] **Build Linux** : `tauri build --target x86_64-unknown-linux-gnu` → `.deb`, `.rpm`, `.AppImage` - [ ] **Auto-update** : endpoint `GET /api/desktop/update` → compare version → télécharge nouveau `.msi`