diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ecd67d..17d6b4d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,11 +101,23 @@ jobs: # /mnt существует). protocol_features узел пишет туда же, в свежесозданный # контейнер — никакого мусора между прогонами. docker create --name blockchain \ - -p 8888:8888 -p 8080:8080 -p 9876:9876 \ dicoop/blockchain:v5.1.0-dev \ /bin/bash -c 'mkdir -p /mnt/data && exec /usr/local/bin/nodeos -d /mnt/data -p eosio --config-dir /mnt/cfg --genesis-json /mnt/cfg/genesis.json --disable-replay-opts' docker cp "${GITHUB_WORKSPACE}/packages/parser2/test/integration/node-config" blockchain:/mnt/cfg + # Сеть в DinD: порт-маппинг -p публикует на ХОСТЕ, а шаги job'а крутятся + # внутри job-контейнера — его localhost хостовых портов не видит (поэтому + # localhost:8888 был недостижим). redis-сервис доступен по localhost лишь + # потому, что его сеть настраивает сам Gitea. Свою ноду подключаем в ту же + # сеть, что и job-контейнер, и адресуем по её IP на этой сети (надёжнее + # DNS — работает и на bridge); IP пробрасываем в env последующих шагов. + SELF=$(cat /etc/hostname) + NET=$(docker inspect "$SELF" --format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{"\n"}}{{end}}' | grep -v '^bridge$' | head -1) + [ -z "$NET" ] && NET=bridge + docker network connect "$NET" blockchain docker start blockchain + NODE_HOST=$(docker inspect blockchain --format "{{(index .NetworkSettings.Networks \"$NET\").IPAddress}}") + echo "Нода в сети '$NET' с IP $NODE_HOST" + echo "NODE_HOST=$NODE_HOST" >> "$GITHUB_ENV" sleep 3 - name: Wait for Chain API run: | @@ -113,7 +125,7 @@ jobs: # раннере nodeos поднимается медленно (наблюдали >6 мин до get_info), а # curl без --max-time подвисал на ещё-не-отвечающем порту и съедал бюджет. for i in $(seq 1 120); do - if curl -sf --max-time 2 http://localhost:8888/v1/chain/get_info > /dev/null 2>&1; then + if curl -sf --max-time 2 "http://${NODE_HOST}:8888/v1/chain/get_info" > /dev/null 2>&1; then echo "Chain API ready after $i attempts" exit 0 fi @@ -126,8 +138,8 @@ jobs: - run: pnpm --filter @coopenomics/parser2 test:integration env: REDIS_URL: redis://localhost:6379 - CHAIN_URL: http://localhost:8888 - SHIP_URL: ws://localhost:8080 + CHAIN_URL: http://${{ env.NODE_HOST }}:8888 + SHIP_URL: ws://${{ env.NODE_HOST }}:8080 - name: Show blockchain logs on failure if: failure() run: docker logs blockchain | tail -200