#!/bin/sh # ════════════════════════════════════════════════════════════════════════════ # Сборка образа dsh из вендоренного исходника (upstream/) в локальный Docker. # Пин сообщества (latestSupportedDsh) в dev-режиме сборки не действует — версию # задаём явно. Результат тегируется в реестр archeon. # # Использование: # scripts/build-image.sh # версия = npm dist-tag latest # scripts/build-image.sh 0.2.0-rc.2 # конкретная версия # scripts/build-image.sh 0.2.0-rc.2 --push # + docker push в реестр # ════════════════════════════════════════════════════════════════════════════ set -eu cd "$(dirname "$0")/.." VERSION=${1:-} PUSH=0 [ "${2:-}" = --push ] && PUSH=1 if [ -z "$VERSION" ] || [ "$VERSION" = latest ]; then VERSION=$(curl -fsS https://registry.npmjs.org/-/package/@deepseek-ai%2Fdsh/dist-tags | sed -n 's/.*"latest":"\([^"]*\)".*/\1/p') [ -n "$VERSION" ] || { echo "не удалось определить npm latest" >&2; exit 1; } fi IMAGE=${DSH_IMAGE:-gitea.archeon.io/archeon/dsh} REPO=${IMAGE%%:*} echo "=== Сборка $REPO:$VERSION (DSH_VERSION=$VERSION)" DOCKER_BUILDKIT=1 docker build \ --build-arg DSH_VERSION="$VERSION" \ -t "$REPO:$VERSION" \ -t "$REPO:latest" \ upstream/ echo "=== Проверка: версия внутри образа" docker run --rm --entrypoint /bin/sh "$REPO:$VERSION" \ -c "grep -o '\"version\":\"[^\"]*\"' /opt/dsh-platform/seed/pristine/*/package.json | head -1" if [ "$PUSH" = 1 ]; then echo "=== Push в реестр" docker push "$REPO:$VERSION" docker push "$REPO:latest" fi echo "Готово: $REPO:$VERSION (+ latest). Обновить стенд: docker compose -p dsh pull && docker compose -p dsh up -d"