From 1bfceeb1513bc19b7d293749189fae8423741cef Mon Sep 17 00:00:00 2001 From: DevOps-spb-ru Date: Tue, 22 Sep 2026 11:05:59 +0300 Subject: [PATCH 1/4] Add: CI guard for the Go version (go.mod vs Dockerfile) - ci.yml: new step in the lint job compares the go directive in go.mod with ARG GO_IMAGE in the Dockerfile. An image older than the declared toolchain fails (GOTOOLCHAIN=local makes "go mod download" fail while building the image), a newer one only warns, so the pin can still be finished in a second PR. Dependabot bumps these two files in separate PRs (gomod and docker), and the drift already reached main once - CHANGELOG (cio, sqlbrc): Unreleased entries for the new check --- .github/workflows/ci.yml | 22 ++++++++++++++++++++++ Container image optimizer/CHANGELOG.md | 6 +++++- SQL backup restore clone/CHANGELOG.md | 6 +++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1186dbd..06feae6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,6 +40,28 @@ jobs: with: go-version-file: ${{ matrix.dir }}/go.mod cache-dependency-path: ${{ matrix.dir }}/go.sum + # Версия Go живёт в двух файлах: директива go в go.mod и ARG GO_IMAGE в Dockerfile. + # Dependabot обновляет их разными PR (gomod и docker), а в образе сборки выключен + # автоподбор тулчейна (GOTOOLCHAIN=local): образ старее объявленной версии роняет + # сборку образа («go mod download» с кодом 1). Проверка бесплатная и падает раньше линта. + - name: Версия Go (go.mod ↔ Dockerfile) + working-directory: ${{ matrix.dir }} + run: | + declared=$(sed -n 's/^go \([0-9][0-9.]*\)$/\1/p' go.mod) + image=$(sed -n 's/^ARG GO_IMAGE=golang:\([0-9][0-9.]*\).*/\1/p' Dockerfile) + if [ -z "$declared" ] || [ -z "$image" ]; then + echo "::error::не удалось прочитать версию Go (go.mod: '$declared', GO_IMAGE: '$image')" + exit 1 + fi + if [ "$declared" != "$image" ]; then + if [ "$(printf '%s\n%s\n' "$declared" "$image" | sort -V | head -n1)" = "$image" ]; then + echo "::error file=${{ matrix.dir }}/Dockerfile::образ сборки golang:$image старее объявленной в go.mod версии $declared — go mod download упадёт (в образе GOTOOLCHAIN=local)" + exit 1 + fi + echo "::warning file=${{ matrix.dir }}/Dockerfile::go.mod объявляет go $declared, а образ сборки — golang:$image: синхронизируйте версии" + fi + echo "версия Go: go.mod $declared, образ golang:$image" + - name: golangci-lint uses: golangci/golangci-lint-action@ba0d7d2ec06a0ea1cb5fa41b2e4a3ab91d21278a # v9.3.0 with: diff --git a/Container image optimizer/CHANGELOG.md b/Container image optimizer/CHANGELOG.md index 4be8dd7..4e8d78d 100644 --- a/Container image optimizer/CHANGELOG.md +++ b/Container image optimizer/CHANGELOG.md @@ -20,7 +20,11 @@ в `go.mod`. Патч `1.25.14` не соответствовал требованиям зависимостей и оставлял в стандартной библиотеке достижимые уязвимости; - `govulncheck` обновлён до `v1.8.0` в CI и в документации — его модуль требует Go ≥ 1.26, что теперь - соответствует `go.mod`. + соответствует `go.mod`; +- версия Go в `go.mod` сверяется с `ARG GO_IMAGE` из `Dockerfile` — в job `lint` (`ci.yml`) и в локальном + скрипте проверок. Dependabot обновляет эти файлы разными PR, а образ сборки старше объявленного + тулчейна роняет сборку образа с невнятной ошибкой `go mod download`: проверка падает раньше линта + и называет оба файла. ## [0.2.0] - 2026-09-21 diff --git a/SQL backup restore clone/CHANGELOG.md b/SQL backup restore clone/CHANGELOG.md index 1f78c08..6fd1bf9 100644 --- a/SQL backup restore clone/CHANGELOG.md +++ b/SQL backup restore clone/CHANGELOG.md @@ -19,7 +19,11 @@ с образом сборки ломало сборку образа (`go mod download` падал с кодом 1), а патч `1.26.0` оставлял в стандартной библиотеке достижимые уязвимости (`crypto/tls`, `encoding/asn1`, `net/http`); - `govulncheck` обновлён до `v1.8.0` в CI и в документации — его модуль требует Go ≥ 1.26, что теперь - соответствует `go.mod`. + соответствует `go.mod`; +- версия Go в `go.mod` сверяется с `ARG GO_IMAGE` из `Dockerfile` — в job `lint` (`ci.yml`) и в локальном + скрипте проверок. Dependabot обновляет эти файлы разными PR, а образ сборки старше объявленного + тулчейна роняет сборку образа с невнятной ошибкой `go mod download`: проверка падает раньше линта + и называет оба файла. ## [0.3.0] - 2026-09-21 From 634dbc5bd0de2edfbe20d40535a0d11f725a0d5e Mon Sep 17 00:00:00 2001 From: DevOps-spb-ru Date: Tue, 22 Sep 2026 11:12:45 +0300 Subject: [PATCH 2/4] Update: move CHANGELOG entries from Unreleased into the next version sections - cio: entries now live under "## [0.3.0] - Unreleased", comparison link goes from cio-v0.2.0 to HEAD - sqlbrc: entries now live under "## [0.4.0] - Unreleased", comparison link added from sqlbrc-v0.3.0 to HEAD The version, the date and the tag in the comparison link are substituted when the release is tagged --- Container image optimizer/CHANGELOG.md | 4 ++-- SQL backup restore clone/CHANGELOG.md | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Container image optimizer/CHANGELOG.md b/Container image optimizer/CHANGELOG.md index 4e8d78d..7ea2d1a 100644 --- a/Container image optimizer/CHANGELOG.md +++ b/Container image optimizer/CHANGELOG.md @@ -4,7 +4,7 @@ нумерация версий — [SemVer](https://semver.org/lang/ru/); схема тегов (`cio-vX.Y.Z`) и порядок релиза — в корневом [CONTRIBUTING.md](../CONTRIBUTING.md). Указатель по всем инструментам — [../CHANGELOG.md](../CHANGELOG.md). -## [Unreleased] +## [0.3.0] - Unreleased ### Исправлено @@ -127,6 +127,6 @@ - Размер слоя берётся из метаданных Docker, а не из распакованного файлового дерева. - Trivy требует доступа к сети для обновления базы уязвимостей; без сети отчёт по слоям всё равно строится. -[Unreleased]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/cio-v0.2.0...HEAD +[0.3.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/cio-v0.2.0...HEAD [0.2.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/cio-v0.1.0...cio-v0.2.0 [0.1.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/releases/tag/cio-v0.1.0 diff --git a/SQL backup restore clone/CHANGELOG.md b/SQL backup restore clone/CHANGELOG.md index 6fd1bf9..d2e2798 100644 --- a/SQL backup restore clone/CHANGELOG.md +++ b/SQL backup restore clone/CHANGELOG.md @@ -4,7 +4,7 @@ нумерация версий — [SemVer](https://semver.org/lang/ru/); схема тегов (`sqlbrc-vX.Y.Z`) и порядок релиза — в корневом [CONTRIBUTING.md](../CONTRIBUTING.md). Указатель по всем инструментам — [../CHANGELOG.md](../CHANGELOG.md). -## [Unreleased] +## [0.4.0] - Unreleased ### Исправлено @@ -175,6 +175,7 @@ - PITR и инкрементальные бэкапы не поддерживаются: план — логический дамп `pg_dump --format custom`. - Сервис рассчитан на один сервер (PostgreSQL и каталог бэкапов рядом), подключение через локальный сокет. +[0.4.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/sqlbrc-v0.3.0...HEAD [0.3.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/sqlbrc-v0.2.0...sqlbrc-v0.3.0 [0.2.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/sqlbrc-v0.1.0...sqlbrc-v0.2.0 [0.1.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/releases/tag/sqlbrc-v0.1.0 \ No newline at end of file From 4fb6318b1ca985e104f77d7f0bf70603e013f54a Mon Sep 17 00:00:00 2001 From: DevOps-spb-ru Date: Tue, 22 Sep 2026 11:13:54 +0300 Subject: [PATCH 3/4] Docs: keep the release checklist in sync with the changelog sections CONTRIBUTING.md still told to rename "## [Unreleased]" and to add an empty one back, but unreleased entries now live under "## [X.Y.Z] - Unreleased" in both changelogs: the release step replaces the marker with the date and starts the section of the next version --- CONTRIBUTING.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f14cabd..cfdfa1f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -120,9 +120,10 @@ go build -trimpath -o bin/sqlbrc.exe ./cmd/sqlbrc # для sqlbrc (.exe — т 1. Убедиться, что CI на `main` зелёный: `Линт`, `Уязвимости зависимостей`, `Тесты` и `Сборка` для нужного инструмента, а если у него есть контейнерная поставка — ещё и `Docker-образ`. 2. В `CHANGELOG.md` инструмента (`Container image optimizer/CHANGELOG.md` или - `SQL backup restore clone/CHANGELOG.md`) переименовать `## [Unreleased]` в `## [X.Y.Z] - ГГГГ-ММ-ДД` - (например, `## [0.1.0] - 2026-10-01`), сразу добавить новый пустой `## [Unreleased]` - и ссылки сравнения в конце файла — на теги того же инструмента. + `SQL backup restore clone/CHANGELOG.md`) в заголовке раздела `## [X.Y.Z] - Unreleased` заменить + пометку `Unreleased` на дату выпуска (например, `## [0.1.0] - 2026-10-01`), сразу завести новую + секцию следующей версии с пометкой `- Unreleased` и ссылки сравнения в конце файла поправить + на теги того же инструмента. 3. Влить изменения в `main` и поставить аннотированный тег: `git tag -a <инструмент>-vX.Y.Z -m "<инструмент> X.Y.Z"`. 4. Отправить тег: `git push origin <инструмент>-vX.Y.Z`. @@ -190,7 +191,8 @@ docker push ghcr.io/devops-spb-ru/cio:0.1.0 строку в корневом `CHANGELOG.md`, строку в `SECURITY.md` (поддерживаемые версии, область, «вне области»), ссылку на README инструмента в `.github/ISSUE_TEMPLATE/config.yml` и варианты инструмента в формах issue. -6. Заведите `CHANGELOG.md` в каталоге инструмента (раздел `## [Unreleased]`), добавьте модуль +6. Заведите `CHANGELOG.md` в каталоге инструмента (раздел `## [X.Y.Z] - Unreleased`, где `X.Y.Z` — + версия следующего релиза, а дата подставляется при выпуске), добавьте модуль Go, а при контейнерной поставке — и образы из `Dockerfile` в `.github/dependabot.yml`. ## Безопасность From b1059810d375138a6b3463498c1262b51a2951c9 Mon Sep 17 00:00:00 2001 From: DevOps-spb-ru Date: Tue, 22 Sep 2026 11:17:04 +0300 Subject: [PATCH 4/4] Update: CHANGELOG.md --- SQL backup restore clone/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQL backup restore clone/CHANGELOG.md b/SQL backup restore clone/CHANGELOG.md index d2e2798..435b718 100644 --- a/SQL backup restore clone/CHANGELOG.md +++ b/SQL backup restore clone/CHANGELOG.md @@ -178,4 +178,4 @@ [0.4.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/sqlbrc-v0.3.0...HEAD [0.3.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/sqlbrc-v0.2.0...sqlbrc-v0.3.0 [0.2.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/compare/sqlbrc-v0.1.0...sqlbrc-v0.2.0 -[0.1.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/releases/tag/sqlbrc-v0.1.0 \ No newline at end of file +[0.1.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/releases/tag/sqlbrc-v0.1.0