Skip to content

Commit 75357d1

Browse files
committed
refactor: simplify updater target branching and release artifacts
1 parent 709cd63 commit 75357d1

2 files changed

Lines changed: 48 additions & 46 deletions

File tree

.github/workflows/release.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,13 @@ jobs:
146146
echo "${{ needs.resolve-release-context.outputs.tag }}" > dashboard/dist/assets/version
147147
cd dashboard
148148
zip -r "AstrBot-${{ needs.resolve-release-context.outputs.tag }}-dashboard.zip" dist
149-
cp "AstrBot-${{ needs.resolve-release-context.outputs.tag }}-dashboard.zip" dist.zip
150149
151150
- name: Upload dashboard artifact
152151
uses: actions/upload-artifact@v7
153152
with:
154153
name: Dashboard-${{ needs.resolve-release-context.outputs.tag }}
155154
if-no-files-found: error
156-
path: |
157-
dashboard/AstrBot-${{ needs.resolve-release-context.outputs.tag }}-dashboard.zip
158-
dashboard/dist.zip
155+
path: dashboard/AstrBot-${{ needs.resolve-release-context.outputs.tag }}-dashboard.zip
159156

160157
- name: Upload dashboard package to Cloudflare R2
161158
if: ${{ env.R2_ACCOUNT_ID != '' && env.R2_ACCESS_KEY_ID != '' && env.R2_SECRET_ACCESS_KEY != '' && needs.resolve-release-context.outputs.tag != 'nightly' }}

astrbot/core/updator.py

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -158,18 +158,11 @@ def _is_expected_nightly_fetch_error(exc: BaseException) -> bool:
158158
JSONDecodeError,
159159
FetchReleaseError,
160160
)
161-
current: BaseException | None = exc
162-
seen: set[int] = set()
163-
while current is not None and id(current) not in seen:
164-
seen.add(id(current))
165-
if isinstance(current, expected_types):
166-
return True
167-
current = getattr(current, "__cause__", None) or getattr(
168-
current,
169-
"__context__",
170-
None,
171-
)
172-
return False
161+
if isinstance(exc, expected_types):
162+
return True
163+
164+
cause = getattr(exc, "__cause__", None) or getattr(exc, "__context__", None)
165+
return isinstance(cause, expected_types)
173166

174167
async def get_nightly_release(self) -> dict | None:
175168
nightly_release_url = f"{self.GITHUB_RELEASE_API}/tags/{self.NIGHTLY_TAG}"
@@ -201,6 +194,44 @@ async def get_releases_with_nightly(self, latest: bool = True) -> list:
201194
releases.insert(0, nightly_release)
202195
return releases
203196

197+
async def _resolve_latest_target(self) -> tuple[str, str]:
198+
releases = await self.get_releases(latest=True)
199+
latest_release = next(
200+
(
201+
item
202+
for item in releases
203+
if item.get("tag_name", "").lower() != self.NIGHTLY_TAG
204+
),
205+
None,
206+
)
207+
if latest_release is None:
208+
raise Exception("未找到可用的发布版本。")
209+
210+
latest_version = latest_release["tag_name"]
211+
if self.compare_version(VERSION, latest_version) >= 0:
212+
raise Exception("当前已经是最新版本。")
213+
return latest_version, latest_release["zipball_url"]
214+
215+
def _resolve_nightly_target(self) -> tuple[str, str]:
216+
return self.NIGHTLY_TAG, (
217+
f"https://github.com/AstrBotDevs/AstrBot/archive/refs/tags/{self.NIGHTLY_TAG}.zip"
218+
)
219+
220+
async def _resolve_tag_target(self, version_str: str) -> tuple[str, str]:
221+
releases = await self.get_releases(latest=False)
222+
for data in releases:
223+
if data["tag_name"] == version_str:
224+
return version_str, data["zipball_url"]
225+
raise Exception(f"未找到版本号为 {version_str} 的更新文件。")
226+
227+
def _resolve_commit_target(self, version_str: str) -> tuple[str, str]:
228+
if len(version_str) != 40:
229+
raise Exception("commit hash 长度不正确,应为 40")
230+
return (
231+
version_str,
232+
f"https://github.com/AstrBotDevs/AstrBot/archive/{version_str}.zip",
233+
)
234+
204235
async def _resolve_update_target(
205236
self,
206237
latest: bool,
@@ -209,41 +240,15 @@ async def _resolve_update_target(
209240
version_str = str(version) if version is not None else ""
210241

211242
if latest:
212-
releases = await self.get_releases(latest=True)
213-
latest_release = next(
214-
(
215-
item
216-
for item in releases
217-
if item.get("tag_name", "").lower() != self.NIGHTLY_TAG
218-
),
219-
None,
220-
)
221-
if latest_release is None:
222-
raise Exception("未找到可用的发布版本。")
223-
224-
latest_version = latest_release["tag_name"]
225-
if self.compare_version(VERSION, latest_version) >= 0:
226-
raise Exception("当前已经是最新版本。")
227-
return latest_version, latest_release["zipball_url"]
243+
return await self._resolve_latest_target()
228244

229245
if version_str.lower() == self.NIGHTLY_TAG:
230-
return self.NIGHTLY_TAG, (
231-
f"https://github.com/AstrBotDevs/AstrBot/archive/refs/tags/{self.NIGHTLY_TAG}.zip"
232-
)
246+
return self._resolve_nightly_target()
233247

234248
if version_str.startswith("v"):
235-
releases = await self.get_releases(latest=False)
236-
for data in releases:
237-
if data["tag_name"] == version_str:
238-
return version_str, data["zipball_url"]
239-
raise Exception(f"未找到版本号为 {version_str} 的更新文件。")
249+
return await self._resolve_tag_target(version_str)
240250

241-
if len(version_str) != 40:
242-
raise Exception("commit hash 长度不正确,应为 40")
243-
return (
244-
version_str,
245-
f"https://github.com/AstrBotDevs/AstrBot/archive/{version_str}.zip",
246-
)
251+
return self._resolve_commit_target(version_str)
247252

248253
async def update(self, reboot=False, latest=True, version=None, proxy="") -> None:
249254
if os.environ.get("ASTRBOT_CLI") or os.environ.get("ASTRBOT_LAUNCHER"):

0 commit comments

Comments
 (0)