Last active
July 13, 2017 16:43
-
-
Save benley/6dddd35bb65488df87b011f864dbe729 to your computer and use it in GitHub Desktop.
handy dandy bazel-in-docker wrapper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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