| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import hashlib
- from dataclasses import dataclass
- from metadata_manager.firmware_server.models import ReleaseRecord
- @dataclass(frozen=True)
- class ForkRemoteSpec:
- """GitHub owner and repo for a whitelisted fork."""
- owner: str
- repo: str
- @property
- def github_repo(self) -> str:
- return f"{self.owner}/{self.repo}"
- @property
- def url(self) -> str:
- return f"https://github.com/{self.github_repo}.git"
- @dataclass(frozen=True)
- class RemoteInfo:
- name: str
- url: str
- def to_dict(self):
- return {
- "name": self.name,
- "url": self.url,
- }
- class VersionInfo:
- """Version metadata exposed to the rest of the application."""
- def __init__(
- self,
- remote_info: RemoteInfo,
- commit_ref: str,
- release_type: str,
- version_number: str,
- ) -> None:
- self.remote_info = remote_info
- self.commit_ref = commit_ref
- self.release_type = release_type
- self.version_number = version_number
- commit_ref_sanitized = commit_ref.replace("/", "-")
- commit_ref_hash = hashlib.md5(commit_ref.encode()).hexdigest()[:8]
- self.version_id = (
- f"{remote_info.name}-{commit_ref_sanitized}-{commit_ref_hash}"
- )
- @classmethod
- def from_release_record(
- cls,
- remote_info: RemoteInfo,
- release: ReleaseRecord,
- ) -> "VersionInfo":
- return cls(
- remote_info=remote_info,
- commit_ref=release.commit_reference,
- release_type=release.release_type,
- version_number=release.version_number,
- )
|