Skip to content

Commit 3792bf6

Browse files
Add alpine based docker images for validator and beacon chain (OffchainLabs#5214)
* Add alpine based images for validator and beacon chain * Use an alpine image with glibc * manual tags on transitional targets * poke buildkite * poke buildkite
1 parent e077d3d commit 3792bf6

File tree

6 files changed

+123
-4
lines changed

6 files changed

+123
-4
lines changed

WORKSPACE

+12
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,18 @@ load(
117117

118118
container_repositories()
119119

120+
load(
121+
"@io_bazel_rules_docker//container:container.bzl",
122+
"container_pull",
123+
)
124+
125+
container_pull(
126+
name = "alpine_cc_linux_amd64",
127+
digest = "sha256:d5cee45549351be7a03a96c7b319b9c1808979b10888b79acca4435cc068005e",
128+
registry = "index.docker.io",
129+
repository = "frolvlad/alpine-glibc",
130+
)
131+
120132
load("@prysm//third_party/herumi:herumi.bzl", "bls_dependencies")
121133

122134
bls_dependencies()

beacon-chain/BUILD.bazel

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
22
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
33
load("@io_bazel_rules_docker//container:container.bzl", "container_bundle")
4-
load("//tools:binary_targets.bzl", "binary_targets", "go_image_debug")
4+
load("//tools:binary_targets.bzl", "binary_targets", "go_image_alpine", "go_image_debug")
55
load("@io_bazel_rules_docker//contrib:push-all.bzl", "docker_push")
66

77
go_library(
@@ -37,7 +37,11 @@ go_image(
3737
"main.go",
3838
"usage.go",
3939
],
40-
base = "//tools:cc_image",
40+
base = select({
41+
"//tools:base_image_alpine": "//tools:alpine_cc_image",
42+
"//tools:base_image_cc": "//tools:cc_image",
43+
"//conditions:default": "//tools:cc_image",
44+
}),
4145
goarch = "amd64",
4246
goos = "linux",
4347
importpath = "github.com/prysmaticlabs/prysm/beacon-chain",
@@ -76,6 +80,7 @@ container_bundle(
7680
go_image_debug(
7781
name = "image_debug",
7882
image = ":image",
83+
tags = ["manual"],
7984
)
8085

8186
container_bundle(
@@ -87,6 +92,21 @@ container_bundle(
8792
tags = ["manual"],
8893
)
8994

95+
go_image_alpine(
96+
name = "image_alpine",
97+
image = ":image",
98+
tags = ["manual"],
99+
)
100+
101+
container_bundle(
102+
name = "image_bundle_alpine",
103+
images = {
104+
"gcr.io/prysmaticlabs/prysm/beacon-chain:latest-alpine": ":image_alpine",
105+
"gcr.io/prysmaticlabs/prysm/beacon-chain:{DOCKER_TAG}-alpine": ":image_alpine",
106+
},
107+
tags = ["manual"],
108+
)
109+
90110
docker_push(
91111
name = "push_images",
92112
bundle = ":image_bundle",
@@ -99,6 +119,12 @@ docker_push(
99119
tags = ["manual"],
100120
)
101121

122+
docker_push(
123+
name = "push_images_alpine",
124+
bundle = ":image_bundle_alpine",
125+
tags = ["manual"],
126+
)
127+
102128
go_binary(
103129
name = "beacon-chain",
104130
embed = [":go_default_library"],

tools/BUILD.bazel

+24
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ load("@io_bazel_rules_docker//contrib:passwd.bzl", "passwd_entry", "passwd_file"
33
load("@io_bazel_rules_docker//container:container.bzl", "container_image")
44
load("@io_bazel_rules_docker//cc:image.bzl", CC_DEFAULT_BASE = "DEFAULT_BASE")
55
load("@io_bazel_rules_docker//go:image.bzl", GO_DEFAULT_BASE = "DEFAULT_BASE")
6+
load("//tools:build_settings.bzl", "base_image")
67

78
alias(
89
name = "kubesec",
@@ -61,3 +62,26 @@ container_image(
6162
user = "root",
6263
visibility = ["//visibility:public"],
6364
)
65+
66+
base_image(
67+
name = "base_image",
68+
build_setting_default = "cc_image",
69+
)
70+
71+
config_setting(
72+
name = "base_image_alpine",
73+
flag_values = {"//tools:base_image": "alpine"},
74+
)
75+
76+
config_setting(
77+
name = "base_image_cc",
78+
flag_values = {"//tools:base_image": "cc_image"},
79+
)
80+
81+
container_image(
82+
name = "alpine_cc_image",
83+
base = "@alpine_cc_linux_amd64//image",
84+
tars = [":passwd_tar"],
85+
user = "root",
86+
visibility = ["//visibility:public"],
87+
)

tools/binary_targets.bzl

+22
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ build_in_debug_mode = transition(
3939
outputs = ["//command_line_option:compilation_mode"],
4040
)
4141

42+
def _alpine_transition_impl(settings, attr):
43+
return {
44+
"//tools:base_image": "alpine",
45+
}
46+
47+
use_alpine = transition(
48+
implementation = _alpine_transition_impl,
49+
inputs = [],
50+
outputs = ["//tools:base_image"],
51+
)
52+
4253
# Defines a rule implementation that essentially returns all of the providers from the image attr.
4354
def _go_image_debug_impl(ctx):
4455
img = ctx.attr.image[0]
@@ -61,3 +72,14 @@ go_image_debug = rule(
6172
"_whitelist_function_transition": attr.label(default = "@bazel_tools//tools/whitelists/function_transition_whitelist"),
6273
},
6374
)
75+
go_image_alpine = rule(
76+
_go_image_debug_impl,
77+
attrs = {
78+
"image": attr.label(
79+
cfg = use_alpine,
80+
executable = True,
81+
),
82+
# Whitelist is required or bazel complains.
83+
"_whitelist_function_transition": attr.label(default = "@bazel_tools//tools/whitelists/function_transition_whitelist"),
84+
},
85+
)

tools/build_settings.bzl

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
BaseImageProvider = provider(fields = ["type"])
2+
3+
def _impl(ctx):
4+
return BaseImageProvider(type = ctx.build_setting_value)
5+
6+
base_image = rule(
7+
implementation = _impl,
8+
build_setting = config.string(flag = True),
9+
)

validator/BUILD.bazel

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
22
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
33
load("@io_bazel_rules_docker//container:container.bzl", "container_bundle")
4-
load("//tools:binary_targets.bzl", "binary_targets", "go_image_debug")
4+
load("//tools:binary_targets.bzl", "binary_targets", "go_image_alpine", "go_image_debug")
55
load("@io_bazel_rules_docker//contrib:push-all.bzl", "docker_push")
66

77
go_library(
@@ -37,7 +37,11 @@ go_image(
3737
"main.go",
3838
"usage.go",
3939
],
40-
base = "//tools:cc_image",
40+
base = select({
41+
"//tools:base_image_alpine": "//tools:alpine_cc_image",
42+
"//tools:base_image_cc": "//tools:cc_image",
43+
"//conditions:default": "//tools:cc_image",
44+
}),
4145
goarch = "amd64",
4246
goos = "linux",
4347
importpath = "github.com/prysmaticlabs/prysm/validator",
@@ -76,6 +80,7 @@ container_bundle(
7680
go_image_debug(
7781
name = "image_debug",
7882
image = ":image",
83+
tags = ["manual"],
7984
)
8085

8186
container_bundle(
@@ -87,6 +92,21 @@ container_bundle(
8792
tags = ["manual"],
8893
)
8994

95+
go_image_alpine(
96+
name = "image_alpine",
97+
image = ":image",
98+
tags = ["manual"],
99+
)
100+
101+
container_bundle(
102+
name = "image_bundle_alpine",
103+
images = {
104+
"gcr.io/prysmaticlabs/prysm/validator:latest-alpine": ":image_alpine",
105+
"gcr.io/prysmaticlabs/prysm/validator:{DOCKER_TAG}-alpine": ":image_alpine",
106+
},
107+
tags = ["manual"],
108+
)
109+
90110
docker_push(
91111
name = "push_images",
92112
bundle = ":image_bundle",
@@ -99,6 +119,12 @@ docker_push(
99119
tags = ["manual"],
100120
)
101121

122+
docker_push(
123+
name = "push_images_alpine",
124+
bundle = ":image_bundle_alpine",
125+
tags = ["manual"],
126+
)
127+
102128
go_binary(
103129
name = "validator",
104130
embed = [":go_default_library"],

0 commit comments

Comments
 (0)