# Copyright 2023 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# Makefile for common tasks.

default:
	@echo "usage: make TARGET"

# Copy a gzipped tar of a Go docker image from a bucket.
# This is the image that is used by the sandbox.
# The file must live in the repo directory so that cmd/worker/Dockerfile
# can access it.
# We assume that the file exists in the bucket. 
# See the rule below for how to create the image.
go-image.tar.gz:
	gsutil cp gs://go-ecosystem/$@ $@

# Use this rule to build a go image for a specific Go version.
# E.g.
#	make go-image-1.19.4.tar.gz
# To change the sandbox image permanently, copy it to GCP:
#
#	gsutil cp go-image.1.19.4.tar.gz gs://go-ecosystem/go-image.tar.gz
# Then delete the local copy.
go-image-%.tar.gz:
	docker export $(shell docker create golang:$*) | gzip > go-image-$*.tar.gz

# Download the Go vulnerability DB to a local directory, so vulndb can access it
# from the sandbox, which has no network connectivity.
#
# Get the last-modified time of the index.json file, which is reported as the
# last-modified time of the DB, and save it to a local file. (The last-modified
# time of the local index.json is not what we want: it is the time that gsutil cp
# wrote the file.)
#
# This directory must live in the repo directory so that cmd/worker/Dockerfile
# can access it.
go-vulndb:
	gsutil -m -q cp -r gs://go-vulndb .
	gsutil stat gs://go-vulndb/index.json | \
		awk '$$1 == "Update" { for (i = 4; i <= NF; i++) printf("%s ", $$i); printf("\n"); }' \
		> go-vulndb/LAST_MODIFIED

# Remove comments from a json file.
%.json: %.json.commented
	sed '/^[ \t]*#/d' $< > $@

IMAGE := ecosystem-worker-test

# Enable the docker container to authenticate to Google Cloud.
# This assumes the user has run "gcloud auth application-default login".
DOCKER_AUTH_ARGS := -v "$(HOME)/.config/gcloud:/creds" \
	--env GOOGLE_APPLICATION_CREDENTIALS=/creds/application_default_credentials.json

DOCKER_RUN_ARGS := --rm --privileged -p 8080:8080 \
	--env GO_ECOSYSTEM_BINARY_BUCKET=go-ecosystem \
	--env GOOGLE_CLOUD_PROJECT=go-ecosystem \
	$(DOCKER_AUTH_ARGS)

DOCKER_ID_FILE := /tmp/ecosystem-docker-container-id


# Build a docker image for testing.
# This target is a local file that marks the time of the last
# docker build. We use a file because make uses only local file timestamps to determine
# whether a target needs to be regenerated.
docker-build: go-image.tar.gz go-vulndb cmd/worker/*.go internal/**/*.go cmd/govulncheck_sandbox/* config.json cmd/worker/Dockerfile
	docker build -f cmd/worker/Dockerfile -t $(IMAGE) . \
          --build-arg DOCKER_IMAGE=$(IMAGE) \
          --build-arg BQ_DATASET=disable
	touch $@


# Run the docker image locally, for testing.
# The worker will start and listen at port 8080.
docker-run: docker-build
	docker run $(DOCKER_RUN_ARGS) $(IMAGE)

# Run the docker image and enter an interactive shell.
# The worker does not start.
docker-run-shell: docker-build
	docker run -it $(DOCKER_RUN_ARGS) $(IMAGE) /bin/bash

# Run the docker image in the background, waiting until the server is ready.
docker-run-bg: docker-build
	docker run --detach $(DOCKER_RUN_ARGS) $(IMAGE) > $(DOCKER_ID_FILE)
	while ! curl -s --head http://localhost:8080 > /dev/null; do sleep 1; done

test: docker-run-bg govulncheck-test analysis-test
	docker container stop `cat $(DOCKER_ID_FILE)`

GOVULNCHECK_TEST_FILE := /tmp/vtest.out

# Test by scanning a small module.
govulncheck-test:
	curl -s 'http://localhost:8080/govulncheck/scan/github.com/fossas/fossa-cli@v1.1.10?importedby=1&serve=true' > $(GOVULNCHECK_TEST_FILE)
	@if [[ `grep -c GO-2020-0016 $(GOVULNCHECK_TEST_FILE)` -ge 2 ]]; then \
	    echo PASS; \
	    rm $(GOVULNCHECK_TEST_FILE); \
	else \
	    echo FAIL; \
	    echo "output in $(GOVULNCHECK_TEST_FILE)"; \
	    docker container stop `cat $(DOCKER_ID_FILE)`; \
	    exit 1; \
	fi

ANALYSIS_TEST_FILE := /tmp/atest.out

analysis-test:
	curl -sa 'http://localhost:8080/analysis/scan/github.com/jba/cli@v0.6.0?binary=findcall&args=-name+stringsCut&serve=true' > $(ANALYSIS_TEST_FILE)
	@if grep -q Diagnostics $(ANALYSIS_TEST_FILE); then \
	    echo PASS; \
	    rm $(ANALYSIS_TEST_FILE); \
	else \
	    echo FAIL; \
	    echo "output in $(ANALYSIS_TEST_FILE)"; \
	    docker container stop `cat $(DOCKER_ID_FILE)`; \
	    exit 1; \
	fi

clean:
	rm -f go-image.tar.gz
	rm -rf go-vulndb
	rm -f config.json
	rm -f govulncheck_sandbox

.PHONY: docker-run docker-run-bg test govulncheck-test analysis-test \
	clean build-go-image
