From 2895d41383086ad0b5d377e4659c5be756e61764 Mon Sep 17 00:00:00 2001 From: coopops Date: Tue, 26 May 2026 13:37:12 +0000 Subject: [PATCH 1/2] =?UTF-8?q?ci:=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B0=D1=82=D1=8C=20=D0=BD=D0=BE=D0=B4=D1=83=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=B5=D1=82=D1=8C=20job-=D0=BA=D0=BE=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B5=D1=80=D0=B0,=20=D0=B0=D0=B4=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BF=D0=BE=20IP=20(Din?= =?UTF-8?q?D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit После genesis-фикса нода стартует, но wait-loop стучал в localhost:8888 из job-контейнера, а -p публикует порт на ХОСТЕ → недостижимо (redis работал по localhost лишь потому, что его сеть настраивает Gitea). Убрал -p, подключаю контейнер ноды в сеть самого job-контейнера и адресую по её IP (надёжнее DNS, работает и на bridge); IP пробрасываю в CHAIN_URL/SHIP_URL последующих шагов через GITHUB_ENV. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/ci.yml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) 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 -- 2.52.0 From de7804580c7219389f4c78c2245933c1705f971b Mon Sep 17 00:00:00 2001 From: coopops Date: Tue, 26 May 2026 14:13:05 +0000 Subject: [PATCH 2/2] =?UTF-8?q?ci:=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=E2=80=94=20Redis=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=20(redis:6379),=20=D0=BD=D0=B5=20localhost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В Gitea/act job крутится в контейнере, а services: — контейнеры-соседи в сети job'а, доступные по имени сервиса. REDIS_URL=redis://localhost:6379 давал ECONNREFUSED 127.0.0.1:6379 (localhost сработал бы на GitHub-хостед раннере, не в DinD) — из-за этого интеграция и не доезжала до тестов. Нода уже достижима (Chain API ready after 1 attempts). Co-Authored-By: Claude Opus 4.7 --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17d6b4d..ce8740d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -137,7 +137,10 @@ jobs: exit 1 - run: pnpm --filter @coopenomics/parser2 test:integration env: - REDIS_URL: redis://localhost:6379 + # В Gitea/act job крутится в контейнере, а services: — контейнеры-соседи + # в той же сети, доступные ПО ИМЕНИ СЕРВИСА (redis), а не через localhost + # (localhost сработал бы на GitHub-хостед раннере, но не в DinD). + REDIS_URL: redis://redis:6379 CHAIN_URL: http://${{ env.NODE_HOST }}:8888 SHIP_URL: ws://${{ env.NODE_HOST }}:8080 - name: Show blockchain logs on failure -- 2.52.0