britodfbr icon

Makefile_v2

britodfbr | PRO | 03/29/22 01:09:00 PM UTC (Edited) | 0 ⭐ | 1718 👁️ | Never ⏰ | []
Python |

7.97 KB

|

None

|

0 👍

/

0 👎

.DEFAULT_GOAL := help
DIRECTORIES = $$(find -wholename ./src -o -wholename ./incolumepy -o -wholename ./tests)
PKGNAME = 'incolumepy'
REPORT_DIR = 'coverage_report'
PYTHON_VERSION := 3.10
URLCOMPARE := 'https://github.com/incolumepy-prospections/incolumepy.dataclass/compare/'
CHANGELOGFILE := 'CHANGELOG.md'
 
.PHONY: black
black:   ##Apply code style black format
    @poetry run black $(DIRECTORIES) && git commit -m "style: Applied Code style Black format automaticly at `date +"%F %T"`" . || echo
    @echo ">>>  Checked code style Black format automaticly  <<<"
 
.PHONY: clean
clean:   ## Shallow clean into environment (.pyc, .cache, .egg, .log, et all)
    @echo -n "Starting cleanning environment .."
    @find ./ -name '*.pyc' -exec rm -f {} \;
    @find ./ -name '*~' -exec rm -f {} \;
    @find ./ -name 'Thumbs.db' -exec rm -f {} \;
    @find ./ -name '*.log' -exec rm -f {} \;
    @find ./ -name '*.log.*' -exec rm -f {} \;
    @find ./ -name ".cache" -exec rm -fr {} \;
    @find ./ -name "*.egg-info" -exec rm -rf {} \;
    @find ./ -name "*.coverage" -exec rm -rf {} \;
    @find ./ -maxdepth 1 -type d -name "*cov*" -exec rm -rf {} \;
    @rm -fv cov.xml
    @rm -rf docs/_build
    @echo " finished!"
 
.PHONY: clean-all
clean-all: clean   ## Deep cleanning into environment (dist, build, htmlcov, .tox, *_cache, et all)
    @echo "Starting Deep cleanning .."
    @rm -rf dist
    @rm -rf build
    @rm -rf htmlcov
    @rm -rf coverage_report
    @rm -rf .tox
    @find ./ \( -name "*_cache" -o -name '*cache__' \) -exec rm -rf {} 2> /dev/null \;
    @#fuser -k 8000/tcp &> /dev/null
    @poetry env list|awk '{print $$1}'|while read a; do poetry env remove $${a} 2> /dev/null && echo "$${a} removed."|| echo "$${a} not removed."; done
    @echo "Deep cleaning finished!"
 
.PHONY: check-black
check-black: ## black checking
    @echo "Black checking .."
    @poetry run black --check $(DIRECTORIES)
 
.PHONY: check-flake8
check-flake8: ## flake8 checking
    @echo "flake8 checking .."
    @poetry run flake8 --config pyproject.toml $(DIRECTORIES)
 
.PHONY: check-isort
check-isort:  ## check isort
    @echo "isort checking .."
    @poetry run isort --check --atomic --py all $(DIRECTORIES)
 
.PHONY: check-mypy
check-mypy: ## mypy checking
    @echo "mypy checking .."
    @poetry run mypy $(DIRECTORIES)
 
.PHONY: check-pylint
check-pylint: ## pylint checking
    @echo "pylint checking .."
    @poetry run pylint $(DIRECTORIES)
 
.PHONY: check-pydocstyle
check-pydocstyle: ## docstring checking
    @echo "pydocstyle checking .."
    @poetry run pydocstyle $(DIRECTORIES)
 
.PHONY: changelog
changelog:   ## Update changelog file
    @poetry run python -c "from incolumepy.utils import update_changelog; \
    update_changelog($(CHANGELOGFILE), urlcompare=$(URLCOMPARE))"
    @echo 'Atualização de CHANGESLOG realizada com sucesso.'
 
.PHONY: docsgen
docsgen: clean changelog    ## Generate documentation
    @ cd docs; make html; cd -
    @ git config core.hooksPath None
    @ git commit -m "docs: Updated documentation (`date +%F@%T`)" docs/ CHANGELOG.md
    @ git config core.hooksPath .git-hooks
 
.PHONY: format
format: isort black   ## Formate project code with code style (isort, black)
 
.PHONY: help
help:  ## Show this instructions
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
 
.PHOMY: install
install: setup  ## Install this package using poetry and all dependences
    @poetry install
#   @poetry add $(PKGNAME)
 
