2023-04-04 19:46:25 +07:00
|
|
|
|
# Go Draw.io Exporter
|
2023-04-04 19:00:18 +07:00
|
|
|
|
|
2023-04-08 22:04:55 +07:00
|
|
|
|
Автор: Алексей Бадяев <aleksei.badiaev@mousesoft.ru>
|
|
|
|
|
|
2023-04-04 19:46:25 +07:00
|
|
|
|
Экспортирует все диаграммы из файла формата `Draw.io`.
|
|
|
|
|
Для работы необходимо наличие приложения `drawio-desktop`.
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
## Разработка
|
|
|
|
|
|
2024-10-17 23:29:54 +07:00
|
|
|
|
В проекте приняты (не строго обязательные) соглашения
|
|
|
|
|
[Uber Go Style Guide](https://github.com/uber-go/guide/blob/master/style.md).
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
### Структура проекта
|
|
|
|
|
|
|
|
|
|
Структура дерева файлов проекта соответствует рекомендациям в
|
|
|
|
|
[Standard Go Project Layout](https://github.com/golang-standards/project-layout):
|
|
|
|
|
|
|
|
|
|
- `build` - Сборка и непрерывная интеграция (Continuous Integration, *CI*).
|
|
|
|
|
- `cmd` - Основные приложения проекта. Имя директории для каждого приложения
|
|
|
|
|
должно совпадать с именем исполняемого файла, который вы хотите собрать.
|
2024-10-17 23:29:54 +07:00
|
|
|
|
- `internal` - Внутренний код приложения и библиотек.
|
2023-04-08 22:04:55 +07:00
|
|
|
|
- `pkg` - Код библиотек, пригодных для использования в сторонних приложениях.
|
|
|
|
|
- `scripts` - Скрипты для сборки, установки, анализа и прочих операций над проектом.
|
|
|
|
|
|
|
|
|
|
### Линтеры
|
|
|
|
|
|
|
|
|
|
Отформатировать все исходные тексты проекта в соответствии со стандартом Go
|
|
|
|
|
можно командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
go fmt ./...
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
В проекте используются следующие линтеры:
|
|
|
|
|
|
|
|
|
|
- [go vet](https://pkg.go.dev/cmd/vet)
|
|
|
|
|
- [errcheck](https://github.com/kisielk/errcheck)
|
|
|
|
|
Команда установки линтера: `go install github.com/kisielk/errcheck@latest`.
|
|
|
|
|
- [staticcheck](https://staticcheck.io/)
|
|
|
|
|
Команда установки линтера: `go install honnef.co/go/tools/cmd/staticcheck@latest`.
|
|
|
|
|
- [usestdlibvars](https://github.com/sashamelentyev/usestdlibvars)
|
|
|
|
|
Команда установки линтера: `go install github.com/sashamelentyev/usestdlibvars@latest`
|
2024-10-17 23:43:11 +07:00
|
|
|
|
- [shadow](https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/shadow)
|
|
|
|
|
Команда установки линтера:
|
|
|
|
|
`go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow@latest`.
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
Все перечисленные выше линтеры можно запустить командой:
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
make lint
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Кроме того, в проекте сконфигурирован
|
|
|
|
|
[golangci-lint](https://github.com/golangci/golangci-lint).
|
|
|
|
|
Для его запуска можно воспользоваться командой:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make golangci-lint
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
## Компиляция
|
|
|
|
|
|
|
|
|
|
Все зависимости устанавливаются в папку `vendor` командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
make vendor
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
Собрать исполняемый файл сервиса можно командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
make build
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
После успешного выполнения команды в папке `out/bin` в корне проекта появится
|
|
|
|
|
исполняемые бинарные файлы.
|
|
|
|
|
|
|
|
|
|
### Версия продукта
|
|
|
|
|
|
|
|
|
|
Проект версионируется в соответствии с документом
|
|
|
|
|
[Семантическое Версионирование 2.0.0](https://semver.org/lang/ru/).
|
|
|
|
|
Наименование версии продукта считывается во время сборки проекта из переменной
|
|
|
|
|
окружения `VERSION`. Если при сборке переменная окружения `VERSION` не задана,
|
|
|
|
|
то номер версии формируется автоматически из системы контроля версий на основании
|
|
|
|
|
последнего тэга, наличия коммитов после него и текущего состояния репозитория
|
|
|
|
|
командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
git describe --always --tags --dirty
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
При этом если проект собирается из ветки выпуска вида `release/1.2.3`, то
|
|
|
|
|
то версия принимает вид `v1.2.3RC` (что означает "Release Candidate").
|
|
|
|
|
|
|
|
|
|
Для получения версии приложения необходимо запустить его с параметром `--version`:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
drawio-export --version
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
## Тестирование
|
|
|
|
|
|
|
|
|
|
Модульные тесты проекта можно запустить командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
make test
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
### Отчёт о тестировании
|
|
|
|
|
|
|
|
|
|
Для получения отчёта о выполнении тестов в формате *JUnit XML* необходимо
|
|
|
|
|
установить инструмент:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
go install github.com/jstemmer/go-junit-report@latest
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
Получить отчёт можно командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
EXPORT_RESULT=true make test
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
После успешного выполнения команды появится файл `out/junit-report.xml`
|
|
|
|
|
с отчётом в формате [JUnit](https://junit.org).
|
|
|
|
|
|
|
|
|
|
### Покрытие кода тестами
|
|
|
|
|
|
|
|
|
|
Для получения отчётов о покрытии кода тестами необходимо установить следующие
|
|
|
|
|
инструменты:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
go install github.com/axw/gocov/gocov@latest
|
|
|
|
|
go install github.com/matm/gocov-html/cmd/gocov-html@latest
|
|
|
|
|
go install github.com/AlekSi/gocov-xml@latest
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
Для получения отчёта о покрытии проекта тестами в консоли нужно выполнить
|
|
|
|
|
команду:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
make coverage
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
Получить отчёт о покрытии кода тестами в формате *HTML* можно командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
EXPORT_RESULT=true make coverage
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
После успешного выполнения этой команды файл `out/coverage.html` будет содержать
|
|
|
|
|
отчёт о покрытии кода проекта модульными тестами в формате *HTML*.
|
|
|
|
|
|
|
|
|
|
Получить отчёт о покрытии кода тестами в формате *XML* можно командой:
|
|
|
|
|
|
2024-10-18 15:38:27 +07:00
|
|
|
|
```sh
|
|
|
|
|
EXPORT_RESULT=true COVERAGE_FORMAT=xml make coverage
|
|
|
|
|
```
|
2023-04-08 22:04:55 +07:00
|
|
|
|
|
|
|
|
|
После успешного выполнения этой команды файл `out/coverage.xml` будет содержать
|
|
|
|
|
отчёт о покрытии кода проекта модульными тестами в формате *XML*.
|