Glossário de protocolo de eventos de build

Informar um problema Ver código-fonte Nightly · 7.4 . 7,3 · 7.2 · 7,1 · 7,0 · 6,5

Cada tipo de evento BEP tem sua própria semântica, minimamente documentada em build_event_stream.proto. O glossário a seguir descreve cada tipo de evento.

Cancelado

Diferentemente de outros eventos, Aborted não tem um tipo de ID correspondente, porque o evento Aborted substitui eventos de outros tipos. Esse evento indica que a compilação foi encerrada antecipadamente e o ID de evento em que ele aparece não foi produzido; normalmente. Aborted contém um tipo enumerado e uma descrição legível para explicar por que o build não foi concluído.

Por exemplo, se um build estiver avaliando um destino quando o usuário interromper o Bazel, o BEP vai conter um evento como este:

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

ActionExecuted

Mostra detalhes sobre a execução de um Action em um build. Por padrão, este evento é incluída no BEP apenas para ações com falha, para apoiar a identificação da causa raiz de falhas de build. Os usuários podem definir a sinalização --build_event_publish_all_actions para incluir todos os eventos de ActionExecuted.

BuildFinished

Um único evento BuildFinished é enviado depois que o comando é concluído e inclui o código de saída do comando. Esse evento oferece conteúdo informações de sucesso/falha.

BuildMetadata

Contém o conteúdo analisado da sinalização --build_metadata. Esse evento existe para oferecer suporte à integração do Bazel com outras ferramentas, conectando dados externos (como identificadores).

BuildMetrics

Um único evento BuildMetrics é enviado ao final de cada comando e inclui contadores/medidores úteis para quantificar o comportamento da ferramenta de compilação durante o kubectl. Essas métricas indicam o trabalho realmente realizado e não contabilizam o armazenamento em cache. trabalho reutilizado.

Observe que memory_metrics pode não ser preenchido se não houver lixo do Java. coleção durante a execução do comando. Os usuários podem definir A opção --memory_profile=/dev/null, que força o lixo que será executado ao final do comando para preencher memory_metrics.

{
  "id": {
    "buildMetrics": {}
  },
  "buildMetrics": {
    "actionSummary": {
      "actionsExecuted": "1"
    },
    "memoryMetrics": {},
    "targetMetrics": {
      "targetsLoaded": "9",
      "targetsConfigured": "19"
    },
    "packageMetrics": {
      "packagesLoaded": "5"
    },
    "timingMetrics": {
      "cpuTimeInMs": "1590",
      "wallTimeInMs": "359"
    }
  }
}

BuildStarted

O primeiro evento em um stream de BEP, BuildStarted, inclui metadados que descrevem o comando antes do início de qualquer trabalho significativo.

BuildToolLogs

Um único evento BuildToolLogs é enviado no final de um comando, incluindo URIs. de arquivos gerados pela ferramenta de build que podem ajudar na compreensão ou na depuração o comportamento da ferramenta de build. Algumas informações podem ser incluídas inline.

{
  "id": {
    "buildToolLogs": {}
  },
  "lastMessage": true,
  "buildToolLogs": {
    "log": [
      {
        "name": "elapsed time",
        "contents": "MC4xMjEwMDA="
      },
      {
        "name": "process stats",
        "contents": "MSBwcm9jZXNzOiAxIGludGVybmFsLg=="
      },
      {
        "name": "command.profile.gz",
        "uri": "file:///tmp/.cache/bazel/_bazel_foo/cde87985ad0bfef34eacae575224b8d1/command.profile.gz"
      }
    ]
  }
}

CommandLine

