[@ant] fix(boot/Dockerfile): self-contained build без зависимости от mono-base
dicoop/mono-base тегается только под semver-релизы (build-containers.yaml триггерится на refs/tags/*), поэтому :dev/:testnet/:main отсутствуют — bootstrap workflow упал на pull этого тега. Перепилил Dockerfile: COPY весь workspace из текущего checkout'а + pnpm install --filter "@coopenomics/boot..." (тащит boot + транзитивные cooptypes/factory). .dockerignore отрезает node_modules/dist/blockchain-data. Workflow упростился — pull только dicoop/contracts, MONO_BASE_TAG больше не нужен. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,9 @@ name: Build bootstrap container
|
||||
#
|
||||
# Зависимости в hub:
|
||||
# dicoop/contracts:<branch> — пакет wasm/abi (build-contracts.yaml)
|
||||
# dicoop/mono-base:<branch> — runtime с pnpm/node + workspace (build-containers.yaml)
|
||||
#
|
||||
# Образ self-contained: собирает workspace из текущего checkout'а,
|
||||
# не зависит от dicoop/mono-base (который тегается только релиз-тегами).
|
||||
#
|
||||
# Секреты:
|
||||
# DOCKERHUB_USERNAME / DOCKERHUB_TOKEN
|
||||
@@ -60,17 +62,14 @@ jobs:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Pull source images
|
||||
run: |
|
||||
docker pull dicoop/contracts:${{ env.DOCKER_TAG }}
|
||||
docker pull dicoop/mono-base:${{ env.DOCKER_TAG }}
|
||||
- name: Pull contracts image
|
||||
run: docker pull dicoop/contracts:${{ env.DOCKER_TAG }}
|
||||
|
||||
- name: Build and push image
|
||||
run: |
|
||||
IMAGE="dicoop/bootcoop"
|
||||
docker build \
|
||||
--build-arg CONTRACTS_TAG=${{ env.DOCKER_TAG }} \
|
||||
--build-arg MONO_BASE_TAG=${{ env.DOCKER_TAG }} \
|
||||
--label "org.opencontainers.image.revision=${{ github.sha }}" \
|
||||
--label "org.opencontainers.image.created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
||||
-f components/boot/Dockerfile \
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
# build-contracts.yaml) и кладутся в /contracts. CLI находит их
|
||||
# через CONTRACTS_DIR.
|
||||
#
|
||||
# Образ self-contained: собирает свежий workspace из текущего
|
||||
# checkout'а, не зависит от dicoop/mono-base (который тегается
|
||||
# только под релиз-теги).
|
||||
#
|
||||
# Окружение:
|
||||
# CHAIN_URL — endpoint удалённой ноды (например http://node:8888)
|
||||
# CONTRACTS_DIR=/contracts (выставлено по умолчанию)
|
||||
@@ -34,11 +38,24 @@
|
||||
# restart: "no"
|
||||
|
||||
ARG CONTRACTS_TAG=latest
|
||||
ARG MONO_BASE_TAG=latest
|
||||
|
||||
FROM dicoop/contracts:${CONTRACTS_TAG} AS contracts
|
||||
|
||||
FROM dicoop/mono-base:${MONO_BASE_TAG} AS runtime
|
||||
FROM node:22-slim AS runtime
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# pnpm под lockfile v9.0 (как в publish-packages.yaml)
|
||||
RUN npm install -g pnpm@10.33.0
|
||||
|
||||
# Тащим весь workspace — pnpm-workspace.yaml ожидает components/*.
|
||||
# Можно было бы перепилить workspace под slim-образ, но размер не
|
||||
# критичен для bootstrap-контейнера, а так не дрейфит с корнем.
|
||||
COPY . .
|
||||
|
||||
# --filter "@coopenomics/boot..." ставит только boot и его транзитивные
|
||||
# workspace-deps (cooptypes, factory). --frozen-lockfile для воспроизводимости.
|
||||
RUN pnpm install --frozen-lockfile --filter "@coopenomics/boot..."
|
||||
|
||||
# Контракты из готового артефакта в flat-layout
|
||||
# (configs/contracts.ts читает из CONTRACTS_DIR).
|
||||
@@ -48,7 +65,5 @@ ENV CONTRACTS_DIR=/contracts
|
||||
WORKDIR /app/components/boot
|
||||
|
||||
# По умолчанию sideboot режим — против внешней ноды, без docker-управления.
|
||||
# Переопределить можно: docker run dicoop/bootcoop:dev pnpm run boot:remote
|
||||
# или подменив CMD/entrypoint в compose.
|
||||
ENTRYPOINT ["pnpm", "run"]
|
||||
CMD ["boot:remote"]
|
||||
|
||||
Reference in New Issue
Block a user