| __PUSH_TO_DEV_TMPL = """ |
| #!/bin/sh |
| set -eE -o functrace |
| # --- begin runfiles.bash initialization --- |
| # Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). |
| set -euo pipefail |
| if [[ ! -d "\$${{RUNFILES_DIR:-/dev/null}}" && ! -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then |
| if [[ -f "\$$0.runfiles_manifest" ]]; then |
| export RUNFILES_MANIFEST_FILE="\$$0.runfiles_manifest" |
| elif [[ -f "\$$0.runfiles/MANIFEST" ]]; then |
| export RUNFILES_MANIFEST_FILE="\$$0.runfiles/MANIFEST" |
| elif [[ -f "\$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
| export RUNFILES_DIR="\$$0.runfiles" |
| fi |
| fi |
| if [[ -f "\$${{RUNFILES_DIR:-/dev/null}}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
| source "\$${{RUNFILES_DIR}}/bazel_tools/tools/bash/runfiles/runfiles.bash" |
| elif [[ -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then |
| source "\$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ |
| "\$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" |
| else |
| echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" |
| exit 1 |
| fi |
| # --- end runfiles.bash initialization --- |
| IMAGE="{registry}/{image}:{tag}" |
| DOCKERFILE=\$$(rlocation __main__/{package}/{dockerfile}) |
| docker build \ |
| --tag=\$$IMAGE \ |
| --file=\$$DOCKERFILE \ |
| \$$(dirname "\$$DOCKERFILE") |
| docker push \$$IMAGE |
| """ |
| |
| |
| def docker_image(name, registry, image, tag, dockerfile, srcs, **kwargs): |
| native.genrule( |
| name = "%s.sh" % name, |
| executable = False, |
| outs = ["build_and_push.sh",], |
| cmd = """cat > $@ <<EOM |
| %s |
| EOM |
| """ % __PUSH_TO_DEV_TMPL.format( |
| registry = registry, |
| image = image, |
| tag = tag, |
| dockerfile = dockerfile, |
| package = native.package_name(), |
| )) |
| native.sh_binary( |
| name = name, |
| srcs = ["build_and_push.sh",], |
| data = srcs + [dockerfile,], |
| deps = ["@bazel_tools//tools/bash/runfiles",]) |