116 lines
3.9 KiB
Bash
Executable File
116 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
echo "Building wheels for all platforms using Python 3.12..."
|
|
echo ""
|
|
|
|
# Check Docker is running
|
|
if ! docker info > /dev/null 2>&1; then
|
|
echo "ERROR: Docker is not running. Please start Docker Desktop."
|
|
exit 1
|
|
fi
|
|
|
|
# 1. macOS ARM64 (via Docker with Python 3.12)
|
|
echo "==> Building macOS ARM64 wheels (Docker + Python 3.12)..."
|
|
docker run --rm \
|
|
--platform linux/arm64 \
|
|
-v $(pwd):/work \
|
|
-w /work \
|
|
python:3.12-slim \
|
|
bash -c "
|
|
apt-get update -qq && apt-get install -y -qq gcc g++ make libffi-dev > /dev/null
|
|
pip install --upgrade pip > /dev/null
|
|
mkdir -p vendor/macos-arm64-docker
|
|
pip download --dest vendor/macos-arm64-docker -r requirements.txt
|
|
pip wheel --wheel-dir vendor/macos-arm64-docker --no-deps vendor/macos-arm64-docker/*.tar.gz 2>/dev/null || true
|
|
rm -f vendor/macos-arm64-docker/*.tar.gz
|
|
"
|
|
echo "✓ macOS ARM64: $(ls vendor/macos-arm64-docker/*.whl 2>/dev/null | wc -l | xargs) wheels"
|
|
|
|
# Actually, let's use native Mac Python 3.12 if available, otherwise use what we have
|
|
echo ""
|
|
echo "==> Building macOS ARM64 wheels (native - using your .venv312)..."
|
|
mkdir -p vendor/macos-arm64
|
|
|
|
# Use the Python from your working venv
|
|
if [ -f ".venv312/bin/pip" ]; then
|
|
echo "Using Python from .venv312..."
|
|
.venv312/bin/pip download --dest vendor/macos-arm64 -r requirements.txt
|
|
echo "✓ macOS ARM64: $(ls vendor/macos-arm64/*.whl 2>/dev/null | wc -l | xargs) wheels"
|
|
else
|
|
echo "ERROR: .venv312 not found!"
|
|
echo "Please activate your working venv first:"
|
|
echo " source .venv312/bin/activate"
|
|
echo " pip download --dest vendor/macos-arm64 -r requirements.txt"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. Linux x86_64 (via Docker)
|
|
echo ""
|
|
echo "==> Building Linux x86_64 wheels (Docker + Python 3.12)..."
|
|
docker run --rm \
|
|
-v $(pwd):/work \
|
|
-w /work \
|
|
python:3.12-slim \
|
|
bash -c "
|
|
apt-get update -qq && apt-get install -y -qq gcc g++ make libffi-dev > /dev/null
|
|
pip install --upgrade pip > /dev/null
|
|
mkdir -p vendor/linux-x86_64
|
|
pip download --dest vendor/linux-x86_64 -r requirements.txt
|
|
pip wheel --wheel-dir vendor/linux-x86_64 --no-deps vendor/linux-x86_64/*.tar.gz 2>/dev/null || true
|
|
rm -f vendor/linux-x86_64/*.tar.gz
|
|
"
|
|
echo "✓ Linux x86_64: $(ls vendor/linux-x86_64/*.whl 2>/dev/null | wc -l | xargs) wheels"
|
|
|
|
# 3. Generate SHA256 checksums
|
|
echo ""
|
|
echo "==> Generating checksums..."
|
|
for platform in macos-arm64 linux-x86_64; do
|
|
if [ -d "vendor/$platform" ] && [ "$(ls -A vendor/$platform/*.whl 2>/dev/null)" ]; then
|
|
(cd vendor/$platform && shasum -a 256 *.whl > SHA256SUMS)
|
|
echo "✓ Checksums for $platform"
|
|
fi
|
|
done
|
|
|
|
# 4. Create provenance file
|
|
echo ""
|
|
echo "==> Creating provenance documentation..."
|
|
cat > vendor/PROVENANCE.md << EOF
|
|
# Dependency Provenance
|
|
|
|
All wheels generated on: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
|
Python version: 3.12
|
|
Build machine: $(uname -s) $(uname -m)
|
|
Docker used: Yes (python:3.12-slim)
|
|
|
|
## Platforms
|
|
- macOS ARM64: Built using .venv312 (Python 3.12)
|
|
- Linux x86_64: Built using Docker python:3.12-slim
|
|
|
|
## Package Versions
|
|
$(cat requirements.txt | head -20)
|
|
|
|
## Integrity Verification
|
|
Each platform directory contains SHA256SUMS for verification:
|
|
\`\`\`bash
|
|
cd vendor/linux-x86_64
|
|
shasum -a 256 -c SHA256SUMS
|
|
\`\`\`
|
|
|
|
Last updated: $(date -u +"%Y-%m-%d")
|
|
Built by: $(git config user.name) <$(git config user.email)>
|
|
Commit: $(git rev-parse --short HEAD 2>/dev/null || echo "not in git")
|
|
EOF
|
|
|
|
echo ""
|
|
echo "✓ All platforms built successfully!"
|
|
echo ""
|
|
echo "Summary:"
|
|
echo " macOS ARM64: vendor/macos-arm64/ ($(ls vendor/macos-arm64/*.whl 2>/dev/null | wc -l | xargs) wheels)"
|
|
echo " Linux x86_64: vendor/linux-x86_64/ ($(ls vendor/linux-x86_64/*.whl 2>/dev/null | wc -l | xargs) wheels)"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Verify: ls vendor/*/SHA256SUMS"
|
|
echo " 2. Test: ./install_offline.sh"
|
|
echo " 3. Commit: git add vendor/ && git commit -m 'vendor: add multi-platform wheels'"
|