check / check (push) Successful in 1m46s
FuzzNewManifestFromReader fails when the parser returns both or neither of a manifest and an error, or allocates more than sixteen times its input and the decompressed data it may read, plus room for the decoder's window. make test runs the committed seed corpus; make fuzz fuzzes for one minute, by hand only. Parser bug: MaxDecompressedSize did not bound decompression. The zstd decoder decoded a payload under 128 KiB in full, each frame up to its own 64 GiB limit, before the LimitReader read any of it. It now decodes synchronously, only what the LimitReader reads, with MaxDecompressedSize as its limit. Regression seeds: a frame claiming 8 GiB, and two frames each under the limit and together over it. Model: opus-5-5
105 lines
2.4 KiB
Makefile
105 lines
2.4 KiB
Makefile
export DOCKER_BUILDKIT := 1
|
|
export PROGRESS_NO_TRUNC := 1
|
|
GOPATH := $(shell go env GOPATH)
|
|
export PATH := $(PATH):$(GOPATH)/bin
|
|
PROTOC_GEN_GO := $(GOPATH)/bin/protoc-gen-go
|
|
SOURCEFILES := mfer/*.go mfer/*.proto internal/*/*.go cmd/*/*.go go.mod go.sum
|
|
ARCH := $(shell uname -m)
|
|
GITREV_BUILD := $(shell bash $(PWD)/bin/gitrev.sh 2>/dev/null || echo unknown)
|
|
APPNAME := mfer
|
|
VERSION := 0.1.0
|
|
export DOCKER_IMAGE_CACHE_DIR := $(HOME)/Library/Caches/Docker/$(APPNAME)-$(ARCH)
|
|
GOLDFLAGS += -X main.Version=$(VERSION)
|
|
GOLDFLAGS += -X main.Gitrev=$(GITREV_BUILD)
|
|
GOFLAGS := -ldflags "$(GOLDFLAGS)"
|
|
|
|
.PHONY: bootstrap setup docker default run ci test fuzz check lint fmt fmt-check fmt-check-go fmt-check-md hooks fixme
|
|
|
|
default: fmt test
|
|
|
|
bootstrap:
|
|
@script/bootstrap
|
|
|
|
setup:
|
|
@script/setup
|
|
|
|
run: ./bin/mfer
|
|
./$<
|
|
./$< gen
|
|
|
|
ci: test
|
|
|
|
test:
|
|
@script/test
|
|
|
|
fuzz:
|
|
@script/fuzz
|
|
|
|
$(PROTOC_GEN_GO):
|
|
test -e $(PROTOC_GEN_GO) || go install -v google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1
|
|
|
|
fixme:
|
|
@grep -nir fixme . | grep -v Makefile
|
|
|
|
check:
|
|
@script/check
|
|
|
|
fmt-check:
|
|
@script/fmt-check
|
|
|
|
# Halves of fmt-check, for environments that have only one toolchain:
|
|
# the Docker lint stage has Go but no node, the markdown stage the reverse.
|
|
fmt-check-go:
|
|
@script/fmt-check-go
|
|
|
|
fmt-check-md:
|
|
@script/prettier --check
|
|
|
|
hooks:
|
|
@script/install-precommit
|
|
|
|
devprereqs:
|
|
which golangci-lint || go install -v github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.12.2
|
|
|
|
mfer/mf.pb.go: mfer/mf.proto
|
|
cd mfer && go generate .
|
|
|
|
bin/mfer: $(SOURCEFILES) mfer/mf.pb.go
|
|
protoc --version
|
|
cd cmd/mfer && go build -tags urfave_cli_no_docs -o ../../bin/mfer $(GOFLAGS) .
|
|
|
|
clean:
|
|
rm -rfv mfer/*.pb.go bin/mfer cmd/mfer/mfer *.dockerimage
|
|
|
|
fmt:
|
|
@script/fmt
|
|
|
|
lint:
|
|
@script/lint
|
|
|
|
docker:
|
|
@script/docker
|
|
|
|
sneak-mfer.$(ARCH).tzst.dockerimage: $(SOURCEFILES) vendor.tzst modcache.tzst
|
|
docker build --progress plain --build-arg GITREV=$(GITREV_BUILD) -t sneak/mfer .
|
|
docker save sneak/mfer | pv | zstdmt -19 > $@
|
|
du -sh $@
|
|
|
|
godoc:
|
|
open http://127.0.0.1:6060
|
|
godoc -http=:6060
|
|
|
|
vendor.tzst: go.mod go.sum
|
|
go mod tidy
|
|
go mod vendor
|
|
cd vendor && tar -c . | pv | zstdmt -19 > $(PWD)/$@.tmp
|
|
rm -rf vendor
|
|
mv $@.tmp $@
|
|
|
|
modcache.tzst: go.mod go.sum
|
|
go mod tidy
|
|
cd $(HOME)/go/pkg && chmod -R u+rw . && rm -rf mod sumdb
|
|
go mod download -x
|
|
cd $(shell go env GOMODCACHE) && tar -c . | pv | zstdmt -19 > $(PWD)/$@.tmp
|
|
mv $@.tmp $@
|