O BEP contém vários eventos CommandLine que contêm representações de todas argumentos de linha de comando (incluindo opções e argumentos não interpretados). Cada evento CommandLine tem um rótulo no StructuredCommandLineId que indica qual representação ele transmite. Três desses eventos aparecem no BEP:

  • "original": linha de comando reconstruída quando o Bazel a recebeu do Bazel. sem opções de inicialização provenientes de arquivos .rc.
  • "canonical": a linha de comando efetiva com arquivos .rc expandidos e política de invocação aplicada.
  • "tool": preenchido pela opção --experimental_tool_command_line. Isso é útil para transmitir a linha de comando de uma ferramenta que envolve o Bazel pelo BEP. Pode ser uma mensagem de buffer de protocolo binário CommandLine codificada em base64 que é usada diretamente ou uma string que é analisada, mas não interpretada, já que as opções da ferramenta podem ser diferentes das do Bazel.

Configuração

Um evento Configuration é enviado para cada configuration usado nos destinos de nível superior em um build. Pelo menos um evento de configuração é esteja sempre presente. O id é reutilizado pelos IDs de evento TargetConfigured e TargetComplete e é necessário para eliminar o conflito desses eventos em builds de várias configurações.

{
  "id": {
    "configuration": {
      "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
    }
  },
  "configuration": {
    "mnemonic": "k8-fastbuild",
    "platformName": "k8",
    "cpu": "k8",
    "makeVariable": {
      "COMPILATION_MODE": "fastbuild",
      "TARGET_CPU": "k8",
      "GENDIR": "bazel-out/k8-fastbuild/bin",
      "BINDIR": "bazel-out/k8-fastbuild/bin"
    }
  }
}

ConvenienceSymlinksIdentified

Experimental. Se a opção --experimental_convenience_symlinks_bep_event estiver definida, um único evento ConvenienceSymlinksIdentified será produzido por comandos build para indicar como os links simbólicos no espaço de trabalho precisam ser gerenciados. Isso permite criar ferramentas que invocam o Bazel remotamente e organizam a como se o Bazel tivesse sido executado localmente.

{
  "id": {
    "convenienceSymlinksIdentified":{}
  },
  "convenienceSymlinksIdentified": {
    "convenienceSymlinks": [
      {
        "path": "bazel-bin",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/bin"
      },
      {
        "path": "bazel-genfiles",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/genfiles"
      },
      {
        "path": "bazel-out",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out"
      }
    ]
  }
}

Buscar

Indica que uma operação de busca ocorreu como parte da execução do comando. Ao contrário de outros eventos, se um resultado de busca armazenado em cache for reutilizado, esse evento não aparecem no fluxo BEP.

NamedSetOfFiles

Os eventos NamedSetOfFiles informam uma estrutura que corresponde a um depset de arquivos produzidos durante a avaliação do comando. As desativações incluídas de modo transitivo são identificadas por NamedSetOfFilesId.

Para mais informações sobre como interpretar eventos NamedSetOfFiles de um stream, consulte a Página de exemplos do BEP

OptionsParsed

Um único evento OptionsParsed lista todas as opções aplicadas ao comando, separando as opções de inicialização das opções de comando. Ele também inclui o InvocationPolicy, se houver.

{
  "id": {
    "optionsParsed": {}
  },
  "optionsParsed": {
    "startupOptions": [
      "--max_idle_secs=10800",
      "--noshutdown_on_low_sys_mem",
      "--connect_timeout_secs=30",
      "--output_user_root=/tmp/.cache/bazel/_bazel_foo",
      "--output_base=/tmp/.cache/bazel/_bazel_foo/a61fd0fbee3f9d6c1e30d54b68655d35",
      "--deep_execroot",
      "--expand_configs_in_place",
      "--idle_server_tasks",
      "--write_command_log",
      "--nowatchfs",
      "--nofatal_event_bus_exceptions",
      "--nowindows_enable_symlinks",
      "--noclient_debug",
    ],
    "cmdLine": [
      "--enable_platform_specific_config",
      "--build_event_json_file=/tmp/bep.json"
    ],
    "explicitCmdLine": [
      "--build_event_json_file=/tmp/bep.json"
    ],
    "invocationPolicy": {}
  }
}

PatternExpanded

