name: CI # Runner Windows requis : PySide6/pywinpty/Windows Credential Manager/ACL NTFS # ne fonctionnent que sous Windows, comme l'application elle-meme. on: push: branches: ["**"] pull_request: jobs: lint: runs-on: windows steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Installer les dependances de developpement run: pip install -r requirements-dev.txt - name: ruff check run: ruff check app main.py tests tests: runs-on: windows steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Installer les dependances run: pip install -r requirements-dev.txt - name: pytest (rendu Qt hors-ecran) env: QT_QPA_PLATFORM: offscreen PYTHONIOENCODING: utf-8 PYTHONUTF8: "1" run: pytest tests -v typecheck: runs-on: windows # Informatif pour l'instant : le code n'a jamais ete type avant cette phase, # 77 signalements (Optional non filtre, principalement dans app/ui/tabs.py # et app/ssh_connection.py) restent a trier au cas par cas. A rendre # bloquant une fois ce fond resorbe - voir le commentaire dans pyproject.toml. continue-on-error: true steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Installer les dependances run: pip install -r requirements-dev.txt - name: pyright run: pyright build: runs-on: windows needs: [lint, tests] if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Installer les dependances et PyInstaller run: | pip install -r requirements.txt pip install pyinstaller - name: Generer l'icone run: python tools/make_icon.py - name: Construire l'executable portable run: python -m PyInstaller --noconfirm --clean PySSHClient.spec - uses: actions/upload-artifact@v4 with: name: PySSH-Client-portable path: dist/PySSH Client