precommit-fixes (#549)
taylor_socfortress committed
Dec 3, 2025 at 20:23 UTC
749610cbef90fcb7df15d725d183dfcd3a87971b
4 files changed
+22
-17
backend/app/version/routes/version.py
+4
-6
@@ -1,15 +1,13 @@
1
from fastapi import APIRouter
2
+from loguru import logger
3
+
4
from app.version.schema.version import VersionCheckResponse
5
from app.version.services.version import check_version_outdated
4
-from loguru import logger
6
7
version_router = APIRouter()
8
8
-@version_router.get(
9
- "/check",
10
- response_model=VersionCheckResponse,
11
- description="Check if CoPilot version is up to date"
12
-)
9
+
10
+@version_router.get("/check", response_model=VersionCheckResponse, description="Check if CoPilot version is up to date")
11
async def check_version() -> VersionCheckResponse:
12
"""
13
Check if the current CoPilot version is outdated.
backend/app/version/schema/version.py
+5
-3
@@ -1,6 +1,8 @@
1
-from pydantic import BaseModel
1
from typing import Optional
2
3
+from pydantic import BaseModel
4
+
5
+
6
class VersionCheckResponse(BaseModel):
7
success: bool
8
message: str
@@ -21,6 +23,6 @@ class VersionCheckResponse(BaseModel):
23
"is_outdated": True,
24
"release_url": "https://github.com/socfortress/CoPilot/releases/tag/v0.1.5",
25
"release_notes": "## What's Changed\n* Feature 1\n* Feature 2",
24
- "published_at": "2025-12-03T18:48:20Z"
25
- }
26
+ "published_at": "2025-12-03T18:48:20Z",
27
+ },
28
}
backend/app/version/services/version.py
+12
-7
@@ -1,12 +1,16 @@
1
-from packaging.version import Version
2
-from loguru import logger
1
+from typing import Any
2
+from typing import Dict
3
+from typing import Optional
4
+
5
import httpx
4
-from typing import Optional, Dict, Any
6
+from loguru import logger
7
+from packaging.version import Version
8
9
# Current version - update this with each release
10
CURRENT_VERSION = "0.1.5"
11
VERSION_CHECK_URL = "https://api.github.com/repos/socfortress/CoPilot/releases/latest"
12
13
+
14
async def get_latest_version() -> Optional[Dict[str, Any]]:
15
"""
16
Fetch the latest version from GitHub releases
@@ -24,12 +28,13 @@ async def get_latest_version() -> Optional[Dict[str, Any]]:
28
"html_url": data.get("html_url", ""),
29
"published_at": data.get("published_at", ""),
30
"body": data.get("body", ""),
27
- "name": data.get("name", "").lstrip("v")
31
+ "name": data.get("name", "").lstrip("v"),
32
}
33
except Exception as e:
34
logger.warning(f"Failed to fetch latest version: {e}")
35
return None
36
37
+
38
async def check_version_outdated() -> dict:
39
"""
40
Check if current version is outdated
@@ -48,7 +53,7 @@ async def check_version_outdated() -> dict:
53
"is_outdated": False,
54
"release_url": None,
55
"release_notes": None,
51
- "published_at": None
56
+ "published_at": None,
57
}
58
59
latest_version = release_info.get("tag_name")
@@ -66,7 +71,7 @@ async def check_version_outdated() -> dict:
71
"is_outdated": is_outdated,
72
"release_url": release_info.get("html_url"),
73
"release_notes": release_info.get("body"),
69
- "published_at": release_info.get("published_at")
74
+ "published_at": release_info.get("published_at"),
75
}
76
except Exception as e:
77
logger.error(f"Error comparing versions: {e}")
@@ -78,5 +83,5 @@ async def check_version_outdated() -> dict:
83
"is_outdated": False,
84
"release_url": release_info.get("html_url"),
85
"release_notes": None,
81
- "published_at": None
86
+ "published_at": None,
87
}
backend/copilot.py
+1
-1
@@ -66,7 +66,6 @@ from app.routers import monitoring_alert
66
from app.routers import network_connectors
67
from app.routers import nuclei
68
from app.routers import office365
69
-from app.routers import version
69
from app.routers import portainer
70
from app.routers import sap_siem
71
from app.routers import scheduler
@@ -77,6 +76,7 @@ from app.routers import stack_provisioning
76
from app.routers import sublime
77
from app.routers import threat_intel
78
from app.routers import velociraptor
79
+from app.routers import version
80
from app.routers import wazuh_indexer
81
from app.routers import wazuh_manager
82
from app.schedulers.scheduler import get_scheduler_instance