Skip to content

Commit 7bcf83f

Browse files
authored
fix(studio): use Beijing release source (#829)
1 parent 150cdc1 commit 7bcf83f

9 files changed

Lines changed: 66 additions & 44 deletions

File tree

‎docs/content/docs/framework/frontend.en.mdx‎

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -329,16 +329,15 @@ keeps that Tool ID from the deployed Function instead of clearing it.
329329

330330
### One-click Studio updates
331331

332-
Configure a release channel during deployment:
332+
Studio reads new releases from the centrally maintained `veadk-studio` TOS
333+
source in `cn-beijing`; no release-region configuration is required for customer
334+
deployments. Administrators can update Studio directly from the navbar:
333335

334336
```bash
335337
veadk studio deploy \
336338
--user-pool-id <pool-id> \
337339
--allowed-client-id <client-id> \
338-
--vefaas-app-name <app-name> \
339-
--studio-update-bucket <tos-bucket> \
340-
--studio-update-region cn-beijing \
341-
--studio-update-prefix veadk/studio/main
340+
--vefaas-app-name <app-name>
342341
```
343342

344343
Studio reads `latest.json` every three minutes. Administrators can inspect each

‎docs/content/docs/framework/frontend.mdx‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -268,16 +268,14 @@ Application。未指定 `--region` 和 `--project` 时,会在北京、上海
268268

269269
### Studio 一键更新
270270

271-
部署时配置 TOS 发布通道后,管理员可以在导航栏更新 Studio:
271+
Studio 固定从维护在北京地域的 `veadk-studio` TOS 发布源读取新版本,客户部署
272+
地域无需额外配置。管理员可以直接在导航栏更新 Studio:
272273

273274
```bash
274275
veadk studio deploy \
275276
--user-pool-id <pool-id> \
276277
--allowed-client-id <client-id> \
277-
--vefaas-app-name <app-name> \
278-
--studio-update-bucket <tos-bucket> \
279-
--studio-update-region cn-beijing \
280-
--studio-update-prefix veadk/studio/main
278+
--vefaas-app-name <app-name>
281279
```
282280

283281
Studio 每 3 分钟读取一次 `latest.json`,展示新版本的 changelog 和 Git SHA。

‎frontend/README.md‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,10 @@ local image or a downloaded network image into the VeFaaS deployment package.
215215

216216
## In-app Studio updates
217217

218-
Studio deployments use the `veadk-studio` TOS bucket in the deployment region
219-
as their immutable release channel by default, so administrators can update the
220-
frontend and Python backend together from the navbar without extra options:
218+
Studio deployments use the centrally maintained `veadk-studio` TOS bucket in
219+
`cn-beijing` as their immutable release channel, regardless of the deployment
220+
region. Administrators can update the frontend and Python backend together from
221+
the navbar without extra options:
221222

222223
```bash
223224
veadk studio deploy \
@@ -226,10 +227,6 @@ veadk studio deploy \
226227
--vefaas-app-name <app-name>
227228
```
228229

229-
Use `--studio-update-bucket`, `--studio-update-region`, and
230-
`--studio-update-prefix` (or their `VEADK_STUDIO_UPDATE_*` environment
231-
variables) to override the default release channel.
232-
233230
Studio checks `latest.json` every three minutes and lists newer releases with
234231
their changelog and Git SHA. An accepted update verifies the selected complete
235232
Bundle, replaces the current Function code, and releases the existing

‎frontend/service/studio_release_server/deploy.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from typing import Any
3333

3434
import veadk.config
35+
from veadk.cli.studio_release import STUDIO_RELEASE_REGION
3536
from veadk.cloud.cloud_agent_engine import CloudAgentEngine
3637

3738
_APPLICATION_NAME = "veadk-studio-release-server"
@@ -42,7 +43,7 @@
4243
_GATEWAY_ROUTE_NAME = "veadk-studio-release-server"
4344
_GATEWAY_TIMEOUT_MILLISECONDS = 30 * 60 * 1000
4445
_BUCKET = "veadk-studio"
45-
_REGION = "cn-beijing"
46+
_REGION = STUDIO_RELEASE_REGION
4647
_RELEASE_PREFIX = "veadk/studio/main"
4748
_JOB_PREFIX = "veadk/studio/release-server/jobs"
4849
_REPOSITORY = "volcengine/veadk-python"

‎tests/cli/test_studio_deploy_target.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,9 +360,10 @@ def register_callback_for_user_pool_client(self, **kwargs: object) -> None:
360360
assert veadk_environments["SANDBOX_SKILL_CREATOR"] == "skill-code-env-id"
361361
assert veadk_environments["AGENTKIT_SANDBOX_REGION"] == expected_region
362362
assert veadk_environments["VEADK_STUDIO_UPDATE_BUCKET"] == expected_update_bucket
363-
assert veadk_environments["VEADK_STUDIO_UPDATE_REGION"] == expected_region
364363
assert veadk_environments["VEADK_STUDIO_UPDATE_PREFIX"] == "veadk/studio/main"
364+
assert veadk_environments["VEADK_STUDIO_DEPLOY_REGION"] == expected_region
365365
assert veadk_environments["VEADK_STUDIO_PROJECT"] == expected_project
366+
assert "VEADK_STUDIO_UPDATE_REGION" not in veadk_environments
366367
assert sorted(credential_tool_ids) == [
367368
"chat-code-env-id",
368369
"skill-code-env-id",

‎tests/cli/test_studio_self_update.py‎

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727

2828
from veadk.cli.frontend_branding import SiteLogo
2929
from veadk.cli.studio_package import STUDIO_RELEASE_ENVIRONMENT_FILENAME
30-
from veadk.cli.studio_release import StudioReleaseError, StudioReleaseManifest
30+
from veadk.cli.studio_release import (
31+
STUDIO_RELEASE_REGION,
32+
StudioReleaseError,
33+
StudioReleaseManifest,
34+
)
3135
from veadk.cli.studio_self_update import (
3236
StudioSelfUpdater,
3337
StudioUpdateSettings,
@@ -81,17 +85,41 @@ def _manifest() -> StudioReleaseManifest:
8185
)
8286

8387

84-
def _settings() -> StudioUpdateSettings:
88+
def _settings(*, deployment_region: str = "cn-beijing") -> StudioUpdateSettings:
8589
return StudioUpdateSettings(
8690
bucket="studio-releases",
87-
region="cn-beijing",
91+
deployment_region=deployment_region,
8892
prefix="veadk/studio/main",
8993
application_id="application-id",
9094
function_id="function-id",
9195
project="default",
9296
)
9397

9498

99+
def test_shanghai_studio_uses_beijing_release_source(
100+
monkeypatch: pytest.MonkeyPatch,
101+
) -> None:
102+
captured: dict[str, Any] = {}
103+
104+
class _Store:
105+
def __init__(self, **kwargs: Any) -> None:
106+
captured.update(kwargs)
107+
108+
monkeypatch.setenv("VEADK_STUDIO_DEPLOY_REGION", "cn-shanghai")
109+
monkeypatch.setenv("VEADK_STUDIO_UPDATE_REGION", "cn-shanghai")
110+
monkeypatch.setattr("veadk.cli.studio_self_update.StudioReleaseStore", _Store)
111+
updater = StudioSelfUpdater(
112+
settings=StudioUpdateSettings.from_env(),
113+
credential_resolver=lambda: ("ak", "sk", "token"),
114+
branding_logo=None,
115+
)
116+
117+
updater._store("ak", "sk", "token")
118+
119+
assert updater._settings.deployment_region == "cn-shanghai"
120+
assert captured["region"] == STUDIO_RELEASE_REGION
121+
122+
95123
def _bundle(
96124
path: Path,
97125
*,
@@ -186,7 +214,7 @@ def submit_application_code_bundle_update(self, **kwargs: Any) -> None:
186214
captured["update"] = kwargs
187215

188216
updater = StudioSelfUpdater(
189-
settings=_settings(),
217+
settings=_settings(deployment_region="cn-shanghai"),
190218
credential_resolver=lambda: ("sts-ak", "sts-sk", "sts-token"),
191219
branding_logo=None,
192220
)
@@ -200,7 +228,7 @@ def submit_application_code_bundle_update(self, **kwargs: Any) -> None:
200228
"access_key": "sts-ak",
201229
"secret_key": "sts-sk",
202230
"session_token": "sts-token",
203-
"region": "cn-beijing",
231+
"region": "cn-shanghai",
204232
"project_name": "default",
205233
}
206234
update = captured["update"]

‎veadk/cli/cli_frontend.py‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6563,12 +6563,6 @@ def _resolve_studio_cloud_credentials(
65636563
envvar="VEADK_STUDIO_UPDATE_BUCKET",
65646564
help="TOS bucket containing immutable Studio release bundles.",
65656565
)
6566-
@click.option(
6567-
"--studio-update-region",
6568-
default=None,
6569-
envvar="VEADK_STUDIO_UPDATE_REGION",
6570-
help="TOS region for Studio release bundles. Defaults to --region.",
6571-
)
65726566
@click.option(
65736567
"--studio-update-prefix",
65746568
default="veadk/studio/main",
@@ -6625,7 +6619,6 @@ def frontend_deploy(
66256619
sandbox_chat_hermes_tool_id: str | None,
66266620
sandbox_skill_creator_tool_id: str | None,
66276621
studio_update_bucket: str,
6628-
studio_update_region: str | None,
66296622
studio_update_prefix: str,
66306623
apmplus_aid: str,
66316624
apmplus_token: str,
@@ -6869,7 +6862,6 @@ def frontend_deploy(
68696862
veadk_environments["SANDBOX_CHAT_HERMES"] = hermes_tool_id
68706863
veadk_environments["AGENTKIT_SANDBOX_REGION"] = region
68716864
veadk_environments["VEADK_STUDIO_UPDATE_BUCKET"] = studio_update_bucket
6872-
veadk_environments["VEADK_STUDIO_UPDATE_REGION"] = studio_update_region or region
68736865
veadk_environments["VEADK_STUDIO_UPDATE_PREFIX"] = studio_update_prefix
68746866
veadk_environments["VEADK_STUDIO_PROJECT"] = project
68756867
studio_deploy_id = _new_studio_deploy_id()

‎veadk/cli/studio_release.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
_VERSION_PATTERN = re.compile(r"^\d{14}$")
3333
_GIT_SHA_PATTERN = re.compile(r"^[0-9a-f]{40}$")
3434
_SHA256_PATTERN = re.compile(r"^[0-9a-f]{64}$")
35+
STUDIO_RELEASE_REGION = "cn-beijing"
3536
DEFAULT_RELEASE_PREFIX = "veadk/studio/main"
3637
MAX_STUDIO_BUNDLE_BYTES = 300 * 1024 * 1024
3738
MAX_STUDIO_RELEASES = 50
@@ -444,7 +445,7 @@ def _parser() -> argparse.ArgumentParser:
444445
parser.add_argument("--version", required=True)
445446
parser.add_argument("--git-sha", required=True)
446447
parser.add_argument("--bucket", required=True)
447-
parser.add_argument("--region", default="cn-beijing")
448+
parser.add_argument("--region", default=STUDIO_RELEASE_REGION)
448449
parser.add_argument("--prefix", default=DEFAULT_RELEASE_PREFIX)
449450
parser.add_argument("--changelog", action="append", default=[])
450451
parser.add_argument("--frontend-assets", type=Path)

‎veadk/cli/studio_self_update.py‎

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
)
4343
from veadk.cli.studio_release import (
4444
DEFAULT_RELEASE_PREFIX,
45+
STUDIO_RELEASE_REGION,
4546
StudioReleaseError,
4647
StudioReleaseManifest,
4748
StudioReleaseStore,
@@ -85,7 +86,7 @@ class StudioUpdateSettings:
8586
"""Immutable identifiers required to update the current Studio."""
8687

8788
bucket: str
88-
region: str
89+
deployment_region: str
8990
prefix: str
9091
application_id: str
9192
function_id: str
@@ -96,7 +97,11 @@ def from_env(cls) -> StudioUpdateSettings:
9697
"""Load self-update settings injected during Studio deployment."""
9798
return cls(
9899
bucket=os.getenv("VEADK_STUDIO_UPDATE_BUCKET", "").strip(),
99-
region=os.getenv("VEADK_STUDIO_UPDATE_REGION", "cn-beijing").strip(),
100+
deployment_region=(
101+
os.getenv("VEADK_STUDIO_DEPLOY_REGION")
102+
or os.getenv("AGENTKIT_SANDBOX_REGION")
103+
or "cn-beijing"
104+
).strip(),
100105
prefix=os.getenv(
101106
"VEADK_STUDIO_UPDATE_PREFIX", DEFAULT_RELEASE_PREFIX
102107
).strip(),
@@ -110,7 +115,7 @@ def enabled(self) -> bool:
110115
"""Whether this deployment has all required immutable identifiers."""
111116
return bool(
112117
self.bucket
113-
and self.region
118+
and self.deployment_region
114119
and self.prefix
115120
and self.application_id
116121
and self.function_id
@@ -362,7 +367,7 @@ def submit_version(self, version: str | None) -> StudioReleaseManifest:
362367
access_key=access_key,
363368
secret_key=secret_key,
364369
session_token=session_token or "",
365-
region=self._settings.region,
370+
region=self._settings.deployment_region,
366371
project_name=self._settings.project,
367372
)
368373
self._set_progress("submitting", "正在提交 VeFaaS Function 更新")
@@ -443,7 +448,7 @@ def _record_failure(
443448
(
444449
f"errorId={self._error_id}",
445450
f"stage={failure_stage}",
446-
f"region={self._settings.region}",
451+
f"region={self._settings.deployment_region}",
447452
f"project={self._settings.project}",
448453
f"applicationId={self._settings.application_id}",
449454
f"functionId={self._settings.function_id}",
@@ -485,7 +490,7 @@ def _status_failure_payload(
485490
*self._diagnostic_lines,
486491
f"errorId={error_id}",
487492
f"stage={stage}",
488-
f"region={self._settings.region}",
493+
f"region={self._settings.deployment_region}",
489494
f"project={self._settings.project}",
490495
f"applicationId={self._settings.application_id}",
491496
f"functionId={self._settings.function_id}",
@@ -537,7 +542,7 @@ def _load_vefaas_logs(self, revision_number: int = 0) -> list[str]:
537542
access_key=access_key,
538543
secret_key=secret_key,
539544
session_token=session_token or "",
540-
region=self._settings.region,
545+
region=self._settings.deployment_region,
541546
project_name=self._settings.project,
542547
)
543548
raw_lines = service._get_application_logs(
@@ -561,11 +566,11 @@ def _load_vefaas_logs(self, revision_number: int = 0) -> list[str]:
561566

562567
def _console_url(self) -> str:
563568
"""Return the fixed VeFaaS Function console URL for this Studio."""
564-
if not self._settings.region or not self._settings.function_id:
569+
if not self._settings.deployment_region or not self._settings.function_id:
565570
return ""
566571
return (
567572
"https://console.volcengine.com/vefaas/"
568-
f"region:vefaas+{self._settings.region}/function/detail/"
573+
f"region:vefaas+{self._settings.deployment_region}/function/detail/"
569574
f"{self._settings.function_id}"
570575
)
571576

@@ -578,7 +583,7 @@ def _application_status(self) -> tuple[str, str, int, bool]:
578583
access_key=access_key,
579584
secret_key=secret_key,
580585
session_token=session_token or "",
581-
region=self._settings.region,
586+
region=self._settings.deployment_region,
582587
project_name=self._settings.project,
583588
)
584589
status, response = service._get_application_status(
@@ -662,7 +667,7 @@ def _store(
662667
) -> StudioReleaseStore:
663668
return StudioReleaseStore(
664669
bucket=self._settings.bucket,
665-
region=self._settings.region,
670+
region=STUDIO_RELEASE_REGION,
666671
prefix=self._settings.prefix,
667672
access_key=access_key,
668673
secret_key=secret_key,

0 commit comments

Comments
 (0)