# Defensive settings for make: # https://tech.davis-hansson.com/p/make/ SHELL:=bash .ONESHELL: .SHELLFLAGS:=-eu -o pipefail -c .SILENT: .DELETE_ON_ERROR: MAKEFLAGS+=--warn-undefined-variables MAKEFLAGS+=--no-builtin-rules export PS1?=$$ # Prefix echoed recipe commands with the recipe line number for debugging: export PS4?=:$$LINENO+ # Get version related variables export DATE:=$(shell date +'%Y.%m.%d') export DATE_COMMIT_COUNT:=$(shell git rev-list --count HEAD --since="$(DATE) 00:00:00") export COMMIT_HASH:=$(shell git rev-parse --short HEAD) # Set Local version to YYYY.MM.DD- export LOCAL_VERSION="$(DATE)+$(COMMIT_HASH)" # Set PyPi version to YYYY.MM.DD or YYYY.MM.DD.postN if N > 0 ifeq ("$(DATE_COMMIT_COUNT)", "0") export PYPI_VERSION="$(DATE)" else export PYPI_VERSION="$(DATE).post$(DATE_COMMIT_COUNT)" endif # Finished with `$(shell)`, echo recipe commands going forward .SHELLFLAGS+= -x ### Top-level targets: .PHONY: all all: check_lint docs docker docker_ubuntu docker_gui lint: python3 -m ruff format . python3 -m ruff check --fix . python3 -m pylint src check_lint: ruff format --check . \ && ruff check . \ && pylint src/ wheel: clean $(shell echo "__pypi_version__ = \"$(PYPI_VERSION)\"" > src/ytdl_sub/__init__.py) $(shell echo "__local_version__ = \"$(LOCAL_VERSION)\"" >> src/ytdl_sub/__init__.py) cat src/ytdl_sub/__init__.py pip3 install build python3 -m build docker_stage: wheel cp dist/*.whl docker/root/ cp -R examples docker/root/defaults/ docker: docker_stage sudo docker build --progress=plain --no-cache -t ytdl-sub:local docker/ docker_ubuntu: docker_stage sudo docker build --progress=plain --no-cache -t ytdl-sub-ubuntu:local -f docker/Dockerfile.ubuntu docker/ docker_gui: docker_stage sudo docker build --progress=plain --no-cache -t ytdl-sub-gui:local -f docker/Dockerfile.gui docker/ executable: clean pyinstaller ytdl-sub.spec mv dist/ytdl-sub dist/ytdl-sub${EXEC_SUFFIX} docs: REGENERATE_DOCS=1 pytest tests/unit/docgen/test_docgen.py sphinx-build --write-all --fail-on-warning --nitpicky -b html \ "./docs/source/" "./docs/build/" clean: rm -rf \ .pytest_cache/ \ build/ \ dist/ \ src/ytdl_sub.egg-info/ \ docs/build/ \ .coverage \ docker/root/*.whl \ docker/root/defaults/examples \ coverage.xml .PHONY: lint check_lint wheel docker_stage docker docs clean