LoginSignup
1
1

More than 5 years have passed since last update.

bazelでGoのldflagsを使う

Posted at

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

参考にしたもの

rules_go: Defines and stamping

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1