Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Баг-репорт
description: Сообщить о проблеме в утилите, CI или документации
description: Сообщить о проблеме в инструменте, CI или документации
title: "[Bug]: "
labels: ["bug"]
body:
Expand All @@ -13,6 +13,8 @@ body:
label: Где проблема
options:
- Container image optimizer (cio)
- SQL backup, restore and clone (sqlbrc)
- Новый инструмент или общая инфраструктура
- CI / workflows
- Документация
validations:
Expand All @@ -21,8 +23,8 @@ body:
id: versions
attributes:
label: Версии
description: Коммит или тег, а также версии Go, Docker и Trivy
placeholder: "main @ a1b2c3d, Go 1.25.14, Docker 29.8.0, Trivy 0.74.0"
description: Коммит или тег, версия инструмента (`cio --version`, `sqlbrc --version`) и окружение
placeholder: "main @ a1b2c3d, cio 0.2.0, Go 1.25.14, Docker 29.8.0, Trivy 0.74.0"
validations:
required: true
- type: textarea
Expand All @@ -33,6 +35,11 @@ body:
1. go build -o bin/cio.exe ./cmd/cio
2. ./bin/cio.exe analyze postgres:15-alpine
3. ...

Для sqlbrc:
1. go build -o bin/sqlbrc.exe ./cmd/sqlbrc
2. ./bin/sqlbrc.exe doctor --config deploy/config.example.yaml
3. ...
validations:
required: true
- type: textarea
Expand Down
8 changes: 7 additions & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ blank_issues_enabled: false
contact_links:
- name: Правила разработки
url: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/blob/main/CONTRIBUTING.md
about: Как запускать проверки, оформлять коммиты и pull request
about: Как запускать проверки, оформлять коммиты и pull request, как добавить новый инструмент
- name: Политика безопасности
url: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/blob/main/SECURITY.md
about: Поддерживаемые версии всех инструментов и порядок сообщения об уязвимостях
- name: Документация Container image optimizer
url: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/tree/main/Container%20image%20optimizer
about: Флаги CLI, правила анализа и ограничения утилиты cio
- name: Документация SQL backup, restore and clone
url: https://github.com/DevOps-spb-ru/DevOps-Engineer-Tools/tree/main/SQL%20backup%20restore%20clone
about: Команды, конфигурация, поставка и веб-интерфейс сервиса sqlbrc
4 changes: 3 additions & 1 deletion .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ body:
label: Что улучшаем
options:
- Container image optimizer (cio)
- Новое правило анализа образа
- SQL backup, restore and clone (sqlbrc)
- Новый инструмент или общая инфраструктура
- Новое правило анализа образа (cio)
- CI / workflows
- Документация
validations:
Expand Down
9 changes: 6 additions & 3 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

## Что сделано

<!-- Кратко: какой инструмент/файл затронут и зачем. -->
<!-- Кратко: какой инструмент/файл затронут и зачем. Новый инструмент — каталог и что добавлено
в матрицы workflow, документы и dependabot.yml (чеклист в CONTRIBUTING.md). -->

## Тип изменения

Expand All @@ -14,14 +15,16 @@

## Как проверено

<!-- Отметьте выполненное; команды — из CONTRIBUTING.md -->
<!-- Отметьте выполненное; команды выполняются в каталоге затронутого инструмента
(`Container image optimizer` или `SQL backup restore clone`); полный список — в CONTRIBUTING.md -->

- [ ] `gofmt -l cmd internal` — пусто
- [ ] `go vet ./...`
- [ ] `go test ./... -count=1`
- [ ] `golangci-lint run ./...` (или `.work/lint-docker.ps1`)
- [ ] Проверка на живом Docker (`.work/smoke-cio.ps1`)
- [ ] Проверка на живом окружении: `cio` — `.work/smoke-cio.ps1`; `sqlbrc` — `.work/smoke-container.ps1` или `.work/smoke-serve.ps1`
- [ ] Обновлены `README.md` и `CHANGELOG.md` затронутого инструмента
- [ ] Если затронуты CI, зависимости или документы репозитория — обновлены матрицы workflow, `SECURITY.md`, `README.md`
- [ ] При релизе: секция `CHANGELOG.md` совпадает с тегом `<инструмент>-vX.Y.Z`

## Влияние и риски
Expand Down
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# CHANGELOG

Общего журнала в корне нет: у инструментов независимые версии и теги (`<инструмент>-vX.Y.Z`),
поэтому история изменений ведётся в каталоге каждого инструмента.
поэтому история изменений ведётся в каталоге каждого инструмента. Этот файл — указатель: строка
в таблице появляется, когда в репозитории добавляется новый инструмент (чеклист — в
[CONTRIBUTING.md](CONTRIBUTING.md)).

| Инструмент | История изменений |
| --- | --- |
Expand All @@ -10,4 +12,5 @@

