diff --git a/active_protocol_versions b/active_protocol_versions new file mode 100644 index 000000000..4a5800705 --- /dev/null +++ b/active_protocol_versions @@ -0,0 +1 @@ +alpha diff --git a/scripts/alphanet.sh b/scripts/alphanet.sh index 2fee86e0c..e19bae246 100755 --- a/scripts/alphanet.sh +++ b/scripts/alphanet.sh @@ -29,6 +29,8 @@ cd "$src_dir" update_compose_file() { + update_active_protocol_version + if [ "$#" -ge 2 ] && [ "$1" = "--rpc-port" ] ; then export_rpc=" - \"$2:8732\"" @@ -37,6 +39,11 @@ update_compose_file() { cat > "$docker_compose_yml" <> "$docker_compose_yml" < "$active_protocol_versions" +} + +may_update_active_protocol_version() { + if [ ! -f "$active_protocol_versions" ] ; then + update_active_protocol_version + fi +} + pull_image() { if [ "$TEZOS_ALPHANET_DO_NOT_PULL" = "yes" ] \ || [ "$ALPHANET_EMACS" ] \ @@ -118,6 +156,7 @@ pull_image() { return ; fi docker pull "$docker_image" + update_active_protocol_version date "+%s" > "$docker_pull_timestamp" } @@ -138,6 +177,14 @@ uptodate_container() { [ "$latest_image" = "$running_image" ] } +uptodate_containers() { + container=$1 + if [ ! -z "$container" ]; then + shift 1 + uptodate_container $container && uptodate_containers $@ + fi +} + assert_container() { call_docker_compose up --no-start } @@ -232,11 +279,13 @@ stop_node() { ## Baker ################################################################### check_baker() { + update_active_protocol_version + bakers="$(sed s/^/baker-/g "$active_protocol_versions")" + docker_baker_containers="$(sed "s/^\(.*\)$/${docker_compose_name}_baker-\1_1/g" "$active_protocol_versions")" res=$(docker inspect \ --format="{{ .State.Running }}" \ - --type=container "$docker_baker_container" 2>/dev/null \ - || echo false) - [ "$res" = true ] + --type=container $docker_baker_containers 2>/dev/null | grep false) + [ -z "$res" ] } assert_baker() { @@ -246,15 +295,9 @@ assert_baker() { fi } -warn_baker_uptodate() { - if ! uptodate_container "$docker_baker_container"; then - echo -e "\033[33mThe current baker is not the latest available.\033[0m" - fi -} - assert_baker_uptodate() { assert_baker - if ! uptodate_container "$docker_baker_container"; then + if ! uptodate_containers $docker_baker_containers; then echo -e "\033[33mThe current baker is not the latest available.\033[0m" exit 1 fi @@ -264,7 +307,9 @@ status_baker() { if check_baker; then echo -e "\033[32mBaker is running\033[0m" may_pull_image - warn_baker_uptodate + if ! uptodate_containers $docker_baker_containers; then + echo -e "\033[33mThe current baker is not the latest available.\033[0m" + fi else echo -e "\033[33mBaker is not running\033[0m" fi @@ -277,14 +322,14 @@ start_baker() { fi pull_image assert_node_uptodate - call_docker_compose start baker + call_docker_compose start $bakers echo -e "\033[32mThe baker is now running.\033[0m" } log_baker() { may_pull_image assert_baker_uptodate - call_docker_compose logs -f baker + call_docker_compose logs -f $bakers } stop_baker() { @@ -293,15 +338,18 @@ stop_baker() { exit 1 fi echo -e "\033[32mStopping the baker...\033[0m" - call_docker_compose stop baker + call_docker_compose stop $bakers } ## Endorser ################################################################### check_endorser() { + update_active_protocol_version + endorsers="$(sed s/^/endorser-/g "$active_protocol_versions")" + docker_endorser_containers="$(sed "s/^\(.*\)$/${docker_compose_name}_endorser-\1_1/g" "$active_protocol_versions")" res=$(docker inspect \ --format="{{ .State.Running }}" \ - --type=container "$docker_endorser_container" 2>/dev/null \ + --type=container $docker_endorser_containers 2>/dev/null \ || echo false) [ "$res" = true ] } @@ -313,15 +361,9 @@ assert_endorser() { fi } -warn_endorser_uptodate() { - if ! uptodate_container "$docker_endorser_container"; then - echo -e "\033[33mThe current endorser is not the latest available.\033[0m" - fi -} - assert_endorser_uptodate() { assert_endorser - if ! uptodate_container "$docker_endorser_container"; then + if ! uptodate_containers $docker_endorser_containers; then echo -e "\033[33mThe current endorser is not the latest available.\033[0m" exit 1 fi @@ -331,7 +373,9 @@ status_endorser() { if check_endorser; then echo -e "\033[32mEndorser is running\033[0m" may_pull_image - warn_endorser_uptodate + if ! uptodate_containers $docker_endorser_containers; then + echo -e "\033[33mThe current endorser is not the latest available.\033[0m" + fi else echo -e "\033[33mEndorser is not running\033[0m" fi @@ -344,14 +388,14 @@ start_endorser() { fi pull_image assert_node_uptodate - call_docker_compose start endorser + call_docker_compose start $endorsers echo -e "\033[32mThe endorser is now running.\033[0m" } log_endorser() { may_pull_image assert_endorser_uptodate - call_docker_compose logs -f endorser + call_docker_compose logs -f $endorsers } stop_endorser() { @@ -360,7 +404,73 @@ stop_endorser() { exit 1 fi echo -e "\033[32mStopping the baker...\033[0m" - call_docker_compose stop endorser + call_docker_compose stop $endorsers +} + +## Accuser ################################################################### + +check_accuser() { + update_active_protocol_version + accusers="$(sed s/^/accuser-/g "$active_protocol_versions")" + docker_accuser_containers="$(sed "s/^\(.*\)$/${docker_compose_name}_accuser-\1_1/g" "$active_protocol_versions")" + res=$(docker inspect \ + --format="{{ .State.Running }}" \ + --type=container $docker_accuser_containers 2>/dev/null \ + || echo false) + [ "$res" = true ] +} + +assert_accuser() { + if ! check_accuser; then + echo -e "\033[31mAccuser is not running!\033[0m" + exit 0 + fi +} + +assert_accuser_uptodate() { + assert_accuser + if ! uptodate_containers $docker_accuser_containers; then + echo -e "\033[33mThe current accuser is not the latest available.\033[0m" + exit 1 + fi +} + +status_accuser() { + if check_accuser; then + echo -e "\033[32mAccuser is running\033[0m" + may_pull_image + if ! uptodate_containers $docker_accuser_containers; then + echo -e "\033[33mThe current accuser is not the latest available.\033[0m" + fi + else + echo -e "\033[33mAccuser is not running\033[0m" + fi +} + +start_accuser() { + if check_accuser; then + echo -e "\033[31mAccuser is already running\033[0m" + exit 1 + fi + pull_image + assert_node_uptodate + call_docker_compose start $accusers + echo -e "\033[32mThe accuser is now running.\033[0m" +} + +log_accuser() { + may_pull_image + assert_accuser_uptodate + call_docker_compose logs -f $accusers +} + +stop_accuser() { + if ! check_baker; then + echo -e "\033[31mNo baker to kill!\033[0m" + exit 1 + fi + echo -e "\033[32mStopping the baker...\033[0m" + call_docker_compose stop $accusers } ## Misc #################################################################### @@ -395,7 +505,7 @@ display_head() { start() { pull_image update_compose_file "$@" - call_docker_compose up -d + call_docker_compose up -d --remove-orphans warn_script_uptodate } @@ -540,11 +650,10 @@ fi docker_dir="$docker_base_dir$suffix" docker_compose_yml="$docker_dir/docker-compose.yml" docker_pull_timestamp="$docker_dir/docker_pull.timestamp" +active_protocol_versions="$docker_dir/active_protocol_versions" docker_compose_name="$docker_compose_base_name$suffix" docker_node_container=${docker_compose_name}_node_1 -docker_baker_container=${docker_compose_name}_baker_1 -docker_endorser_container=${docker_compose_name}_endorser_1 docker_node_volume=${docker_compose_name}_node_data docker_client_volume=${docker_compose_name}_client_data @@ -645,6 +754,29 @@ case "$command" in exit 1 esac ;; + ## Accuser + + accuser) + subcommand="$1" + if [ "$#" -eq 0 ] ; then usage ; exit 1; else shift ; fi + case "$subcommand" in + status) + status_accuser + ;; + start) + start_accuser + ;; + log) + log_accuser + ;; + stop) + stop_accuser + ;; + *) + usage + exit 1 + esac ;; + ## Misc. head) diff --git a/scripts/ci/create_docker_image.minimal.sh b/scripts/ci/create_docker_image.minimal.sh index 0fda9f4f0..f95ea227f 100755 --- a/scripts/ci/create_docker_image.minimal.sh +++ b/scripts/ci/create_docker_image.minimal.sh @@ -27,9 +27,8 @@ trap cleanup EXIT INT mkdir -p "$tmp_dir"/bin mkdir -p "$tmp_dir"/scripts container=$(docker create $build_image) -for bin in tezos-client tezos-admin-client tezos-node \ - tezos-alpha-baker tezos-alpha-endorser tezos-alpha-accuser \ - tezos-signer; do +versioned_daemons="$(sed "s/^\(.*\)$/tezos-\1-baker tezos-\1-endorser tezos-\1-accuser/g" "active_protocol_versions")" +for bin in tezos-client tezos-admin-client tezos-node $versioned_daemons tezos-signer; do docker cp -L $container:/home/tezos/tezos/$bin "$tmp_dir"/bin done cp -a "$script_dir"/docker/entrypoint.sh "$tmp_dir"/bin/ @@ -37,6 +36,7 @@ cp -a "$script_dir"/docker/entrypoint.inc.sh "$tmp_dir"/bin/ cp "$script_dir"/alphanet.sh "$tmp_dir"/scripts/ cp "$script_dir"/alphanet_version "$tmp_dir"/scripts/ cp "$src_dir"/src/bin_client/bash-completion.sh "$tmp_dir"/scripts/ +cp "$src_dir"/active_protocol_versions "$tmp_dir"/scripts/ echo echo "### Building minimal docker image..." diff --git a/scripts/docker/docker-compose-generic.yml b/scripts/docker/docker-compose-generic.yml index 5450addef..32d09755a 100644 --- a/scripts/docker/docker-compose-generic.yml +++ b/scripts/docker/docker-compose-generic.yml @@ -14,9 +14,13 @@ services: - client_data:/var/run/tezos/client restart: on-failure - baker: + ## Duplicate the `baker/endorser/accuser` containers for each PROTOCOL + ## in file `active_protocol_versions` + baker-alpha: image: tezos/tezos:latest - hostname: baker + hostname: baker-alpha + environment: + - PROTOCOL=alpha command: tezos-baker links: - node @@ -24,9 +28,11 @@ services: - client_data:/var/run/tezos/client restart: on-failure - endorser: + endorser-alpha: image: tezos/tezos:latest - hostname: endorser + hostname: endorser-alpha + environment: + - PROTOCOL=alpha command: tezos-endorser links: - node @@ -34,9 +40,11 @@ services: - client_data:/var/run/tezos/client restart: on-failure - accuser: + accuser-alpha: image: tezos/tezos:latest - hostname: accuser + hostname: accuser-alpha + environment: + - PROTOCOL=alpha command: tezos-accuser links: - node diff --git a/scripts/docker/entrypoint.sh b/scripts/docker/entrypoint.sh index e24fce6e3..ea85b8c7c 100755 --- a/scripts/docker/entrypoint.sh +++ b/scripts/docker/entrypoint.sh @@ -9,12 +9,14 @@ bin_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")" : ${NODE_HOST:="node"} : ${NODE_RPC_PORT:="8732"} +: ${PROTOCOL:="unspecified-PROTOCOL-variable"} + node="/usr/local/bin/tezos-node" client="/usr/local/bin/tezos-client" admin_client="/usr/local/bin/tezos-admin-client" -baker="/usr/local/bin/tezos-alpha-baker" -endorser="/usr/local/bin/tezos-alpha-endorser" -accuser="/usr/local/bin/tezos-alpha-accuser" +baker="/usr/local/bin/tezos-$PROTOCOL-baker" +endorser="/usr/local/bin/tezos-$PROTOCOL-endorser" +accuser="/usr/local/bin/tezos-$PROTOCOL-accuser" signer="/usr/local/bin/tezos-signer" client_dir="$DATA_DIR/client"