add Makefile Dockerfile README.md
This commit is contained in:
90
Makefile
Normal file
90
Makefile
Normal file
@@ -0,0 +1,90 @@
|
||||
|
||||
# Makefile for hdwalletpy workflow
|
||||
# - Build a reusable Docker image
|
||||
# - Compile wheels in container (wheelhouse)
|
||||
# - Create host venv and install from wheelhouse
|
||||
# - Optionally run inside a warm container
|
||||
|
||||
# ---------- Config ----------
|
||||
IMAGE := python-build-env:3.11
|
||||
CONTAINER := hdwallet
|
||||
WORKDIR := /app
|
||||
VENV_HOST := .venv_host
|
||||
VENV_CONTAINER := /opt/venv
|
||||
WHEELHOUSE := wheelhouse
|
||||
|
||||
# ---------- Help ----------
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "Targets:"
|
||||
@echo " make build-image - Build Docker image with build tools and python3-venv"
|
||||
@echo " make wheels - Build dependency wheels into ./$(WHEELHOUSE)"
|
||||
@echo " make venv-host - Create host venv $(VENV_HOST) and install from wheelhouse"
|
||||
@echo " make up - Start a warm container named $(CONTAINER)"
|
||||
@echo " make shell - Open a shell in the warm container"
|
||||
@echo " make venv-container - Create venv inside container at $(VENV_CONTAINER) and install requirements"
|
||||
@echo " make down - Stop and remove the warm container"
|
||||
@echo " make clean-venv - Remove host venv $(VENV_HOST)"
|
||||
@echo " make clean-wheelhouse - Remove local wheel cache $(WHEELHOUSE)"
|
||||
@echo " make clean - Clean venv and wheelhouse"
|
||||
|
||||
# ---------- Build reusable image ----------
|
||||
.PHONY: build-image
|
||||
build-image:
|
||||
docker build -t $(IMAGE) .
|
||||
|
||||
# ---------- Build wheels in container ----------
|
||||
.PHONY: wheels
|
||||
wheels: requirements.txt
|
||||
docker run --rm -it -v "$$PWD":$(WORKDIR) -w $(WORKDIR) $(IMAGE) bash -lc '\
|
||||
python -m pip install --upgrade pip setuptools wheel && \
|
||||
mkdir -p $(WHEELHOUSE) && \
|
||||
python -m pip wheel -r requirements.txt -w $(WHEELHOUSE) \
|
||||
'
|
||||
|
||||
# ---------- Host venv from wheelhouse ----------
|
||||
.PHONY: venv-host
|
||||
venv-host: requirements.txt
|
||||
python3 -m venv $(VENV_HOST)
|
||||
. $(VENV_HOST)/bin/activate && \
|
||||
python -m pip install --upgrade pip setuptools wheel && \
|
||||
python -m pip install --no-index --find-links=$(WHEELHOUSE) -r requirements.txt && \
|
||||
python --version
|
||||
|
||||
# ---------- Warm container lifecycle ----------
|
||||
.PHONY: up
|
||||
up:
|
||||
docker run -dit -v "$$PWD":$(WORKDIR) -w $(WORKDIR) --name $(CONTAINER) $(IMAGE) bash
|
||||
|
||||
.PHONY: shell
|
||||
shell:
|
||||
docker exec -it $(CONTAINER) bash
|
||||
|
||||
.PHONY: venv-container
|
||||
venv-container: requirements.txt
|
||||
docker exec -it $(CONTAINER) bash -lc '\
|
||||
test -x $(VENV_CONTAINER)/bin/python || ( \
|
||||
python -m venv $(VENV_CONTAINER) && \
|
||||
. $(VENV_CONTAINER)/bin/activate && \
|
||||
python -m pip install --upgrade pip setuptools wheel && \
|
||||
python -m pip install -r requirements.txt \
|
||||
) && \
|
||||
. $(VENV_CONTAINER)/bin/activate && python --version \
|
||||
'
|
||||
|
||||
.PHONY: down
|
||||
down:
|
||||
- docker rm -f $(CONTAINER)
|
||||
|
||||
# ---------- Cleanup ----------
|
||||
.PHONY: clean-venv
|
||||
clean-venv:
|
||||
rm -rf $(VENV_HOST)
|
||||
|
||||
.PHONY: clean-wheelhouse
|
||||
clean-wheelhouse:
|
||||
rm -rf $(WHEELHOUSE)
|
||||
|
||||
.PHONY: clean
|
||||
clean: clean-venv clean-wheelhouse
|
||||
|
||||
Reference in New Issue
Block a user