From fc1ac9aa48b43e5a32a62df3b9143379d38a00f1 Mon Sep 17 00:00:00 2001 From: verytable Date: Thu, 18 Feb 2021 19:47:04 +0000 Subject: [PATCH] Resolve "add text/template task" --- ciletters/README.md | 62 ++++++++ ciletters/assets/notification.png | Bin 0 -> 70949 bytes ciletters/letter.go | 7 + ciletters/letter_test.go | 227 ++++++++++++++++++++++++++++++ ciletters/notification.go | 43 ++++++ 5 files changed, 339 insertions(+) create mode 100644 ciletters/README.md create mode 100644 ciletters/assets/notification.png create mode 100644 ciletters/letter.go create mode 100644 ciletters/letter_test.go create mode 100644 ciletters/notification.go diff --git a/ciletters/README.md b/ciletters/README.md new file mode 100644 index 0000000..1c942ac --- /dev/null +++ b/ciletters/README.md @@ -0,0 +1,62 @@ +## ciletters + +В этой задаче вам предстоит познакомиться со стандартным пакетом [text/template](https://golang.org/pkg/text/template/), +позволяющим генерировать текст в определенном формате. + +### Легенда + +В gitlab можно подписаться на различные события: успешный build, новый комментарий, решённое issue и др. +Вот так, например, выглядит нотификация о сломанном pipeline'е: + +![Image description](assets/notification.png) + +В задаче предлагается сгенерировать письмо подобного содержания в текстовом виде. + +Для генерации HTML в языке также имеется стандартный пакет [html/template](https://golang.org/pkg/html/template/). +Работа с ним аналогична работа с `text/template`, поэтому для простоты в задаче был выбран тестовый формат. + +### Что нужно сделать? + +Нужно реализовать функцию `MakeLetter` из файла [letter.go](./letter.go), +которая по go объекту нотификации генерирует её текстовое представление. + +#### Прокомментированный пример из теста +``` +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/slon/shad-go/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](notification.go). +Обратите внимание на `// +build !change`. +Этот файл менять не нужно, и на сервере будет использоваться оригинальный вариант. + +В реализации нужно подогнать `text/template` шаблон под требуемый вывод. + +Вам могут понадобиться: +* условные блоки (`if/else`) +* range'и +* кастомные функции в шаблоне: https://golang.org/pkg/text/template/#FuncMap +* `'-'` для удаления пробелов + +### Проверка решения + +Для запуска тестов нужно выполнить следующую команду: +``` +go test -v ./ciletters/... +``` diff --git a/ciletters/assets/notification.png b/ciletters/assets/notification.png new file mode 100644 index 0000000000000000000000000000000000000000..02584d78842217eb280a8c8f4ae5c01b50d3bb28 GIT binary patch literal 70949 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 HoD!M go test -mod readonly -tags private -c -o /tmp/bincache730817117/5d83984f885e61c1 gitlab.com/slon/shad-go/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`, + }, + }, + }, + }, + expected: `Your pipeline #194613 has failed! + Project: go-spring-2021/gopher + Branch: 🌿 master + Commit: 8967153e Solve urlfetch. + CommitAuthor: gopher + Stage: test, Job grade + 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/slon/shad-go/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 +`, + }, + { + name: "multiple-jobs-failed", + notification: Notification{ + Project: GitlabProject{ + GroupID: randomGitlabGroup, + ID: randomGitlabProject, + }, + Branch: randomBranch, + Commit: Commit{ + Hash: randomHash, + Message: "Solve digitalclock.", + Author: randomTestUser, + }, + Pipeline: Pipeline{ + Status: PipelineStatusFailed, + ID: randomPipelineID, + TriggeredBy: randomTriggerer, + FailedJobs: []Job{ + { + ID: randomJobIDS[0], + Name: randomJobNames[0], + Stage: randomStages[0], + RunnerLog: `$ testtool grade +testtool: detected change in tasks [sum] +testtool: skipping task sum: not released yet +testtool: testing task sum +testtool: testing submission in /tmp/sum-281145206 +testtool: copying student repo +testtool: copying tests +testtool: copying !change files +testtool: copying testdata directory +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/slon/shad-go/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`, + }, + { + ID: randomJobIDS[1], + Name: randomJobNames[1], + Stage: randomStages[1], + RunnerLog: `--- 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`, + }, + }, + }, + }, + expected: fmt.Sprintf(`Your pipeline #%d has failed! + Project: %v/%v + Branch: 🌿 %v + Commit: %v Solve digitalclock. + CommitAuthor: %v + Stage: %v, Job %v + 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/slon/shad-go/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 + + Stage: %v, Job %v + --- 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 +`, randomPipelineID, randomGitlabGroup, randomGitlabProject, randomBranch, randomHash, randomTestUser, + randomStages[0], randomJobNames[0], randomStages[1], randomJobNames[1]), + }, + } { + t.Run(tc.name, func(t *testing.T) { + letter, err := MakeLetter(&tc.notification) + require.NoError(t, err) + require.Equal(t, tc.expected, letter) + }) + } +} + +func randomInt64(t *testing.T) int64 { + t.Helper() + + nBig, err := rand.Int(rand.Reader, big.NewInt(1e6)) + require.NoError(t, err) + + return nBig.Int64() +} diff --git a/ciletters/notification.go b/ciletters/notification.go new file mode 100644 index 0000000..131aa5b --- /dev/null +++ b/ciletters/notification.go @@ -0,0 +1,43 @@ +// +build !change + +package ciletters + +type Notification struct { + Project GitlabProject + Branch string + Commit Commit + Pipeline Pipeline +} + +type GitlabProject struct { + GroupID string + ID string +} + +type Commit struct { + // Hash is a 20-byte SHA-1 encoded in hex. + Hash string + Message string + Author string +} + +type PipelineStatus string + +const ( + PipelineStatusOK PipelineStatus = "ok" + PipelineStatusFailed PipelineStatus = "failed" +) + +type Pipeline struct { + Status PipelineStatus + ID int64 + TriggeredBy string + FailedJobs []Job +} + +type Job struct { + ID int64 + Name string + Stage string + RunnerLog string +}