.PHONY: isort
isort:  ## isort apply
    @poetry run isort --atomic --py all $(DIRECTORIES) && git commit -m "style: Applied Code style isort format automaticly at `date +%F@%T`" . || echo
    @echo ">>>  Checked code style isort format automaticly  <<<"
 
.PHONY: lint
lint:  ## Run all linters (check-isort, check-black, flake8, pylint, mypy, pydocstyle)
lint: check-mypy check-pylint check-flake8 check-pydocstyle check-isort check-black
 
.PHONY: premajor
premajor:   ## Generate new premajor commit version default semver
    @ git config core.hooksPath None
    @v=$$(poetry version premajor); poetry run pytest tests/ && git commit -m "$$v" pyproject.toml $$(find -name version.txt)  #sem tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: premajor-force
premajor-force:    ## Generate new premajor commit version default semver and your tag forcing merge into main branch
    @ git config core.hooksPath None
    @msg=$$(poetry version premajor); poetry run pytest tests/; \
git commit -m "$$msg" pyproject.toml $$(find -name version.txt) \
&& git tag -f $$(poetry version -s) -m "$$msg"; \
git checkout main; git merge --no-ff dev -m "$$msg" \
&& git tag -f $$(poetry version -s) -m "$$msg" \
&& git checkout dev    #com tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: preminor
preminor:  ## Generate new preminor commit version default semver
    @ git config core.hooksPath None
    @v=$$(poetry version preminor); poetry run pytest -m "not slow" tests/ && git commit -m "$$v" pyproject.toml $$(find -name version.txt)  #sem tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: preminor-force
preminor-force:    ## Generate new preminor commit version default semver and your tag forcing merge into main branch
    @ git config core.hooksPath None
    @msg=$$(poetry version preminor); poetry run pytest tests/; \
git commit -m "$$msg" pyproject.toml $$(find -name version.txt) \
&& git tag -f $$(poetry version -s) -m "$$msg"; \
git checkout main; git merge --no-ff dev -m "$$msg" \
&& git tag -f $$(poetry version -s) -m "$$msg" \
&& git checkout dev    #com tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: prepatch
prepatch:  ## Generate new prepatch commit version default semver
    @ git config core.hooksPath None
    @v=$$(poetry version prepatch); poetry run pytest -m "not slow" tests/ && git commit -m "$$v" pyproject.toml $$(find -name version.txt)  #sem tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: prerelease
prerelease:   ## Generate new prerelease commit version default semver
    @ git config core.hooksPath None
    @v=$$(poetry version prerelease); poetry run pytest tests && git commit -m "$$v" pyproject.toml $$(find -name version.txt)  #sem tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: prerelease-force
prerelease-force:   ## Generate new prerelease commit version default semver and your tag forcing merge into main branch
    @ git config core.hooksPath None
    @msg=$$(poetry version prerelease); poetry run pytest tests/; \
git commit -m "$$msg" pyproject.toml $$(find -name version.txt) \
&& git tag -f $$(poetry version -s) -m "$$msg"; \
git checkout main; git merge --no-ff dev -m "$$msg" \
&& git tag -f $$(poetry version -s) -m "$$msg" \
&& git checkout dev    #com tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: publish-testing
publish-testing: ## Publish on test.pypi.org
    @poetry publish -r testpypi --build
 
.PHONY: release
release:    ## Generate new release commit with version/tag default semver
    @ git config core.hooksPath None
    @msg=$$(poetry version patch); poetry run pytest tests/; \
git commit -m "$$msg" pyproject.toml $$(find -name version.txt) \
&& git tag -f $$(poetry version -s) -m "$$msg"; \
git checkout main; git merge --no-ff dev -m "$$msg" \
&& git tag -f $$(poetry version -s) -m "$$msg" \
&& git checkout dev    #com tag
    @ git config core.hooksPath .git-hooks
 
.PHONY: retrocompatibility
retrocompatibility: ## Run tox and check retrompatibility betwen python versions
    @poetry run tox -e py36,py37,py38,py39,py310
 
.PHONY: safety
safety:  ## Check safety of packages into project.
    @poetry run safety check --full-report
 
.PHOMY: setup
setup: ## setup environment python with poetry
    @poetry env use $(PYTHON_VERSION)
    @git config core.hooksPath .git-hooks
#   @poetry shell
 
.PHONY: stats
stats: ## Run all tests avaliable and generate html coverage
    @poetry run pytest -sxv --cov=$(PKGNAME) --cov-report html:$(REPORT_DIR)/html --cov-report xml:$(REPORT_DIR)/cov.xml --cov-report annotate:$(REPORT_DIR)/annotate --cov-report term-missing:skip-covered tests/
 
.PHONY: test
test:   ## Tun all tests on venv
    @poetry run pytest tests/
 

Comments