bazelでGoのldflagsを使う
Table of Contents
tldr
サンプルはこちら
解説
bazelでldflagsを使うには2通りあります。
BUILD.bazel
にベタ書きするbazel
コマンド実行時に--workspace_status_command
に渡す
ベタ書きする方法
簡単な方法。BUILD.bazel
のルールにx_defs
属性を追加します。
例)
こんなコードがあったら
package version
var Version = "redacted"
こんな感じで埋め込みます
go_binary(
name = "cmd",
srcs = ["main.go"],
deps = ["//version:go_default_library"],
x_defs = {"example.com/repo/version.Version": "0.9"}, # here!
)
bazelコマンド実行時に–workspace_status_commandに渡す方法
上記と同じコードがあった場合、 埋め込みたい情報を変数として波括弧で囲んで書いておきます。
go_binary(
name = "cmd",
srcs = ["main.go"],
deps = ["//version:go_default_library"],
x_defs = {"example.com/repo/version.Version": "{STABLE_GIT_COMMIT}"}, # here!
)
bazelに渡す情報を導出するスクリプトを書いておきます。
#!/bin/bash
echo STABLE_GIT_COMMIT $(git rev-parse HEAD) // STABLE_GIT_COMMIT hogehoge みたいになります。複数渡したいときは複数行書く
あとはbazel
コマンド実行時に--workspace_status_command
フラグにスクリプトのパスを渡せばOKです!
下記のドキュメントでは相対パスが書かれてますが、私の環境では絶対パスでないとダメでした。要調査。
bazel build --workspace_status_command=${PWD}/status.sh //:cmd