CINXE.COM

Test encyclopedia  |  Bazel

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="157101835696-ooapojlodmuabs2do2vuhhnf90bccmoi.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Bazel"> <meta property="og:type" content="website"><meta name="theme-color" content="#0c713a"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/bazel/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/favicon-prod.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/touchicon-180.png"><link rel="canonical" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia"><link rel="search" type="application/opensearchdescription+xml" title="Bazel" href="https://bazel.build/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia" /><link rel="alternate" hreflang="x-default" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia" /><link rel="alternate" hreflang="zh-Hans" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=zh-tw" /><link rel="alternate" hreflang="hi" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=hi" /><link rel="alternate" hreflang="id" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=id" /><link rel="alternate" hreflang="ja" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=ja" /><link rel="alternate" hreflang="ko" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=ko" /><link rel="alternate" hreflang="pt-BR" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=pt-br" /><link rel="alternate" hreflang="es-419" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=es-419" /><link rel="alternate" hreflang="th" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=th" /><link rel="alternate" hreflang="tr" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=tr" /><link rel="alternate" hreflang="vi" href="https://bazel.build/versions/7.0.0/reference/test-encyclopedia?hl=vi" /><link rel="alternate" hreflang="en-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia" /><link rel="alternate" hreflang="x-default" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia" /><link rel="alternate" hreflang="zh-Hans-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=zh-tw" /><link rel="alternate" hreflang="hi-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=hi" /><link rel="alternate" hreflang="id-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=id" /><link rel="alternate" hreflang="ja-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=ja" /><link rel="alternate" hreflang="ko-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=ko" /><link rel="alternate" hreflang="pt-BR-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=pt-br" /><link rel="alternate" hreflang="es-419-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=es-419" /><link rel="alternate" hreflang="th-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=th" /><link rel="alternate" hreflang="tr-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=tr" /><link rel="alternate" hreflang="vi-cn" href="https://bazel.google.cn/versions/7.0.0/reference/test-encyclopedia?hl=vi" /><title>Test encyclopedia &nbsp;|&nbsp; Bazel</title> <meta property="og:title" content="Test encyclopedia &nbsp;|&nbsp; Bazel"><meta property="og:url" content="https://bazel.build/versions/7.0.0/reference/test-encyclopedia"><meta property="og:locale" content="en"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Test encyclopedia" } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="bazel-theme" type="article" layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="bazel" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/lockup.svg" class="devsite-site-logo" alt="Bazel"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab > <a href="https://bazel.build/versions/7.0.0/about" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/about" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - about bazel" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: About Bazel" track-name="about bazel" > About Bazel </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/start" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/start" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - getting started" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Getting started" track-name="getting started" > Getting started </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/docs" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/docs" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - user guide" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: User guide" track-name="user guide" > User guide </a> </tab> <tab class="devsite-active"> <a href="https://bazel.build/versions/7.0.0/reference" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/reference" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" aria-label="Reference, selected" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/extending" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/extending" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - extending" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Extending" track-name="extending" > Extending </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/community" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/community" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > Community </a> </tab> <tab class="devsite-dropdown "> <a href="https://bazel.build/versions" track-metadata-eventdetail="https://bazel.build/versions" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - versioned docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" > Versioned docs </a> <a href="#" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu for Versioned docs" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions" track-metadata-position="nav - versioned docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.4.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.4.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.4 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.3.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.3.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.3 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.2.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.2.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.2 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.1.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.1.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.1 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/7.0.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/7.0.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 7.0 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions/6.5.0" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions/6.5.0" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 6.5 </div> </a> </li> <li class="devsite-nav-item"> <a href="https://docs.bazel.build/versions/5.4.1/bazel-overview.html" track-type="nav" track-metadata-eventdetail="https://docs.bazel.build/versions/5.4.1/bazel-overview.html" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> 5.4.1 </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://bazel.build/" track-type="nav" track-metadata-eventdetail="https://bazel.build/" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Nightly </div> </a> </li> <li class="devsite-nav-item"> <a href="https://bazel.build/versions" track-type="nav" track-metadata-eventdetail="https://bazel.build/versions" track-metadata-position="nav - versioned docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> More… </div> </a> </li> </ul> </div> </div> </div> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Bazel" tenant-name="Bazel" > <form class="devsite-search-form" action="https://bazel.build/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//github.com/bazelbuild/bazel/" data-category="Site-Wide Custom Events" data-label="Site header link" > GitHub </a> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> <a href="https://bazel.build/versions/7.0.0/reference" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Searchable reference documents generated from Bazel&#39;s code </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab class="devsite-active"> <a href="https://bazel.build/versions/7.0.0/reference/be/overview" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/reference/be/overview" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - build encyclopedia" track-metadata-module="primary nav" aria-label="Build encyclopedia, selected" data-category="Site-Wide Custom Events" data-label="Tab: Build encyclopedia" track-name="build encyclopedia" > Build encyclopedia </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/reference/command-line-reference" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/reference/command-line-reference" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - command line reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Command line reference" track-name="command line reference" > Command line reference </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/query/language" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/query/language" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - query language" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Query language" track-name="query language" > Query language </a> </tab> <tab > <a href="https://bazel.build/versions/7.0.0/reference/glossary" track-metadata-eventdetail="https://bazel.build/versions/7.0.0/reference/glossary" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - glossary" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Glossary" track-name="glossary" > Glossary </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="bazel" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/lockup.svg" class="devsite-site-logo" alt="Bazel"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/versions/7.0.0/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: About Bazel" track-name="about bazel" data-category="Site-Wide Custom Events" data-label="Responsive Tab: About Bazel" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > About Bazel </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/start" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Getting started" track-name="getting started" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Getting started" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Getting started </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: User guide" track-name="user guide" data-category="Site-Wide Custom Events" data-label="Responsive Tab: User guide" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > User guide </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/reference" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/versions/7.0.0/reference/be/overview" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Build encyclopedia" track-name="build encyclopedia" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build encyclopedia" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Build encyclopedia </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/reference/command-line-reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Command line reference" track-name="command line reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Command line reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Command line reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/query/language" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Query language" track-name="query language" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Query language" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Query language </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/reference/glossary" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Glossary" track-name="glossary" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Glossary" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Glossary </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/extending" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Extending" track-name="extending" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extending" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extending </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0/community" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Community </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Versioned docs" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Versioned docs </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Versioned docs" track-name="versioned docs" > <span class="devsite-nav-text" tooltip menu="Versioned docs"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Versioned docs"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="//github.com/bazelbuild/bazel/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: GitHub" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > GitHub </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Build encyclopedia</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/overview" ><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/common-definitions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/common-definitions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/common-definitions" ><span class="devsite-nav-text" tooltip>Common definitions</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/make-variables" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/make-variables" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/make-variables" ><span class="devsite-nav-text" tooltip>Make variables</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/functions" ><span class="devsite-nav-text" tooltip>Functions</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Core rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/extra-actions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/extra-actions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/extra-actions" ><span class="devsite-nav-text" tooltip>Extra Actions</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/general" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/general" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/general" ><span class="devsite-nav-text" tooltip>General</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/platforms-and-toolchains" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/platforms-and-toolchains" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/platforms-and-toolchains" ><span class="devsite-nav-text" tooltip>Platforms and Toolchains</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/workspace" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/workspace" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/workspace" ><span class="devsite-nav-text" tooltip>Workspace</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Language Specific rules</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/android" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/android" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/android" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/c-cpp" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/c-cpp" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/c-cpp" ><span class="devsite-nav-text" tooltip>C / C++</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/java" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/java" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/java" ><span class="devsite-nav-text" tooltip>Java</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/objective-c" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/objective-c" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/objective-c" ><span class="devsite-nav-text" tooltip>Objective-C</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/protocol-buffer" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/protocol-buffer" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/protocol-buffer" ><span class="devsite-nav-text" tooltip>Protocol Buffer</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/python" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/python" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/python" ><span class="devsite-nav-text" tooltip>Python</span></a></li><li class="devsite-nav-item"><a href="/versions/7.0.0/reference/be/shell" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/be/shell" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/be/shell" ><span class="devsite-nav-text" tooltip>Shell</span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_appengine" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_appengine" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_appengine" ><span class="devsite-nav-text" tooltip>AppEngine</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_apple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_apple" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_apple" ><span class="devsite-nav-text" tooltip>Apple (Swift, iOS, macOS, tvOS, visionOS, watchOS)</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_dotnet" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_dotnet" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_dotnet" ><span class="devsite-nav-text" tooltip>C#</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_d" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_d" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_d" ><span class="devsite-nav-text" tooltip>D</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_docker" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_docker" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_docker" ><span class="devsite-nav-text" tooltip>Docker</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_groovy" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_groovy" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_groovy" ><span class="devsite-nav-text" tooltip>Groovy</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_go" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_go" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_go" ><span class="devsite-nav-text" tooltip>Go</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_closure" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_closure" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_closure" ><span class="devsite-nav-text" tooltip>JavaScript (Closure)</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_jsonnet" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_jsonnet" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_jsonnet" ><span class="devsite-nav-text" tooltip>Jsonnet</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_rust" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_rust" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_rust" ><span class="devsite-nav-text" tooltip>Rust</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_sass" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_sass" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_sass" ><span class="devsite-nav-text" tooltip>Sass</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://github.com/bazelbuild/rules_scala" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/bazelbuild/rules_scala" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/bazelbuild/rules_scala" ><span class="devsite-nav-text" tooltip>Scala</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item"><a href="/versions/7.0.0/reference/test-encyclopedia" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /versions/7.0.0/reference/test-encyclopedia" track-type="bookNav" track-name="click" track-metadata-eventdetail="/versions/7.0.0/reference/test-encyclopedia" ><span class="devsite-nav-text" tooltip>Test encyclopedia</span></a></li> </ul> <ul class="devsite-nav-list" menu="Versioned docs" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/versions/7.4.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.4" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.4 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.3.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.3" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.3 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.2.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.2" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.2 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.1.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.1" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.1 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/7.0.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 7.0" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 7.0 </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions/6.5.0" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 6.5" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 6.5 </span> </a> </li> <li class="devsite-nav-item"> <a href="https://docs.bazel.build/versions/5.4.1/bazel-overview.html" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: 5.4.1" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > 5.4.1 </span> </a> </li> <li class="devsite-nav-item"> <a href="/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Nightly" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Nightly </span> </a> </li> <li class="devsite-nav-item"> <a href="/versions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: More…" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > More… </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://bazel.build/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Bazel" > Bazel </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://bazel.build/versions/7.0.0/reference" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="" > Reference </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://bazel.build/versions/7.0.0/reference/be/overview" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="" > Build encyclopedia </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Bazel" product-id="5052038" bucket="https-bazel-build" context="" version="t-devsite-webserver-20241114-r00-rc02.464921008191574316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/touchicon-180.png" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Test encyclopedia </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/issues/new?title=%5Bbazel.build%5D+Problem+with+/versions/7.0.0/reference/test-encyclopedia&template=doc_issue.yml&link=https%3A%2F%2Fbazel.build/versions/7.0.0/reference/test-encyclopedia" target="_blank"> Report an issue<span class="material-icons icon-after" aria-hidden="true" translate="no">open_in_new</span> </a> <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/tree/master/site/en/versions/7.0.0/reference/test-encyclopedia.md" target="_blank"> View source<span class="material-icons icon-after" aria-hidden="true" translate="no">open_in_new</span> </a> <span style="float: right; line-height: 36px"> <a href="/reference/test-encyclopedia">Nightly</a> <!-- The lines below are updated by //scripts/docs:gen_new_toc --> <!-- BEGIN_VERSION_INDICATOR --> · <a href="/versions/7.4.0/reference/test-encyclopedia">7.4</a> . <a href="/versions/7.3.0/reference/test-encyclopedia">7.3</a> · <a href="/versions/7.2.0/reference/test-encyclopedia">7.2</a> · <a href="/versions/7.1.0/reference/test-encyclopedia">7.1</a> · <strong>7.0</strong> · <a href="/versions/6.5.0/reference/test-encyclopedia">6.5</a> <!-- END_VERSION_INDICATOR --> </span> <p/> <p>An exhaustive specification of the test execution environment.</p> <h2 id="background" data-text="Background" tabindex="-1">Background</h2> <p>The Bazel BUILD language includes rules which can be used to define automated test programs in many languages.</p> <p>Tests are run using <a href="/versions/7.0.0/docs/user-manual#test"><code translate="no" dir="ltr">bazel test</code></a>.</p> <p>Users may also execute test binaries directly. This is allowed but not endorsed, as such an invocation will not adhere to the mandates described below.</p> <p>Tests should be <em>hermetic</em>: that is, they ought to access only those resources on which they have a declared dependency. If tests are not properly hermetic then they do not give historically reproducible results. This could be a significant problem for culprit finding (determining which change broke a test), release engineering auditability, and resource isolation of tests (automated testing frameworks ought not DDOS a server because some tests happen to talk to it).</p> <h2 id="objective" data-text="Objective" tabindex="-1">Objective</h2> <p>The goal of this page is to formally establish the runtime environment for and expected behavior of Bazel tests. It will also impose requirements on the test runner and the build system.</p> <p>The test environment specification helps test authors avoid relying on unspecified behavior, and thus gives the testing infrastructure more freedom to make implementation changes. The specification tightens up some holes that currently allow many tests to pass despite not being properly hermetic, deterministic, and reentrant.</p> <p>This page is intended to be both normative and authoritative. If this specification and the implemented behavior of test runner disagree, the specification takes precedence.</p> <h2 id="proposed-specification" data-text="Proposed Specification" tabindex="-1">Proposed Specification</h2> <p>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; are to be interpreted as described in IETF RFC 2119.</p> <h2 id="purpose-of-tests" data-text="Purpose of tests" tabindex="-1">Purpose of tests</h2> <p>The purpose of Bazel tests is to confirm some property of the source files checked into the repository. (On this page, &quot;source files&quot; includes test data, golden outputs, and anything else kept under version control.) One user writes a test to assert an invariant which they expect to be maintained. Other users execute the test later to check whether the invariant has been broken. If the test depends on any variables other than source files (non-hermetic), its value is diminished, because the later users cannot be sure their changes are at fault when the test stops passing.</p> <p>Therefore the outcome of a test must depend only on:</p> <ul> <li>source files on which the test has a declared dependency</li> <li>products of the build system on which the test has a declared dependency</li> <li>resources whose behavior is guaranteed by the test runner to remain constant</li> </ul> <p>Currently, such behavior is not enforced. However, test runners reserve the right to add such enforcement in the future.</p> <h2 id="role-build-system" data-text="Role of the build system" tabindex="-1">Role of the build system</h2> <p>Test rules are analogous to binary rules in that each must yield an executable program. For some languages, this is a stub program which combines a language-specific harness with the test code. Test rules must produce other outputs as well. In addition to the primary test executable, the test runner will need a manifest of <strong>runfiles</strong>, input files which should be made available to the test at runtime, and it may need information about the type, size, and tags of a test.</p> <p>The build system may use the runfiles to deliver code as well as data. (This might be used as an optimization to make each test binary smaller by sharing files across tests, such as through the use of dynamic linking.) The build system should ensure that the generated executable loads these files via the runfiles image provided by the test runner, rather than hardcoded references to absolute locations in the source or output tree.</p> <h2 id="role-test-runner" data-text="Role of the test runner" tabindex="-1">Role of the test runner</h2> <p>From the point of view of the test runner, each test is a program which can be invoked with <code translate="no" dir="ltr">execve()</code>. There may be other ways to execute tests; for example, an IDE might allow the execution of Java tests in-process. However, the result of running the test as a standalone process must be considered authoritative. If a test process runs to completion and terminates normally with an exit code of zero, the test has passed. Any other result is considered a test failure. In particular, writing any of the strings <code translate="no" dir="ltr">PASS</code> or <code translate="no" dir="ltr">FAIL</code> to stdout has no significance to the test runner.</p> <p>If a test takes too long to execute, exceeds some resource limit, or the test runner otherwise detects prohibited behavior, it may choose to kill the test and treat the run as a failure. The runner must not report the test as passing after sending a signal to the test process or any children thereof.</p> <p>The whole test target (not individual methods or tests) is given a limited amount of time to run to completion. The time limit for a test is based on its <a href="/versions/7.0.0/reference/be/common-definitions#test.timeout"><code translate="no" dir="ltr">timeout</code></a> attribute according to the following table:</p> <table> <tr> <th>timeout</th> <th>Time Limit (sec.)</th> </tr> <tr> <td>short</td> <td>60</td> </tr> <tr> <td>moderate</td> <td>300</td> </tr> <tr> <td>long</td> <td>900</td> </tr> <tr> <td>eternal</td> <td>3600</td> </tr> </table> <p>Tests which do not explicitly specify a timeout have one implied based on the test&#39;s <a href="/versions/7.0.0/reference/be/common-definitions#test.size"><code translate="no" dir="ltr">size</code></a> as follows:</p> <table> <tr> <th>size</th> <th>Implied timeout label</th> </tr> <tr> <td>small</td> <td>short</td> </tr> <tr> <td>medium</td> <td>moderate</td> </tr> <tr> <td>large</td> <td>long</td> </tr> <tr> <td>enormous</td> <td>eternal</td> </tr> </table> <p>A &quot;large&quot; test with no explicit timeout setting will be allotted 900 seconds to run. A &quot;medium&quot; test with a timeout of &quot;short&quot; will be allotted 60 seconds.</p> <p>Unlike <code translate="no" dir="ltr">timeout</code>, the <code translate="no" dir="ltr">size</code> additionally determines the assumed peak usage of other resources (like RAM) when running the test locally, as described in <a href="/versions/7.0.0/reference/be/common-definitions#common-attributes-tests">Common definitions</a>.</p> <p>All combinations of <code translate="no" dir="ltr">size</code> and <code translate="no" dir="ltr">timeout</code> labels are legal, so an &quot;enormous&quot; test may be declared to have a timeout of &quot;short&quot;. Presumably it would do some really horrible things very quickly.</p> <p>Tests may return arbitrarily fast regardless of timeout. A test is not penalized for an overgenerous timeout, although a warning may be issued: you should generally set your timeout as tight as you can without incurring any flakiness.</p> <p>The test timeout can be overridden with the <code translate="no" dir="ltr">--test_timeout</code> bazel flag when manually running under conditions that are known to be slow. The <code translate="no" dir="ltr">--test_timeout</code> values are in seconds. For example, <code translate="no" dir="ltr">--test_timeout=120</code> sets the test timeout to two minutes.</p> <p>There is also a recommended lower bound for test timeouts as follows:</p> <table> <tr> <th>timeout</th> <th>Time minimum (sec.)</th> </tr> <tr> <td>short</td> <td>0</td> </tr> <tr> <td>moderate</td> <td>30</td> </tr> <tr> <td>long</td> <td>300</td> </tr> <tr> <td>eternal</td> <td>900</td> </tr> </table> <p>For example, if a &quot;moderate&quot; test completes in 5.5s, consider setting <code translate="no" dir="ltr">timeout = &quot;short&quot;</code> or <code translate="no" dir="ltr">size = &quot;small&quot;</code>. Using the bazel <code translate="no" dir="ltr">--test_verbose_timeout_warnings</code> command line option will show the tests whose specified size is too big.</p> <p>Test sizes and timeouts are specified in the BUILD file according to the specification <a href="/versions/7.0.0/reference/be/common-definitions#common-attributes-tests">here</a>. If unspecified, a test&#39;s size will default to &quot;medium&quot;.</p> <p>If the main process of a test exits, but some of its children are still running, the test runner should consider the run complete and count it as a success or failure based on the exit code observed from the main process. The test runner may kill any stray processes. Tests should not leak processes in this fashion.</p> <h2 id="test-sharding" data-text="Test sharding" tabindex="-1">Test sharding</h2> <p>Tests can be parallelized via test sharding. See <a href="/versions/7.0.0/reference/command-line-reference#flag--test_sharding_strategy"><code translate="no" dir="ltr">--test_sharding_strategy</code></a> and <a href="/versions/7.0.0/reference/be/common-definitions#common-attributes-tests"><code translate="no" dir="ltr">shard_count</code></a> to enable test sharding. When sharding is enabled, the test runner is launched once per shard. The environment variable <a href="#initial-conditions"><code translate="no" dir="ltr">TEST_TOTAL_SHARDS</code></a> is the number of shards, and <a href="#initial-conditions"><code translate="no" dir="ltr">TEST_SHARD_INDEX</code></a> is the shard index, beginning at 0. Runners use this information to select which tests to run - for example, using a round-robin strategy. Not all test runners support sharding. If a runner supports sharding, it must create or update the last modified date of the file specified by <a href="#initial-conditions"><code translate="no" dir="ltr">TEST_SHARD_STATUS_FILE</code></a>. Otherwise, if <a href="/versions/7.0.0/reference/command-line-reference#flag--incompatible_check_sharding_support"><code translate="no" dir="ltr">--incompatible_check_sharding_support</code></a> is enabled, Bazel will fail the test if it is sharded.</p> <h2 id="initial-conditions" data-text="Initial conditions" tabindex="-1">Initial conditions</h2> <p>When executing a test, the test runner must establish certain initial conditions.</p> <p>The test runner must invoke each test with the path to the test executable in <code translate="no" dir="ltr">argv[0]</code>. This path must be relative and beneath the test&#39;s current directory (which is in the runfiles tree, see below). The test runner should not pass any other arguments to a test unless the user explicitly requests it.</p> <p>The initial environment block shall be composed as follows:</p> <table> <tr> <th>Variable</th> <th>Value</th> <th>Status</th> </tr> <tr> <td><code translate="no" dir="ltr">HOME</code></td> <td>value of <code translate="no" dir="ltr">$TEST_TMPDIR</code></td> <td>recommended</td> </tr> <tr> <td><code translate="no" dir="ltr">LANG</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LANGUAGE</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_ALL</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_COLLATE</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_CTYPE</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_MESSAGES</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_MONETARY</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_NUMERIC</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LC_TIME</code></td> <td><em>unset</em></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">LD_LIBRARY_PATH</code></td> <td>colon-separated list of directories containing shared libraries</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">JAVA_RUNFILES</code></td> <td>value of <code translate="no" dir="ltr">$TEST_SRCDIR</code></td> <td>deprecated</td> </tr> <tr> <td><code translate="no" dir="ltr">LOGNAME</code></td> <td>value of <code translate="no" dir="ltr">$USER</code></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">PATH</code></td> <td><code translate="no" dir="ltr">/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.</code></td> <td>recommended</td> </tr> <tr> <td><code translate="no" dir="ltr">PWD</code></td> <td><code translate="no" dir="ltr">$TEST_SRCDIR/<var translate="no">workspace-name</var></code></td> <td>recommended</td> </tr> <tr> <td><code translate="no" dir="ltr">SHLVL</code></td> <td><code translate="no" dir="ltr">2</code></td> <td>recommended</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_INFRASTRUCTURE_FAILURE_FILE</code></td> <td>absolute path to a private file in a writable directory (This file should only be used to report failures originating from the testing infrastructure, not as a general mechanism for reporting flaky failures of tests. In this context, testing infrastructure is defined as systems or libraries that are not test-specific, but can cause test failures by malfunctioning. The first line is the name of the testing infrastructure component that caused the failure, the second one a human-readable description of the failure. Additional lines are ignored.)</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_LOGSPLITTER_OUTPUT_FILE</code></td> <td>absolute path to a private file in a writable directory (used to write Logsplitter protobuffer log)</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_PREMATURE_EXIT_FILE</code></td> <td>absolute path to a private file in a writable directory (used for catching calls to <code translate="no" dir="ltr">exit()</code>)</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_RANDOM_SEED</code></td> <td>If the <code translate="no" dir="ltr">--runs_per_test</code> option is used, <code translate="no" dir="ltr">TEST_RANDOM_SEED</code> is set to the <var translate="no">run number</var> (starting with 1) for each individual test run.</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_RUN_NUMBER</code></td> <td>If the <code translate="no" dir="ltr">--runs_per_test</code> option is used, <code translate="no" dir="ltr">TEST_RUN_NUMBER</code> is set to the <var translate="no">run number</var> (starting with 1) for each individual test run.</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_TARGET</code></td> <td>The name of the target being tested</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_SIZE</code></td> <td>The test <a href="#size"><code translate="no" dir="ltr">size</code></a></td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_TIMEOUT</code></td> <td>The test <a href="#timeout"><code translate="no" dir="ltr">timeout</code></a> in seconds</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_SHARD_INDEX</code></td> <td>shard index, if <a href="#test-sharding"><code translate="no" dir="ltr">sharding</code></a> is used</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_SHARD_STATUS_FILE</code></td> <td>path to file to touch to indicate support for <a href="#test-sharding"><code translate="no" dir="ltr">sharding</code></a></td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_SRCDIR</code></td> <td>absolute path to the base of the runfiles tree</td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_TOTAL_SHARDS</code></td> <td>total <a href="/versions/7.0.0/reference/be/common-definitions#test.shard_count"><code translate="no" dir="ltr">shard count</code></a>, if <a href="#test-sharding"><code translate="no" dir="ltr">sharding</code></a> is used</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_TMPDIR</code></td> <td>absolute path to a private writable directory</td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_WORKSPACE</code></td> <td>the local repository's workspace name</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_UNDECLARED_OUTPUTS_DIR</code></td> <td>absolute path to a private writable directory (used to write undeclared test outputs). Any files written to the <code translate="no" dir="ltr">TEST_UNDECLARED_OUTPUTS_DIR</code> directory will be zipped up and added to an <code translate="no" dir="ltr">outputs.zip</code> file under <code translate="no" dir="ltr">bazel-testlogs</code>.</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR</code></td> <td>absolute path to a private writable directory (used to write undeclared test output annotation <code translate="no" dir="ltr">.part</code> and <code translate="no" dir="ltr">.pb</code> files).</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TEST_WARNINGS_OUTPUT_FILE</code></td> <td>absolute path to a private file in a writable directory (used to write test target warnings)</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TESTBRIDGE_TEST_ONLY</code></td> <td>value of <a href="/versions/7.0.0/docs/user-manual#flag--test_filter"><code translate="no" dir="ltr">--test_filter</code></a>, if specified</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">TZ</code></td> <td><code translate="no" dir="ltr">UTC</code></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">USER</code></td> <td>value of <code translate="no" dir="ltr">getpwuid(getuid())-&gt;pw_name</code></td> <td>required</td> </tr> <tr> <td><code translate="no" dir="ltr">XML_OUTPUT_FILE</code></td> <td> Location to which test actions should write a test result XML output file. Otherwise, Bazel generates a default XML output file wrapping the test log as part of the test action. The XML schema is based on the <a href="https://windyroad.com.au/dl/Open%20Source/JUnit.xsd" class="external">JUnit test result schema</a>.</td> <td>optional</td> </tr> <tr> <td><code translate="no" dir="ltr">BAZEL_TEST</code></td> <td>Signifies test executable is being driven by <code translate="no" dir="ltr">bazel test</code></td> <td>required</td> </tr> </table> <p>The environment may contain additional entries. Tests should not depend on the presence, absence, or value of any environment variable not listed above.</p> <p>The initial working directory shall be <code translate="no" dir="ltr">$TEST_SRCDIR/$TEST_WORKSPACE</code>.</p> <p>The current process id, process group id, session id, and parent process id are unspecified. The process may or may not be a process group leader or a session leader. The process may or may not have a controlling terminal. The process may have zero or more running or unreaped child processes. The process should not have multiple threads when the test code gains control.</p> <p>File descriptor 0 (<code translate="no" dir="ltr">stdin</code>) shall be open for reading, but what it is attached to is unspecified. Tests must not read from it. File descriptors 1 (<code translate="no" dir="ltr">stdout</code>) and 2 (<code translate="no" dir="ltr">stderr</code>) shall be open for writing, but what they are attached to is unspecified. It could be a terminal, a pipe, a regular file, or anything else to which characters can be written. They may share an entry in the open file table (meaning that they cannot seek independently). Tests should not inherit any other open file descriptors.</p> <p>The initial umask shall be <code translate="no" dir="ltr">022</code> or <code translate="no" dir="ltr">027</code>.</p> <p>No alarm or interval timer shall be pending.</p> <p>The initial mask of blocked signals shall be empty. All signals shall be set to their default action.</p> <p>The initial resource limits, both soft and hard, should be set as follows:</p> <table> <tr> <th>Resource</th> <th>Limit</th> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_AS</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_CORE</code></td> <td>unspecified</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_CPU</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_DATA</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_FSIZE</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_LOCKS</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_MEMLOCK</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_MSGQUEUE</code></td> <td>unspecified</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_NICE</code></td> <td>unspecified</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_NOFILE</code></td> <td>at least 1024</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_NPROC</code></td> <td>unspecified</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_RSS</code></td> <td>unlimited</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_RTPRIO</code></td> <td>unspecified</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_SIGPENDING</code></td> <td>unspecified</td> </tr> <tr> <td><code translate="no" dir="ltr">RLIMIT_STACK</code></td> <td>unlimited, or 2044KB &lt;= rlim &lt;= 8192KB</td> </tr> </table> <p>The initial process times (as returned by <code translate="no" dir="ltr">times()</code>) and resource utilization (as returned by <code translate="no" dir="ltr">getrusage()</code>) are unspecified.</p> <p>The initial scheduling policy and priority are unspecified.</p> <h2 id="role-host-system" data-text="Role of the host system" tabindex="-1">Role of the host system</h2> <p>In addition to the aspects of user context under direct control of the test runner, the operating system on which tests execute must satisfy certain properties for a test run to be valid.</p> <h4 id="filesystem" data-text="Filesystem" tabindex="-1">Filesystem</h4> <p>The root directory observed by a test may or may not be the real root directory.</p> <p><code translate="no" dir="ltr">/proc</code> shall be mounted.</p> <p>All build tools shall be present at the absolute paths under <code translate="no" dir="ltr">/usr</code> used by a local installation.</p> <p>Paths starting with <code translate="no" dir="ltr">/home</code> may not be available. Tests should not access any such paths.</p> <p><code translate="no" dir="ltr">/tmp</code> shall be writable, but tests should avoid using these paths.</p> <p>Tests must not assume that any constant path is available for their exclusive use.</p> <p>Tests must not assume that atimes are enabled for any mounted filesystem.</p> <h4 id="users-groups" data-text="Users and groups" tabindex="-1">Users and groups</h4> <p>The users root, nobody, and unittest must exist. The groups root, nobody, and eng must exist.</p> <p>Tests must be executed as a non-root user. The real and effective user ids must be equal; likewise for group ids. Beyond this, the current user id, group id, user name, and group name are unspecified. The set of supplementary group ids is unspecified.</p> <p>The current user id and group id must have corresponding names which can be retrieved with <code translate="no" dir="ltr">getpwuid()</code> and <code translate="no" dir="ltr">getgrgid()</code>. The same may not be true for supplementary group ids.</p> <p>The current user must have a home directory. It may not be writable. Tests must not attempt to write to it.</p> <h4 id="networking" data-text="Networking" tabindex="-1">Networking</h4> <p>The hostname is unspecified. It may or may not contain a dot. Resolving the hostname must give an IP address of the current host. Resolving the hostname cut after the first dot must also work. The hostname localhost must resolve.</p> <h4 id="other-resources" data-text="Other resources" tabindex="-1">Other resources</h4> <p>Tests are granted at least one CPU core. Others may be available but this is not guaranteed. Other performance aspects of this core are not specified. You can increase the reservation to a higher number of CPU cores by adding the tag &quot;cpu:n&quot; (where n is a positive number) to a test rule. If a machine has less total CPU cores than requested, Bazel will still run the test. If a test uses <a href="#test-sharding">sharding</a>, each individual shard will reserve the number of CPU cores specified here.</p> <p>Tests may create subprocesses, but not process groups or sessions.</p> <p>There is a limit on the number of input files a test may consume. This limit is subject to change, but is currently in the range of tens of thousands of inputs.</p> <h4 id="time-and-date" data-text="Time and date" tabindex="-1">Time and date</h4> <p>The current time and date are unspecified. The system timezone is unspecified.</p> <p>X Windows may or may not be available. Tests that need an X server should start Xvfb.</p> <h2 id="test-interaction-filesystem" data-text="Test interaction with the filesystem" tabindex="-1">Test interaction with the filesystem</h2> <p>All file paths specified in test environment variables point to somewhere on the local filesystem, unless otherwise specified.</p> <p>Tests should create files only within the directories specified by <code translate="no" dir="ltr">$TEST_TMPDIR</code> and <code translate="no" dir="ltr">$TEST_UNDECLARED_OUTPUTS_DIR</code> (if set).</p> <p>These directories will be initially empty.</p> <p>Tests must not attempt to remove, chmod, or otherwise alter these directories.</p> <p>These directories may be a symbolic links.</p> <p>The filesystem type of <code translate="no" dir="ltr">$TEST_TMPDIR/.</code> remains unspecified.</p> <p>Tests may also write .part files to the <code translate="no" dir="ltr">$TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR</code> to annotate undeclared output files.</p> <p>In rare cases, a test may be forced to create files in <code translate="no" dir="ltr">/tmp</code>. For example, <a href="https://serverfault.com/questions/641347" class="external">path length limits for Unix domain sockets</a> typically require creating the socket under <code translate="no" dir="ltr">/tmp</code>. Bazel will be unable to track such files; the test itself must take care to be hermetic, to use unique paths to avoid colliding with other, simultaneously running tests and non-test processes, and to clean up the files it creates in <code translate="no" dir="ltr">/tmp</code>.</p> <p>Some popular testing frameworks, such as <a href="https://junit.org/junit4/javadoc/latest/org/junit/rules/TemporaryFolder.html" class="external">JUnit4 <code translate="no" dir="ltr">TemporaryFolder</code></a> or <a href="https://golang.org/pkg/testing/#T.TempDir" class="external">Go <code translate="no" dir="ltr">TempDir</code></a>, have their own ways to create a temporary directory under <code translate="no" dir="ltr">/tmp</code>. These testing frameworks include functionality that cleans up files in <code translate="no" dir="ltr">/tmp</code>, so you may use them even though they create files outside of <code translate="no" dir="ltr">TEST_TMPDIR</code>.</p> <p>Tests must access inputs through the <strong>runfiles</strong> mechanism, or other parts of the execution environment which are specifically intended to make input files available.</p> <p>Tests must not access other outputs of the build system at paths inferred from the location of their own executable.</p> <p>It is unspecified whether the runfiles tree contains regular files, symbolic links, or a mixture. The runfiles tree may contain symlinks to directories. Tests should avoid using paths containing <code translate="no" dir="ltr">..</code> components within the runfiles tree.</p> <p>No directory, file, or symlink within the runfiles tree (including paths which traverse symlinks) should be writable. (It follows that the initial working directory should not be writable.) Tests must not assume that any part of the runfiles is writable, or owned by the current user (for example, <code translate="no" dir="ltr">chmod</code> and <code translate="no" dir="ltr">chgrp</code> may fail).</p> <p>The runfiles tree (including paths which traverse symlinks) must not change during test execution. Parent directories and filesystem mounts must not change in any way which affects the result of resolving a path within the runfiles tree.</p> <p>In order to catch early exit, a test may create a file at the path specified by <code translate="no" dir="ltr">TEST_PREMATURE_EXIT_FILE</code> upon start and remove it upon exit. If Bazel sees the file when the test finishes, it will assume that the test exited prematurely and mark it as having failed.</p> <h2 id="tag-conventions" data-text="Tag conventions" tabindex="-1">Tag conventions</h2> <p>Some tags in the test rules have a special meaning. See also the <a href="/versions/7.0.0/reference/be/common-definitions#common.tags">Bazel Build Encyclopedia on the <code translate="no" dir="ltr">tags</code> attribute</a>.</p> <table> <tr> <th>Tag</th> <th>Meaning</th> </tr> <tr> <th><code translate="no" dir="ltr">exclusive</code></th> <td>run no other test at the same time</td> </tr> <tr> <td><code translate="no" dir="ltr">external</code></td> <td>test has an external dependency; disable test caching</td> </tr> <tr> <td><code translate="no" dir="ltr">large</code></td> <td><code translate="no" dir="ltr">test_suite</code> convention; suite of large tests</td> </tr> <tr> <td><code translate="no" dir="ltr">manual *</code></td> <td>don't include test target in wildcard target patterns like <code translate="no" dir="ltr">:...</code>, <code translate="no" dir="ltr">:*</code>, or <code translate="no" dir="ltr">:all</code></td> </tr> <tr> <td><code translate="no" dir="ltr">medium</code></td> <td><code translate="no" dir="ltr">test_suite</code> convention; suite of medium tests</td> </tr> <tr> <td><code translate="no" dir="ltr">small</code></td> <td><code translate="no" dir="ltr">test_suite</code> convention; suite of small tests</td> </tr> <tr> <td><code translate="no" dir="ltr">smoke</code></td> <td><code translate="no" dir="ltr">test_suite</code> convention; means it should be run before committing code changes into the version control system</td> </tr> </table> <aside class="note"><strong>Note:</strong><span> bazel <code translate="no" dir="ltr">query</code> does not respect the manual tag.</span></aside> <h2 id="runfiles" data-text="Runfiles" tabindex="-1">Runfiles</h2> <p>In the following, assume there is a *_binary() rule labeled <code translate="no" dir="ltr">//foo/bar:unittest</code>, with a run-time dependency on the rule labeled <code translate="no" dir="ltr">//deps/server:server</code>.</p> <h4 id="runfiles-location" data-text="Location" tabindex="-1">Location</h4> <p>The runfiles directory for a target <code translate="no" dir="ltr">//foo/bar:unittest</code> is the directory <code translate="no" dir="ltr">$(WORKSPACE)/$(BINDIR)/foo/bar/unittest.runfiles</code>. This path is referred to as the <code translate="no" dir="ltr">runfiles_dir</code>.</p> <h4 id="runfiles-dependencies" data-text="Dependencies" tabindex="-1">Dependencies</h4> <p>The runfiles directory is declared as a compile-time dependency of the <code translate="no" dir="ltr">*_binary()</code> rule. The runfiles directory itself depends on the set of BUILD files that affect the <code translate="no" dir="ltr">*_binary()</code> rule or any of its compile-time or run-time dependencies. Modifying source files does not affect the structure of the runfiles directory, and thus does not trigger any rebuilding.</p> <h4 id="runfiles-contents" data-text="Contents" tabindex="-1">Contents</h4> <p>The runfiles directory contains the following:</p> <ul> <li><strong>Symlinks to run-time dependencies</strong>: each OutputFile and CommandRule that is a run-time dependency of the <code translate="no" dir="ltr">*_binary()</code> rule is represented by one symlink in the runfiles directory. The name of the symlink is <code translate="no" dir="ltr">$(WORKSPACE)/package_name/rule_name</code>. For example, the symlink for server would be named <code translate="no" dir="ltr">$(WORKSPACE)/deps/server/server</code>, and the full path would be <code translate="no" dir="ltr">$(WORKSPACE)/foo/bar/unittest.runfiles/$(WORKSPACE)/deps/server/server</code>. The destination of the symlink is the OutputFileName() of the OutputFile or CommandRule, expressed as an absolute path. Thus, the destination of the symlink might be <code translate="no" dir="ltr">$(WORKSPACE)/linux-dbg/deps/server/42/server</code>.</li> <li><strong>Symlinks to sub-runfiles</strong>: for every <code translate="no" dir="ltr">*_binary()</code> Z that is a run-time dependency of <code translate="no" dir="ltr">*_binary()</code> C, there is a second link in the runfiles directory of C to the runfiles of Z. The name of the symlink is <code translate="no" dir="ltr">$(WORKSPACE)/package_name/rule_name.runfiles</code>. The target of the symlink is the runfiles directory. For example, all subprograms share a common runfiles directory.</li> </ul> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Bazel" product-id="5052038" bucket="https-bazel-build" context="" version="t-devsite-webserver-20241114-r00-rc02.464921008191574316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/touchicon-180.png" > <button> Send feedback </button> </devsite-feedback> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-10-22 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Bazel" product-id="5052038" bucket="https-bazel-build" context="" version="t-devsite-webserver-20241114-r00-rc02.464921008191574316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-icon="https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/touchicon-180.png" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-22 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">About</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/community/users" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Who's using Bazel </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/contribute/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Contribute </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/contribute/contribution-policy" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Governance model </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/release" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Release model </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/brand" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Brand guidelines </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Stay connected</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//blog.bazel.build" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/bazelbuild/bazel" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > GitHub </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//twitter.com/bazelbuild" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Twitter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//youtube.com/user/googleOSPO" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > YouTube </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/help" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/bazelbuild/bazel/issues" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Issue tracker </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//slack.bazel.build" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Slack </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/bazel" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Stack Overflow </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{&#34;dimensions&#34;: {&#34;dimension5&#34;: false, &#34;dimension3&#34;: &#34;en&#34;, &#34;dimension4&#34;: &#34;en&#34;, &#34;dimension1&#34;: &#34;Signed out&#34;, &#34;dimension2&#34;: false}, &#34;gaid&#34;: &#34;UA-61082125-3&#34;, &#34;metrics&#34;: {}, &#34;purpose&#34;: 0}]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [{&#34;id&#34;: &#34;G-GBZW986TQ3&#34;, &#34;purpose&#34;: 0}], &#34;ga4p&#34;: [{&#34;id&#34;: &#34;G-GBZW986TQ3&#34;, &#34;purpose&#34;: 0}], &#34;gtm&#34;: [], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;Bazel&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;bazel&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="Nu/ZJMWiTj2Spnp9kVokMICGZNal5c"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/js/app_loader.js', '[40,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel","https://bazel-dot-devsite-v2-prod-3p.appspot.com",null,null,["/_pwa/bazel/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/favicon-prod.png","https://www.gstatic.com/devrel-devsite/prod/v870e399c64f7c43c99a3043db4b3a74327bb93d0914e84a0c3dba90bbfd67625/bazel/images/lockup.svg","https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyCNm9YxQumEXwGJgTDjxoxXK6m1F-9720Q","AIzaSyCc76DZePGtoyUjqKrLdsMGk_ry7sljLbY","bazel.build","AIzaSyB9bqgQ2t11WJsOX8qNsCQ6U-w91mmqF-I","AIzaSyAdYnStPdzjcJJtQ0mvIaeaMKj7_t6J_Fg",null,null,null,["Cloud__enable_cloud_facet_chat","Profiles__enable_page_saving","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__enable_firebase_utm","Cloud__enable_cloud_shell","Cloud__enable_llm_concierge_chat","MiscFeatureFlags__enable_variable_operator","CloudShell__cloud_shell_button","Cloud__enable_cloudx_ping","Profiles__enable_release_notes_notifications","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_awarding_url","Cloud__enable_free_trial_server_call","EngEduTelemetry__enable_engedu_telemetry","Concierge__enable_pushui","Search__enable_suggestions_from_borg","Search__enable_dynamic_content_confidential_banner","Profiles__enable_dashboard_curated_recommendations","Cloud__enable_legacy_calculator_redirect","Cloud__enable_cloudx_experiment_ids","TpcFeatures__enable_required_headers","SignIn__enable_auto_login_multi_account","CloudShell__cloud_code_overflow_menu","MiscFeatureFlags__enable_view_transitions","Profiles__enable_complete_playlist_endpoint","Analytics__enable_clearcut_logging","OnSwitch__enable","Search__enable_page_map","Profiles__enable_recognition_badges","BookNav__enable_tenant_cache_key","Profiles__enable_completecodelab_endpoint","Search__enable_ai_eligibility_checks","Profiles__enable_developer_profiles_callout","SignIn__enable_oauth_multi_account_support","MiscFeatureFlags__developers_footer_image","MiscFeatureFlags__enable_project_variables","MiscFeatureFlags__emergency_css","Experiments__reqs_query_experiments","Profiles__require_profile_eligibility_for_signin","MiscFeatureFlags__developers_footer_dark_image","Cloud__enable_cloud_dlp_service","DevPro__enable_developer_subscriptions","MiscFeatureFlags__enable_explain_this_code","Profiles__enable_public_developer_profiles","SignIn__enable_refresh_access_tokens","Profiles__enable_profile_collections"],null,null,"AIzaSyA58TaKli1DculwmAmbpzLVGuWc8eCQgQc","https://developerscontentserving-pa.googleapis.com","AIzaSyDWBU60w0P9hEkr29kkksYs8Z7gvZ8u_wc","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[40,"bazel","Bazel","bazel.build",null,"bazel-dot-devsite-v2-prod-3p.appspot.com",null,null,[null,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],null,null,null,null,[1,1,1],[1,1,null,1,1]],null,[56,null,null,null,null,null,"/images/lockup.svg",null,null,null,null,1,null,null,null,null,null,null,null,null,null,1,null,null,null,null,[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,7,1,18,20,22,23,29,37,39,40,43],null,[[],[1,1]],[[["UA-61082125-3"],["UA-61082125-4"],null,null,["UA-61082125-5"],null,null,[["G-GBZW986TQ3"],null,null,[["G-GBZW986TQ3",1]]],[["UA-61082125-3",1]],null,[["UA-61082125-5",1]],null,1],[[3,4],[5,8],[2,2],[4,5],[1,1]]],null,4]]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10