# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

VERSION ?= next

# determine host platform
ifeq ($(OS),Windows_NT)
    OS := Windows
else ifeq ($(shell uname -s),Darwin)
    OS := Darwin
else
    OS := $(shell sh -c 'uname 2>/dev/null || echo Unknown')
endif

.PHONY: env
env: poetry gen
	poetry install --all-extras
	poetry run pip install --upgrade pip

.PHONY: poetry poetry-fallback
# poetry installer may not work on macOS's default python
# falls back to pipx installer
poetry-fallback:
	python3 -m pip install --user pipx
	python3 -m pipx ensurepath
	pipx install poetry
	pipx upgrade poetry

poetry:
ifeq ($(OS),Windows)
	-powershell (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
	poetry self update
else
	-curl -sSL https://install.python-poetry.org | python3 -
	poetry self update || $(MAKE) poetry-fallback
endif

.PHONY: gen
gen:
	poetry run pip install grpcio-tools packaging
	poetry run python3 tools/grpc_code_gen.py

.PHONY: gen-basic
gen-basic:
	python3 -m pip install grpcio-tools packaging
	python3 tools/grpc_code_gen.py

.PHONY: install
install: gen-basic
	python3 -m pip install --upgrade pip
	python3 -m pip install .[all]

.PHONY: lint
# flake8 configurations should go to the file setup.cfg
lint: clean
	poetry run flake8 .
	poetry run pylint --disable=all --enable=E0602,E0603,E1101 skywalking tests

.PHONY: fix
# fix problems described in CodingStyle.md - verify outcome with extra care
fix:
	poetry run unify -r --in-place .
	poetry run flynt -tc -v .

.PHONY: doc-gen
doc-gen: gen
	poetry run python3 tools/plugin_doc_gen.py
	poetry run python3 tools/config_doc_gen.py

.PHONY: check-doc-gen
check-doc-gen: doc-gen
	@if [ ! -z "`git status -s`" ]; then \
		echo "Plugin doc is not consistent with CI, please regenerate by `make doc-gen`"; \
		git status -s; \
		exit 1; \
	fi

.PHONY: license
license: clean
	docker run -it --rm -v $(shell pwd):/github/workspace ghcr.io/apache/skywalking-eyes/license-eye:20da317d1ad158e79e24355fdc28f53370e94c8a header check

.PHONY: test
test: env
	sudo apt-get -y install jq
	docker build --build-arg BASE_PYTHON_IMAGE=3.7-slim -t apache/skywalking-python-agent:latest-plugin --no-cache . -f tests/plugin/Dockerfile.plugin
	poetry run pytest -v $(bash tests/gather_test_paths.sh)

.PHONY: package
package: clean gen
	poetry build

.PHONY: upload-test
upload-test: package
	poetry run twine upload --repository-url https://test.pypi.org/legacy/ dist/*

.PHONY: upload
upload: package
	poetry run twine upload dist/*

.PHONY: build-image
build-image:
	$(MAKE) -C docker build AGENT_VERSION=$(VERSION)

.PHONY: push-image
push-image:
	$(MAKE) -C docker push AGENT_VERSION=$(VERSION)

.PHONY: clean
# FIXME change to python based so we can run on windows
clean:
	rm -rf skywalking/protocol
	rm -rf apache_skywalking.egg-info dist build
	rm -rf skywalking-python*.tgz*
	find . -name "__pycache__" -exec rm -r {} +
	find . -name ".pytest_cache" -exec rm -r {} +
	find . -name "*.pyc" -exec rm -r {} +

.PHONY: release
release: clean lint license
	tar -zcvf skywalking-python-src-$VERSION.tgz --exclude .venv *
	gpg --batch --yes --armor --detach-sig skywalking-python-src-$VERSION.tgz
	shasum -a 512 skywalking-python-src-$VERSION.tgz > skywalking-python-src-$VERSION.tgz.sha512
