91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | #!/usr/bin/env bash
 | ||
|  | # | ||
|  | # A script to build and run the Swarm development environment using Docker. | ||
|  | 
 | ||
|  | set -e | ||
|  | 
 | ||
|  | ROOT="$(cd "$(dirname "$0")/../.." && pwd)" | ||
|  | 
 | ||
|  | # DEFAULT_NAME is the default name for the Docker image and container | ||
|  | DEFAULT_NAME="swarm-dev" | ||
|  | 
 | ||
|  | usage() { | ||
|  |   cat >&2 <<USAGE | ||
|  | usage: $0 [options] | ||
|  | 
 | ||
|  | Build and run the Swarm development environment. | ||
|  | 
 | ||
|  | Depends on Docker being installed locally. | ||
|  | 
 | ||
|  | OPTIONS: | ||
|  |   -n, --name NAME          Docker image and container name [default: ${DEFAULT_NAME}] | ||
|  |   -d, --docker-args ARGS   Custom args to pass to 'docker run' (e.g. '-p 8000:8000' to expose a port) | ||
|  |   -h, --help               Show this message | ||
|  | USAGE | ||
|  | } | ||
|  | 
 | ||
|  | main() { | ||
|  |   local name="${DEFAULT_NAME}" | ||
|  |   local docker_args="" | ||
|  |   parse_args "$@" | ||
|  |   build_image | ||
|  |   run_image | ||
|  | } | ||
|  | 
 | ||
|  | parse_args() { | ||
|  |   while true; do | ||
|  |     case "$1" in | ||
|  |       -h | --help) | ||
|  |         usage | ||
|  |         exit 0 | ||
|  |         ;; | ||
|  |       -n | --name) | ||
|  |         if [[ -z "$2" ]]; then | ||
|  |           echo "ERROR: --name flag requires an argument" >&2 | ||
|  |           exit 1 | ||
|  |         fi | ||
|  |         name="$2" | ||
|  |         shift 2 | ||
|  |         ;; | ||
|  |       -d | --docker-args) | ||
|  |         if [[ -z "$2" ]]; then | ||
|  |           echo "ERROR: --docker-args flag requires an argument" >&2 | ||
|  |           exit 1 | ||
|  |         fi | ||
|  |         docker_args="$2" | ||
|  |         shift 2 | ||
|  |         ;; | ||
|  |       *) | ||
|  |         break | ||
|  |         ;; | ||
|  |     esac | ||
|  |   done | ||
|  | 
 | ||
|  |   if [[ $# -ne 0 ]]; then | ||
|  |     usage | ||
|  |     echo "ERROR: invalid arguments" >&2 | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | } | ||
|  | 
 | ||
|  | build_image() { | ||
|  |   docker build --tag "${name}" "${ROOT}/swarm/dev" | ||
|  | } | ||
|  | 
 | ||
|  | run_image() { | ||
|  |   exec docker run \
 | ||
|  |     --privileged \
 | ||
|  |     --interactive \
 | ||
|  |     --tty \
 | ||
|  |     --rm \
 | ||
|  |     --hostname "${name}" \
 | ||
|  |     --name     "${name}" \
 | ||
|  |     --volume   "${ROOT}:/go/src/github.com/ethereum/go-ethereum" \
 | ||
|  |     --volume   "/var/run/docker.sock:/var/run/docker.sock" \
 | ||
|  |     ${docker_args} \
 | ||
|  |     "${name}" \
 | ||
|  |     /bin/bash | ||
|  | } | ||
|  | 
 | ||
|  | main "$@" |