diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 07acaf7..a623d0b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: ~1.19 + go-version: ~1.22 - name: Check out code uses: actions/checkout@v3 @@ -27,7 +27,7 @@ jobs: - name: Linters uses: golangci/golangci-lint-action@v3 with: - version: v1.50.1 + version: v1.57.2 working-directory: ${{ env.BRANCH }} tests: @@ -40,7 +40,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: ^1.19 + go-version: ^1.22 - name: Check out code uses: actions/checkout@v3 @@ -67,7 +67,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: ^1.19 + go-version: ^1.22 - name: Check out code uses: actions/checkout@v3 diff --git a/.golangci.yml b/.golangci.yml index bc3e9f5..d38eca5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -8,21 +8,6 @@ linters-settings: funlen: lines: 150 statements: 80 - depguard: - rules: - main: - list-mode: lax - files: - - $all - - "!$test" - allow: - - $gostd - test: - files: - - "$test" - allow: - - $gostd - - "github.com/stretchr/testify/require" issues: exclude-rules: @@ -37,10 +22,10 @@ linters: disable-all: true enable: - asciicheck - - bodyclose - depguard - dogsled - dupl + - bodyclose - durationcheck - errorlint - exhaustive diff --git a/README.md b/README.md index 4b28d43..75815ab 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ [Инструкция по сдаче ДЗ](https://github.com/OtusGolang/home_work/wiki#%D0%A1%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%D0%B0%D0%BC). --- -Используемая версия [golangci-lint](https://golangci-lint.run/usage/install/#other-ci): v1.50.1 +Используемая версия [golangci-lint](https://golangci-lint.run/usage/install/#other-ci): v1.57.2 ``` $ golangci-lint version -golangci-lint has version 1.50.1 built from 8926a95 on 2022-10-22T10:48:48Z +golangci-lint has version 1.57.2 built with go1.22.1 from 77a8601a on 2024-03-28T19:01:11Z ``` --- diff --git a/hw01_hello_otus/README.md b/hw01_hello_otus/README.md index 4f77f24..25c783e 100644 --- a/hw01_hello_otus/README.md +++ b/hw01_hello_otus/README.md @@ -6,14 +6,14 @@ Hello, OTUS! ``` Для переворота строки следует воспользоваться возможностями -[golang.org/x/example/stringutil](https://pkg.go.dev/golang.org/x/example/stringutil). +[golang.org/x/example/hello/reverse](https://pkg.go.dev/golang.org/x/example/hello/reverse). Кроме этого необходимо исправить **go.mod** так, чтобы для данного модуля работала команда `go get`, а полученный **go.sum** закоммитить. ### Критерии оценки - Пайплайн зелёный - 4 балла -- Используется `stringutil` - 4 балла +- Используется `reverse` - 4 балла - Понятность и чистота кода - до 2 баллов #### Зачёт от 7 баллов diff --git a/hw01_hello_otus/go.mod b/hw01_hello_otus/go.mod index de45ce0..b9597d7 100644 --- a/hw01_hello_otus/go.mod +++ b/hw01_hello_otus/go.mod @@ -1,5 +1,5 @@ module github.com/DimVlas/otus_hw/hw01_hello_otus -go 1.19 +go 1.22 require golang.org/x/example v0.0.0-20230731131755-00c7068f9d83 diff --git a/hw02_unpack_string/go.mod b/hw02_unpack_string/go.mod index 4111e10..6241841 100644 --- a/hw02_unpack_string/go.mod +++ b/hw02_unpack_string/go.mod @@ -1,6 +1,6 @@ module github.com/DimVlas/otus_hw/hw02_unpack_string -go 1.19 +go 1.22 require github.com/stretchr/testify v1.7.0 diff --git a/hw03_frequency_analysis/go.mod b/hw03_frequency_analysis/go.mod index b67c12d..e8fad58 100644 --- a/hw03_frequency_analysis/go.mod +++ b/hw03_frequency_analysis/go.mod @@ -1,6 +1,6 @@ module github.com/DimVlas/otus_hw/hw03_frequency_analysis -go 1.19 +go 1.22 require github.com/stretchr/testify v1.7.0 diff --git a/hw04_lru_cache/go.mod b/hw04_lru_cache/go.mod index 747fc7c..36333ca 100644 --- a/hw04_lru_cache/go.mod +++ b/hw04_lru_cache/go.mod @@ -1,6 +1,6 @@ -module github.com/fixme_my_friend/hw04_lru_cache +module github.com/DimVlas/otus_hw/hw04_lru_cache -go 1.19 +go 1.22 require github.com/stretchr/testify v1.7.0 diff --git a/hw04_lru_cache/list.go b/hw04_lru_cache/list.go index aa6ebcf..928ebb5 100644 --- a/hw04_lru_cache/list.go +++ b/hw04_lru_cache/list.go @@ -1,131 +1,26 @@ package hw04lrucache type List interface { - Len() int // Кол-во элементов в списке. - Front() *ListItem // Первый элемент списка. - Back() *ListItem // Последний элемент списка. - PushFront(v interface{}) *ListItem // Добавление элемента в начало списка. - PushBack(v interface{}) *ListItem // Добавление элемента в конец списка. - Remove(i *ListItem) // Удаление элемента из списка. - MoveToFront(i *ListItem) // Переместить элемент вперед. + Len() int + Front() *ListItem + Back() *ListItem + PushFront(v interface{}) *ListItem + PushBack(v interface{}) *ListItem + Remove(i *ListItem) + MoveToFront(i *ListItem) } type ListItem struct { Value interface{} - Prev *ListItem Next *ListItem + Prev *ListItem } type list struct { - len int - front *ListItem - back *ListItem + List // Remove me after realization. + // Place your code here. } -// Создать новый двусвязный список. func NewList() List { return new(list) } - -// Кол-во элементов в списке. -func (lst *list) Len() int { - return lst.len -} - -// Первый элемент списка. -func (lst *list) Front() *ListItem { - return lst.front -} - -// Последний элемент списка. -func (lst *list) Back() *ListItem { - return lst.back -} - -// Добавление элемента в начало списка. -func (lst *list) PushFront(v interface{}) *ListItem { - itm := &ListItem{ - Value: v, - Next: lst.front, - } - lst.front = itm - lst.len++ - - if itm.Next == nil { - lst.back = itm - return itm - } - - itm.Next.Prev = itm - return itm -} - -// Добавление элемента в конец списка. -func (lst *list) PushBack(v interface{}) *ListItem { - itm := &ListItem{ - Value: v, - Prev: lst.back, - } - lst.back = itm - lst.len++ - - if itm.Prev == nil { - lst.front = itm - return itm - } - - itm.Prev.Next = itm - return itm -} - -// Удаление элемента из списка. -func (lst *list) Remove(i *ListItem) { - if i == nil { - return - } - - if i.Prev == nil && i.Next == nil { // единственный элемент - lst.front = nil - lst.back = nil - lst.len-- - return - } - - if i.Prev == nil { // первый элемент - i.Next.Prev = nil - lst.front = i.Next - lst.len-- - return - } - - if i.Next == nil { // последний элемент - i.Prev.Next = nil - lst.back = i.Prev - lst.len-- - return - } - - i.Prev.Next = i.Next - i.Next.Prev = i.Prev - lst.len-- -} - -// Переместить элемент вперед. -func (lst *list) MoveToFront(i *ListItem) { - if i.Prev == nil { // первый элемент - return - } - - if i.Next != nil { // элемент из середины - i.Prev.Next = i.Next // предыдущий ссылается на следующий - i.Next.Prev = i.Prev // следующий ссылается на предыдущий - } else { // последний элемент - i.Prev.Next = nil - lst.back = i.Prev - } - - i.Prev = nil - i.Next = lst.front - lst.front = i - i.Next.Prev = i -} diff --git a/hw05_parallel_execution/go.mod b/hw05_parallel_execution/go.mod index 6fe7b42..458744b 100644 --- a/hw05_parallel_execution/go.mod +++ b/hw05_parallel_execution/go.mod @@ -1,6 +1,6 @@ module github.com/DimVlas/otus_hw/hw05_parallel_execution -go 1.19 +go 1.22 require ( github.com/stretchr/testify v1.7.0 diff --git a/hw06_pipeline_execution/README.md b/hw06_pipeline_execution/README.md index a03b0e4..c6ba9d8 100644 --- a/hw06_pipeline_execution/README.md +++ b/hw06_pipeline_execution/README.md @@ -28,7 +28,8 @@ func Stage(in <-chan interface{}) (out <-chan interface{}) { ### Критерии оценки - CI-пайплайн зелёный - 5 баллов - Добавлены новые юнит-тесты - до 2 баллов -- Понятность и чистота кода - до 3 баллов +- Проходит тест TestAllStageStop - 2 балла +- Понятность и чистота кода - до 1 баллов #### Зачёт от 7 баллов diff --git a/hw06_pipeline_execution/go.mod b/hw06_pipeline_execution/go.mod index d89f80c..ec11aba 100644 --- a/hw06_pipeline_execution/go.mod +++ b/hw06_pipeline_execution/go.mod @@ -1,6 +1,6 @@ module github.com/DimVlas/otus_hw/hw06_pipeline_execution -go 1.19 +go 1.22 require github.com/stretchr/testify v1.7.0 diff --git a/hw06_pipeline_execution/pipeline_test.go b/hw06_pipeline_execution/pipeline_test.go index 63c3a59..3f787c9 100644 --- a/hw06_pipeline_execution/pipeline_test.go +++ b/hw06_pipeline_execution/pipeline_test.go @@ -2,6 +2,7 @@ package hw06pipelineexecution import ( "strconv" + "sync" "testing" "time" @@ -13,6 +14,8 @@ const ( fault = sleepPerStage / 2 ) +var isFullTesting = true + func TestPipeline(t *testing.T) { // Stage generator g := func(_ string, f func(v interface{}) interface{}) Stage { @@ -136,6 +139,65 @@ func TestPipeline(t *testing.T) { }) } +func TestAllStageStop(t *testing.T) { + if !isFullTesting { + return + } + wg := sync.WaitGroup{} + // Stage generator + g := func(_ string, f func(v interface{}) interface{}) Stage { + return func(in In) Out { + out := make(Bi) + wg.Add(1) + go func() { + defer wg.Done() + defer close(out) + for v := range in { + time.Sleep(sleepPerStage) + out <- f(v) + } + }() + return out + } + } + + stages := []Stage{ + g("Dummy", func(v interface{}) interface{} { return v }), + g("Multiplier (* 2)", func(v interface{}) interface{} { return v.(int) * 2 }), + g("Adder (+ 100)", func(v interface{}) interface{} { return v.(int) + 100 }), + g("Stringifier", func(v interface{}) interface{} { return strconv.Itoa(v.(int)) }), + } + + t.Run("done case", func(t *testing.T) { + in := make(Bi) + done := make(Bi) + data := []int{1, 2, 3, 4, 5} + + // Abort after 200ms + abortDur := sleepPerStage * 2 + go func() { + <-time.After(abortDur) + close(done) + }() + + go func() { + for _, v := range data { + in <- v + } + close(in) + }() + + result := make([]string, 0, 10) + for s := range ExecutePipeline(in, done, stages...) { + result = append(result, s.(string)) + } + wg.Wait() + + require.Len(t, result, 0) + + }) +} + func TestChanWrap(t *testing.T) { t.Run("To end", func(t *testing.T) { in := make(Bi) diff --git a/hw07_file_copying/go.mod b/hw07_file_copying/go.mod index 706acf0..8714ffa 100644 --- a/hw07_file_copying/go.mod +++ b/hw07_file_copying/go.mod @@ -1,6 +1,6 @@ module github.com/DimVlas/otus_hw/hw07_file_copying -go 1.19 +go 1.22 require github.com/stretchr/testify v1.9.0 diff --git a/hw07_file_copying/go.sum b/hw07_file_copying/go.sum index 60ce688..e69de29 100644 --- a/hw07_file_copying/go.sum +++ b/hw07_file_copying/go.sum @@ -1,10 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hw08_envdir_tool/go.mod b/hw08_envdir_tool/go.mod index f77cbf1..8526e55 100644 --- a/hw08_envdir_tool/go.mod +++ b/hw08_envdir_tool/go.mod @@ -1,6 +1,6 @@ module github.com/DimVlas/otus_hw/hw08_envdir_tool -go 1.19 +go 1.22 require github.com/stretchr/testify v1.9.0 @@ -8,4 +8,4 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect -) +) \ No newline at end of file diff --git a/hw09_struct_validator/go.mod b/hw09_struct_validator/go.mod index 30d53c8..6699458 100644 --- a/hw09_struct_validator/go.mod +++ b/hw09_struct_validator/go.mod @@ -1,3 +1,3 @@ module github.com/fixme_my_friend/hw09_struct_validator -go 1.19 +go 1.22 diff --git a/hw10_program_optimization/go.mod b/hw10_program_optimization/go.mod index a11e9a2..8bccd17 100644 --- a/hw10_program_optimization/go.mod +++ b/hw10_program_optimization/go.mod @@ -1,6 +1,6 @@ module github.com/fixme_my_friend/hw10_program_optimization -go 1.19 +go 1.22 require github.com/stretchr/testify v1.7.0 diff --git a/hw11_telnet_client/go.mod b/hw11_telnet_client/go.mod index 4fc5708..839d5b8 100644 --- a/hw11_telnet_client/go.mod +++ b/hw11_telnet_client/go.mod @@ -1,6 +1,6 @@ module github.com/fixme_my_friend/hw11_telnet_client -go 1.19 +go 1.22 require github.com/stretchr/testify v1.7.0 diff --git a/hw12_13_14_15_calendar/Makefile b/hw12_13_14_15_calendar/Makefile index c590ddc..9d3c317 100644 --- a/hw12_13_14_15_calendar/Makefile +++ b/hw12_13_14_15_calendar/Makefile @@ -26,7 +26,7 @@ test: go test -race ./internal/... ./pkg/... install-lint-deps: - (which golangci-lint > /dev/null) || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.50.1 + (which golangci-lint > /dev/null) || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.57.2 lint: install-lint-deps golangci-lint run ./... diff --git a/hw12_13_14_15_calendar/build/Dockerfile b/hw12_13_14_15_calendar/build/Dockerfile index a7c863a..3c6fa2a 100644 --- a/hw12_13_14_15_calendar/build/Dockerfile +++ b/hw12_13_14_15_calendar/build/Dockerfile @@ -1,5 +1,5 @@ # Собираем в гошке -FROM golang:1.19 as build +FROM golang:1.22 as build ENV BIN_FILE /opt/calendar/calendar-app ENV CODE_DIR /go/src/ diff --git a/hw12_13_14_15_calendar/go.mod b/hw12_13_14_15_calendar/go.mod index 01528d4..4be1765 100644 --- a/hw12_13_14_15_calendar/go.mod +++ b/hw12_13_14_15_calendar/go.mod @@ -1,3 +1,3 @@ module github.com/fixme_my_friend/hw12_13_14_15_calendar -go 1.19 +go 1.22