cert-manager/hack/build/docker.bzl
James Munnelly 5057da1b89 Add Bazel image targets with coverage enabled
Signed-off-by: James Munnelly <james@munnelly.eu>
2019-10-16 08:59:24 +01:00

93 lines
2.6 KiB
Python

# Copyright 2019 The Jetstack cert-manager contributors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("@io_bazel_rules_docker//container:image.bzl", "container_image")
load("@io_bazel_rules_docker//container:bundle.bzl", "container_bundle")
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
load("@io_bazel_rules_go//go:def.bzl", "go_test")
def image(
name,
component,
binary,
user = "1000",
stamp = True,
testonly = False,
**kwargs):
go_image(
name = "%s.app" % name,
base = "@static_base//image",
binary = binary,
testonly = testonly,
)
container_image(
name = name,
base = "%s.app" % name,
user = user,
stamp = stamp,
testonly = testonly,
**kwargs)
container_bundle(
name = name + ".export",
images = {
component + ":{STABLE_APP_GIT_COMMIT}": ":" + name,
},
testonly = testonly,
)
def covered_image(name, component, **kwargs):
native.genrule(
name = "%s.covered-testfile" % name,
cmd = """
name="%s";
cat <<EOF > "$@"
package main
import (
"testing"
"github.com/jetstack/cert-manager/pkg/util/coverage"
)
func TestMain(m *testing.M) {
// Get coverage running
coverage.InitCoverage("$${name}")
// Go!
main()
// Make sure we actually write the profiling information to disk, if we make it here.
// On long-running services, or anything that calls os.Exit(), this is insufficient,
// so we also flush periodically with a default period of five seconds (configurable by
// the COVERAGE_FLUSH_INTERVAL environment variable).
coverage.FlushCoverage()
}
EOF
""" % component,
outs = ["main_test.go"],
)
go_test(
name = "%s.covered-app" % name,
srcs = ["main_test.go"],
embed = [":go_default_library"],
deps = ["//pkg/util/coverage:go_default_library"],
tags = ["manual"],
)
image(
name = name,
binary = "%s.covered-app" % name,
testonly = True,
component = component,
**kwargs)