开发者文档 SDK

响应式状态

带变更追踪的类型化 store,可经平台后端跨运行持久化——后端不可达时静默降级为内存模式。

Python

from allybuild_sdk.reactive import defineStore, getter, action, field

@defineStore("review-queue")
class ReviewQueue:
    items: list = field(default_factory=list)

    @getter
    def pending(self) -> int:
        return sum(1 for i in self.items if not i["done"])

    @action
    def add(self, path: str) -> None:
        self.items = self.items + [{"path": path, "done": False}]

queue = ReviewQueue()
queue.add("src/auth.py")

TypeScript

import { defineStore } from "@allybuild/sdk";

const useCounter = defineStore("counter", {
  state: () => ({ count: 0 }),
  getters: { doubled: (s) => s.count * 2 },
  actions: { inc() { this.count += 1; } },
});

const counter = useCounter();
counter.inc();

美元符号 API

方法用途
$patch(dict | fn)批量更新,产生一次 "patch" 变更
$reset()恢复默认值,发出 "reset"
$subscribe(cb)监听变更;返回取消订阅函数
$on_action(cb) / $onActionaction 生命周期钩子
$atomic(fn) / $load()单事件多字段更新 / 拉取持久化状态
$state深拷贝只读快照
$dispose()解除订阅并移除

命名状态

project_status 为每个命名状态暴露一个响应式 store。按名称访问即可——缺失的名称从状态 schema 播种空 store:

deploy = project_status.get("deploy")
deploy["last_run"] = TASK_ID
const deploy = project_status.get("deploy");
deploy.lastRun = TASK_ID;

HTTP 持久化

from allybuild_sdk.reactive import HttpBackend, create_reactive

backend = HttpBackend(
    api_url=ALLYBUILD_API_URL,
    jwt=TASK_JWT,
    project_id=PROJECT_ID,
)
create_reactive(redis=backend)
createReactive({
  backend: new HttpBackend({
    apiUrl: ALLYBUILD_API_URL,
    jwt: TASK_JWT,
    projectId: PROJECT_ID,
  }),
});

插件

get_reactive().use(action_logger_plugin)    # 记录每次 action 调用
get_reactive().use(persistence_plugin)     # 经后端持久化 store 变更

错误

  • AllyBuildError(status, message)——HTTP 失败
  • ReactiveError 基类,派生 InvalidStateKeyError / StoreNotFoundError / StoreDisposedError