Deepak Pant
Updated poetry setup
c6d9110
# =============================
# Variable Documentation
# =============================
# PYPI_TOKEN: Authentication token for PyPI publishing
# Usage: make publish PYPI_TOKEN=your_pypi_token
# PACKAGE_NAME: Name of the Python package for dependency tree
# Usage: make print-dependency-tree PACKAGE_NAME=your_package_name
# =============================
# Project Configuration
# =============================
PROJECT_NAME = resume-maker-ai-agent
GITHUB_USERNAME = DeepakPant93
GITHUB_REPO = $(PROJECT_NAME)
PROJECT_SLUG = resume_maker_ai_agent
CLOUD_REGION = eastus
TAG = latest
IMAGE_NAME = deepak93p/$(PROJECT_SLUG)
RESOURCE_GROUP = $(PROJECT_NAME)-rg
APP_NAME = $(PROJECT_NAME)-app
APP_ENV_NAME = $(APP_NAME)-env
BUMP_TYPE = patch
# =============================
# Help (Default Target)
# =============================
.PHONY: help
help: ## Display this help message
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-25s\033[0m %s\n", $$1, $$2}'
.DEFAULT_GOAL := help
# =============================
# Installation and Setup
# =============================
.PHONY: bake-env
bake-env: ## Install the poetry environment and set up pre-commit hooks
@echo "πŸš€ Creating virtual environment using pyenv and poetry"
@poetry install --all-extras
@poetry run pre-commit install || true
@max_retries=3; count=0; \
while ! make lint; do \
count=$$((count + 1)); \
if [ $$count -ge $$max_retries ]; then \
echo "Max retries reached. Exiting."; \
exit 1; \
fi; \
echo "Retrying make lint ($$count/$$max_retries)..."; \
done
@poetry shell
.PHONY: clean-env
clean-env: ## Remove the poetry environment
@echo "πŸš€ Removing virtual environment"
@rm -rf .venv
.PHONY: reset-env
reset-env: clean-env bake-env ## Install the poetry environment and set up pre-commit hooks
.PHONY: init-repo
init-repo: ## Initialize git repository
@echo "πŸš€ Initializing git repository"
@git init
@echo "πŸš€ Creating initial commit"
@git add .
@git commit -m "Initial commit"
@echo "πŸš€ Adding remote repository"
@git branch -M main
@git remote add origin git@github.com:$(GITHUB_USERNAME)/$(GITHUB_REPO).git
@echo "πŸš€ Pushing initial commit"
@git push -u origin main
# =============================
# Code Quality and Testing
# =============================
.PHONY: lint
lint: ## Run code quality tools
@echo "πŸš€ Checking Poetry lock file consistency with 'pyproject.toml'"
@poetry check --lock
@echo "πŸš€ Linting code with pre-commit"
@poetry run pre-commit run -a
@echo "πŸš€ Static type checking with mypy"
@poetry run mypy
@echo "πŸš€ Checking for obsolete dependencies with deptry"
# @poetry run deptry .
@echo "πŸš€ Checking for security vulnerabilities with bandit"
@poetry run bandit -c pyproject.toml -r resume_maker_ai_agent/ -ll
.PHONY: test
test: ## Run tests with pytest
@echo "πŸš€ Running tests with pytest"
@poetry run pytest --cov --cov-config=pyproject.toml --cov-report=term-missing
# =============================
# Build and Release
# =============================
.PHONY: bake
bake: clean-bake ## Build wheel file using poetry
@echo "πŸš€ Creating wheel file"
@poetry build
.PHONY: clean-bake
clean-bake: ## Clean build artifacts
@rm -rf dist
.PHONY: bump
bump: ## Bump project version
@echo "πŸš€ Bumping version"
@poetry run bump-my-version bump $(BUMP_TYPE)
.PHONY: publish
publish: ## Publish a release to PyPI
@echo "πŸš€ Publishing: Dry run"
@poetry config pypi-token.pypi $(PYPI_TOKEN)
@poetry publish --dry-run
@echo "πŸš€ Publishing"
@poetry publish
.PHONY: bake-and-publish
bake-and-publish: bake publish ## Build and publish to PyPI
.PHONY: update
update: ## Update project dependencies
@echo "πŸš€ Updating project dependencies"
@poetry update
@poetry run pre-commit install --overwrite
@echo "Dependencies updated successfully"
# =============================
# Run and Documentation
# =============================
.PHONY: run
run: ## Run the project's main application
@echo "πŸš€ Running the project"
@poetry run streamlit run $(PROJECT_SLUG)/app.py --server.port 7860
.PHONY: docs-test
docs-test: ## Test if documentation can be built without warnings or errors
@poetry run mkdocs build -s
.PHONY: docs
docs: ## Build and serve the documentation
@poetry run mkdocs serve
# =============================
# Docker
# =============================
.PHONY: bake-container
bake-container: ## Build Docker image
@echo "πŸš€ Building Docker image"
docker build -t $(IMAGE_NAME):$(TAG) -f Dockerfile .
.PHONY: container-push
container-push: ## Push Docker image to Docker Hub
@echo "πŸš€ Pushing Docker image to Docker Hub"
docker push $(IMAGE_NAME):$(TAG)
.PHONY: bake-container-and-push
bake-container-and-push: bake-container container-push ## Build and push Docker image to Docker Hub
.PHONY: clean-container
clean-container: ## Clean up Docker resources related to the app
@echo "πŸš€ Deleting Docker image for app: $(IMAGE_NAME)"
@docker images $(IMAGE_NAME) --format "{{.Repository}}:{{.Tag}}" | xargs -r docker rmi -f || echo "No image to delete"
@echo "πŸš€ Deleting unused Docker volumes"
@docker volume ls -qf dangling=true | xargs -r docker volume rm || echo "No unused volumes to delete"
@echo "πŸš€ Deleting unused Docker networks"
@docker network ls -q --filter "dangling=true" | xargs -r docker network rm || echo "No unused networks to delete"
@echo "πŸš€ Cleaning up stopped containers"
@docker ps -aq --filter "status=exited" | xargs -r docker rm || echo "No stopped containers to clean up"
# =============================
# Debug
# =============================
.PHONY: print-dependency-tree
print-dependency-tree: ## Print dependency tree
@echo "Printing dependency tree..."
@poetry run pipdeptree -p $(PACKAGE_NAME)
# =============================
# Cleanup
# =============================
.PHONY: teardown
teardown: clean-bake clean-container ## Clean up temporary files and directories and destroy the virtual environment, Docker image from your local machine
@echo "πŸš€ Cleaning up temporary files and directories"
@rm -rf .pytest_cache || true
@rm -rf dist || true
@rm -rf build || true
@rm -rf htmlcov || true
@rm -rf .venv || true
@rm -rf .mypy_cache || true
@rm -rf site || true
@find . -type d -name "__pycache__" -exec rm -rf {} + || true
@rm -rf .ruff_cache || true
@echo "πŸš€ Clean up completed."
.PHONY: teardown-all
teardown-all: teardown ## Clean up temporary files and directories and destroy the virtual environment, Docker image, and Cloud resources