| 
									
										
										
										
											2018-11-11 08:19:04 -08:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | set -e | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | usage() { | 
					
						
							| 
									
										
										
										
											2018-08-20 10:17:12 -07:00
										 |  |  |   echo "Usage: $0 [--nopull] [docker image name] [command]" | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  |   echo | 
					
						
							|  |  |  |   echo Runs command in the specified docker image with | 
					
						
							| 
									
										
										
										
											2018-08-20 10:17:12 -07:00
										 |  |  |   echo a CI-appropriate environment. | 
					
						
							|  |  |  |   echo | 
					
						
							|  |  |  |   echo "--nopull   Skip the dockerhub image update" | 
					
						
							| 
									
										
										
										
											2018-09-21 09:42:50 -07:00
										 |  |  |   echo "--shell    Skip command and enter an interactive shell" | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  |   echo | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cd "$(dirname "$0")/.." | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 09:42:50 -07:00
										 |  |  | INTERACTIVE=false | 
					
						
							|  |  |  | if [[ $1 = --shell ]]; then | 
					
						
							|  |  |  |   INTERACTIVE=true | 
					
						
							|  |  |  |   shift | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-20 10:17:12 -07:00
										 |  |  | NOPULL=false | 
					
						
							|  |  |  | if [[ $1 = --nopull ]]; then | 
					
						
							|  |  |  |   NOPULL=true | 
					
						
							|  |  |  |   shift | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | IMAGE="$1" | 
					
						
							|  |  |  | if [[ -z "$IMAGE" ]]; then | 
					
						
							|  |  |  |   echo Error: image not defined | 
					
						
							|  |  |  |   exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-20 10:17:12 -07:00
										 |  |  | $NOPULL || docker pull "$IMAGE" | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | shift | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 13:45:53 -07:00
										 |  |  | ARGS=( | 
					
						
							|  |  |  |   --workdir /solana | 
					
						
							|  |  |  |   --volume "$PWD:/solana" | 
					
						
							|  |  |  |   --rm | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 16:07:58 -07:00
										 |  |  | if [[ -n $CI ]]; then | 
					
						
							| 
									
										
										
										
											2018-08-28 20:54:05 -07:00
										 |  |  |   # Share the real ~/.cargo between docker containers in CI for speed | 
					
						
							| 
									
										
										
										
											2018-07-30 16:07:58 -07:00
										 |  |  |   ARGS+=(--volume "$HOME:/home") | 
					
						
							| 
									
										
										
										
											2018-08-28 20:54:05 -07:00
										 |  |  | else | 
					
						
							|  |  |  |   # Avoid sharing ~/.cargo when building locally to avoid a mixed macOS/Linux | 
					
						
							|  |  |  |   # ~/.cargo | 
					
						
							|  |  |  |   ARGS+=(--volume "$PWD:/home") | 
					
						
							| 
									
										
										
										
											2018-07-30 16:07:58 -07:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2020-04-28 01:18:52 -07:00
										 |  |  | ARGS+=(--env "HOME=/home" --env "CARGO_HOME=/home/.cargo") | 
					
						
							| 
									
										
										
										
											2018-07-30 16:07:58 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | # kcov tries to set the personality of the binary which docker | 
					
						
							|  |  |  | # doesn't allow by default. | 
					
						
							|  |  |  | ARGS+=(--security-opt "seccomp=unconfined") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Ensure files are created with the current host uid/gid | 
					
						
							| 
									
										
										
										
											2018-06-21 12:24:52 -07:00
										 |  |  | if [[ -z "$SOLANA_DOCKER_RUN_NOSETUID" ]]; then | 
					
						
							|  |  |  |   ARGS+=(--user "$(id -u):$(id -g)") | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-17 01:32:16 +09:00
										 |  |  | if [[ -n $SOLANA_ALLOCATE_TTY ]]; then | 
					
						
							|  |  |  |   # Colored output, progress bar and Ctrl-C: | 
					
						
							|  |  |  |   # https://stackoverflow.com/a/41099052/10242004 | 
					
						
							|  |  |  |   ARGS+=(--interactive --tty) | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | # Environment variables to propagate into the container | 
					
						
							|  |  |  | ARGS+=( | 
					
						
							| 
									
										
										
										
											2018-07-30 15:47:06 -07:00
										 |  |  |   --env BUILDKITE | 
					
						
							|  |  |  |   --env BUILDKITE_AGENT_ACCESS_TOKEN | 
					
						
							|  |  |  |   --env BUILDKITE_JOB_ID | 
					
						
							| 
									
										
										
										
											2018-12-18 00:47:41 -08:00
										 |  |  |   --env CI | 
					
						
							| 
									
										
										
										
											2019-06-06 12:20:47 -07:00
										 |  |  |   --env CI_BRANCH | 
					
						
							| 
									
										
										
										
											2020-06-18 10:04:37 -07:00
										 |  |  |   --env CI_BASE_BRANCH | 
					
						
							| 
									
										
										
										
											2020-03-12 08:36:19 -07:00
										 |  |  |   --env CI_TAG | 
					
						
							| 
									
										
										
										
											2019-06-06 12:20:47 -07:00
										 |  |  |   --env CI_BUILD_ID | 
					
						
							|  |  |  |   --env CI_COMMIT | 
					
						
							|  |  |  |   --env CI_JOB_ID | 
					
						
							|  |  |  |   --env CI_PULL_REQUEST | 
					
						
							|  |  |  |   --env CI_REPO_SLUG | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  |   --env CRATES_IO_TOKEN | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-10 03:39:33 +09:00
										 |  |  | # Also propagate environment variables needed for codecov | 
					
						
							|  |  |  | # https://docs.codecov.io/docs/testing-with-docker#section-codecov-inside-docker | 
					
						
							|  |  |  | # We normalize CI to `1`; but codecov expects it to be `true` to detect Buildkite... | 
					
						
							| 
									
										
										
										
											2020-02-13 23:23:10 +09:00
										 |  |  | # Unfortunately, codecov.io fails sometimes: | 
					
						
							|  |  |  | #   curl: (7) Failed to connect to codecov.io port 443: Connection timed out | 
					
						
							|  |  |  | CODECOV_ENVS=$(CI=true bash <(while ! curl -sS --retry 5 --retry-delay 2 --retry-connrefused https://codecov.io/env; do sleep 10; done)) | 
					
						
							| 
									
										
										
										
											2020-01-10 03:39:33 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-21 09:42:50 -07:00
										 |  |  | if $INTERACTIVE; then | 
					
						
							|  |  |  |   if [[ -n $1 ]]; then | 
					
						
							|  |  |  |     echo | 
					
						
							|  |  |  |     echo "Note: '$*' ignored due to --shell argument" | 
					
						
							|  |  |  |     echo | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   set -x | 
					
						
							| 
									
										
										
										
											2020-01-10 03:39:33 +09:00
										 |  |  |   # shellcheck disable=SC2086 | 
					
						
							|  |  |  |   exec docker run --interactive --tty "${ARGS[@]}" $CODECOV_ENVS "$IMAGE" bash | 
					
						
							| 
									
										
										
										
											2018-09-21 09:42:50 -07:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-28 14:07:30 -07:00
										 |  |  | set -x | 
					
						
							| 
									
										
										
										
											2020-01-10 03:39:33 +09:00
										 |  |  | # shellcheck disable=SC2086 | 
					
						
							|  |  |  | exec docker run "${ARGS[@]}" $CODECOV_ENVS "$IMAGE" "$@" |