es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener el directorio del espacio de trabajo en tiempo de ejecución en un go_test de Bazel?

Estoy utilizando la regla go_test de rule_go en Bazel, y me gustaría acceder al directorio del espacio de trabajo en tiempo de ejecución. No puedo encontrarlo en las variables de entorno, y $PWD es el directorio temporal sandbox. ¿Cómo puedo acceder a esta variable? Idealmente, es algo que puedo pasar a mi regla y no un argumento de línea de comandos para bazel test para no tener que escribirlo cada vez.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acceder al directorio del espacio de trabajo en tiempo de ejecución utilizando la regla go_test en Bazel, puedes utilizar la variable de entorno $workspace_name proporcionada por Bazel. Esta variable contiene el nombre del directorio del espacio de trabajo, que puedes utilizar para construir la ruta absoluta al directorio del espacio de trabajo.

    Aquí tienes un ejemplo de regla que utiliza la variable $workspace_name:

    load("@io_bazel_rules_go//go:def.bzl", "go_test")
    
    def my_go_test(name):
        go_test(
            name = name,
            srcs = glob(["*.go"]),
            # Pasa el directorio del espacio de trabajo al ejecutable de prueba como argumento de línea de comandos.
            args = ["--workspace_dir", "$(bazel info workspace)"],
            # Indica a Bazel que incluya el directorio del espacio de trabajo en el entorno de ejecución.
            env = {"WORKSPACE_DIR": "$(bazel info workspace)"},
        )
    

    En este ejemplo, definimos una nueva regla llamada my_go_test que es similar a la regla go_test, pero con un argumento adicional args que pasa el directorio del espacio de trabajo al ejecutable de prueba como argumento de línea de comandos. También definimos un argumento env que indica a Bazel que incluya el directorio del espacio de trabajo en el entorno de ejecución como una variable de entorno llamada WORKSPACE_DIR.

    Para utilizar esta nueva regla, simplemente debes reemplazar go_test por my_go_test en tu archivo BUILD:

    load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
    load("//:my_go_test.bzl", "my_go_test")
    
    go_library(
        name = "library",
        srcs = glob(["*.go"]),
        importpath = "mi/paquete",
    )
    
    my_go_test(
        name = "test",
        srcs = glob(["*_test.go"]),
        deps = [":library"],
    )
    

    Con esta regla, ahora puedes acceder al directorio del espacio de trabajo en tiempo de ejecución desde tu ejecutable de prueba leyendo la variable de entorno WORKSPACE_DIR.

Comments are closed.