revert(boot): откат отдельного dicoop/bootstrap образа

Boot — это и есть бутстрап. Дубликат через отдельный образ создаёт
второй workflow и две точки сборки там, где для testnet/prod достаточно
запустить existing pnpm -F @coopenomics/boot run boot:remote внутри
dicoop/mono-base:<tag>, который уже собирается через build-containers.yaml.

Что остаётся в dev (полезное из предыдущих коммитов):
- boot:remote команда — без dockerode, для сценария когда нода
  поднята отдельным сервисом docker-compose.
- CONTRACTS_DIR env-driven path в configs/contracts.ts — позволяет
  монтировать dicoop/contracts:<tag> как volume.
- "build" script в boot/package.json для unbuild.

Удалено:
- components/boot/docker/ (Dockerfile + entrypoint + bootstrap.package.json
  + bootstrap.pnpm-workspace.yaml)
- .github/workflows/build-bootstrap.yaml

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
coopops
2026-04-30 13:07:35 +00:00
parent 01c6a2689a
commit 30af7cd90e
5 changed files with 0 additions and 362 deletions
-141
View File
@@ -1,141 +0,0 @@
name: Build bootstrap container
# Сборка и публикация образа `dicoop/bootstrap` (DockerHub) —
# one-shot оркестратора первичного деплоя контрактов на KE-узел
# (см. `components/boot/docker/Dockerfile`). Образ потребляется
# в docker-compose рядом с `dicoop/blockchain_v5.1.1`-нодой как
# `depends_on: ke-node: service_healthy`.
#
# Триггер — push в одну из веток-окружений (dev / testnet / main).
# Маппинг по convention `feedback_branch_convention`:
#
# dev → tag=dev, CONTRACTS_TAG=dev
# testnet → tag=testnet, CONTRACTS_TAG=testnet
# main → tag=main + latest, CONTRACTS_TAG=main
#
# Зависимость: образ `dicoop/contracts:<tag>` должен существовать
# (он публикуется через `build-contracts.yaml` отдельным workflow'ом).
# Если contracts ещё не собраны для целевой ветки — `docker build`
# упадёт на multi-stage `FROM dicoop/contracts:${CONTRACTS_TAG}`.
# Пересборка триггерится через `workflow_dispatch` после ручного
# обновления contracts.
#
# Path-фильтр на `components/boot/**`, `components/cooptypes/**`,
# `components/factory/**` (boot их импортирует через workspace) и
# на сам Dockerfile/workflow. Изменения контрактов сами по себе
# bootstrap не триггерят — они идут через `dicoop/contracts:<tag>`,
# и для подхвата обновлённого образа нужно либо пушнуть ветку
# заново, либо запустить workflow вручную.
#
# Секреты:
# DOCKERHUB_USERNAME / DOCKERHUB_TOKEN — публикация в dicoop/*
# TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID — уведомления
on:
push:
branches: [dev, testnet, main]
paths:
- 'components/boot/**'
- 'components/cooptypes/**'
- 'components/factory/**'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- '.github/workflows/build-bootstrap.yaml'
workflow_dispatch:
inputs:
contracts_tag:
description: 'Тег dicoop/contracts (override; default = тег ветки)'
required: false
default: ''
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Determine docker tag and contracts tag
run: |
case "${{ github.ref_name }}" in
main)
echo "DOCKER_TAG=main" >> $GITHUB_ENV
echo "EXTRA_TAG=latest" >> $GITHUB_ENV
echo "CONTRACTS_TAG=main" >> $GITHUB_ENV
;;
testnet)
echo "DOCKER_TAG=testnet" >> $GITHUB_ENV
echo "EXTRA_TAG=" >> $GITHUB_ENV
echo "CONTRACTS_TAG=testnet" >> $GITHUB_ENV
;;
dev)
echo "DOCKER_TAG=dev" >> $GITHUB_ENV
echo "EXTRA_TAG=" >> $GITHUB_ENV
echo "CONTRACTS_TAG=dev" >> $GITHUB_ENV
;;
*)
echo "Unsupported branch ${{ github.ref_name }}" >&2
exit 1
;;
esac
# workflow_dispatch override
if [ -n "${{ github.event.inputs.contracts_tag }}" ]; then
echo "CONTRACTS_TAG=${{ github.event.inputs.contracts_tag }}" >> $GITHUB_ENV
fi
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Pull base contracts image (sanity check)
run: |
docker pull "dicoop/contracts:${CONTRACTS_TAG}"
docker run --rm "dicoop/contracts:${CONTRACTS_TAG}" list | head -25
- name: Build and push image
run: |
IMAGE="dicoop/bootstrap"
docker build \
--build-arg "CONTRACTS_TAG=${CONTRACTS_TAG}" \
--label "org.opencontainers.image.revision=${{ github.sha }}" \
--label "org.opencontainers.image.created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--label "build.contracts_tag=${CONTRACTS_TAG}" \
-t "${IMAGE}:${DOCKER_TAG}" \
-f components/boot/docker/Dockerfile \
.
docker push "${IMAGE}:${DOCKER_TAG}"
if [ -n "${EXTRA_TAG}" ]; then
docker tag "${IMAGE}:${DOCKER_TAG}" "${IMAGE}:${EXTRA_TAG}"
docker push "${IMAGE}:${EXTRA_TAG}"
fi
# SHA-pinned tag для воспроизводимости (тот же подход, что и
# в build-contracts.yaml — позволяет запинить bootstrap к
# конкретному коммиту, а не двигающемуся branch-тегу).
SHORT_SHA="${GITHUB_SHA::7}"
docker tag "${IMAGE}:${DOCKER_TAG}" "${IMAGE}:${DOCKER_TAG}-${SHORT_SHA}"
docker push "${IMAGE}:${DOCKER_TAG}-${SHORT_SHA}"
- name: Verify pushed image
run: |
IMAGE="dicoop/bootstrap"
docker run --rm "${IMAGE}:${DOCKER_TAG}" verify
- name: Telegram notify success
if: ${{ success() }}
run: |
curl -s -X POST https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage \
-d chat_id=${{ secrets.TELEGRAM_CHAT_ID }} \
-d text="✅ [GITHUB MONO] dicoop/bootstrap:${DOCKER_TAG} (contracts=${CONTRACTS_TAG}, sha=${GITHUB_SHA::7})"
- name: Telegram notify failure
if: ${{ failure() }}
run: |
curl -s -X POST https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage \
-d chat_id=${{ secrets.TELEGRAM_CHAT_ID }} \
-d text="❌ [GITHUB MONO] Ошибка сборки dicoop/bootstrap на ${{ github.ref_name }} (sha=${GITHUB_SHA::7})"