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:
@@ -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})"
|
||||
Reference in New Issue
Block a user