fix: return only the latest release
This commit is contained in:
parent
522bfcf4ae
commit
97ea78f999
2 changed files with 21 additions and 32 deletions
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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(
|
|
||||||
lambda r: ExtensionRelease(
|
|
||||||
name=r["name"],
|
name=r["name"],
|
||||||
version=r["tag_name"],
|
version=r["tag_name"],
|
||||||
archive=r["zipball_url"],
|
archive=r["zipball_url"],
|
||||||
description=r["body"],
|
# description=r["body"], # bad for JSON
|
||||||
),
|
published_at=r["published_at"],
|
||||||
releases,
|
url=r["html_url"],
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue