PageSourceSearch

https://www.buildbuddy.io/assets/js/d0afcf1b.ee5b688b.js

js buildbuddy.io collected 2026-09-24 08:41:24 UTC 4,989 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkbuildbuddy_docs_website=self.webpackChunkbuildbuddy_docs_website||[]).push([[704],{57361(e,t,r){r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"remote-runner-features","title":"Remote Runner Features","description":"The following features are supported for both BuildBuddy Workflows and Remote Bazel.","source":"@site/../docs/remote-runner-features.md","sourceDirName":".","slug":"/remote-runner-features","permalink":"/docs/remote-runner-features","draft":false,"unlisted":false,"editUrl":"https://github.com/buildbuddy-io/buildbuddy/edit/master/docs/../docs/remote-runner-features.md","tags":[],"version":"current","lastUpdatedBy":"Maggie Lou","lastUpdatedAt":1790191569000,"frontMatter":{"id":"remote-runner-features","title":"Remote Runner Features","sidebar_label":"Remote Runner Features"},"sidebar":"someSidebar","previous":{"title":"Remote Runner Introduction","permalink":"/docs/remote-runner-introduction"},"next":{"title":"Workflows setup","permalink":"/docs/workflows-setup"}}');var o=r(86070),i=r(35676);const s={id:"remote-runner-features",title:"Remote Runner Features",sidebar_label:"Remote Runner Features"},a=void 0,d={},l=[{value:"Attaching artifacts to remote runs",id:"attaching-artifacts-to-remote-runs",level:2},{value:"Fetching artifacts programmatically",id:"fetching-artifacts-programmatically",level:4}];function c(e){const t={a:"a",code:"code",h2:"h2",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"The following features are supported for both BuildBuddy Workflows and Remote Bazel.\nCheck individual docs for more product-specific features."}),"\n",(0,o.jsx)(t.h2,{id:"attaching-artifacts-to-remote-runs",children:"Attaching artifacts to remote runs"}),"\n",(0,o.jsxs)(t.p,{children:["To provide easy access to artifacts generated during remote runs, BuildBuddy supports a special\ndirectory called the ",(0,o.jsx)(t.strong,{children:"artifacts directory"}),". If you write files\nto this directory, BuildBuddy will automatically upload those files and\nshow them in the UI for the remote run. You can get the path to the\nartifacts directory using the environment variable\n",(0,o.jsx)(t.code,{children:"$BUILDBUDDY_ARTIFACTS_DIRECTORY"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["For example, Bazel supports several flags such as ",(0,o.jsx)(t.code,{children:"--remote_grpc_log"})," that allow\nwriting additional debug logs and metadata files associated with an\ninvocation. To automatically upload these to our UI, you could run a command like\n",(0,o.jsx)(t.code,{children:"bazel test //... --remote_grpc_log=$BUILDBUDDY_ARTIFACTS_DIRECTORY/grpc.log"}),"."]}),"\n",(0,o.jsx)(t.p,{children:"BuildBuddy creates a new artifacts directory for each step executed on the remote\nrunner, and recursively uploads all files in the directory after the step exits."}),"\n",(0,o.jsx)(t.h4,{id:"fetching-artifacts-programmatically",children:"Fetching artifacts programmatically"}),"\n",(0,o.jsx)(t.p,{children:"If you'd like to fetch artifacts generated during a remote run programmatically,\nyou can either:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Upload the artifacts to a hosted storage site (like S3), where you can later fetch\nthe files"}),"\n",(0,o.jsx)(t.li,{children:"Upload the artifacts to BuildBuddy (using the approach described above)"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"If you upload the artifacts to BuildBuddy, you can fetch them by:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Using the ",(0,o.jsxs)(t.a,{href:"https://www.buildbuddy.io/docs/enterprise-api#getinvocation",children:[(0,o.jsx)(t.code,{children:"GetInvocation"})," API"]}),"\nwith the ",(0,o.jsx)(t.code,{children:"include_artifacts"})," field set to fetch the invocation for the remote run"]}),"\n"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["In the response, the ",(0,o.jsx)(t.code,{children:"artifacts"})," field will include bytestream URLs for artifacts\nthat were uploaded to BuildBuddy"]}),"\n"]}),"\n",(0,o.jsxs)(t.ol,{start:"2",children:["\n",(0,o.jsxs)(t.li,{children:["Use the ",(0,o.jsxs)(t.a,{href:"https://www.buildbuddy.io/docs/enterprise-api#getfile",children:[(0,o.jsx)(t.code,{children:"GetFile"})," API"]})," to fetch the desired artifacts"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},35676(e,t,r){r.d(t,{R:()=>s,x:()=>a});var n=r(30758);const o={},i=n.createContext(o);function s(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.