update ci; update deps (show all smtp connection errors); migrate from make to just
This commit is contained in:
@@ -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
|
||||
|
||||
55
Makefile
55
Makefile
@@ -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} .
|
||||
2
go.mod
2
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
|
||||
|
||||
4
go.sum
4
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=
|
||||
|
||||
44
justfile
Normal file
44
justfile
Normal file
@@ -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 }} .
|
||||
44
vendor/gitlab.com/etke.cc/go/trysmtp/client.go
generated
vendored
44
vendor/gitlab.com/etke.cc/go/trysmtp/client.go
generated
vendored
@@ -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
|
||||
}
|
||||
|
||||
4
vendor/modules.txt
vendored
4
vendor/modules.txt
vendored
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user