| giolekva | 1ef9885 | 2020-12-14 20:32:09 +0400 | [diff] [blame] | 1 | __PUSH_TO_DEV_TMPL = """ |
| 2 | #!/bin/sh |
| 3 | set -eE -o functrace |
| 4 | # --- begin runfiles.bash initialization --- |
| 5 | # Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). |
| 6 | set -euo pipefail |
| 7 | if [[ ! -d "\$${{RUNFILES_DIR:-/dev/null}}" && ! -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then |
| 8 | if [[ -f "\$$0.runfiles_manifest" ]]; then |
| 9 | export RUNFILES_MANIFEST_FILE="\$$0.runfiles_manifest" |
| 10 | elif [[ -f "\$$0.runfiles/MANIFEST" ]]; then |
| 11 | export RUNFILES_MANIFEST_FILE="\$$0.runfiles/MANIFEST" |
| 12 | elif [[ -f "\$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
| 13 | export RUNFILES_DIR="\$$0.runfiles" |
| 14 | fi |
| 15 | fi |
| 16 | if [[ -f "\$${{RUNFILES_DIR:-/dev/null}}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
| 17 | source "\$${{RUNFILES_DIR}}/bazel_tools/tools/bash/runfiles/runfiles.bash" |
| 18 | elif [[ -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then |
| 19 | source "\$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ |
| 20 | "\$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" |
| 21 | else |
| 22 | echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" |
| 23 | exit 1 |
| 24 | fi |
| 25 | # --- end runfiles.bash initialization --- |
| 26 | IMAGE="{registry}/{image}:{tag}" |
| 27 | DOCKERFILE=\$$(rlocation __main__/{package}/{dockerfile}) |
| 28 | docker build \ |
| 29 | --tag=\$$IMAGE \ |
| 30 | --file=\$$DOCKERFILE \ |
| 31 | \$$(dirname "\$$DOCKERFILE") |
| 32 | docker push \$$IMAGE |
| 33 | """ |
| 34 | |
| 35 | |
| 36 | def docker_image(name, registry, image, tag, dockerfile, srcs, **kwargs): |
| 37 | native.genrule( |
| 38 | name = "%s.sh" % name, |
| 39 | executable = False, |
| 40 | outs = ["build_and_push.sh",], |
| 41 | cmd = """cat > $@ <<EOM |
| 42 | %s |
| 43 | EOM |
| 44 | """ % __PUSH_TO_DEV_TMPL.format( |
| 45 | registry = registry, |
| 46 | image = image, |
| 47 | tag = tag, |
| 48 | dockerfile = dockerfile, |
| 49 | package = native.package_name(), |
| 50 | )) |
| 51 | native.sh_binary( |
| 52 | name = name, |
| 53 | srcs = ["build_and_push.sh",], |
| 54 | data = srcs + [dockerfile,], |
| 55 | deps = ["@bazel_tools//tools/bash/runfiles",]) |