Формат разделов — [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/), нумерация версий —
[SemVer](https://semver.org/lang/ru/); правила версионирования и порядок релиза — в
[CONTRIBUTING.md](CONTRIBUTING.md), состав инструментов — в [README.md](README.md).
[CONTRIBUTING.md](CONTRIBUTING.md), состав инструментов — в [README.md](README.md), политика
безопасности для всех инструментов — в [SECURITY.md](SECURITY.md).
53 changes: 35 additions & 18 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@

## Локальная проверка перед пушем

Всё сразу (рекомендуется):
Всё сразу (рекомендуется) — скрипт затронутого инструмента:

```powershell
powershell -ExecutionPolicy Bypass -File .work/build-and-test.ps1
powershell -ExecutionPolicy Bypass -File .work/build-and-test.ps1 # cio
powershell -ExecutionPolicy Bypass -File .work/build-and-test-sqlbrc.ps1 # sqlbrc
```

По шагам (в каталоге нужного инструмента: `cd "Container image optimizer"` или
Expand Down Expand Up @@ -58,6 +59,9 @@ go build -trimpath -o bin/sqlbrc.exe ./cmd/sqlbrc # для sqlbrc (.exe — т
отчёт по проверкам готовности сервера; код возврата 1 означает «есть ошибки», в том числе
«на этой ОС проверить не удалось» (например, на Windows).

Полная проверка поставки `sqlbrc` в контейнере (нужны Docker и compose): `.work/smoke-container.ps1` —
образ собирается, запускается от непривилегированного пользователя и работает по `postgres.mode: tcp`.

## Definition of Done

1. `gofmt` без замечаний, `go vet ./...` и `go test ./...` проходят.
Expand Down Expand Up @@ -106,14 +110,15 @@ go build -trimpath -o bin/sqlbrc.exe ./cmd/sqlbrc # для sqlbrc (.exe — т
| удаление или переименование флага, изменение формата JSON | в `0.x` — minor, начиная с `1.0.0` — major |

Версия попадает в бинарь на этапе сборки (`-ldflags "-X main.version=..."`, см. `Makefile`),
поэтому `--version` печатает версию, коммит и дату сборки (у `sqlbrc` — тем же способом, цель
`version` в его `Makefile`), а образ `cio` получает те же значения
в метках `org.opencontainers.image.*`.
поэтому `--version` печатает версию, коммит и дату сборки — у обоих инструментов (цель `version`
в `Makefile`). Образ получает те же значения build-аргументами `--build-arg VERSION`, `REVISION`
и `DATE` (их передаёт `release-image.yml`), а `cio` — ещё и в метках `org.opencontainers.image.*`.
Значения в образе видны в `--version` внутри контейнера: без `DATE` там было бы «сборка unknown».

### Чеклист релиза

1. Убедиться, что CI на `main` зелёный: `Линт`, `Уязвимости зависимостей`, `Тесты` и `Сборка`
для нужного инструмента (для `cio` — ещё и `Docker-образ`).
для нужного инструмента, а если у него есть контейнерная поставка — ещё и `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]`
Expand Down Expand Up @@ -153,7 +158,8 @@ go build -trimpath -o bin/sqlbrc.exe ./cmd/sqlbrc # для sqlbrc (.exe — т

```bash
echo "$TOKEN" | docker login ghcr.io -u <user> --password-stdin
docker build --build-arg VERSION=0.1.0 --build-arg REVISION="$(git rev-parse HEAD)" \
docker build --build-arg VERSION=0.1.0 --build-arg REVISION="$(git rev-parse --short HEAD)" \
--build-arg DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
-t ghcr.io/devops-spb-ru/cio:0.1.0 "Container image optimizer"
docker push ghcr.io/devops-spb-ru/cio:0.1.0
```
Expand All @@ -163,26 +169,37 @@ docker push ghcr.io/devops-spb-ru/cio:0.1.0
с репозиторием, после первого пуша зайдите в `Packages` → `Package settings` и выполните
`Connect repository`.

Образ пока публикует только `cio`: поставка `sqlbrc` в контейнере запланирована на 0.2.0.
Образ публикуется у каждого инструмента, для которого есть поставка в контейнере: сейчас это
`ghcr.io/devops-spb-ru/cio` и `ghcr.io/devops-spb-ru/sqlbrc` (контейнерная поставка `sqlbrc`
появилась в 0.3.0). Инструмент без `Dockerfile` в релизном workflow образ не публикует.

## Как добавить новый инструмент

1. Создайте каталог с понятным именем и `README.md` внутри; образцы структуры —
[`Container image optimizer`](Container%20image%20optimizer/README.md) и
[`SQL backup restore clone`](SQL%20backup%20restore%20clone/README.md).
2. Добавьте сборочные файлы и тесты; сборочная команда и тесты должны быть воспроизводимы локально.
3. Заведите job в `.github/workflows/ci.yml` (линт/уязвимости/тесты/сборка) с `working-directory`
на новый каталог; отдельные job'ы — под образ, сканирование (`trivy-scan.yml`) и статический
анализ (`codeql.yml`, сейчас там собирается только `cio`).
4. Обновите таблицу инструментов в корневом `README.md`, заведите `CHANGELOG.md` в каталоге
инструмента (раздел `## [Unreleased]`) и строку про него в корневом `CHANGELOG.md`.
2. Добавьте сборочные файлы (`go.mod`, `Makefile`, при контейнерной поставке — `Dockerfile`)
и тесты; сборочная команда и тесты должны быть воспроизводимы локально.
3. Добавьте каталог в матрицы workflow: `ci.yml` (линт, зависимости, тесты, сборка; образ —
если он есть), `trivy-scan.yml` (образ и файловая система) и `codeql.yml` (анализ Go).
Путь к инструменту задаётся в `working-directory`, `context` и `go-version-file`.
4. Заведите релизные job'ы в `release.yml` по образцу существующих: тег `<инструмент>-vX.Y.Z`,
вызов `release-binaries.yml` (а для контейнерной поставки — ещё и `release-image.yml`)
с параметрами `tool`, `dir` и `tag_prefix`.
5. Обновите публичные документы: таблицу инструментов и требования в корневом `README.md`,
строку в корневом `CHANGELOG.md`, строку в `SECURITY.md` (поддерживаемые версии, область,
«вне области»), ссылку на README инструмента в `.github/ISSUE_TEMPLATE/config.yml` и варианты
инструмента в формах issue.
6. Заведите `CHANGELOG.md` в каталоге инструмента (раздел `## [Unreleased]`), добавьте модуль
Go, а при контейнерной поставке — и образы из `Dockerfile` в `.github/dependabot.yml`.

## Безопасность

- Порядок сообщения об уязвимостях и поддерживаемые версии — в [SECURITY.md](SECURITY.md);
приватный отчёт открывается во вкладке *Security* → *Report a vulnerability*.
- Порядок сообщения об уязвимостях, поддерживаемые версии и область ответственности описаны
сразу для всех инструментов — в [SECURITY.md](SECURITY.md); приватный отчёт открывается
во вкладке *Security* → *Report a vulnerability*.
- Секреты, токены и пароли не коммитятся: ни в код, ни в конфиги, ни в документацию.
- Сторонние экшены в workflows фиксируются по SHA; обновления предлагает Dependabot.
- В отчётах утилиты секреты маскируются; если нашли обратное — это баг, заводите issue.
- Образ `cio` запускается без прав root, доступ к `docker.sock` выдаётся группой сокета
(`--group-add`, см. README инструмента).
- Образы запускаются без прав root (`cio`, `sqlbrc`). Доступ к `docker.sock` нужен только `cio`:
он выдаётся группой сокета (`--group-add`, см. README инструмента).
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@ make lint

- Сообщения коммитов: `Add:` / `Update:` / `Fix:` + короткая суть изменения.
- Definition of Done: `go vet ./...`, `go test ./...`, линт без замечаний, обновлённый `README`.
- Процессы (ветвление, PR, релизы) — в [CONTRIBUTING.md](CONTRIBUTING.md).
- Процессы (ветвление, PR, релизы, чеклист нового инструмента) — в [CONTRIBUTING.md](CONTRIBUTING.md).
- Политика безопасности общая для всех инструментов (поддерживаемые версии, область
ответственности, выпуск исправлений) — в [SECURITY.md](SECURITY.md).
- Локальные правила для AI-ассистента лежат в `.clinerules/` — каталог намеренно исключён из Git
(см. `.gitignore`), поэтому в репозитории его нет.

Expand All @@ -71,6 +73,10 @@ GitHub Actions (`.github/workflows`):
| `trivy-scan.yml` | уязвимости, секреты и конфигурацию образов обоих инструментов (`cio`, `sqlbrc`) и их файловой системы; находки CRITICAL/HIGH роняют прогон, отчёты уходят в GitHub Security |
| `codeql.yml` | статический анализ Go-кода обоих модулей (`cio`, `sqlbrc`), отчёты — в GitHub Security |

Матрицы workflow перечисляют каталоги инструментов (`cio`, `sqlbrc`): новый инструмент попадает
в них по чеклисту из [CONTRIBUTING.md](CONTRIBUTING.md), поэтому набор проверок у всех
инструментов одинаковый.

В `.trivyignore` лежат исключения на уязвимости **встроенного в образ сканера** Trivy: каждое
с указанием срока годности (`exp`), после которого «ворота» снова падают и список нужно перепроверить.
Код `cio` и базовый образ проверяются без исключений.
Expand Down
Loading
Loading