| __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 " \t "\\$$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"], |
| ) |