2021-02-18 19:47:04 +00:00
|
|
|
|
## ciletters
|
|
|
|
|
|
|
|
|
|
В этой задаче вам предстоит познакомиться со стандартным пакетом [text/template](https://golang.org/pkg/text/template/),
|
2022-02-24 19:35:05 +00:00
|
|
|
|
позволяющим генерировать текст в определенном формате, а также с пакетом [embed](https://pkg.go.dev/embed),
|
|
|
|
|
позволяющим вкомпиливать в исполняемый файл строковые литералы.
|
2021-02-18 19:47:04 +00:00
|
|
|
|
|
|
|
|
|
### Легенда
|
|
|
|
|
|
|
|
|
|
В gitlab можно подписаться на различные события: успешный build, новый комментарий, решённое issue и др.
|
|
|
|
|
Вот так, например, выглядит нотификация о сломанном pipeline'е:
|
|
|
|
|
|
|
|
|
|
![Image description](assets/notification.png)
|
|
|
|
|
|
|
|
|
|
В задаче предлагается сгенерировать письмо подобного содержания в текстовом виде.
|
|
|
|
|
|
|
|
|
|
Для генерации HTML в языке также имеется стандартный пакет [html/template](https://golang.org/pkg/html/template/).
|
2021-02-27 12:23:31 +00:00
|
|
|
|
Работа с ним аналогична работе с `text/template`, поэтому для простоты в задаче был выбран текстовый формат.
|
2021-02-18 19:47:04 +00:00
|
|
|
|
|
|
|
|
|
### Что нужно сделать?
|
|
|
|
|
|
|
|
|
|
Нужно реализовать функцию `MakeLetter` из файла [letter.go](./letter.go),
|
|
|
|
|
которая по go объекту нотификации генерирует её текстовое представление.
|
|
|
|
|
|
2022-03-06 02:06:00 +00:00
|
|
|
|
Для этого нужно написать `text/template` шаблон, сохранить его в отдельный файл, а затем получить его содержимое в коде с помомщью `go:embed`.
|
2022-02-24 19:35:05 +00:00
|
|
|
|
|
2021-02-18 19:47:04 +00:00
|
|
|
|
#### Прокомментированный пример из теста
|
|
|
|
|
```
|
|
|
|
|
Your pipeline #194613 has failed! // 194613 -- это ID pipeline'а
|
|
|
|
|
Project: go-spring-2021/gopher // Project состоит из ID группы и ID проекта
|
|
|
|
|
Branch: 🌿 master
|
|
|
|
|
Commit: 8967153e Solve urlfetch. // Первые 8 байт хэша коммита.
|
|
|
|
|
CommitAuthor: gopher
|
|
|
|
|
// Здесь происходит цикл по всем сломанным job'ам
|
|
|
|
|
Stage: test, Job grade // test -- это имя stage'а, а grade -- имя job'а
|
|
|
|
|
// Далее идут последние 10 строк лога gitlab runner'а
|
|
|
|
|
testtool: copying go.mod, go.sum and .golangci.yml
|
|
|
|
|
testtool: running tests
|
2023-10-02 19:32:41 +00:00
|
|
|
|
testtool: > go test -mod readonly -tags private -c -o /tmp/bincache730817117/5d83984f885e61c1 gitlab.com/manytask/itmo-go/private/sum
|
2021-02-18 19:47:04 +00:00
|
|
|
|
--- FAIL: TestSum (0.00s)
|
|
|
|
|
sum_test.go:19: 2 + 2 == 0 != 4
|
|
|
|
|
sum_test.go:19: 9223372036854775807 + 1 == 0 != -9223372036854775808
|
|
|
|
|
FAIL
|
|
|
|
|
testtool: task sum failed: test failed: exit status 1
|
|
|
|
|
some tasks failed
|
|
|
|
|
ERROR: Job failed: exit code 1
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Объект нотификации описан в [notification.go](notification.go).
|
2022-02-17 17:04:02 +00:00
|
|
|
|
Обратите внимание на `//go:build !change`.
|
2021-02-18 19:47:04 +00:00
|
|
|
|
Этот файл менять не нужно, и на сервере будет использоваться оригинальный вариант.
|
|
|
|
|
|
2021-02-19 19:53:31 +00:00
|
|
|
|
В реализации нужно подогнать `text/template` шаблон под требуемый вывод. Функция должна использовать один шаблон.
|
2022-02-17 17:04:02 +00:00
|
|
|
|
Использовать `fmt.Sprintf` или конкатенацию строк нельзя.
|
2021-02-18 19:47:04 +00:00
|
|
|
|
|
|
|
|
|
Вам могут понадобиться:
|
|
|
|
|
* условные блоки (`if/else`)
|
|
|
|
|
* range'и
|
|
|
|
|
* кастомные функции в шаблоне: https://golang.org/pkg/text/template/#FuncMap
|
|
|
|
|
* `'-'` для удаления пробелов
|
|
|
|
|
|
|
|
|
|
### Проверка решения
|
|
|
|
|
|
|
|
|
|
Для запуска тестов нужно выполнить следующую команду:
|
|
|
|
|
```
|
|
|
|
|
go test -v ./ciletters/...
|
|
|
|
|
```
|