aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/dev/run.sh
diff options
context:
space:
mode:
Diffstat (limited to 'swarm/dev/run.sh')
-rwxr-xr-xswarm/dev/run.sh90
1 files changed, 90 insertions, 0 deletions
diff --git a/swarm/dev/run.sh b/swarm/dev/run.sh
new file mode 100755
index 000000000..2ad600ded
--- /dev/null
+++ b/swarm/dev/run.sh
@@ -0,0 +1,90 @@
+#!/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 "$@"