fix: return only the latest release

This commit is contained in:
Vlad Stan 2023-01-13 12:12:03 +02:00
parent 522bfcf4ae
commit 97ea78f999
2 changed files with 21 additions and 32 deletions

View file

@ -112,17 +112,7 @@ async def extensions_install(
"dependencies": ext.dependencies, "dependencies": ext.dependencies,
"isInstalled": ext.id in installed_extensions, "isInstalled": ext.id in installed_extensions,
"isActive": not ext.id in inactive_extensions, "isActive": not ext.id in inactive_extensions,
"releases": [ "release": dict(ext.release) if ext.release else None,
{
"name": r.name,
"version": r.version,
"archive": r.archive,
# "description": base64.b64encode(r.description.encode()),
}
for r in ext.releases
]
if ext.releases
else None,
}, },
extension_list, extension_list,
) )

View file

@ -107,20 +107,20 @@ class ExtensionRelease(BaseModel):
name: str name: str
version: str version: str
archive: str archive: str
description: str hash: Optional[str]
published_at: Optional[str]
url: Optional[str]
description: Optional[str]
@classmethod @classmethod
def from_github_releases(cls, releases: dict) -> List["ExtensionRelease"]: def from_github_release(cls, r: dict) -> "ExtensionRelease":
return list( return ExtensionRelease(
map( name=r["name"],
lambda r: ExtensionRelease( version=r["tag_name"],
name=r["name"], archive=r["zipball_url"],
version=r["tag_name"], # description=r["body"], # bad for JSON
archive=r["zipball_url"], published_at=r["published_at"],
description=r["body"], url=r["html_url"],
),
releases,
)
) )
@ -137,7 +137,7 @@ class InstallableExtension(BaseModel):
is_admin_only: bool = False is_admin_only: bool = False
version: str = "none" # todo: move to Release version: str = "none" # todo: move to Release
stars: int = 0 stars: int = 0
releases: Optional[List[ExtensionRelease]] release: Optional[ExtensionRelease]
@property @property
def zip_path(self) -> str: def zip_path(self) -> str:
@ -222,7 +222,7 @@ class InstallableExtension(BaseModel):
@classmethod @classmethod
async def from_repo(cls, org, repository) -> Optional["InstallableExtension"]: async def from_repo(cls, org, repository) -> Optional["InstallableExtension"]:
try: try:
repo, releases, config = await fetch_github_repo_info(org, repository) repo, latest_release, config = await fetch_github_repo_info(org, repository)
return InstallableExtension( return InstallableExtension(
id=repo["name"], id=repo["name"],
@ -233,7 +233,7 @@ class InstallableExtension(BaseModel):
version="0", version="0",
stars=repo["stargazers_count"], stars=repo["stargazers_count"],
icon_url=icon_to_github_url(org, config.get("tile")), icon_url=icon_to_github_url(org, config.get("tile")),
releases=ExtensionRelease.from_github_releases(releases), release=ExtensionRelease.from_github_release(latest_release),
) )
except Exception as e: except Exception as e:
logger.warning(e) logger.warning(e)
@ -298,7 +298,6 @@ class InstallableExtension(BaseModel):
ext = await InstallableExtension.from_repo( ext = await InstallableExtension.from_repo(
r["organisation"], r["repository"] r["organisation"], r["repository"]
) )
print("#### repo_extensions", ext)
if ext: if ext:
extension_list += [ext] extension_list += [ext]
except Exception as e: except Exception as e:
@ -391,7 +390,9 @@ async def fetch_github_repo_info(org: str, repository: str):
) )
repo = resp.json() repo = resp.json()
releases_url = f"https://api.github.com/repos/{org}/{repository}/releases" releases_url = (
f"https://api.github.com/repos/{org}/{repository}/releases/latest"
)
resp = await client.get(releases_url) resp = await client.get(releases_url)
if resp.status_code != 200: if resp.status_code != 200:
raise HTTPException( raise HTTPException(
@ -399,9 +400,7 @@ async def fetch_github_repo_info(org: str, repository: str):
detail=f"Cannot fetch extension releases: {releases_url}", detail=f"Cannot fetch extension releases: {releases_url}",
) )
releases = [ latest_release = resp.json()
r for r in resp.json() if r["draft"] == False and r["prerelease"] == False
]
config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json""" config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json"""
resp = await client.get(config_url) resp = await client.get(config_url)
@ -413,4 +412,4 @@ async def fetch_github_repo_info(org: str, repository: str):
config = resp.json() config = resp.json()
return repo, releases, config return repo, latest_release, config