name: CI Test Suite on: push: branches: - '**' tags-ignore: - 'v*' pull_request: workflow_dispatch: jobs: test: name: Run Component Tests & Pipeline Verification runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v4 - name: Install System Dependencies & Python run: | if command -v apt-get >/dev/null 2>&1; then apt-get update -y apt-get install -y python3 python3-pip python3-venv curl fi python3 -m pip install --upgrade pip --break-system-packages || python3 -m pip install --upgrade pip || true pip3 install -r requirements.txt --break-system-packages || pip3 install -r requirements.txt - name: Verify Python Syntax run: | python3 -m py_compile Server.py Win_Client.py Linux_Client.py package_dist.py upload_release.py test_pipeline.py tests/*.py - name: Run Component Unit Tests run: | python3 -m unittest discover -s tests -v - name: Run End-to-End Pipeline Integration Test run: | # Clean up any leftover test configs or database rm -f server_config.json client_config.json logar_state.db client_state.json # 1. Initialize server config and export client configuration python3 Server.py --create-client-config --server-host 127.0.0.1 --server-port 9443 --client-out client_config.json # 2. Launch LOGAR server in the background python3 Server.py & SERVER_PID=$! echo "[*] Server launched in background with PID $SERVER_PID" # 3. Poll Hermes health / report endpoint until server is listening READY=0 for i in $(seq 1 20); do if curl -s http://127.0.0.1:8443/api/hermes/report >/dev/null 2>&1; then echo "[+] LOGAR Server is ready after ${i}s." READY=1 break fi sleep 1 done if [ $READY -ne 1 ]; then echo "[!] Server failed to start within 20 seconds." kill $SERVER_PID || true exit 1 fi # 4. Execute end-to-end integration test python3 test_pipeline.py # 5. Cleanly terminate background server kill $SERVER_PID || true wait $SERVER_PID 2>/dev/null || true echo "[+] Server stopped successfully."