# Go Draw.io Exporter Автор: Алексей Бадяев Экспортирует все диаграммы из файла формата `Draw.io`. Для работы необходимо наличие приложения `drawio-desktop`. ## Разработка В проекте приняты (не строго обязательные) соглашения [Uber Go Style Guide](https://github.com/uber-go/guide/blob/master/style.md). ### Структура проекта Структура дерева файлов проекта соответствует рекомендациям в [Standard Go Project Layout](https://github.com/golang-standards/project-layout): - `build` - Сборка и непрерывная интеграция (Continuous Integration, *CI*). - `cmd` - Основные приложения проекта. Имя директории для каждого приложения должно совпадать с именем исполняемого файла, который вы хотите собрать. - `internal` - Внутренний код приложения и библиотек. - `pkg` - Код библиотек, пригодных для использования в сторонних приложениях. - `scripts` - Скрипты для сборки, установки, анализа и прочих операций над проектом. ### Линтеры Отформатировать все исходные тексты проекта в соответствии со стандартом Go можно командой: ```sh go fmt ./... ``` В проекте используются следующие линтеры: - [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` - [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`. Все перечисленные выше линтеры можно запустить командой: ```sh make lint ``` Кроме того, в проекте сконфигурирован [golangci-lint](https://github.com/golangci/golangci-lint). Для его запуска можно воспользоваться командой: ```sh make golangci-lint ``` ## Компиляция Все зависимости устанавливаются в папку `vendor` командой: ```sh make vendor ``` Собрать исполняемый файл сервиса можно командой: ```sh make build ``` После успешного выполнения команды в папке `out/bin` в корне проекта появится исполняемые бинарные файлы. ### Версия продукта Проект версионируется в соответствии с документом [Семантическое Версионирование 2.0.0](https://semver.org/lang/ru/). Наименование версии продукта считывается во время сборки проекта из переменной окружения `VERSION`. Если при сборке переменная окружения `VERSION` не задана, то номер версии формируется автоматически из системы контроля версий на основании последнего тэга, наличия коммитов после него и текущего состояния репозитория командой: ```sh git describe --always --tags --dirty ``` При этом если проект собирается из ветки выпуска вида `release/1.2.3`, то то версия принимает вид `v1.2.3RC` (что означает "Release Candidate"). Для получения версии приложения необходимо запустить его с параметром `--version`: ```sh drawio-export --version ``` ## Тестирование Модульные тесты проекта можно запустить командой: ```sh make test ``` ### Отчёт о тестировании Для получения отчёта о выполнении тестов в формате *JUnit XML* необходимо установить инструмент: ```sh go install github.com/jstemmer/go-junit-report@latest ``` Получить отчёт можно командой: ```sh EXPORT_RESULT=true make test ``` После успешного выполнения команды появится файл `out/junit-report.xml` с отчётом в формате [JUnit](https://junit.org). ### Покрытие кода тестами Для получения отчётов о покрытии кода тестами необходимо установить следующие инструменты: ```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 ``` Для получения отчёта о покрытии проекта тестами в консоли нужно выполнить команду: ```sh make coverage ``` Получить отчёт о покрытии кода тестами в формате *HTML* можно командой: ```sh EXPORT_RESULT=true make coverage ``` После успешного выполнения этой команды файл `out/coverage.html` будет содержать отчёт о покрытии кода проекта модульными тестами в формате *HTML*. Получить отчёт о покрытии кода тестами в формате *XML* можно командой: ```sh EXPORT_RESULT=true COVERAGE_FORMAT=xml make coverage ``` После успешного выполнения этой команды файл `out/coverage.xml` будет содержать отчёт о покрытии кода проекта модульными тестами в формате *XML*.