Diffinery

codician/diffinerypublic

Open-source, agent-first GitHub and GitHub Actions alternative that runs on your own Cloudflare account: git hosting, pull requests, code review and drop-in GitHub Actions YAML on Workers, Durable Objects, R2 and Containers.

Upload phases (3)

took 2m 22s Raw logs

Matrix: n: 3

Set up job
Diffinery runner: job upload (Upload phases (3)) for codician/diffinery@0f4dbf9fee49Runner: image diffinery-runner:dfb768929ca5ce308febdab6, in ams17, WEUR, container 020fe016ec359427f6095456c35ba97a6aa278cca9404f3128616410579d1f69Runner size: large (4 vCPU, 12 GiB of memory, 20 GB of disk), asked for by runs-onHost: AMD EPYC (family 25, model 17), 4 vCPUs, 2550 MHzWorkspace: /workspace/diffineryHost: 1% of the vCPUs' time went to other work on the host (steal)Job completed with conclusion: successResources: 0.1 of 4 vCPUs busy on average (0.3 at the 95th percentile), peak memory 1.1 GiB of 11.9 GiB, peak disk 1.3 GB of 19.3 GB
Run head -c 209715200 /dev/urandom > /tmp/blob.bin1s
##[group]Run head -c 209715200 /dev/urandom > /tmp/blob.bin##[endgroup]
Run actions/github-script@v72m 21s
Download action repository 'actions/github-script@v7'##[group]Run actions/github-script@v7with:  script: const fs = require("fs");    const tok = process.env.ACTIONS_RUNTIME_TOKEN;    const base = process.env.ACTIONS_RESULTS_URL;    const scp = JSON.parse(Buffer.from(tok.split(".")[1], "base64url").toString()).scp;    const [, run, job] = scp.split(" ").find((s) => s.startsWith("Actions.Results:")).split(":");    const twirp = async (m, body) => {      const r = await fetch(`${base}twirp/github.actions.results.api.v1.ArtifactService/${m}`, { method: "POST", headers: { authorization: `Bearer ${tok}`, "content-type": "application/json" }, body: JSON.stringify(body) });      if (!r.ok) throw new Error(`${m} ${r.status} ${await r.text()}`);      return r.json();    };    const ids = { workflow_run_backend_id: run, workflow_job_run_backend_id: job };    const data = fs.readFileSync("/tmp/blob.bin");    const MiB = 1024 * 1024;    for (const [bs, conc] of [[16, 8], [8, 16], [32, 4]]) {      const name = `bench-${process.env.N}-${bs}x${conc}`;      const { signed_upload_url: url } = await twirp("CreateArtifact", { ...ids, name, version: 4, mime_type: "application/octet-stream" });      const blocks = [];      for (let off = 0, i = 0; off < data.length; off += bs * MiB, i++) blocks.push(Buffer.from(`block-${String(i).padStart(8, "0")}`).toString("base64"));      let next = 0;      const t0 = Date.now();      const worker = async () => {        for (let i = next++; i < blocks.length; i = next++) {          const r = await fetch(`${url}&comp=block&blockid=${encodeURIComponent(blocks[i])}`, { method: "PUT", headers: { "x-ms-version": "2025-01-05" }, body: data.subarray(i * bs * MiB, Math.min(data.length, (i + 1) * bs * MiB)) });          if (r.status !== 201) throw new Error(`block ${r.status} ${await r.text()}`);        }      };      await Promise.all(Array.from({ length: conc }, worker));      const t1 = Date.now();      const xml = `<?xml version="1.0" encoding="utf-8"?><BlockList>${blocks.map((b) => `<Latest>${b}</Latest>`).join("")}</BlockList>`;      let tries = [];      for (let a = 0; a < 4; a++) {        const ta = Date.now();        const r = await fetch(`${url}&comp=blocklist`, { method: "PUT", headers: { "x-ms-version": "2025-01-05", "content-type": "application/xml", "x-ms-blob-content-type": "application/octet-stream" }, body: xml });        tries.push(`${r.status} after ${((Date.now() - ta) / 1000).toFixed(1)} s${r.status === 201 ? "" : " " + (await r.text()).slice(0, 120)}`);        if (r.status === 201) break;      }      core.info(`${name} block list: ${tries.join("; ")}`);      const t2 = Date.now();      await twirp("FinalizeArtifact", { ...ids, name, size: String(data.length) }).catch((e) => core.info(`finalize: ${e.message}`));      core.info(`${name}: ${blocks.length} blocks sent in ${((t1 - t0) / 1000).toFixed(1)} s (${(200 / ((t1 - t0) / 1000)).toFixed(0)} MiB/s), joined in ${((t2 - t1) / 1000).toFixed(1)} s`);    }      github-token: ***  debug: false  user-agent: actions/github-script  result-encoding: json  retries: 0  retry-exempt-status-codes: 400,401,403,404,422##[endgroup]bench-3-16x8 block list: 500 after 8.5 s <?xml version="1.0" encoding="utf-8"?><Error><Code>InternalError</Code><Message>internal error</Message></Error>; 500 after 46.0 s <?xml version="1.0" encoding="utf-8"?><Error><Code>InternalError</Code><Message>internal error</Message></Error>; 201 after 25.7 sbench-3-16x8: 13 blocks sent in 4.6 s (44 MiB/s), joined in 80.2 sbench-3-8x16 block list: 201 after 18.1 sbench-3-8x16: 25 blocks sent in 5.0 s (40 MiB/s), joined in 18.1 sbench-3-32x4 block list: 201 after 16.6 sbench-3-32x4: 7 blocks sent in 9.0 s (22 MiB/s), joined in 16.6 s