ビルドツールbazelでGo製のコマンドをビルドしてdebファイルにしてみた
このブランチで試した
きちんとビルドできるようになったらmasterに取り込む予定
code:sh
apt update -yqq && apt install -y bazel
結論
debファイル作れたけれど、インストールされたファイルに余計なディレクトリが混じってる
まだ不完全
手順
以下の公式ドキュメントに書かれている手順に従う
手順に従ってファイルを生成し、僕のほうで修正を加えたファイルが以下2つ
code:BUILD.bazel
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar", "pkg_deb")
load("@bazel_gazelle//:def.bzl", "gazelle")
# gazelle:prefix github.com/jiro4989/textimg
gazelle(name = "gazelle")
go_library(
name = "go_default_library",
srcs = [
"ioutil.go",
"main.go",
"root.go",
],
importpath = "github.com/jiro4989/textimg",
deps = [
"//escseq:go_default_library",
"//internal/global:go_default_library",
"//ioimage:go_default_library",
"//log:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/golang.org/x/crypto/ssh/terminal:go_default_library",
"//vendor/golang.org/x/image/font:go_default_library",
],
)
go_binary(
name = "textimg",
)
go_test(
name = "test",
srcs = [
"cmd_test.go",
"main_test.go",
"root_test.go",
],
deps = [
"//escseq:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
],
)
pkg_tar(
name = "bin",
strip_prefix = "/src",
package_dir = "/usr/bin",
mode = "0755",
)
pkg_tar(
name = "tar",
extension = "tar.gz",
deps = [
":bin",
],
)
pkg_deb(
name = "deb",
data = ":tar",
package = "textimg",
architecture = "amd64",
maintainer = "jiro",
version = "0.1.1",
description_file = "description",
built_using = "unzip (6.0.1)",
)
code:WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "io_bazel_rules_go",
sha256 = "6a68e269802911fa419abb940c850734086869d7fe9bc8e12aaf60a09641c818",
urls = [
],
)
http_archive(
name = "bazel_gazelle",
sha256 = "bfd86b3cbe855d6c16c6fce60d76bd51f5c8dbc9cfcaef7a2bb5c1aafd0710e8",
urls = [
],
)
load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
go_rules_dependencies()
go_register_toolchains()
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
gazelle_dependencies()
これで以下のコマンドでビルドできるようになった
code:sh
bazel build //:textimg
bazel run //:test
debファイルのビルドはオプションが必要だった
code:sh
bazel build //:deb --host_force_python=PY2
でOK
インストールしてみる
code:sh
sudo dpkg -i bazel-bin/textimg_0.1.1_amd64.deb
が、ダメ
code:sh
ls /usr/bin/textimg_/textimg
に存在する
本当は /usr/bin/textimgにインストールされてほしい
どうもbazel buildで作ったバイナリがbazel-bin/textimg_/というディレクトリ配下に配置されて、この階層構造ごとdebに含まれている
どうやればこのバイナリだけdebに含められるかまだわかっていない
感想
参照するべきドキュメントも多い
個人開発レベルならオーバースペック
学習コスト絶対高い
gradleもそうだけれど、なんでビルドを簡単にするためのビルドツールはどいつもこいつも難しいんだ 参考