shad-go/ciletters
2023-10-03 20:25:41 +03:00
..
assets Resolve "add text/template task" 2021-02-18 19:47:04 +00:00
letter.go go fix old build tags. 2022-03-15 23:49:56 +03:00
letter_test.go update mod && fix links 2023-10-03 20:25:41 +03:00
notification.go go fix old build tags. 2022-03-15 23:49:56 +03:00
README.md update mod && fix links 2023-10-03 20:25:41 +03:00

ciletters

В этой задаче вам предстоит познакомиться со стандартным пакетом text/template, позволяющим генерировать текст в определенном формате, а также с пакетом embed, позволяющим вкомпиливать в исполняемый файл строковые литералы.

Легенда

В gitlab можно подписаться на различные события: успешный build, новый комментарий, решённое issue и др. Вот так, например, выглядит нотификация о сломанном pipeline'е:

Image description

В задаче предлагается сгенерировать письмо подобного содержания в текстовом виде.

Для генерации HTML в языке также имеется стандартный пакет html/template. Работа с ним аналогична работе с text/template, поэтому для простоты в задаче был выбран текстовый формат.

Что нужно сделать?

Нужно реализовать функцию MakeLetter из файла letter.go, которая по go объекту нотификации генерирует её текстовое представление.

Для этого нужно написать text/template шаблон, сохранить его в отдельный файл, а затем получить его содержимое в коде с помомщью go:embed.

Прокомментированный пример из теста

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
            testtool: > go test -mod readonly -tags private -c -o /tmp/bincache730817117/5d83984f885e61c1 gitlab.com/manytask/itmo-go/public/sum
            --- 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. Обратите внимание на //go:build !change. Этот файл менять не нужно, и на сервере будет использоваться оригинальный вариант.

В реализации нужно подогнать text/template шаблон под требуемый вывод. Функция должна использовать один шаблон. Использовать fmt.Sprintf или конкатенацию строк нельзя.

Вам могут понадобиться:

Проверка решения

Для запуска тестов нужно выполнить следующую команду:

go test -v ./ciletters/...