# 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
