Skip to content

Instantly share code, notes, and snippets.

@benley
Last active July 13, 2017 16:43
Show Gist options
  • Select an option

  • Save benley/6dddd35bb65488df87b011f864dbe729 to your computer and use it in GitHub Desktop.

Select an option

Save benley/6dddd35bb65488df87b011f864dbe729 to your computer and use it in GitHub Desktop.
handy dandy bazel-in-docker wrapper
#!/usr/bin/env bash
set -o pipefail
set -o errexit
set -o nounset
CONTAINER_NAME="bazel-$USER"
IMAGE="bazel-$USER"
function log {
echo "(wrapper) $*" 1>&2
}
function container_exists {
docker ps -a --format '{{.Names}}' | grep -qE "^$CONTAINER_NAME\$"
}
function container_running {
docker ps --format '{{.Names}}' | grep -qE "^$CONTAINER_NAME\$"
}
function create_container {
log "Creating a new container"
tmpf=$(mktemp)
trap 'rm -f "$tmpf"' ERR EXIT
cat > "$tmpf" <<'EOF'
#!/bin/sh
cd "$1"
shift
bazel "$@"
EOF
chmod 0755 "$tmpf"
docker create \
--network host \
--interactive \
-v "$HOME:$HOME" \
-v "/run/user/$UID/gnupg:/run/user/$UID/gnupg" \
-v "/var/tmp/_bazel_$USER:/var/tmp/_bazel_$USER" \
--name "$CONTAINER_NAME" \
-w "$HOME" \
"$IMAGE"
docker cp "$tmpf" "$CONTAINER_NAME:/usr/local/bin/cdbazel.sh"
rm -f "$tmpf"
}
function start_container {
log "Starting container"
docker start "$CONTAINER_NAME"
}
function main {
if ! container_running; then
if ! container_exists; then
create_container
fi
start_container
fi
docker exec \
--env SSH_AUTH_SOCK="$SSH_AUTH_SOCK" \
--user "$UID" \
--tty \
--interactive \
"$CONTAINER_NAME" \
/usr/local/bin/cdbazel.sh "$PWD" "$@"
}
main "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment