← Artifacts / artifacts / examples
Sandbox SDK + Artifacts
Tento příklad používá git-repo-per-sandbox šablonu Sandbox SDK a zvýrazňuje části specifické pro Artifacts.
Vyjděte ze šablony s create cloudflare, jak je uvedeno v Spuštění Claude Code v Sandboxu. Poté upravte postup Artifacts pomocí níže uvedených cílených ukázek kódu.
- Vytvoří nebo znovu použije sandbox podle ID.
- Vytvoří nebo znovu použije repozitář Artifacts se stejným ID.
- Předá ověřený vzdálený Git do sandboxu jako
ARTIFACTS_GIT_REMOTE.
Vytvoření projektu
npm create cloudflare@latest -- repo-per-sandbox --template=cloudflare/sandbox-sdk/examples/git-repo-per-sandboxcd repo-per-sandbox1. Vytvořte nebo znovu použijte repozitář
Šablona udržuje jeden repozitář Artifacts pro každé ID sandboxu. K rozhodnutí, zda má tento požadavek vytvořit nový repozitář, nebo načíst existující, použijte vlastní zdroj pravdy.
let defaultBranch;
let remote;
let token;
const sandboxWasJustCreated = true; // for example, set this when you create a new sandbox record
if (sandboxWasJustCreated) {
const created = await env.ARTIFACTS.create(sandboxId);
defaultBranch = created.defaultBranch;
remote = created.remote;
token = created.token;
} else {
const repo = await env.ARTIFACTS.get(sandboxId);
defaultBranch = repo.defaultBranch;
remote = repo.remote;
token = (await repo.createToken("write", 3600)).plaintext;
}let defaultBranch: string;
let remote: string;
let token: string;
const sandboxWasJustCreated = true; // for example, set this when you create a new sandbox record
if (sandboxWasJustCreated) {
const created = await env.ARTIFACTS.create(sandboxId);
defaultBranch = created.defaultBranch;
remote = created.remote;
token = created.token;
} else {
const repo = await env.ARTIFACTS.get(sandboxId);
defaultBranch = repo.defaultBranch;
remote = repo.remote;
token = (await repo.createToken("write", 3600)).plaintext;
}Šablona již zná název repozitáře, takže začněte přímým vyhledáním namísto procházení list() stránek. Nepoužívejte široké catch bloky. Mohou skrýt chybu chybějícího repozitáře, ověření i validace za stejnou zprávou o opakování pokusu.
Pokud může u vašeho flow dojít k souběhu s vytvářením repozitáře, ošetřete opakování na úrovni aplikace až po prozkoumání vyvolané chyby.
2. Vytvořte nebo znovu použijte sandbox
Pro sandbox použijte stejné ID:
import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, sandboxId);import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, sandboxId);3. Předejte repozitář do sandboxu
Zápisový token převeďte na ověřený Git remote a uložte jej jako proměnnou prostředí uvnitř sandboxu.
Použijte krátkodobý token a do sandboxu ho předejte až poté, co je relace sandboxu autorizovaná k odesílání změn.
function toAuthenticatedRemote(remote, token) {
const tokenSecret = token.split("?expires=")[0];
return `https://x:${tokenSecret}@${remote.slice("https://".length)}`;
}
await sandbox.setEnvVars({
ARTIFACTS_GIT_REMOTE: toAuthenticatedRemote(remote, token),
});function toAuthenticatedRemote(remote: string, token: string) {
const tokenSecret = token.split("?expires=")[0];
return `https://x:${tokenSecret}@${remote.slice("https://".length)}`;
}
await sandbox.setEnvVars({
ARTIFACTS_GIT_REMOTE: toAuthenticatedRemote(remote, token),
});Kód běžící uvnitř sandboxu pak může použít ARTIFACTS_GIT_REMOTE hodnotou git clone, git fetch, git pull, nebo git push.