やりたいこと
- 任意の圧縮ファイルを任意のサーバーから落とす
- そのファイルの中身をまるごと pkg_tar rule の srcs として取り入れたい
なんで pkg_tar に取り込みたい?
- container_image rule の tars にそのまま突っ込める
- コレができると bazel 上での docker image ビルドがとっても楽
やりかた
WORKSPACE ファイルでファイルダウンロードを記述
http_archive( name = "my_archive", urls = ["<insert your URL>"], sha256 = "<insert your hash>", type = "<.zip, .tar.gz, .tar.xz, ...>", build_file_content = """ filegroup( name = "srcs", srcs = glob(["**"]), visibility = ["//visibility:public"] ) """ )
BUILD ファイルで pkg_tar を記述
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar") pkg_tar( name = "my_package", package_dir = "/opt/local", srcs = [ "@my_archive//:srcs", ], strip_prefix=".", mode = "0755", visibility = ["//visibility:public"], )
filegroup
の srcs = glob(["**"])
*
だとダメで**
が正解*
だと最上位階層だけ列挙される
pkg_tar
の strip_prefix="."
- これを書いておかないと圧縮ファイルの中身が平ら(flatten)に展開されてしまう
.
を指定すればディレクトリ構造がそのまま維持される- 公式のドキュメントに思いっきり書いてあった docs.bazel.build