From dc82d97aaa80d5835fc4673060313495417cac82 Mon Sep 17 00:00:00 2001 From: Aine Date: Sat, 11 Feb 2023 20:49:45 +0200 Subject: [PATCH] update ci; update deps (show all smtp connection errors); migrate from make to just --- .gitlab-ci.yml | 10 ++-- Makefile | 55 ------------------- go.mod | 2 +- go.sum | 4 +- justfile | 44 +++++++++++++++ .../gitlab.com/etke.cc/go/trysmtp/client.go | 44 +++++++++++---- vendor/modules.txt | 4 +- 7 files changed, 88 insertions(+), 75 deletions(-) delete mode 100644 Makefile create mode 100644 justfile diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 346fdd6..6c05f51 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,23 +6,23 @@ lint: stage: test image: registry.gitlab.com/etke.cc/base/build script: - - make lint + - just lint unit: stage: test image: registry.gitlab.com/etke.cc/base/build script: - - make test + - just test docker: stage: release only: ['main', 'tags'] services: - docker:dind - image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/jdrouet/docker-with-buildx:stable + image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/jdrouet/docker-with-buildx:latest before_script: - - apk --no-cache add make + - apk --no-cache add just script: - - make login docker + - just login docker tags: - docker diff --git a/Makefile b/Makefile deleted file mode 100644 index 5666c9c..0000000 --- a/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -### CI vars -CI_LOGIN_COMMAND = @echo "Not a CI, skip login" -CI_REGISTRY_IMAGE ?= registry.gitlab.com/etke.cc/postmoogle -REGISTRY_IMAGE ?= registry.etke.cc/etke.cc/postmoogle -CI_COMMIT_TAG ?= latest -# for main branch it must be set explicitly -ifeq ($(CI_COMMIT_TAG), main) -CI_COMMIT_TAG = latest -endif -# login command -ifdef CI_JOB_TOKEN -CI_LOGIN_COMMAND = @docker login -u gitlab-ci-token -p $(CI_JOB_TOKEN) $(CI_REGISTRY) -endif - -# update go dependencies -update: - go get ./cmd - go mod tidy - go mod verify - go mod vendor - -mock: - -@rm -rf mocks - @mockery --all - -# run linter -lint: - golangci-lint run ./... - -# run linter and fix issues if possible -lintfix: - golangci-lint run --fix ./... - -# run unit tests -test: - @go test -coverprofile=cover.out ./... - @go tool cover -func=cover.out - -@rm -f cover.out - -# note: make doesn't understand exit code 130 and sets it == 1 -run: - @go run ./cmd || exit 0 - -build: - go build -v -o postmoogle ./cmd - -# CI: docker login -login: - @echo "trying to login to docker registry..." - $(CI_LOGIN_COMMAND) - -# docker build -docker: - docker buildx create --use - docker buildx build --platform linux/arm64/v8,linux/amd64 --push -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} -t ${REGISTRY_IMAGE}:${CI_COMMIT_TAG} . diff --git a/go.mod b/go.mod index 004027d..d7b3f13 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( gitlab.com/etke.cc/go/logger v1.1.0 gitlab.com/etke.cc/go/mxidwc v1.0.0 gitlab.com/etke.cc/go/secgen v1.1.1 - gitlab.com/etke.cc/go/trysmtp v1.0.0 + gitlab.com/etke.cc/go/trysmtp v1.1.1 gitlab.com/etke.cc/go/validator v1.0.6 gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6 maunium.net/go/mautrix v0.12.3 diff --git a/go.sum b/go.sum index b743b69..33611f2 100644 --- a/go.sum +++ b/go.sum @@ -103,8 +103,8 @@ gitlab.com/etke.cc/go/mxidwc v1.0.0 h1:6EAlJXvs3nU4RaMegYq6iFlyVvLw7JZYnZmNCGMYQ gitlab.com/etke.cc/go/mxidwc v1.0.0/go.mod h1:E/0kh45SAN9+ntTG0cwkAEKdaPxzvxVmnjwivm9nmz8= gitlab.com/etke.cc/go/secgen v1.1.1 h1:RmKOki725HIhWJHzPtAc9X4YvBneczndchpMgoDkE8w= gitlab.com/etke.cc/go/secgen v1.1.1/go.mod h1:3pJqRGeWApzx7qXjABqz2o2SMCNpKSZao/gXVdasqE8= -gitlab.com/etke.cc/go/trysmtp v1.0.0 h1:f/7gSmzohKniVeLSLevI+ZsySYcPUGkT9cRlOTwjOr8= -gitlab.com/etke.cc/go/trysmtp v1.0.0/go.mod h1:KqRuIB2IPElEEbAxXmFyKtm7S5YiuEb4lxwWthccqyE= +gitlab.com/etke.cc/go/trysmtp v1.1.1 h1:4mbkfsfipidG2eO8/zSozJ78Vv/lRAcdznvjK0fMVuo= +gitlab.com/etke.cc/go/trysmtp v1.1.1/go.mod h1:lOO7tTdAE0a3ETV3wN3GJ7I1Tqewu7YTpPWaOmTteV0= gitlab.com/etke.cc/go/validator v1.0.6 h1:w0Muxf9Pqw7xvF7NaaswE6d7r9U3nB2t2l5PnFMrecQ= gitlab.com/etke.cc/go/validator v1.0.6/go.mod h1:Id0SxRj0J3IPhiKlj0w1plxVLZfHlkwipn7HfRZsDts= gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6 h1:+HDT2/bx3Hug++aeDE/PaoRRcnKdYzEm6i2RlOAzPXo= diff --git a/justfile b/justfile new file mode 100644 index 0000000..bab438c --- /dev/null +++ b/justfile @@ -0,0 +1,44 @@ +CI_REGISTRY_IMAGE := env_var_or_default("CI_REGISTRY_IMAGE", "registry.gitlab.com/etke.cc/postmoogle") +REGISTRY_IMAGE := env_var_or_default("REGISTRY_IMAGE", "registry.etke.cc/etke.cc/postmoogle") +CI_COMMIT_TAG := if env_var_or_default("CI_COMMIT_TAG", "main") == "main" { "latest" } else { env_var_or_default("CI_COMMIT_TAG", "latest") } + +# show help by default +default: + @just --list --justfile {{ justfile() }} + +# update go deps +update: + go get ./cmd + go mod tidy + go mod vendor + +# run linter +lint: + golangci-lint run ./... + +# automatically fix liter issues +lintfix: + golangci-lint run --fix ./... + +# run unit tests +test: + @go test -coverprofile=cover.out ./... + @go tool cover -func=cover.out + -@rm -f cover.out + +# run app +run: + @go run ./cmd + +# build app +build: + go build -v -o postmoogle ./cmd + +# docker login +login: + @docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY + +# docker build +docker: + docker buildx create --use + docker buildx build --platform linux/arm64/v8,linux/amd64 --push -t {{ CI_REGISTRY_IMAGE }}:{{ CI_COMMIT_TAG }} -t {{ REGISTRY_IMAGE }}:{{ CI_COMMIT_TAG }} . diff --git a/vendor/gitlab.com/etke.cc/go/trysmtp/client.go b/vendor/gitlab.com/etke.cc/go/trysmtp/client.go index f517d1d..122cb59 100644 --- a/vendor/gitlab.com/etke.cc/go/trysmtp/client.go +++ b/vendor/gitlab.com/etke.cc/go/trysmtp/client.go @@ -35,17 +35,37 @@ func Connect(from, to string) (*smtp.Client, error) { return client, nil } +func unwrapErrors(errs []error) error { + if len(errs) == 0 { + return nil + } + + tokens := strings.Repeat("%v; ", len(errs)) + // make it compatible with < 1.18 + ierrs := make([]interface{}, len(errs)) + for _, err := range errs { + ierrs = append(ierrs, err) + } + + return fmt.Errorf(tokens, ierrs...) +} + func initClient(localname, hostname string) (*smtp.Client, error) { mxs, err := net.LookupMX(hostname) if err != nil { return nil, err } + cerrs := []error{} + var client *smtp.Client for _, mx := range mxs { for _, addr := range SMTPAddrs { - client := trySMTP(localname, strings.TrimSuffix(mx.Host, "."), addr) + client, err = trySMTP(localname, strings.TrimSuffix(mx.Host, "."), addr) + if err != nil { + cerrs = append(cerrs, err) + } if client != nil { - return client, nil + return client, unwrapErrors(cerrs) } } } @@ -54,29 +74,33 @@ func initClient(localname, hostname string) (*smtp.Client, error) { // we're supposed to try talking directly to the host. if len(mxs) == 0 { for _, addr := range SMTPAddrs { - client := trySMTP(localname, hostname, addr) + client, err = trySMTP(localname, hostname, addr) + if err != nil { + cerrs = append(cerrs, err) + } if client != nil { - return client, nil + return client, unwrapErrors(cerrs) } } } - return nil, fmt.Errorf("target SMTP server not found") + return nil, unwrapErrors(cerrs) } -func trySMTP(localname, mxhost, addr string) *smtp.Client { - conn, err := smtp.Dial(mxhost + addr) +func trySMTP(localname, mxhost, addr string) (*smtp.Client, error) { + target := mxhost + addr + conn, err := smtp.Dial(target) if err != nil { - return nil + return nil, fmt.Errorf("%s: %w", target, err) } err = conn.Hello(localname) if err != nil { - return nil + return nil, fmt.Errorf("%s: %w", target, err) } if ok, _ := conn.Extension("STARTTLS"); ok { config := &tls.Config{ServerName: mxhost} conn.StartTLS(config) //nolint:errcheck // if it doesn't work - we can't do anything anyway } - return conn + return conn, nil } diff --git a/vendor/modules.txt b/vendor/modules.txt index e1a8009..21b0ee8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -134,8 +134,8 @@ gitlab.com/etke.cc/go/mxidwc # gitlab.com/etke.cc/go/secgen v1.1.1 ## explicit; go 1.19 gitlab.com/etke.cc/go/secgen -# gitlab.com/etke.cc/go/trysmtp v1.0.0 -## explicit; go 1.18 +# gitlab.com/etke.cc/go/trysmtp v1.1.1 +## explicit; go 1.17 gitlab.com/etke.cc/go/trysmtp # gitlab.com/etke.cc/go/validator v1.0.6 ## explicit; go 1.18