diff --git a/.github/workflows/release-image.yml b/.github/workflows/release-image.yml index ba53f49..347c531 100644 --- a/.github/workflows/release-image.yml +++ b/.github/workflows/release-image.yml @@ -65,10 +65,13 @@ jobs: fi # --sbom и --provenance кладут рядом с образом attestations: видно, # из каких исходников и как собран образ. + # Дату сборки передаём так же, как в сборке бинарей: без неё бинарь + # в образе печатает «сборка unknown», и сверить образ с релизом нечем. docker buildx build \ --platform linux/amd64,linux/arm64 \ --build-arg VERSION="$version" \ --build-arg REVISION="${GITHUB_SHA}" \ + --build-arg DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --provenance=true \ --sbom=true \ "${tags[@]}" \ diff --git a/Container image optimizer/CHANGELOG.md b/Container image optimizer/CHANGELOG.md index 133b03b..5c54f4e 100644 --- a/Container image optimizer/CHANGELOG.md +++ b/Container image optimizer/CHANGELOG.md @@ -6,7 +6,12 @@ ## [Unreleased] -Изменений пока нет. +### Исправлено + +- образ `cio` собирался без коммита и даты сборки: `Dockerfile` подставлял только `main.version`, + а `release-image.yml` не передавал `--build-arg DATE`, поэтому `cio --version` внутри образа + печатал «commit none, сборка unknown», и сверить контейнер с бинарём из релиза было нечем. + Теперь значения подставляются так же, как в релизных бинарях. ## [0.2.0] - 2026-09-21 diff --git a/Container image optimizer/Dockerfile b/Container image optimizer/Dockerfile index e9d7630..90614f6 100644 --- a/Container image optimizer/Dockerfile +++ b/Container image optimizer/Dockerfile @@ -8,7 +8,8 @@ # (--group-add 0 в Docker Desktop, gid группы docker в Linux — см. README). # # Версия попадает в бинарь и в OCI-метки образа: -# docker build --build-arg VERSION=0.1.0 --build-arg REVISION=$(git rev-parse HEAD) -t cio:0.1.0 . +# docker build --build-arg VERSION=0.1.0 --build-arg REVISION=$(git rev-parse HEAD) \ +# --build-arg DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) -t cio:0.1.0 . # Патч Go фиксируется вместе с go.mod: внутри образа выключен автоподбор тулчейна # (GOTOOLCHAIN=local), поэтому образ обязан содержать тулчейн не старше объявленного @@ -21,13 +22,19 @@ ARG TRIVY_IMAGE=aquasec/trivy:0.74.0 ARG RUNTIME_IMAGE=alpine:3.21 FROM ${GO_IMAGE} AS builder +# Те же значения, что подставляют Makefile и релизный workflow: без commit и date +# `cio --version` внутри образа печатает «commit none, сборка unknown». ARG VERSION=dev +ARG REVISION=none +ARG DATE=unknown WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY cmd ./cmd COPY internal ./internal -RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w -X main.version=${VERSION}" -o /out/cio ./cmd/cio +RUN CGO_ENABLED=0 go build -trimpath \ + -ldflags="-s -w -X main.version=${VERSION} -X main.commit=${REVISION} -X main.date=${DATE}" \ + -o /out/cio ./cmd/cio # Trivy из официального образа: сканирование работает и внутри контейнера. FROM ${TRIVY_IMAGE} AS trivy diff --git a/Container image optimizer/README.md b/Container image optimizer/README.md index b82662a..dc11b94 100644 --- a/Container image optimizer/README.md +++ b/Container image optimizer/README.md @@ -428,8 +428,14 @@ docker run --rm --group-add 0 -v /var/run/docker.sock:/var/run/docker.sock ghcr. Версия Trivy внутри образа фиксирована и переопределяется на сборке (`--build-arg TRIVY_IMAGE=...`), поэтому обновление сканера не меняет сборку неожиданно. Версия и ревизия исходников видны и снаружи — в метках `org.opencontainers.image.version` и `org.opencontainers.image.revision` -(`docker image inspect`), и внутри — в выводе `cio --version`. -Локальная сборка с версией: `docker build --build-arg VERSION=0.2.0 -t cio:0.2.0 .`. +(`docker image inspect`), и внутри — в выводе `cio --version`: релизный workflow передаёт +`--build-arg VERSION`, `REVISION` и `DATE`, поэтому в образе видны версия, коммит и дата сборки. +Локальная сборка с теми же значениями: + +```bash +docker build --build-arg VERSION=0.2.0 --build-arg REVISION=$(git rev-parse --short HEAD) \ + --build-arg DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) -t cio:0.2.0 . +``` ## Ограничения diff --git a/SQL backup restore clone/CHANGELOG.md b/SQL backup restore clone/CHANGELOG.md index 498d0be..99513b3 100644 --- a/SQL backup restore clone/CHANGELOG.md +++ b/SQL backup restore clone/CHANGELOG.md @@ -4,6 +4,14 @@ нумерация версий — [SemVer](https://semver.org/lang/ru/); схема тегов (`sqlbrc-vX.Y.Z`) и порядок релиза — в корневом [CONTRIBUTING.md](../CONTRIBUTING.md). Указатель по всем инструментам — [../CHANGELOG.md](../CHANGELOG.md). +## [Unreleased] + +### Исправлено + +- образ `sqlbrc` собирался без даты сборки: `release-image.yml` не передавал `--build-arg DATE`, + поэтому `sqlbrc --version` из образа печатал «сборка unknown», и сверить контейнер с бинарём + из релиза было нечем. Дата подставляется так же, как в релизных бинарях. + ## [0.3.0] - 2026-09-21 Веб-интерфейс и API: команда `serve` с теми же операциями, что и в CLI. diff --git a/SQL backup restore clone/README.md b/SQL backup restore clone/README.md index 7b927af..b382094 100644 --- a/SQL backup restore clone/README.md +++ b/SQL backup restore clone/README.md @@ -245,6 +245,8 @@ docker compose -f deploy/compose.example.yaml up -d --build Стенд из `deploy/compose.example.yaml` поднимает PostgreSQL 15 и сервис рядом, публикует интерфейс только на `127.0.0.1:8088` и хранит бэкапы и журнал задач в томах. Рабочие `deploy/.env` и `deploy/config.yaml` в Git не попадают: в них пароль и настройки стенда. +В образе подставлены те же версия, коммит и дата сборки, что и в бинаре из релиза +(`sqlbrc --version` внутри контейнера), поэтому образ можно сверить с релизом. ## Конфигурация