| #!/bin/bash |
| set -eu -o pipefail |
| |
| quote() { |
| local arg |
| for arg in "$@"; do |
| printf "'" |
| printf "%s" "$arg" | sed -e "s/'/'\\\\''/g" |
| printf "' " |
| done |
| } |
| |
| if [[ "${1:-}" != "in-docker" ]]; then |
| readonly grpc_java_dir="$(dirname $(readlink -f "$0"))/.." |
| exec docker run -it --rm=true -v "${grpc_java_dir}:/grpc-java" -w /grpc-java \ |
| grpc-java-releasing \ |
| ./buildscripts/run_in_docker.sh in-docker "$(id -u)" "$(id -g)" "$@" |
| fi |
| |
| ## In Docker |
| |
| shift |
| |
| readonly swap_uid="$1" |
| readonly swap_gid="$2" |
| shift 2 |
| |
| # Java uses NSS to determine the user's home. If that fails it uses '?' in the |
| # current directory. So we need to set up the user's home in /etc/passwd. |
| # If this wasn't the case, we could have passed -u to docker run and avoided |
| # this script inside the container. JAVA_TOOL_OPTIONS is okay, but is noisy. |
| groupadd thegroup -g "$swap_gid" |
| useradd theuser -u "$swap_uid" -g "$swap_gid" -m |
| if [[ "$#" -eq 0 ]]; then |
| exec su theuser |
| else |
| # runuser is too old in the container to support the -u flag; if it did, we'd |
| # be able to remove the 'quote' function. |
| exec su theuser -c "$(quote "$@")" |
| fi |