# Targets .PHONY: all run test clean docker lint update-data all: run example: *.go ./cmd/example/*.go go build -o $@ ./cmd/example/main.go run: example ./example test: go test -v ./... clean: rm -f example blogs.json.tmp docker: docker build --progress plain . lint: golangci-lint run # Refresh the vendored dataset from the BlogsURL constant in hnblogs.go, which # is the single source of truth for the upstream location. The download lands # on a temporary file and only replaces blogs.json once it is complete, so an # interrupted fetch cannot leave a truncated dataset committed. update-data: @url=$$(sed -n 's/^const BlogsURL = "\(.*\)"$$/\1/p' hnblogs.go); \ test -n "$$url" || { echo "could not parse BlogsURL from hnblogs.go" >&2; exit 1; }; \ echo "fetching $$url"; \ curl -fsSL "$$url" -o blogs.json.tmp @test -s blogs.json.tmp || { echo "downloaded dataset is empty" >&2; rm -f blogs.json.tmp; exit 1; } mv blogs.json.tmp blogs.json $(MAKE) test