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/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`. ## Безопасность diff --git a/Container image optimizer/CHANGELOG.md b/Container image optimizer/CHANGELOG.md index 4be8dd7..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 ### Исправлено @@ -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 @@ -123,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 1f78c08..435b718 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 ### Исправлено @@ -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 @@ -171,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 +[0.1.0]: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/releases/tag/sqlbrc-v0.1.0