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 "$@"
|