93 lines
2.6 KiB
Makefile
93 lines
2.6 KiB
Makefile
|
|
pwd = $(shell pwd)
|
|
name = $(notdir $(pwd))
|
|
email = $(shell cat "$$HOME/.secret/email.txt")
|
|
version = $(shell yq ".project.version" pyproject.toml)
|
|
|
|
binlink = ${HOME}/.local/bin/$(name)
|
|
srclink = $(pwd)/$(name)
|
|
venv = $(pwd)/.venv
|
|
venvbin = $(venv)/bin
|
|
activate = $(venv)/bin/activate
|
|
|
|
define clear_dir
|
|
if [ -d $(1) ]; then rm -r $(1); fi
|
|
mkdir $(1)
|
|
endef
|
|
|
|
$(venv): $(venvbin) $(binlink) $(srclink)
|
|
touch $(venv)
|
|
|
|
$(venvbin): $(activate) requirements.txt
|
|
. .venv/bin/activate && \
|
|
pip install -r requirements.txt
|
|
touch $(venvbin)
|
|
|
|
$(activate):
|
|
python -m venv --prompt $(name) .venv
|
|
. .venv/bin/activate && \
|
|
pip install --upgrade pip;
|
|
|
|
$(binlink):
|
|
echo "#!/bin/sh\n$(venv)/bin/python $(pwd)/src/main.py \"\$$@\"" > $(binlink)
|
|
chmod +x $(binlink)
|
|
|
|
$(srclink):
|
|
ln -s "./src" "$(srclink)"
|
|
sed 's/NAME/$(name)/' pyproject.toml > pyproject.temp
|
|
mv pyproject.temp pyproject.toml
|
|
|
|
share: $(venv) .git/refs/remotes/public
|
|
git checkout main && \
|
|
git push public --tags
|
|
|
|
test_local: $(venv)
|
|
python -m unittest src.tests
|
|
|
|
build:
|
|
$(call clear_dir,dist)
|
|
mv pyproject.toml pyproject.temp
|
|
sed 's/^email = .*/email = "$(email)"/' pyproject.temp > pyproject.toml
|
|
python -m build
|
|
mv pyproject.temp pyproject.toml
|
|
|
|
increment_patch:
|
|
$(eval patch = $(shell echo $(version) | grep -o '[0-9]*$$'))
|
|
$(eval patch = $(shell echo "$$(($(patch)+1))"))
|
|
$(eval majorminor = $(shell echo $(version) | grep -o '^[0-9]*.[0-9]*.'))
|
|
$(eval version = $(majorminor)$(patch))
|
|
sed 's/version = .*/version = "$(version)"/' pyproject.toml > pyproject.temp
|
|
mv pyproject.temp pyproject.toml
|
|
echo "$(version)"
|
|
|
|
test: $(venv) test_local increment_patch build
|
|
twine upload dist/* -r pypitest
|
|
$(call clear_dir,"tmp")
|
|
cd tmp && \
|
|
python -m venv .venv
|
|
. tmp/.venv/bin/activate && \
|
|
pip install --extra-index-url "https://test.pypi.org/simple" "$(name) == $(version)" || \
|
|
pip install --extra-index-url "https://test.pypi.org/simple" "$(name) == $(version)" && \
|
|
python -m unittest "$(name).tests"
|
|
|
|
publish: $(venv)
|
|
$(call clear_dir,"dist")
|
|
python -m build
|
|
twine upload dist/*
|
|
|
|
.git/refs/remotes/public:
|
|
git checkout -b main
|
|
$(eval user_name = $(shell yq ".git.github" pyproject.toml))
|
|
curl -u "$(user_name)" "https://api.github.com/user/repos" -d "{\"name\":\"$(name)\",\"private\":false}"
|
|
git remote add github "https://github.com/$(user_name)/$(name)"
|
|
git remote add public "/mnt/nas/git/$(name)"
|
|
git remote set-url --add --push public "/mnt/nas/git/$(name)"
|
|
git remote set-url --add --push public "https://github.com/$(user_name)/$(name)"
|
|
git push public main
|
|
|
|
clean:
|
|
rm -r .venv
|
|
rm $(binlink)
|
|
rm $(srclink)
|
|
|