SISO(1)
π siso β SISO(1) π
General Commands Manual Β· periodt, bestie, let's get into it
π NAME π
siso β Ninja-compatible build system optimized for remote execution.
β¨ SYNOPSIS β¨
siso [global flags] command [arguments]
π¦ DESCRIPTION π¦
Ok so picture this: siso is a build tool whose whole entire personality is making Chromium and Android builds go zoomie. It's built as a drop-in replacement for Ninja, which means you literally do not have to touch your workflow, change a single habit, or text your team "hey we're migrating" β it just slots right in. Slay.
siso runs build actions natively on Remote Build Execution (RBE) and squeezes out performance by dodging stat, disk, and network I/O as much as it physically can. It keeps resource consumption low by sharing a single process memory space, and it hoards detailed performance metrics for every build action so you can go analyze them with cloud tracing and profiling tools. Metrics girlie behavior fr fr. π
π GLOBAL FLAGS π
-alsologtostderr=falseβ log to standard error as well as files-blockprof_rate=0β block profile rate-blockprofileβ write block profile to this file-cpuprofileβ write cpu profile to this file-credential_helper=google-application-defaultβ path to a credential helper. The lore lives here:https://github.com/EngFlow/credential-helper-spec/blob/main/spec.mdluci-authuses luci-auth.gclouduses gcloud.google-application-defaultor""uses Google Application Default Credentials.mTLSdisables per RPC credentials.- environment variable
SISO_CREDENTIAL_HELPERsets the default value.
-log_backtrace_atβ when logging hits linefile:N, emit a stack trace-log_dirβ If non-empty, write log files in this directory-log_linkβ If non-empty, add symbolic links in this directory to the log files-logbuflevel=0β Buffer log messages logged at this level or lower (-1means don't buffer;0means buffer INFO only; ...). Has limited applicability on non-prod platforms.-logtostderr=falseβ log to standard error instead of files-memprofileβ write memory profile to this file-memprofile_gc=trueβ runruntime.GC()before each heap profile dump for a cleaner inuse view-memprofile_interval=0sβ if non-zero, dump heap profiles at this interval to rolling files derived from-memprofile(e.g.siso-memory.0001.pprof); the bare-memprofilepath is not written. yes she said rolling files, she's extra like that-mutexprof_frac=0β mutex profile fraction-mutexprofileβ write mutex profile to this file-pprof_addrβ listen address forgo tool pprof. e.g.localhost:6060-stderrthreshold=2β logs at or above this threshold go to stderr-traceβ go trace output forgo tool trace-v=0β log level for V logs-version=falseβ print version-vmoduleβ comma-separated list ofpattern=Nsettings for file-filtered logging
π§ SUBCOMMANDS π§
π MAIN COMMANDS π
π₯· ninja β build the requested targets as ninja
build the requested targets as ninja. She does exactly what it says on the tin, no notes. π
$ siso ninja [-C <dir>] [options] [targets...]
Flags:
-C=.β ninja running directory (chdir before run)-action_saltβ action salt-batch=trueβ batch mode. prefer thoughput over low latency for build failures. disable-fast_nop,-fast_local-fast_last_failure-fast_exit-build_id=00000000-0000-0000-0000-000000000000β ID for the build. used forinvocation_idof remote-apis-sdks andtool_invocation_idof remote-apis, and Cloud logging resourcebuild_idlabel.-build_pprof=siso_build.pprofβ build pprof filename (relative to-log_dir)-cache_dir=$HOME/.cache/sisoβ cache directory-cache_enable_read=trueβ cache enable read-cartfs_endpointβ cartfs server endpoint. e.g.localhost:65001-cleandead=falseβ clean built files that are no longer produced by the manifest-clobber=falseβ clobber build-cloud_profiler_service_name=sisoβ cloud profiler service name-collector_addressβ address to dial the collector. Can be path for unix socketunix:///path/to/socketorhost:port.-configβ config name passed to starlark-config_repo_dir=build/config/sisoβ config repo directory (relative to workspace)-dβ enable debugging (use-d listto list modes)-deps_log=.siso_depsβ deps log filename (relative to-C,-state_dir)-enable_build_ninja_files_upload=falseβ enable Build Ninja files upload to RBE-CAS-enable_cloud_logging=falseβ enable cloud logging-enable_cloud_monitoring=falseβ enable cloud monitoring-enable_cloud_profiler=falseβ enable cloud profiler-enable_cloud_trace=falseβ enable cloud trace-enable_collector=falseβ enable OTEL collector. Effectively not active, will be removed later. TODO: b/455433899.-enable_resultstore=falseβ enable resultstore-explain_log=siso_explainβ explain log filename (relative to-log_dir)-f=build.ninjaβ input build manifest filename (relative to-C)-failed_commands=siso_failed_commands.shβ script file to rerun the last failed commands-failure_summaryβ filename for failure summary (relative to-log_dir)-fast_exit=falseβ enable fast exit-fast_last_failure=falseβ enable fast last failure check-fast_local=falseβ enable fast local-fast_nop=falseβ enable fast nop check-frontend_fileβ frontend FIFO file to report build status to soong ui, or-to report to stdout.-fs_defer_digest=falseβ defer digest calculation-fs_digest_xattrβ xattr for sha256 digest; empty enables the default on Cog/CartFS only-fs_keep_tainted=falseβ keep manually modified generated file-fs_min_flush_timeout=30sβ minimum timeout for flush. ignored if it is shorter than 10s-fs_state=.siso_fs_stateβ fs state filename-fs_state_compression_level=1β fs state compression level (1 = fastest, 10 = best)-fs_state_compression_threads=8β number of threads to use for data compression-fs_state_mmap=trueβ use memory-mapped I/O for state file reads/writes-heartbeat_period=0sβ print a heartbeat with this frequency on the console when--quietis set and this value is non zero.-invocation_json=siso_metadata.jsonβ invocation metadata JSON filename (relative to-log_dir)-j=-1β not supported. use-remote_jobsand-local_jobsinstead-job_id=00000000-0000-0000-0000-000000000000β ID for a grouping of related builds such as a Buildbucket job. used forcorrelated_invocations_idof remote-apis and remote-apis-sdks, and Cloud logging resourcejob_idlabel.-k=1β keep going until N jobs fail (0 means inifinity)-l=-1β not supported.-load=@config//main.starβ config filename (@config//is--config_repo_dir)-local_cache_enable=falseβ local cache enable-local_jobs=0β run N local jobs in parallel. when the value is no positive, the default will be computed based on # of CPUs.-localexec_log=siso_localexecβ localexec log filename (relative to-log_dir)-log_dirβ log directory (relative to-C) [default: same dir as build.ninja]-metrics_json=siso_metrics.jsonβ metrics JSON filename (relative to-log_dir)-metrics_labelsβ comma-separated arbitrary key value pairs in the formkey=value, which are added to cloud monitoring metrics andsiso_metadata.json.-metrics_projectβ override Cloud Monitoring GCP project where Siso sends action and build metrics.-n=falseβ dry run-namespaceβ namespace for cloud logging's resource label-o=falseβ alias of-offline-offline=falseβ offline mode.-output_local_strategy=fullβ strategy for output_local."full": download all outputs."greedy": downloads most outputs except intermediate objs."minimum": downloads as few as possible."graph": downloads only remote outputs that a local step will consume, decided at schedule time from the dep graph, spreading downloads over the compile burst."pathfilter:<path_filter>": use path filter."patterns:<pattern-list>": colon-separated pathfilter's patterns-output_log=siso_outputβ output log filename (relative to-log_dir)-prepare=falseβ build inputs of targets, but not build target itself.-projectβ cloud project ID. can set by$SISO_PROJECT-quiet=falseβ don't show progress status, just command output-re_cache_enable_read=trueβ remote exec cache enable read-re_cache_enable_write=falseβ remote exec cache allow local trusted uploads-re_exec_enable=trueβ remote exec enable-reapi_address=remotebuildexecution.googleapis.com:443β reapi address-reapi_batch_compress_blob=0β use compressed blobs in BatchUpdateBlobs if server supports it and size is bigger than this. specify 0 to disable.-reapi_byte_stream_read_threshold=2097152β if blob size >= threshold, use ByteStream API (compression-aware)-reapi_cas_addressβ reapi cas address (if empty, share conn with reapi_address)-reapi_compress_blob=1024β use compressed blobs if server supports compressed blobs and size is bigger than this. specify 0 to disable blob-level compression.-reapi_digest_function=sha256β which digest function we use for content. pick from:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256treeβ¨-reapi_enable_grpc_compression=falseβ turn on grpc compression. heads up bestie: if you enable this, blob-level compression gets forcibly disabled. no cap π«Ά-reapi_grpc_conn_pool=25β the grpc connection pool π-reapi_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit without stream-reapi_grpc_keepalive_time=30sβ grpc keepalive time-reapi_grpc_keepalive_timeout=20sβ grpc keepalive timeout-reapi_insecure=falseβ reapi insecure mode. the default can be set by$RBE_service_no_securityπ-reapi_instance=default_instanceβ the reapi instance name. (for Google RBE: if the instance is fully qualified (starts withprojects/), the project ID gets inferred from it. otherwise, the project ID from-project(or$SISO_PROJECT) is used to construct the instance name. if both are provided,-projectis used for other cloud services) π-reapi_keep_exec_stream=falseβ keep the Execute stream open as long as possible-reapi_max_retries=10β max retries for remote execution-reapi_priority=0β reapi priority for action executions. the semantics and supported values depend on the backend π€·βοΈ-reapi_tls_ca_certβ load TLS CA certificates from this file to connect to the RE api service. default can be set by$RBE_tls_ca_cert-reapi_tls_client_auth_certβ certificate to use when using mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_cert-reapi_tls_client_auth_keyβ key to use when using mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_key-reapi_trace_cookieβ if set, it's sent as thecookiegRPC metadata header on every RPC to this backend, to force server-side trace sampling (e.g. Dapper) π-reapi_version_to_useβ specify the re api version to use, in the formatv<major>.<minor>. e.g.v2.0-remote_jobs=0β run N remote jobs in parallel. when the value is not positive, the default gets computed based on # of CPUs π₯-spawn_helperβ command name of external spawn helper. use builtin spawn helper if empty.-state_dirβ state directory (relative to-C) [default: same dir asbuild.ninja]-strict_remote=falseβ don't use local for remote step. i.e. no fastlocal, no local fallback π«-tβ run a subtool (use-t listto list subtools)-trace_json=siso_trace.jsonβ trace JSON filename (relative to-log_dir)-trace_span_threshold=100msβ theshold for trace span record-trace_threshold=1m0sβ threshold for trace record-v=falseβ show all command lines while building (alias of--verbose)-verbose=falseβ show all command lines while building-verbose_failures=trueβ show failed command lines-wβ adjust warnings. not supported b/288807840 π-write_reclient_metrics_logs=falseβ write Reclient's RBE build metrics torbe_metrics.{txt, pb}under-log_dir.
π REAPI π
π¦ fetch β fetch contents
babes, this one fetches contents from CAS or ActionResult. it prints contents to stdout, or extracts into <dir> for -type *-extract π
$ siso fetch [-project <project>] [-reapi_instance <instance>] \
[-type <type>] \
<digest> [<dir>]
$ siso fetch [-type <type>] \
bytesteam://<endpoint>/projects/<project>/instances/<instance>/blobs/<digest>
Flags β¨:
-projectβ cloud project ID. can be set by$SISO_PROJECT-reapi_address=remotebuildexecution.googleapis.com:443β reapi address-reapi_batch_compress_blob=0β use compressed blobs in BatchUpdateBlobs if the server supports it and the size is bigger than this. specify0to disable.-reapi_byte_stream_read_threshold=2097152β if blob size >= threshold, use the ByteStream API (compression-aware)-reapi_cas_addressβ reapi cas address (if empty, share conn withreapi_address)-reapi_compress_blob=1024β use compressed blobs if the server supports compressed blobs and the size is bigger than this. specify0to disable blob-level compression.-reapi_digest_function=sha256β content digest function:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256tree-reapi_enable_grpc_compression=falseβ enable grpc compression. if enabled, blob-level compression will be forcibly disabled. π-reapi_grpc_conn_pool=25β grpc connection pool-reapi_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit without stream-reapi_grpc_keepalive_time=30sβ grpc keepalive time-reapi_grpc_keepalive_timeout=20sβ grpc keepalive timeout-reapi_insecure=falseβ reapi insecure mode. default can be set by$RBE_service_no_security-reapi_instance=default_instanceβ reapi instance name. (for Google RBE: if instance is fully qualified (starts withprojects/), project ID is inferred from it. Otherwise, project ID from-project(or$SISO_PROJECT) is used to construct the instance name. If both are provided,-projectis used for other cloud services)-reapi_keep_exec_stream=falseβ keep Execute stream open as long as possible-reapi_max_retries=10β max retries for remote execution-reapi_priority=0β reapi priority for action executions. The semantics and supported values depend on the backend-reapi_tls_ca_certβ Load TLS CA certificates from this file to connect to the RE api service. default can be set by$RBE_tls_ca_cert-reapi_tls_client_auth_certβ Certificate to use when using mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_cert-reapi_tls_client_auth_keyβ Key to use when using mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_key-reapi_trace_cookieβ if set, sent as thecookiegRPC metadata header on every RPC to this backend, to force server-side trace sampling (e.g. Dapper)-reapi_version_to_useβ specify re api version to use, in format ofv<major>.<minor>. e.g.v2.0-type=rawβ data type. here's the whole menu π:raw: raw contentcommand: command message in text proto formataction: action message in text proto formatresult: action result message in text proto formatdir: directory message in text proto formattree: tree message in text proto formatdir-extract: directory message extract to<dir>(if<dir>is specified) or list (if<dir>is not specified)tree-extract: tree message extract to<dir>(if<dir>is specified) or list (if<dir>is not specified)action-list: actions associated with two phase cache key.
π§ isolate β isolate uploads and computes tree digests
isolate uploads and computes tree digest for each targets π
$ siso isolate [-project <project>] [-src_cas_instance <instance>] \
-C <dir> \
-dst_cas_instance projects/<cas project>/instances/<instance> \
-dump_json <output json path> \
<target> ...
Flags β¨:
-C=.β ninja running directory (chdir before run)-cas_instanceβ alias of-dst_cas_instancefor backward compatibility π-config_repo_dir=build/config/sisoβ config repo directory (relative to workspace)-dst_cas_address=remotebuildexecution.googleapis.com:443β reapi address (for dst_cas)-dst_cas_batch_compress_blob=0β use compressed blobs in BatchUpdateBlobs if server supports it and size is bigger than this. specify0to disable. (for dst_cas)-dst_cas_byte_stream_read_threshold=2097152β if blob size >= threshold, use ByteStream API (compression-aware) (for dst_cas)-dst_cas_compress_blob=1024β use compressed blobs if server supports compressed blobs and size is bigger than this. specify0to disable blob-level compression. (for dst_cas)-dst_cas_digest_function=sha256β content digest function:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256tree(for dst_cas)-dst_cas_enable_grpc_compression=falseβ enable grpc compression. if enabled, blob-level compression will be forcibly disabled. (for dst_cas)-dst_cas_grpc_conn_pool=25β grpc connection pool-dst_cas_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit without stream (for dst_cas)-dst_cas_grpc_keepalive_time=30sβ grpc keepalive time (for dst_cas)-dst_cas_grpc_keepalive_timeout=20sβ grpc keepalive timeout (for dst_cas)-dst_cas_insecure=falseβ reapi insecure mode. default can be set by$RBE_service_no_security-dst_cas_instance=default_instanceβ reapi instance name (for dst_cas)-dst_cas_keep_exec_stream=falseβ keep Execute stream open as long as possible-dst_cas_max_retries=10β max retries for remote execution-dst_cas_tls_ca_certβ Load TLS CA certificates from this file to connect to the RE api service. default can be set by$RBE_tls_ca_cert-dst_cas_tls_client_auth_certβ the certificate you hand over when you're doing mTLS to talk to the RE api service. default can be set by$RBE_tls_client_auth_cert.-dst_cas_tls_client_auth_keyβ the key that matches that cert for mTLS to the RE api service. default can be set by$RBE_tls_client_auth_key.-dst_cas_trace_cookieβ if you set it, it gets sent as thecookiegRPC metadata header on every single RPC to this backend, which forces server-side trace sampling (think Dapper). fordst_cas, bestie π-dst_cas_version_to_useβ pick which re api version you wanna use, format isv<major>.<minor>. likev2.0. yes the angle brackets are literally part of the shape, don't @ me π-dump_jsonβ dump it into a json file π-enable_cloud_logging=trueβ turn cloud logging on β¨-fs_defer_digest=falseβ defer the digest calculation-fs_digest_xattrβ the xattr for the sha256 digest. leave it empty and the default only kicks in on Cog/CartFS-fs_keep_tainted=falseβ keep that generated file you manually modified (we see you π)-fs_min_flush_timeout=30sβ minimum timeout for flush. heads up: this one is ignored if it's shorter than10s-fs_state=.siso_fs_stateβ the fs state filename-fs_state_compression_level=1β fs state compression level, where1= fastest and10= best π-fs_state_compression_threads=8β how many threads to throw at data compression-fs_state_mmap=trueβ use memory-mapped I/O for state file reads/writes-job_id=00000000-0000-0000-0000-000000000000β an ID for a group of related builds, like a Buildbucket job-namespaceβ namespace for cloud logging's resource label-projectβ the cloud project ID. can be set by$SISO_PROJECT-src_cas_address=remotebuildexecution.googleapis.com:443β the reapi address. forsrc_cas, obviously π-src_cas_batch_compress_blob=0β use compressed blobs inBatchUpdateBlobsif the server supports it and the size is bigger than this. specify0to disable. forsrc_cas-src_cas_byte_stream_read_threshold=2097152β if the blob size is>=the threshold, use the ByteStream API (compression-aware). forsrc_cas-src_cas_compress_blob=1024β use compressed blobs if the server supports compressed blobs and the size is bigger than this. specify0to disable blob-level compression. forsrc_cas-src_cas_digest_function=sha256β the content digest function, and your options are:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256tree. forsrc_casπ-src_cas_enable_grpc_compression=falseβ enable grpc compression. but wait: if you enable this, blob-level compression gets forcibly disabled. forsrc_cas-src_cas_grpc_conn_pool=25β grpc connection pool-src_cas_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit without stream. forsrc_cas-src_cas_grpc_keepalive_time=30sβ grpc keepalive time. forsrc_cas-src_cas_grpc_keepalive_timeout=20sβ grpc keepalive timeout. forsrc_cas-src_cas_insecure=falseβ reapi insecure mode. default can be set by$RBE_service_no_security-src_cas_instance=default_instanceβ reapi instance name. forsrc_cas-src_cas_keep_exec_stream=falseβ keep the Execute stream open for as long as humanly possible π«Ά-src_cas_max_retries=10β max retries for remote execution-src_cas_tls_ca_certβ load TLS CA certificates from this file when connecting to the RE api service. default can be set by$RBE_tls_ca_cert-src_cas_tls_client_auth_certβ the certificate you use when doing mTLS to the RE api service. default can be set by$RBE_tls_client_auth_cert-src_cas_tls_client_auth_keyβ the key for that mTLS connection to the RE api service. default can be set by$RBE_tls_client_auth_key-src_cas_trace_cookieβ if set, it goes out as thecookiegRPC metadata header on every RPC to this backend to force server-side trace sampling (like Dapper). forsrc_cas-src_cas_version_to_useβ specify which re api version to use, in the formatv<major>.<minor>. e.g.v2.0
π§ proxy β proxy RE-API service
okay so this one literally proxies the RE API service. iconic behaviour honestly π
$ siso proxy [-project <project>] [-reapi_address <addr>] [-reapi_instance <instance>] \
-addr unix:///<path>
$ siso ninja -reapi_address unix:///<path> --reapi_insecure=true ...
β¨ Flags β¨
-addrβ the address to listen on-projectβ the cloud project ID. can be set by$SISO_PROJECT-reapi_address=remotebuildexecution.googleapis.com:443β the reapi address-reapi_batch_compress_blob=0β use compressed blobs inBatchUpdateBlobsif the server supports it and the size is bigger than this. specify0to disable.-reapi_byte_stream_read_threshold=2097152β if the blob size is>=the threshold, use the ByteStream API (compression-aware)-reapi_cas_addressβ the reapi cas address. if it's empty, it shares the conn withreapi_address-reapi_compress_blob=1024β use compressed blobs if the server supports compressed blobs and the size is bigger than this. specify0to disable blob-level compression.-reapi_digest_function=sha256β the content digest function:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256tree-reapi_enable_grpc_compression=falseβ enable grpc compression. but: if you enable it, blob-level compression gets forcibly disabled.-reapi_grpc_conn_pool=25β grpc connection pool-reapi_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit without stream-reapi_grpc_keepalive_time=30sβ grpc keepalive time-reapi_grpc_keepalive_timeout=20sβ grpc keepalive timeout-reapi_insecure=falseβ reapi insecure mode. default can be set by$RBE_service_no_security-reapi_instance=default_instanceβ reapi instance name. for Google RBE specifically: if the instance is fully qualified (starts withprojects/), the project ID gets inferred from it. otherwise, the project ID from-project(or$SISO_PROJECT) is used to construct the instance name. and if you give both,-projectis used for the other cloud services π«-reapi_keep_exec_stream=falseβ keep the Execute stream open as long as possible-reapi_max_retries=10β max retries for remote execution-reapi_priority=0β reapi priority for action executions. the semantics and the supported values are up to the backend, so like... ask your backend π«-reapi_tls_ca_certβ load TLS CA certificates from this file to connect to the RE api service. default can be set by$RBE_tls_ca_cert-reapi_tls_client_auth_certβ the certificate to use when connecting to the RE api service with mTLS. default can be set by$RBE_tls_client_auth_cert-reapi_tls_client_auth_keyβ the key to use when connecting to the RE api service with mTLS. default can be set by$RBE_tls_client_auth_key-reapi_trace_cookieβ if set, it's sent as thecookiegRPC metadata header on every RPC to this backend, forcing server-side trace sampling (e.g. Dapper)-reapi_version_to_useβ specify which re api version to use, in the formatv<major>.<minor>. e.g.v2.0
π¦ recall β recall action
recall an action by digest, or do a remote exec call to run it. it's giving time travel but for builds βͺ
to recall the action identified by <digest> in <dir>:
$ siso recall [-project <project>] [-reapi_instance <instance>] \
<dir> <digest>
inside <dir> you'll get "action.txt", "command.txt" and "root/".
and yes bestie, you may modify *.txt or the files in root/ πΈ
if you don't specify <digest>, it just runs the action in <dir>. and you can totally omit <dir> if it's the current directory ".". so convenient π
- to issue a remote exec call to run the command:
$ siso recall [-project <project>] [-reapi_instance <instance>] <dir>
- to re-run the command on a remote worker without fetching cache:
$ siso recall [-project <project>] [-reapi_instance <instance>] -re_cache_enable_read=false <dir>
- to use local docker to run the command:
$ siso recall [-local] <dir>
β¨ Flags β¨
-cpusβ how much of the available CPU resources the action can use (e.g.'1.5'for at most one and a half of the CPUs)-exec_timeout=0sβ set the exec call timeout-execute_requestβ execute request proto-hdd=falseβ run the action with slowed-down I/O that resembles a hard-disk with12MB/sthroughput,75read IOPS and150write IOPS π-local=falseβ force running the action locally using Docker, even if REAPI is configured-memoryβ the maximum amount of memory the action can use (e.g.512mor2g)-projectβ the cloud project ID. can be set by$SISO_PROJECT-re_cache_enable_read=trueβ remote exec cache enable read-reapi_address=remotebuildexecution.googleapis.com:443β the reapi address-reapi_batch_compress_blob=0β use compressed blobs inBatchUpdateBlobsif the server supports it and the size is bigger than this. specify0to disable.-reapi_byte_stream_read_threshold=2097152β if the blob size is>=the threshold, use the ByteStream API (compression-aware)-reapi_cas_addressβ the reapi cas address. if it's empty, it shares the conn withreapi_address-reapi_compress_blob=1024β use compressed blobs if the server supports compressed blobs and the size is bigger than this. specify0to disable blob-level compression.-reapi_digest_function=sha256β the content digest function:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256tree-reapi_enable_grpc_compression=falseβ turn grpc compression on. heads up bestie: the moment you flip this to enabled, blob-level compression gets forcibly disabled. it's giving either/or, no cap. π€-reapi_grpc_conn_pool=25β grpc connection pool size.-reapi_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit-without-stream toggle.-reapi_grpc_keepalive_time=30sβ grpc keepalive time. π°οΈ-reapi_grpc_keepalive_timeout=20sβ grpc keepalive timeout.-reapi_insecure=falseβ reapi insecure mode. your default can be set by$RBE_service_no_securityinstead of typing it every time. π-reapi_instance=default_instanceβ the reapi instance name. for Google RBE there's a lil logic going on here: if the instance is fully qualified (starts withprojects/), the project ID is inferred from it. otherwise, the project ID from-project(or$SISO_PROJECT) is used to build the instance name. and if you give both, then-projectis what gets used for the other cloud services. okurrr. β¨-reapi_keep_exec_stream=falseβ keep the Execute stream open as long as possible. clingy in the best way. π«Ά-reapi_max_retries=10β max retries for remote execution.-reapi_priority=0β reapi priority for action executions. the semantics and supported values are fully up to the backend, so it's giving "iykyk". β¨-reapi_tls_ca_certβ load TLS CA certificates from this file to connect to the RE api service. default can be set by$RBE_tls_ca_cert.-reapi_tls_client_auth_certβ the certificate to use when you're doing mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_cert.-reapi_tls_client_auth_keyβ the key to use when you're doing mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_key.-reapi_trace_cookieβ if you set this, it gets sent as thecookiegRPC metadata header on every RPC to this backend, which forces server-side trace sampling (think Dapper). πͺ-reapi_version_to_useβ pick which re api version to use, formatted likev<major>.<minor>, e.g.v2.0.-stats=falseβ run the command under/usr/bin/timeand print detailed resource stats once it's done. note: this may fail if the container's glibc is incompatible with the host. π
β¨ INVESTIGATION β¨
π fs β command group to access siso hashfs data
command group to access siso hashfs data. πΈ
just run siso fs to see all the subcommands. and for the tea on any one of them, use siso fs help [subcommand]. π«Ά
π metrics β command group to analyze siso_metrics.json
command group to analyze siso_metrics.json.
run siso metrics to display the subcommands, and siso metrics help [subcommand] for more info about a specific subcommand. β¨
π ps β display running steps of ninja build
display the running steps of a ninja build. literally the main character of "what is my build doing rn". π
for a local build:
$ siso ps [-C dir]
for builders build:
$ siso ps --stdout_url <compile-step-stdout-URL>
flags:
-C=.β ninja running directory (chdir before run).-config_repo_dir=build/config/sisoβ config repo directory (relative to the workspace).-interval=-1nsβ query interval, but only if it's positive. by default it's1son a terminal. β±οΈ-n=0β limit the number of steps, if it's positive.-state_dir=.β state directory (relative to-C).-stdout_urlβ stdout streaming URL. π
π§ query β command group to query ninja build graph
command group to query ninja build graph.
use siso query to display subcommands, and siso query help [subcommand] when you need more info about one of them. π
π report β report siso logs
report siso logs. it collects siso logs in <dir>. π
$ siso report -C <dir>
flags:
-C=.β ninja running directory (chdir before run).-config_repo_dir=build/config/sisoβ config repo directory (relative to the workspace).-fs_digest_xattrβ xattr for sha256 digest; an empty value enables the default on Cog/CartFS only. π
π webui β starts the experimental webui
starts the experimental webui. bestie, listen: it is not ready for wide use yet, it requires static files to work, and it is subject to breaking changes at any moment. this one is giving "come back later" energy fr. π§
flags:
-C=.β ninja running directory (chdir before run).-config_repo_dir=build/config/sisoβ config repo directory (relative to the workspace).-f=build.ninjaβ input build manifest filename (relative to-C).-local_development=falseβ whether to use local files instead of embedded files.-metrics_fileβ optional path tosiso_metrics.jsonto load (experimental,-Cis still required for now).-port=8080β port to use (defaults to8080). πͺ
π AUTH π
β
auth-check β prints current auth status
prints current auth status. let's see who you are bestie. π
flags:
-check_reapi=trueβ check reapi call.-projectβ cloud project ID. can be set by$SISO_PROJECT.-read_only=falseβ check for read only access.-reapi_address=remotebuildexecution.googleapis.com:443β reapi address.-reapi_batch_compress_blob=0β use compressed blobs in BatchUpdateBlobs if the server supports it and the size is bigger than this. specify0to disable.-reapi_byte_stream_read_threshold=2097152β if blob size is>=this threshold, use the ByteStream API (compression-aware).-reapi_cas_addressβ reapi cas address (if it's empty, share the conn withreapi_address).-reapi_compress_blob=1024β use compressed blobs if the server supports compressed blobs and the size is bigger than this. specify0to disable blob-level compression.-reapi_digest_function=sha256β content digest function:sha256,sha1,gitsha1,blake3,md5,sha384,sha512,murmur3,vso, orsha256tree.-reapi_enable_grpc_compression=falseβ enable grpc compression. if enabled, blob-level compression will be forcibly disabled.-reapi_grpc_conn_pool=25β grpc connection pool.-reapi_grpc_keepalive_permit_without_stream=falseβ grpc keepalive permit without stream.-reapi_grpc_keepalive_time=30sβ grpc keepalive time.-reapi_grpc_keepalive_timeout=20sβ grpc keepalive timeout.-reapi_insecure=falseβ reapi insecure mode. default can be set by$RBE_service_no_security.-reapi_instance=default_instanceβ reapi instance name. (for Google RBE: if instance is fully qualified (starts withprojects/), project ID is inferred from it. otherwise, project ID from-project(or$SISO_PROJECT) is used to construct the instance name. if both are provided,-projectis used for other cloud services.)-reapi_keep_exec_stream=falseβ keep Execute stream open as long as possible.-reapi_max_retries=10β max retries for remote execution.-reapi_priority=0β reapi priority for action executions. the semantics and supported values depend on the backend.-reapi_tls_ca_certβ load TLS CA certificates from this file to connect to the RE api service. default can be set by$RBE_tls_ca_cert.-reapi_tls_client_auth_certβ certificate to use when using mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_cert.-reapi_tls_client_auth_keyβ key to use when using mTLS to connect to the RE api service. default can be set by$RBE_tls_client_auth_key.-reapi_trace_cookieβ if set, sent as thecookiegRPC metadata header on every RPC to this backend, to force server-side trace sampling (e.g. Dapper).-reapi_version_to_useβ specify re api version to use, in format ofv<major>.<minor>. e.g.v2.0.
πͺͺ login β login to siso system
login to siso system. get in bestie, we're going in. β¨
πͺ logout β logout from siso system
logout from siso system. bye babes! π
π DEBUGGING π
π§΅ ninjafrontend β ninjafrontend reader
ninjafrontend reader. parses the ninjafrontend proto. π¬
$ siso ninja -frontend_file=- .. | siso ninjafrontend -template '...'
e.g. show message only:
--template='{{- with .Message}}{{with .Message}}{{.}}{{end}}{{end}}'
show edge output only:
--template='{{- with .EdgeFinished}}{{with .Output}}{{.}}{{end}}{{end}}'
see the proto definition:
https://chromium.googlesource.com/infra/infra/go/src/infra/+/refs/heads/main/build/siso/toolsupport/soongutil/proto/frontend.proto
see template syntax: https://pkg.go.dev/text/template
flags:
-template={{.}}β template forfrontend.Statusmessage. π§
π¦ sandbox β run in sandbox
run in sandbox. ποΈ
$ siso sandbox -nsjail '<json nsjail request>' -- args ...
you can manually construct the json string of go.chromium.org/build/siso/toolsupport/nsjail.Request.
flags:
-C=.β ninja running directory (chdir before run).-cleanup=trueβ cleanup sandbox after execution.-config_repo_dir=build/config/sisoβ config repo directory (relative to the workspace).-fs_defer_digest=falseβ defer digest calculation.-fs_digest_xattrβ xattr for sha256 digest; empty enables the default on Cog/CartFS only.-fs_keep_tainted=falseβ keep manually modified generated file.-fs_min_flush_timeout=30sβ minimum timeout for flush. ignored if it's shorter than10s.-fs_state=.siso_fs_stateβ fs state filename.-fs_state_compression_level=1β fs state compression level (1= fastest,10= best). πββοΈ-fs_state_compression_threads=8β number of threads to use for data compression.-fs_state_mmap=trueβ use memory-mapped I/O for state file reads/writes.-nsjailβ json format of nsjail request. π
π scandeps β run scandeps
run scandeps. π΅οΈ
...and the scandeps examples keep going, bestie, no cap:
$ siso scandeps -C <dir> -req '<json scandeps request>'
$ siso scandeps -C <dir> -target <build target name>
$ siso scandeps -C <dir> -- <command line>
That <json scandeps request>? Iconic shortcut alert π you can find it sitting right there in the siso.INFO log, under "scandeps failed Request" β literally just copy-and-paste the json string straight out of the log. Chef's kiss. Or, if you're feeling main character energy, you can manually construct the json string of infra/build/siso/scandeps.Request. Your call, gorgeous π«Ά
And the flags for this one:
-C=.β the ninja running directory (chdir happens before it runs)-config_repo_dir=build/config/sisoβ config repo directory (and yeah, it's relative to the workspace)-reqβ json format of a scandeps request-state_dir=.β state directory (relative to-C, so pay attention β¨)-targetβ build target name
π οΈ INTERNAL-HELPER
These are the behind-the-scenes girlies. They do the work so you don't have to π
man
generates a man page for siso
man [-out <file>]:
Generates a man page for siso and its subcommands in troff
format.
So it manifests a whole man page, in troff format, for siso and all its subcommands. Meta, right? π¦
Flags:
-outβ output file path (default is stdout, so if you don't say anything it just yeets it at you)
spawn-helper
internal: fork/exec server for local actions
It's an internal helper that spawns local build actions on behalf of siso. π£
Real talk: users do not run this directly, okay? No cap.sisolaunches it automatically for local actions, specifically so it doesn't have tofork()its big ol' large heap. She's efficient like that π
Flags:
-conn_fd=0β inherited socketpair fd to serve the spawn protocol on-log_fileβ file for the helper's diagnostics (default: stderr)
π COMMAND-HELP
flags
describe all known top-level flags
flags [<subcommand>]:
With an argument, print all flags of that <subcommand>. Else, print a description of all known top-level flags. (And bestie, heads up: the basic help information only discusses the most generally important top-level flags. So flags is the full tea β)
help
describe subcommands and their syntax
help [<subcommand>]:
With an argument, it prints detailed information on the use of the specified subcommand. With no argument, print a list of all commands and a brief description of each. It's giving β¨directory of everythingβ¨
version
prints the executable version
Prints the executable version and the CIPD package the executable was installed from (if it was installed via CIPD, obviously β if it wasn't, don't expect it to manifest out of thin air π).
Flags:
-cipd_urlβ show version info for this cipd URL.-online=trueβ get information from CIPD and Git repo.
π ENVIRONMENT
All the little env vars that can secretly be your bestie or your villain, depending on the day:
SISO_CREDENTIAL_HELPERβ sets the default value of-credential_helper. It specifies a path to a credential helper program. Seehttps://github.com/EngFlow/credential-helper-spec/blob/main/spec.mdSISO_PROJECTβ sets the default value of--project, to specify Google Cloud Project.SISO_REAPI_INSTANCEβ sets the default value of-reapi_instance, to specify RE API instance name.SISO_REAPI_ADDRESSβ sets the default value of-reapi_address, to specify RE API service address.SISO_REAPI_CAS_ADDRESSβ sets the default value of-reapi_cas_address, to specify RE API content addressable storage service address.SISO_LIMITSβ can control siso's resource semaphore. Comma separated key value pairs in the form ofkey=value.step: maximum number of concurrent steps.preproc: maximum number of concurrent preprocesses.scandeps: maximum number of concurrent scandeps.local: maximum number of concurrent local executions.fastlocal: maximum number of local executions when local is idle even if step is remote executable.startlocal: maximum initial steps to run locally even if step is remote executable.remote: maximum number of concurrent remote executions.rewrap: maximum number of concurrentuse_remote_exec_wrappersteps.cache: maximum number of concurrent exec cache lookups.thread: maximum number of threads.- e.g.
SISO_LIMITS=local=10,remote=100
SISO_FSMONITORβ a path of file system monitoring tool. Currentlywatchmanis supported. (experimental).SISO_EXPERIMENTSβ comma separated feature names.SISO_BUILD_IDβ sets the default value of--build_id, to identify the build process. Used fortool_invocation_idof remote apis, andbuild_idlabel of Cloud logging resources.SISO_COLLECTOR_ADDRESSβ sets the default value of--collector_address.NO_COLORβ disable colored text output. Seehttps://no-color.org/(sad, but valid π)TERMβ used to detect smart terminal."dumb"or"dumb-emacs-ansi"are not smart terminal.RBE_service_no_securityβ sets the default value of-reapi_insecure, when using RE API with no authentication. (reclient compat)RBE_tls_client_auth_cert,RBE_tls_client_auth_keyβ sets the default values of-reapi_tls_client_auth_certand-reapi_tls_client_auth_key, when to use mTLS authentication. (reclient compat)RBE_tls_ca_certβ sets the default value of-reapi_tls_ca_certto specify Root CA Certificates file. (reclient compat)NINJA_CORE_MULTIPLIER,NINJA_CORE_LIMITβ used to define default of rewrap's limit. (reclient compat)RBE_remote_disabledβ used to decide offline mode or not. (reclient compat)RBE_metrics_projectβ sets the default value of-metrics_project, to specify Google Cloud Project for cloud monitoring. (reclient compat)RBE_metrics_labelsβ sets the default value of-metrics_labels, which is comma separated arbitrary key value pairs in the formkey=valueto be added for cloud monitoring metrics. (reclient compat)
π§ DEBIAN-SPECIFIC NOTES
Okay so the Debian package is not identical to the upstream CIPD-distributed binary β it differs in two ways, and we're being fully transparent about it because that's the vibe π
Removed: OTel Collector subcommand
The collector subcommand (an internal-helper for Google's metrics infrastructure) is not included. It requires 84 Go modules not packaged in Debian and is only useful within Google Cloud infrastructure.
Removed: Direct Google Cloud Monitoring export
The direct export to Google Cloud Monitoring is not available. Build metrics can still be exported to any OpenTelemetry-compatible collector using the --collector_address flag with the ninja subcommand. This is the standard, vendor-neutral approach to metrics collection and works with Grafana, Jaeger, Prometheus, and other OTLP-compatible tools. β¨
Good news though: all core functionality (Ninja-compatible builds, local execution, Remote Build Execution via RBE, Starlark configuration) is fully preserved. She ate and left no crumbs π
π SEE ALSO
Full documentation is available at https://chromium.googlesource.com/build/+/refs/heads/main/siso/ πΈ
π AUTHORS
The Chromium Authors.
And that's a wrap, bestie! π This whole page is the Siso Manual, page SISO(1) β from the source at https://chromium.googlesource.com/build/+/refs/heads/main/siso/. Go build something iconic with it π¦β¨π
π¦ where this page comes from
- ubuntu stonking: siso 1.5.22+ds-1 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms