builds.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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", "TIMED_OUT"
  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 Version Info ---
  38. class BuildVersionInfo(BaseModel):
  39. """Version information for a build."""
  40. id: str = Field(..., description="Version ID used for this build")
  41. remote_info: RemoteInfo = Field(
  42. ..., description="Source repository information"
  43. )
  44. git_hash: str = Field(..., description="Git commit hash used for build")
  45. # --- Build Output ---
  46. class BuildOut(BaseModel):
  47. """Complete build information output schema."""
  48. build_id: str = Field(..., description="Unique build identifier")
  49. vehicle: VehicleBase = Field(..., description="Target vehicle information")
  50. board: BoardBase = Field(..., description="Target board information")
  51. version: BuildVersionInfo = Field(
  52. ..., description="Version information for this build"
  53. )
  54. selected_features: List[str] = Field(
  55. default_factory=list,
  56. description="Enabled feature flags for this build"
  57. )
  58. progress: BuildProgress = Field(
  59. ..., description="Current build status and progress"
  60. )
  61. time_created: float = Field(
  62. ..., description="Unix timestamp when build was created"
  63. )