|  | #!/usr/bin/env bash | 
|  |  | 
|  | # This script can be run by Monogon Labs employees to push the Builder image | 
|  | # built from //build/ci/Dockerfile into a public registry image. That image is | 
|  | # then consumed by external, non-public infrastructure code as a basis to run | 
|  | # Jenkins CI agents. | 
|  | # | 
|  | # For more information, see //build/ci/README.md. | 
|  |  | 
|  | set -euo pipefail | 
|  |  | 
|  | main() { | 
|  | if [[ "$HOME" == /user ]] && [[ -d /user ]] && [[ -d /home/ci ]]; then | 
|  | echo "WARNING: likely running within Builder image instead of the host environment." >&2 | 
|  | echo "If this script was invoked using 'bazel run', please instead do:" >&2 | 
|  | echo "    \$ scripts/bin/bazel build //build/ci:push_ci_image" >&2 | 
|  | echo "    \$ bazel-bin/build/ci/push_ci_image" >&2 | 
|  | echo "This will build the script within the container but run it on the host." >&2 | 
|  | fi | 
|  |  | 
|  | local podman="$(command -v podman || true)" | 
|  | if [[ -z "$podman" ]]; then | 
|  | echo "'podman' must be available in the system PATH to build the image." >&2 | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | local dockerfile="build/ci/Dockerfile" | 
|  | if [[ ! -f "${dockerfile}" ]]; then | 
|  | echo "Could not find ${dockerfile} - this script needs to be run from the root of the Monogon repository." >&2 | 
|  | ecit 1 | 
|  | fi | 
|  |  | 
|  | local image="gcr.io/monogon-infra/monogon-builder:$(date +%s)" | 
|  |  | 
|  | echo "Building image ${image} from ${dockerfile}..." | 
|  | "${podman}" build -t "${image}" - < "${dockerfile}" | 
|  | echo "Pushing image ${image}..." | 
|  | "${podman}" push "${image}" | 
|  | echo "Done, new image is ${image}" | 
|  | } | 
|  |  | 
|  | main "$@" | 
|  |  |