mirror of
https://github.com/mjl-/mox.git
synced 2024-12-26 16:33:47 +03:00
a2c9cfc55b
several fields in dmarc and tls reports have known string values. we have a Go string type for them. sherpats (through sherpadoc) turns those strings into typescript enums, and sherpats generates runtime-typechecking code (to enforce correct types for incoming json, to prevent failing deeper in the code when we get invalid data (much harder to debug)). the Go not-really-enum types allow other values, and real-world reports have unknown/unspecified/invalid values. this uses the sherpadoc -rename flag to turn those enums into regular untyped strings, so sherpats doesn't generate enum-enforcing runtime type checking code. this required an update to sherpadoc, to properly handling renaming a type to a basic type instead of another named type. for issue #161 by RobSlgm, thanks for reporting!
173 lines
6.3 KiB
Makefile
173 lines
6.3 KiB
Makefile
default: build
|
|
|
|
build: build0 frontend build1
|
|
|
|
build0:
|
|
# build early to catch syntax errors
|
|
CGO_ENABLED=0 go build
|
|
CGO_ENABLED=0 go vet ./...
|
|
./gendoc.sh
|
|
# we rewrite some dmarcprt and tlsrpt enums into untyped strings: real-world
|
|
# reports have invalid values, and our loose Go typed strings accept all values,
|
|
# but we don't want the typescript runtime checker to fail on those unrecognized
|
|
# values.
|
|
(cd webadmin && CGO_ENABLED=0 go run ../vendor/github.com/mjl-/sherpadoc/cmd/sherpadoc/*.go -adjust-function-names none -rename 'config Domain ConfigDomain,dmarc Policy DMARCPolicy,mtasts MX STSMX,tlsrptdb Record TLSReportRecord,tlsrptdb SuppressAddress TLSRPTSuppressAddress,dmarcrpt DKIMResult string,dmarcrpt SPFResult string,dmarcrpt SPFDomainScope string,dmarcrpt DMARCResult string,dmarcrpt PolicyOverride string,dmarcrpt Alignment string,dmarcrpt Disposition string,tlsrpt PolicyType string,tlsrpt ResultType string' Admin) >webadmin/api.json
|
|
(cd webaccount && CGO_ENABLED=0 go run ../vendor/github.com/mjl-/sherpadoc/cmd/sherpadoc/*.go -adjust-function-names none Account) >webaccount/api.json
|
|
(cd webmail && CGO_ENABLED=0 go run ../vendor/github.com/mjl-/sherpadoc/cmd/sherpadoc/*.go -adjust-function-names none Webmail) >webmail/api.json
|
|
./gents.sh webadmin/api.json webadmin/api.ts
|
|
./gents.sh webaccount/api.json webaccount/api.ts
|
|
./gents.sh webmail/api.json webmail/api.ts
|
|
|
|
build1:
|
|
# build again, api json files above are embedded and new frontend code generated
|
|
CGO_ENABLED=0 go build
|
|
|
|
install: build0 frontend
|
|
CGO_ENABLED=0 go install
|
|
|
|
race: build0
|
|
go build -race
|
|
|
|
test:
|
|
CGO_ENABLED=0 go test -shuffle=on -coverprofile cover.out ./...
|
|
go tool cover -html=cover.out -o cover.html
|
|
|
|
test-race:
|
|
CGO_ENABLED=1 go test -race -shuffle=on -covermode atomic -coverprofile cover.out ./...
|
|
go tool cover -html=cover.out -o cover.html
|
|
|
|
# note: if testdata/upgradetest.mbox.gz exists, its messages will be imported
|
|
# during tests. helpful for performance/resource consumption tests.
|
|
test-upgrade: build
|
|
nice ./test-upgrade.sh
|
|
|
|
# needed for "check" target
|
|
install-staticcheck:
|
|
go install honnef.co/go/tools/cmd/staticcheck@v0.4.7
|
|
|
|
check:
|
|
CGO_ENABLED=0 go vet -tags integration
|
|
CGO_ENABLED=0 go vet -tags website website/website.go
|
|
CGO_ENABLED=0 go vet -tags link rfc/link.go
|
|
CGO_ENABLED=0 go vet -tags errata rfc/errata.go
|
|
CGO_ENABLED=0 go vet -tags xr rfc/xr.go
|
|
GOARCH=386 CGO_ENABLED=0 go vet ./...
|
|
staticcheck ./...
|
|
staticcheck -tags integration
|
|
staticcheck -tags website website/website.go
|
|
staticcheck -tags link rfc/link.go
|
|
staticcheck -tags errata rfc/errata.go
|
|
staticcheck -tags xr rfc/xr.go
|
|
|
|
# needed for check-shadow
|
|
install-shadow:
|
|
go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow@v0.19.0
|
|
|
|
# having "err" shadowed is common, best to not have others
|
|
check-shadow:
|
|
go vet -vettool=$$(which shadow) ./... 2>&1 | grep -v '"err"'
|
|
go vet -tags integration -vettool=$$(which shadow) 2>&1 | grep -v '"err"'
|
|
go vet -tags website -vettool=$$(which shadow) website/website.go 2>&1 | grep -v '"err"'
|
|
go vet -tags link -vettool=$$(which shadow) rfc/link.go 2>&1 | grep -v '"err"'
|
|
go vet -tags errata -vettool=$$(which shadow) rfc/errata.go 2>&1 | grep -v '"err"'
|
|
go vet -tags xr -vettool=$$(which shadow) rfc/xr.go 2>&1 | grep -v '"err"'
|
|
|
|
fuzz:
|
|
go test -fuzz FuzzParseSignature -fuzztime 5m ./dkim
|
|
go test -fuzz FuzzParseRecord -fuzztime 5m ./dkim
|
|
go test -fuzz . -fuzztime 5m ./dmarc
|
|
go test -fuzz . -fuzztime 5m ./dmarcrpt
|
|
go test -fuzz . -parallel 1 -fuzztime 5m ./imapserver
|
|
go test -fuzz . -parallel 1 -fuzztime 5m ./junk
|
|
go test -fuzz FuzzParseRecord -fuzztime 5m ./mtasts
|
|
go test -fuzz FuzzParsePolicy -fuzztime 5m ./mtasts
|
|
go test -fuzz . -parallel 1 -fuzztime 5m ./smtpserver
|
|
go test -fuzz . -fuzztime 5m ./spf
|
|
go test -fuzz FuzzParseRecord -fuzztime 5m ./tlsrpt
|
|
go test -fuzz FuzzParseMessage -fuzztime 5m ./tlsrpt
|
|
|
|
|
|
test-integration:
|
|
docker image build --pull --no-cache -f Dockerfile -t mox_integration_moxmail .
|
|
docker image build --pull --no-cache -f testdata/integration/Dockerfile.test -t mox_integration_test testdata/integration
|
|
-rm -rf testdata/integration/moxacmepebble/data
|
|
-rm -rf testdata/integration/moxmail2/data
|
|
-rm -f testdata/integration/tmp-pebble-ca.pem
|
|
MOX_UID=$$(id -u) docker-compose -f docker-compose-integration.yml run test
|
|
docker-compose -f docker-compose-integration.yml down --timeout 1
|
|
|
|
|
|
imaptest-build:
|
|
-docker-compose -f docker-compose-imaptest.yml build --no-cache --pull mox
|
|
|
|
imaptest-run:
|
|
-rm -r testdata/imaptest/data
|
|
mkdir testdata/imaptest/data
|
|
docker-compose -f docker-compose-imaptest.yml run --entrypoint /usr/local/bin/imaptest imaptest host=mox port=1143 user=mjl@mox.example pass=testtest mbox=imaptest.mbox
|
|
docker-compose -f docker-compose-imaptest.yml down
|
|
|
|
|
|
fmt:
|
|
go fmt ./...
|
|
gofmt -w -s *.go */*.go
|
|
|
|
tswatch:
|
|
bash -c 'while true; do inotifywait -q -e close_write *.ts webadmin/*.ts webaccount/*.ts webmail/*.ts; make frontend; done'
|
|
|
|
node_modules/.bin/tsc:
|
|
-mkdir -p node_modules/.bin
|
|
npm ci
|
|
|
|
install-js: node_modules/.bin/tsc
|
|
|
|
install-js0:
|
|
-mkdir -p node_modules/.bin
|
|
npm install --save-dev --save-exact typescript@5.1.6
|
|
|
|
webmail/webmail.js: lib.ts webmail/api.ts webmail/lib.ts webmail/webmail.ts
|
|
./tsc.sh $@ $^
|
|
|
|
webmail/msg.js: lib.ts webmail/api.ts webmail/lib.ts webmail/msg.ts
|
|
./tsc.sh $@ $^
|
|
|
|
webmail/text.js: lib.ts webmail/api.ts webmail/lib.ts webmail/text.ts
|
|
./tsc.sh $@ $^
|
|
|
|
webadmin/admin.js: lib.ts webadmin/api.ts webadmin/admin.ts
|
|
./tsc.sh $@ $^
|
|
|
|
webaccount/account.js: lib.ts webaccount/api.ts webaccount/account.ts
|
|
./tsc.sh $@ $^
|
|
|
|
frontend: node_modules/.bin/tsc webadmin/admin.js webaccount/account.js webmail/webmail.js webmail/msg.js webmail/text.js
|
|
|
|
install-apidiff:
|
|
go install golang.org/x/exp/cmd/apidiff@v0.0.0-20231206192017-f3f8817b8deb
|
|
|
|
genapidiff:
|
|
./apidiff.sh
|
|
|
|
docker:
|
|
docker build -t mox:dev .
|
|
|
|
docker-release:
|
|
./docker-release.sh
|
|
|
|
genwebsite:
|
|
./genwebsite.sh
|
|
|
|
buildall:
|
|
GOOS=linux GOARCH=arm go build
|
|
GOOS=linux GOARCH=arm64 go build
|
|
GOOS=linux GOARCH=amd64 go build
|
|
GOOS=linux GOARCH=386 go build
|
|
GOOS=openbsd GOARCH=amd64 go build
|
|
GOOS=freebsd GOARCH=amd64 go build
|
|
GOOS=netbsd GOARCH=amd64 go build
|
|
GOOS=darwin GOARCH=amd64 go build
|
|
GOOS=dragonfly GOARCH=amd64 go build
|
|
GOOS=illumos GOARCH=amd64 go build
|
|
GOOS=solaris GOARCH=amd64 go build
|
|
GOOS=aix GOARCH=ppc64 go build
|
|
GOOS=windows GOARCH=amd64 go build
|
|
# no plan9 for now
|