builds.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from typing import List, Literal
  2. from pydantic import BaseModel, Field
  3. from schemas.vehicles import VehicleBase, BoardBase, RemoteInfo
  4. # --- Build Progress ---
  5. class BuildProgress(BaseModel):
  6. """Build progress and status information."""
  7. percent: int = Field(
  8. ..., ge=0, le=100, description="Build completion percentage"
  9. )
  10. state: Literal[
  11. "PENDING", "RUNNING", "SUCCESS", "FAILURE", "ERROR"
  12. ] = Field(..., description="Current build state")
  13. # --- Build Request ---
  14. class BuildRequest(BaseModel):
  15. """Schema for creating a new build request."""
  16. vehicle_id: str = Field(
  17. ..., description="Vehicle ID to build for"
  18. )
  19. board_id: str = Field(
  20. ..., description="Board ID to build for"
  21. )
  22. version_id: str = Field(
  23. ..., description="Version ID for build source code"
  24. )
  25. selected_features: List[str] = Field(
  26. default_factory=list,
  27. description="Feature IDs to enable for this build"
  28. )
  29. # --- Build Submit Response ---
  30. class BuildSubmitResponse(BaseModel):
  31. """Response schema for build submission."""
  32. build_id: str = Field(..., description="Unique build identifier")
  33. url: str = Field(..., description="URL to get build details")
  34. status: Literal["submitted"] = Field(
  35. ..., description="Build submission status"
  36. )
  37. # --- Build Output ---
  38. class BuildOut(BaseModel):
  39. """Complete build information output schema."""
  40. build_id: str = Field(..., description="Unique build identifier")
  41. vehicle: VehicleBase = Field(..., description="Target vehicle information")
  42. board: BoardBase = Field(..., description="Target board information")
  43. git_hash: str = Field(..., description="Git commit hash used for build")
  44. remote_info: RemoteInfo = Field(
  45. ..., description="Source repository information"
  46. )
  47. selected_features: List[str] = Field(
  48. default_factory=list,
  49. description="Enabled feature flags for this build"
  50. )
  51. progress: BuildProgress = Field(
  52. ..., description="Current build status and progress"
  53. )
  54. time_created: float = Field(
  55. ..., description="Unix timestamp when build was created"
  56. )