mod makefile and install script for linux x86 - update 1
This commit is contained in:
@@ -1,379 +1,147 @@
|
|||||||
# Makefile for hdwalletpy workflow
|
#!/bin/bash
|
||||||
# - Build reusable Docker image (Python 3.12)
|
set -e
|
||||||
# - Vendor multi-platform wheels for offline air-gapped use
|
|
||||||
# - Compile wheels in container (wheelhouse)
|
|
||||||
# - Create host venv and install from wheelhouse or vendor/
|
|
||||||
# - Optionally run inside a warm container
|
|
||||||
|
|
||||||
# ---------- Platform Detection ----------
|
# Parse arguments
|
||||||
UNAME_S := $(shell uname -s)
|
DEV_MODE=false
|
||||||
UNAME_M := $(shell uname -m)
|
if [ "$1" == "--dev" ]; then
|
||||||
|
DEV_MODE=true
|
||||||
|
echo "🛠️ Development mode enabled"
|
||||||
|
fi
|
||||||
|
|
||||||
ifeq ($(UNAME_S),Darwin)
|
# Detect platform
|
||||||
PLATFORM := macos
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||||
ifeq ($(UNAME_M),arm64)
|
PLATFORM="linux-x86_64"
|
||||||
ARCH := arm64
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
ARCH=$(uname -m)
|
||||||
|
if [[ "$ARCH" == "arm64" ]]; then
|
||||||
|
PLATFORM="macos-arm64"
|
||||||
else
|
else
|
||||||
$(error Unsupported macOS architecture: $(UNAME_M))
|
echo "ERROR: Only macOS ARM64 is supported"
|
||||||
endif
|
exit 1
|
||||||
else ifeq ($(UNAME_S),Linux)
|
fi
|
||||||
PLATFORM := linux
|
|
||||||
ARCH := x86_64
|
|
||||||
else
|
else
|
||||||
$(error Unsupported OS: $(UNAME_S))
|
echo "ERROR: Unsupported platform: $OSTYPE"
|
||||||
endif
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
VENDOR_DIR := vendor/$(PLATFORM)-$(ARCH)
|
echo "Detected platform: $PLATFORM"
|
||||||
|
|
||||||
# ---------- Config ----------
|
# Check if vendor directory exists
|
||||||
IMAGE := hdwallet-build:3.12
|
VENDOR_PATH="vendor/$PLATFORM"
|
||||||
CONTAINER := hdwallet-dev
|
if [ "$DEV_MODE" = true ]; then
|
||||||
WORKDIR := /app
|
VENDOR_PATH="vendor/$PLATFORM-dev"
|
||||||
VENV_HOST := .venv
|
fi
|
||||||
VENV_CONTAINER := /opt/venv
|
|
||||||
WHEELHOUSE := wheelhouse
|
|
||||||
|
|
||||||
# Vendor directories for air-gapped deployment
|
if [ ! -d "$VENDOR_PATH" ]; then
|
||||||
VENDOR_MACOS := vendor/macos-arm64
|
echo "ERROR: $VENDOR_PATH not found!"
|
||||||
VENDOR_LINUX := vendor/linux-x86_64
|
if [ "$DEV_MODE" = true ]; then
|
||||||
|
echo "Run 'make vendor-linux-dev' to generate dev wheels"
|
||||||
# ---------- Help ----------
|
else
|
||||||
.PHONY: help
|
echo "Run 'make vendor-linux' or 'make vendor-macos' to generate wheels"
|
||||||
help:
|
|
||||||
@echo "pyhdwallet build system (macOS + Linux compatible)"
|
|
||||||
@echo ""
|
|
||||||
@echo "📦 Vendoring (for offline/air-gapped use):"
|
|
||||||
@echo " make vendor-macos - Build macOS ARM64 wheels (requires macOS native)"
|
|
||||||
@echo " make vendor-linux - Build Linux x86_64 wheels (Docker - any OS)"
|
|
||||||
@echo " make vendor-linux-dev - Build Linux x86_64 dev wheels (includes pytest)"
|
|
||||||
@echo " make vendor-all - Build runtime wheels for both platforms"
|
|
||||||
@echo " make vendor-all-dev - Build runtime + dev wheels for all platforms"
|
|
||||||
@echo " make verify-vendor - Test offline installation from vendor/"
|
|
||||||
@echo ""
|
|
||||||
@echo "🔨 Binary Distribution:"
|
|
||||||
@echo " make binary - Build standalone binary for current platform"
|
|
||||||
@echo " make binary-linux - Build Linux binary via Docker (any OS)"
|
|
||||||
@echo " make binary-all - Build binaries for all platforms"
|
|
||||||
@echo ""
|
|
||||||
@echo "🚀 Release Management:"
|
|
||||||
@echo " make release - Build complete release (binaries + vendors + checksums)"
|
|
||||||
@echo " make release-binaries - Copy binaries to releases/vX.Y.Z/"
|
|
||||||
@echo " make release-checksums - Generate SHA256SUMS for binaries"
|
|
||||||
@echo " make release-test - Test release binaries"
|
|
||||||
@echo " make clean-release - Remove all release artifacts"
|
|
||||||
@echo ""
|
|
||||||
@echo "🛠️ Development workflow (works on macOS + Linux):"
|
|
||||||
@echo " make install - Create venv and install runtime dependencies"
|
|
||||||
@echo " make install-offline - Install runtime deps from vendor/ (offline)"
|
|
||||||
@echo " make install-dev-offline - Install runtime + dev deps from vendor/ (offline)"
|
|
||||||
@echo " make test - Run test suite"
|
|
||||||
@echo " make build-image - Build Docker image (Python 3.12)"
|
|
||||||
@echo " make wheels - Build wheels into ./$(WHEELHOUSE)"
|
|
||||||
@echo " make up - Start warm dev container"
|
|
||||||
@echo " make shell - Open shell in warm container"
|
|
||||||
@echo " make down - Stop and remove dev container"
|
|
||||||
@echo ""
|
|
||||||
@echo "🧹 Cleanup:"
|
|
||||||
@echo " make clean - Remove venv, wheelhouse (keeps vendor/)"
|
|
||||||
@echo " make clean-vendor - Remove vendor/ only"
|
|
||||||
@echo " make clean-release - Remove releases/ only"
|
|
||||||
@echo ""
|
|
||||||
@echo "ℹ️ Platform Info:"
|
|
||||||
@echo " make info - Show platform detection info"
|
|
||||||
@echo ""
|
|
||||||
@echo "Platform notes:"
|
|
||||||
@echo " • vendor-macos requires native macOS (uses .venv312 with ARM64 Python)"
|
|
||||||
@echo " • vendor-linux works on any platform with Docker"
|
|
||||||
@echo " • vendor-linux-dev includes pytest for offline development"
|
|
||||||
@echo " • binary-linux works on any platform with Docker"
|
|
||||||
@echo " • All other targets work on macOS and Linux"
|
|
||||||
|
|
||||||
# ---------- Build reusable image ----------
|
|
||||||
.PHONY: build-image
|
|
||||||
build-image:
|
|
||||||
docker build -t $(IMAGE) .
|
|
||||||
|
|
||||||
# ---------- Vendoring for Air-Gapped Use ----------
|
|
||||||
.PHONY: vendor-macos
|
|
||||||
vendor-macos: requirements.txt
|
|
||||||
@echo "Building macOS ARM64 wheels (native)..."
|
|
||||||
@if [ ! -f ".venv312/bin/pip" ]; then \
|
|
||||||
echo "ERROR: .venv312 not found. Create it first:"; \
|
|
||||||
echo " python3.12 -m venv .venv312 && source .venv312/bin/activate"; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
fi
|
||||||
mkdir -p $(VENDOR_MACOS)
|
exit 1
|
||||||
.venv312/bin/pip download --dest $(VENDOR_MACOS) -r requirements.txt
|
fi
|
||||||
cd $(VENDOR_MACOS) && shasum -a 256 *.whl > SHA256SUMS
|
|
||||||
@echo "✓ macOS ARM64 wheels: $(VENDOR_MACOS)/"
|
|
||||||
|
|
||||||
.PHONY: vendor-linux
|
# Check for Python 3.12
|
||||||
vendor-linux: requirements.txt
|
if ! command -v python3.12 &> /dev/null; then
|
||||||
@echo "Building Linux x86_64 wheels (Docker)..."
|
echo "ERROR: Python 3.12 not found!"
|
||||||
mkdir -p $(VENDOR_LINUX)
|
echo "Please install Python 3.12:"
|
||||||
docker run --rm \
|
echo " macOS: brew install python@3.12"
|
||||||
--platform linux/amd64 \
|
echo " Linux: apt-get install python3.12 python3.12-venv"
|
||||||
-v "$$PWD":$(WORKDIR) \
|
exit 1
|
||||||
-w $(WORKDIR) \
|
fi
|
||||||
python:3.12-slim \
|
|
||||||
bash -c " \
|
|
||||||
set -e && \
|
|
||||||
apt-get update -qq && apt-get install -y -qq gcc g++ make libffi-dev && \
|
|
||||||
pip install --upgrade pip && \
|
|
||||||
pip download --dest $(VENDOR_LINUX) -r requirements.txt && \
|
|
||||||
pip wheel --wheel-dir $(VENDOR_LINUX) --no-deps $(VENDOR_LINUX)/*.tar.gz 2>/dev/null || true && \
|
|
||||||
rm -f $(VENDOR_LINUX)/*.tar.gz && \
|
|
||||||
cd $(VENDOR_LINUX) && sha256sum *.whl > SHA256SUMS \
|
|
||||||
"
|
|
||||||
@echo "✓ Linux x86_64 wheels: $(VENDOR_LINUX)/"
|
|
||||||
|
|
||||||
.PHONY: vendor-linux-dev
|
# Create venv
|
||||||
vendor-linux-dev: requirements-dev.txt
|
VENV_DIR=".venv"
|
||||||
@echo "Building Linux x86_64 dev wheels (Docker)..."
|
if [ ! -d "$VENV_DIR" ] || [ ! -f "$VENV_DIR/bin/python3.12" ]; then
|
||||||
mkdir -p $(VENDOR_LINUX)-dev
|
echo "Creating Python 3.12 virtual environment..."
|
||||||
docker run --rm \
|
python3.12 -m venv "$VENV_DIR"
|
||||||
--platform linux/amd64 \
|
echo "✓ Virtual environment created: $VENV_DIR"
|
||||||
-v "$$PWD":$(WORKDIR) \
|
|
||||||
-w $(WORKDIR) \
|
|
||||||
python:3.12-slim \
|
|
||||||
bash -c " \
|
|
||||||
set -e && \
|
|
||||||
apt-get update -qq && apt-get install -y -qq gcc g++ make libffi-dev && \
|
|
||||||
pip install --upgrade pip && \
|
|
||||||
pip download --dest $(VENDOR_LINUX)-dev -r requirements-dev.txt && \
|
|
||||||
pip wheel --wheel-dir $(VENDOR_LINUX)-dev --no-deps $(VENDOR_LINUX)-dev/*.tar.gz 2>/dev/null || true && \
|
|
||||||
rm -f $(VENDOR_LINUX)-dev/*.tar.gz && \
|
|
||||||
cd $(VENDOR_LINUX)-dev && sha256sum *.whl > SHA256SUMS \
|
|
||||||
"
|
|
||||||
@echo "✓ Linux x86_64 dev wheels: $(VENDOR_LINUX)-dev/"
|
|
||||||
|
|
||||||
.PHONY: vendor-all
|
|
||||||
vendor-all: vendor-macos vendor-linux
|
|
||||||
@echo ""
|
|
||||||
@echo "✓ All platforms vendored (runtime only):"
|
|
||||||
@echo " macOS ARM64: $(VENDOR_MACOS)/ ($$(ls $(VENDOR_MACOS)/*.whl 2>/dev/null | wc -l | xargs) wheels)"
|
|
||||||
@echo " Linux x86_64: $(VENDOR_LINUX)/ ($$(ls $(VENDOR_LINUX)/*.whl 2>/dev/null | wc -l | xargs) wheels)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Commit with: git add vendor/ && git commit -m 'vendor: update wheels'"
|
|
||||||
|
|
||||||
.PHONY: vendor-all-dev
|
|
||||||
vendor-all-dev: vendor-linux vendor-linux-dev
|
|
||||||
@echo ""
|
|
||||||
@echo "✓ All platform wheels (runtime + dev):"
|
|
||||||
@echo " Linux x86_64 (runtime): $(VENDOR_LINUX)/ ($$(ls $(VENDOR_LINUX)/*.whl 2>/dev/null | wc -l | xargs) wheels)"
|
|
||||||
@echo " Linux x86_64 (dev): $(VENDOR_LINUX)-dev/ ($$(ls $(VENDOR_LINUX)-dev/*.whl 2>/dev/null | wc -l | xargs) wheels)"
|
|
||||||
@echo ""
|
|
||||||
@echo "For macOS dev wheels, run on native macOS:"
|
|
||||||
@echo " python3.12 -m venv .venv312 && source .venv312/bin/activate"
|
|
||||||
@echo " pip download --dest vendor/macos-arm64-dev -r requirements-dev.txt"
|
|
||||||
|
|
||||||
.PHONY: verify-vendor
|
|
||||||
verify-vendor:
|
|
||||||
@echo "Testing offline installation from vendor/..."
|
|
||||||
@bash -c ' \
|
|
||||||
if [[ "$$OSTYPE" == "darwin"* ]]; then \
|
|
||||||
PLATFORM="macos-arm64"; \
|
|
||||||
else \
|
|
||||||
PLATFORM="linux-x86_64"; \
|
|
||||||
fi; \
|
|
||||||
echo "Platform: $$PLATFORM"; \
|
|
||||||
python3.12 -m venv .venv-verify && \
|
|
||||||
source .venv-verify/bin/activate && \
|
|
||||||
pip install --no-index --find-links=vendor/$$PLATFORM -r requirements.txt && \
|
|
||||||
python src/pyhdwallet.py test && \
|
|
||||||
echo "" && \
|
|
||||||
echo "✅ Vendor installation verified!" && \
|
|
||||||
deactivate && \
|
|
||||||
rm -rf .venv-verify \
|
|
||||||
'
|
|
||||||
|
|
||||||
# ---------- Offline Installation ----------
|
|
||||||
.PHONY: install-offline
|
|
||||||
install-offline:
|
|
||||||
@echo "Installing from vendor/ (runtime only)..."
|
|
||||||
@./install_offline.sh
|
|
||||||
|
|
||||||
.PHONY: install-dev-offline
|
|
||||||
install-dev-offline:
|
|
||||||
@echo "Installing from vendor/ (dev mode with pytest)..."
|
|
||||||
@./install_offline.sh --dev
|
|
||||||
|
|
||||||
# ---------- Binary Building ----------
|
|
||||||
.PHONY: binary
|
|
||||||
binary:
|
|
||||||
@echo "🔨 Building binary for current platform: $(PLATFORM)-$(ARCH)..."
|
|
||||||
ifeq ($(PLATFORM),macos)
|
|
||||||
@if [ ! -f "build_binary.sh" ]; then \
|
|
||||||
echo "❌ build_binary.sh not found!"; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
@bash build_binary.sh
|
|
||||||
else
|
else
|
||||||
@echo "⚠️ For Linux native builds, use build_binary.sh directly"
|
echo "Using existing venv: $VENV_DIR"
|
||||||
@echo " Or use: make binary-linux (builds via Docker)"
|
fi
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: binary-linux
|
# Activate venv
|
||||||
binary-linux:
|
source "$VENV_DIR/bin/activate"
|
||||||
@./build_binary_linux.sh
|
|
||||||
|
|
||||||
.PHONY: binary-all
|
# Verify Python version
|
||||||
binary-all:
|
PYTHON_VERSION=$(python --version 2>&1 | grep -oE '3\.[0-9]+')
|
||||||
@echo "🏗️ Building binaries for all platforms..."
|
echo "Using Python $PYTHON_VERSION from: $(which python)"
|
||||||
@echo ""
|
|
||||||
@echo "1️⃣ Building native binary..."
|
|
||||||
@$(MAKE) binary
|
|
||||||
@echo ""
|
|
||||||
@echo "2️⃣ Building Linux binary via Docker..."
|
|
||||||
@$(MAKE) binary-linux
|
|
||||||
@echo ""
|
|
||||||
@echo "✅ All binaries built:"
|
|
||||||
@ls -lh dist/pyhdwallet* 2>/dev/null | awk '{print " " $$9 " (" $$5 ")"}' || echo " No binaries found"
|
|
||||||
|
|
||||||
# ---------- Development Workflow ----------
|
if [[ "$PYTHON_VERSION" != "3.12" ]]; then
|
||||||
.PHONY: wheels
|
echo "ERROR: Expected Python 3.12, got $PYTHON_VERSION"
|
||||||
wheels: requirements.txt build-image
|
exit 1
|
||||||
docker run --rm \
|
fi
|
||||||
-v "$$PWD":$(WORKDIR) \
|
|
||||||
-w $(WORKDIR) \
|
|
||||||
$(IMAGE) \
|
|
||||||
bash -c " \
|
|
||||||
pip install --upgrade pip setuptools wheel && \
|
|
||||||
mkdir -p $(WHEELHOUSE) && \
|
|
||||||
pip wheel -r requirements.txt -w $(WHEELHOUSE) \
|
|
||||||
"
|
|
||||||
|
|
||||||
.PHONY: install
|
# Verify checksums
|
||||||
install: requirements.txt
|
if [ -f "$VENDOR_PATH/SHA256SUMS" ]; then
|
||||||
@if [ ! -d "$(VENV_HOST)" ]; then \
|
echo ""
|
||||||
echo "Creating venv: $(VENV_HOST)"; \
|
echo "Verifying checksums..."
|
||||||
python3.12 -m venv $(VENV_HOST); \
|
(cd "$VENDOR_PATH" && sha256sum -c SHA256SUMS --quiet) || {
|
||||||
|
echo "ERROR: Checksum verification failed!"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
echo "✓ Checksums verified"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install
|
||||||
|
echo ""
|
||||||
|
if [ "$DEV_MODE" = true ]; then
|
||||||
|
echo "Installing from $VENDOR_PATH (includes dev dependencies)..."
|
||||||
|
pip install --upgrade pip --quiet
|
||||||
|
pip install --no-index --find-links="$VENDOR_PATH" -r requirements-dev.txt
|
||||||
|
else
|
||||||
|
echo "Installing from $VENDOR_PATH..."
|
||||||
|
pip install --upgrade pip --quiet
|
||||||
|
pip install --no-index --find-links="$VENDOR_PATH" -r requirements.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Test
|
||||||
|
echo ""
|
||||||
|
echo "Running tests..."
|
||||||
|
|
||||||
|
if [ "$DEV_MODE" = true ]; then
|
||||||
|
# Run full test suite if pytest available
|
||||||
|
if python -c "import pytest" >/dev/null 2>&1; then
|
||||||
|
python -m pytest -v tests/test_vectors.py || {
|
||||||
|
echo "ERROR: Tests failed!"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
echo "⚠️ pytest not found in dev install!"
|
||||||
fi
|
fi
|
||||||
. $(VENV_HOST)/bin/activate && \
|
else
|
||||||
pip install --upgrade pip && \
|
# Only mention pytest in production mode
|
||||||
pip install -r requirements.txt && \
|
echo "⚠️ Skipping pytest (use --dev for full test suite)"
|
||||||
echo "✓ Virtual environment ready: $(VENV_HOST)"
|
fi
|
||||||
|
|
||||||
.PHONY: test
|
echo ""
|
||||||
test:
|
echo "Running built-in smoke test..."
|
||||||
@if [ ! -d "$(VENV_HOST)" ]; then \
|
python src/pyhdwallet.py test || {
|
||||||
echo "ERROR: Run 'make install' first"; \
|
echo "ERROR: Smoke test failed!"
|
||||||
exit 1; \
|
exit 1
|
||||||
fi
|
}
|
||||||
. $(VENV_HOST)/bin/activate && \
|
|
||||||
pytest -v tests/test_vectors.py && \
|
|
||||||
python src/pyhdwallet.py test
|
|
||||||
|
|
||||||
# ---------- Warm container lifecycle ----------
|
echo ""
|
||||||
.PHONY: up
|
echo "=========================================="
|
||||||
up: build-image
|
echo "✓ Installation complete and verified!"
|
||||||
docker run -dit \
|
echo "=========================================="
|
||||||
-v "$$PWD":$(WORKDIR) \
|
echo ""
|
||||||
-w $(WORKDIR) \
|
echo "Virtual environment: $VENV_DIR"
|
||||||
--name $(CONTAINER) \
|
echo "Python version: $(python --version)"
|
||||||
$(IMAGE) \
|
if [ "$DEV_MODE" = true ]; then
|
||||||
bash
|
echo "Mode: Development (pytest installed)"
|
||||||
|
else
|
||||||
.PHONY: shell
|
echo "Mode: Production (runtime only)"
|
||||||
shell:
|
fi
|
||||||
docker exec -it $(CONTAINER) bash
|
echo ""
|
||||||
|
echo "To activate this environment:"
|
||||||
.PHONY: down
|
echo " source $VENV_DIR/bin/activate"
|
||||||
down:
|
echo ""
|
||||||
- docker rm -f $(CONTAINER)
|
if [ "$DEV_MODE" = false ]; then
|
||||||
|
echo "For development with pytest:"
|
||||||
# ---------- Cleanup ----------
|
echo " ./install_offline.sh --dev"
|
||||||
.PHONY: clean-vendor
|
echo ""
|
||||||
clean-vendor:
|
fi
|
||||||
rm -rf vendor/
|
echo "Generate a wallet:"
|
||||||
|
echo " python src/pyhdwallet.py gen --help"
|
||||||
.PHONY: clean
|
|
||||||
clean: down
|
|
||||||
rm -rf $(VENV_HOST) $(WHEELHOUSE) .venv-verify .venv-offline-test
|
|
||||||
rm -rf dist/ build/ *.spec src/pyhdwallet_frozen.py
|
|
||||||
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
|
|
||||||
find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true
|
|
||||||
# NOTE: vendor/ is kept (use 'make clean-vendor' to remove)
|
|
||||||
|
|
||||||
# ---------- Platform-Aware Operations ----------
|
|
||||||
.PHONY: info
|
|
||||||
info:
|
|
||||||
@echo "Platform Information:"
|
|
||||||
@echo " OS: $(PLATFORM)"
|
|
||||||
@echo " Architecture: $(ARCH)"
|
|
||||||
@echo " Vendor dir: $(VENDOR_DIR)"
|
|
||||||
@echo " Python: $(shell python3 --version 2>/dev/null || echo 'not found')"
|
|
||||||
@echo " Docker: $(shell docker --version 2>/dev/null || echo 'not found')"
|
|
||||||
|
|
||||||
# ---------- Release Management ----------
|
|
||||||
VERSION := v1.1.0
|
|
||||||
RELEASE_DIR := releases/$(VERSION)
|
|
||||||
|
|
||||||
.PHONY: release-prep
|
|
||||||
release-prep:
|
|
||||||
@echo "📦 Preparing release $(VERSION)..."
|
|
||||||
@mkdir -p $(RELEASE_DIR)
|
|
||||||
|
|
||||||
.PHONY: release-binaries
|
|
||||||
release-binaries: release-prep binary binary-linux
|
|
||||||
@echo "📦 Copying binaries to $(RELEASE_DIR)..."
|
|
||||||
@cp dist/pyhdwallet $(RELEASE_DIR)/pyhdwallet-macos-arm64
|
|
||||||
@cp dist/pyhdwallet-linux $(RELEASE_DIR)/pyhdwallet-linux-x86_64
|
|
||||||
@echo "✅ Binaries copied"
|
|
||||||
|
|
||||||
.PHONY: release-checksums
|
|
||||||
release-checksums: release-binaries
|
|
||||||
@echo "🔐 Generating checksums..."
|
|
||||||
@cd $(RELEASE_DIR) && shasum -a 256 pyhdwallet-* > SHA256SUMS
|
|
||||||
@echo "✅ Checksums generated:"
|
|
||||||
@cat $(RELEASE_DIR)/SHA256SUMS
|
|
||||||
|
|
||||||
.PHONY: release-vendors
|
|
||||||
release-vendors: release-prep vendor-all
|
|
||||||
@echo "📦 Copying vendor wheels to $(RELEASE_DIR)..."
|
|
||||||
@mkdir -p $(RELEASE_DIR)/vendor
|
|
||||||
@cp -r vendor/macos-arm64 $(RELEASE_DIR)/vendor/
|
|
||||||
@cp -r vendor/linux-x86_64 $(RELEASE_DIR)/vendor/
|
|
||||||
@echo "✅ Vendor wheels copied"
|
|
||||||
|
|
||||||
.PHONY: release
|
|
||||||
release: release-checksums
|
|
||||||
@echo ""
|
|
||||||
@echo "🎉 Release $(VERSION) binaries ready!"
|
|
||||||
@echo ""
|
|
||||||
@if [ -d ".venv312" ]; then \
|
|
||||||
echo "📦 Building vendor wheels..."; \
|
|
||||||
$(MAKE) release-vendors; \
|
|
||||||
else \
|
|
||||||
echo "⚠️ Skipping vendor wheels (.venv312 not found)"; \
|
|
||||||
echo " To include vendors: python3.12 -m venv .venv312 && make release-vendors"; \
|
|
||||||
fi
|
|
||||||
@echo ""
|
|
||||||
@echo "Contents:"
|
|
||||||
@ls -lh $(RELEASE_DIR)/ | tail -n +2
|
|
||||||
@echo ""
|
|
||||||
@cat $(RELEASE_DIR)/SHA256SUMS
|
|
||||||
@echo ""
|
|
||||||
@echo "Next steps:"
|
|
||||||
@echo " 1. Test: make release-test"
|
|
||||||
@echo " 2. Tag: git tag -a $(VERSION) -m 'Release $(VERSION)'"
|
|
||||||
@echo " 3. Push: git push origin $(VERSION)"
|
|
||||||
|
|
||||||
.PHONY: release-test
|
|
||||||
release-test:
|
|
||||||
@echo "🧪 Testing release binaries..."
|
|
||||||
@echo ""
|
|
||||||
@echo "Testing macOS binary:"
|
|
||||||
@$(RELEASE_DIR)/pyhdwallet-macos-arm64 test || echo "⚠️ macOS binary test skipped (wrong platform)"
|
|
||||||
@echo ""
|
|
||||||
@echo "Testing Linux binary (via Docker):"
|
|
||||||
@docker run --rm --platform linux/amd64 \
|
|
||||||
-v "$$PWD/$(RELEASE_DIR)":/binaries \
|
|
||||||
ubuntu:22.04 \
|
|
||||||
/binaries/pyhdwallet-linux-x86_64 test
|
|
||||||
|
|
||||||
.PHONY: clean-release
|
|
||||||
clean-release:
|
|
||||||
@echo "🧹 Cleaning release artifacts..."
|
|
||||||
@rm -rf releases/
|
|
||||||
@echo "✅ Release artifacts cleaned"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user