Os eventos PatternExpanded indicam o conjunto de todas as segmentações que correspondem aos padrões fornecidos na linha de comando. Para comandos bem-sucedidos, um único evento está presente com todos os padrões em PatternExpandedId e todos os destinos na filhos do evento PatternExpanded. Se o padrão se expandir O test_suite define o conjunto de destinos de teste incluídos pelo test_suite. Para cada padrão que não é resolvido, o BEP contém um evento Aborted adicional com um PatternExpandedId que identifica o padrão.

{
  "id": {
    "pattern": {
      "pattern":["//base:all"]
    }
  },
  "children": [
    {"targetConfigured":{"label":"//base:foo"}},
    {"targetConfigured":{"label":"//base:foobar"}}
  ],
  "expanded": {
    "testSuiteExpansions": {
      "suiteLabel": "//base:suite",
      "testLabels": "//base:foo_test"
    }
  }
}

Progresso

Os eventos de progresso contêm a saída e o erro padrão produzidos pelo Bazel durante a execução do comando. Esses eventos também são gerados automaticamente conforme necessário para anunciar eventos que não foram anunciados por um evento "pai" lógico (em particular, NamedSetOfFiles).

TargetComplete

Para cada combinação de (target, configuration, aspect) que conclui o fase de execução, um evento TargetComplete é incluído no BEP. O evento contém o sucesso/falha do destino e os grupos de saída solicitados do destino.

{
  "id": {
    "targetCompleted": {
      "label": "//examples/py:bep",
      "configuration": {
        "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
      }
    }
  },
  "completed": {
    "success": true,
    "outputGroup": [
      {
        "name": "default",
        "fileSets": [
          {
            "id": "0"
          }
        ]
      }
    ]
  }
}

TargetConfigured

Para cada objetivo que conclui a fase de análise, um evento TargetConfigured é incluídos no BEP. Essa é a origem autorizada do atributo "tipo de regra" de um destino. As configurações aplicadas ao destino aparecem children do evento.

Por exemplo, criar com as opções --experimental_multi_cpu pode produzir o seguinte evento TargetConfigured para um único destino com dois de configuração:

{
  "id": {
    "targetConfigured": {
      "label": "//starlark_configurations/multi_arch_binary:foo"
    }
  },
  "children": [
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "c62b30c8ab7b9fc51a05848af9276529842a11a7655c71327ade26d7c894c818"
        }
      }
    },
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "eae0379b65abce68d54e0924c0ebcbf3d3df26c6e84ef7b2be51e8dc5b513c99"
        }
      }
    }
  ],
  "configured": {
    "targetKind": "foo_binary rule"
  }
}

TargetSummary

Para cada par (target, configuration) executado, um evento TargetSummary é incluído com um resultado de sucesso agregado que abrange a execução da meta configurada e todos os aspectos aplicados a ela.

TestResult

Se o teste for solicitado, um evento TestResult será enviado para cada tentativa de teste. fragmentar e executar por teste. Isso permite que os consumidores do BEP identifiquem com precisão as ações de teste falharam nos testes e identifique as saídas do teste (como registros, arquivos test.xml) para cada ação de teste.

TestSummary

Se o teste for solicitado, um evento TestSummary é enviado para cada teste (target, configuration), contendo as informações necessárias para interpretar o resultados. O número de tentativas, fragmentos e execuções por teste são incluídos para ativar os consumidores do BEP para diferenciar artefatos nessas dimensões. As tentativas e execuções por teste são consideradas ao produzir o TestStatus agregado para diferenciar testes FLAKY de testes FAILED.

UnstructuredCommandLine

Ao contrário de CommandLine, esse evento carrega a linha de comando não analisada em formato de string, conforme encontrado pela ferramenta de build depois de expandir todos Arquivos do .bazelrc e considerando a flag --config.

O evento UnstructuredCommandLine pode ser usado para reproduzir precisamente uma com a execução do comando especificado.

WorkspaceConfig

Um único evento WorkspaceConfig contém informações de configuração relacionadas ao espaço de trabalho, como a raiz de execução.

WorkspaceStatus

Um único evento WorkspaceStatus contém o resultado do status do espaço de trabalho comando.