Skip to content

Commit d82bb06

Browse files
committed
Add build-universe and verify-universe recipes
- Add build-universe: builds wheels for all 6 WAMP Python repos - Add verify-universe: verifies all wheels with twine/auditwheel - Add dist-universe to .gitignore - Fix install-tools to use [dev] instead of [dev,dev-latest] - Add auditwheel to install-build-tools Note: This work was completed with AI assistance (Claude Code).
1 parent 47d772d commit d82bb06

2 files changed

Lines changed: 223 additions & 2 deletions

File tree

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,8 @@ get-pip.py
5656
.db-mrealm-*
5757
.xbrnetwork
5858
test/test_automated/.test/
59+
60+
# justfile build artifacts
61+
dist-universe/
62+
.venvs/
63+
.uv-cache/

justfile

Lines changed: 218 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ install-build-tools venv="": (create venv)
394394
${VENV_PYTHON} -V
395395
${VENV_PYTHON} -m pip -V
396396
397-
${VENV_PYTHON} -m pip install build twine
397+
${VENV_PYTHON} -m pip install build twine auditwheel
398398
399399
# Install the development tools for this Package in a single environment (usage: `just install-tools cpy312`)
400400
install-tools venv="": (create venv)
@@ -413,7 +413,7 @@ install-tools venv="": (create venv)
413413
${VENV_PYTHON} -V
414414
${VENV_PYTHON} -m pip -V
415415
416-
${VENV_PYTHON} -m pip install -e .[dev,dev-latest]
416+
${VENV_PYTHON} -m pip install -e .[dev]
417417
418418
# Meta-recipe to run `install-tools` on all environments
419419
install-tools-all:
@@ -836,6 +836,222 @@ build-verifydist venv="": (install-build-tools venv)
836836
# Legacy alias for build-verifydist
837837
verify-dist venv="": (build-verifydist venv)
838838

839+
# Path to parent directory containing all WAMP Python repos
840+
WAMP_REPOS_DIR := parent_directory(justfile_directory())
841+
842+
# List of all WAMP Python repos in dependency order
843+
WAMP_REPOS := 'txaio autobahn-python zlmdb cfxdb wamp-xbr crossbar'
844+
845+
# Build all 6 WAMP Python repos (all Python versions) and collect wheels/sdists into dist-universe
846+
build-universe:
847+
#!/usr/bin/env bash
848+
set -e
849+
850+
echo "========================================================================"
851+
echo "Building WAMP Universe (all 6 Python repos, all Python versions)"
852+
echo "========================================================================"
853+
echo "Repos dir: {{ WAMP_REPOS_DIR }}"
854+
echo ""
855+
856+
# Clean and create dist-universe directory
857+
rm -rf ./dist-universe
858+
mkdir -p ./dist-universe
859+
860+
FAILURES=0
861+
BUILT_REPOS=""
862+
863+
for repo in {{ WAMP_REPOS }}; do
864+
REPO_PATH="{{ WAMP_REPOS_DIR }}/${repo}"
865+
echo ""
866+
echo "========================================================================"
867+
echo "Building: ${repo}"
868+
echo "========================================================================"
869+
870+
if [ ! -d "${REPO_PATH}" ]; then
871+
echo "❌ ERROR: Repository not found at ${REPO_PATH}"
872+
((++FAILURES))
873+
continue
874+
fi
875+
876+
if [ ! -f "${REPO_PATH}/justfile" ]; then
877+
echo "❌ ERROR: No justfile found in ${REPO_PATH}"
878+
((++FAILURES))
879+
continue
880+
fi
881+
882+
# Clean repo dist directory first
883+
rm -rf "${REPO_PATH}/dist"
884+
885+
# Build wheels for ALL Python versions (CPython + PyPy)
886+
echo "--> Building wheels for all Python versions..."
887+
if (cd "${REPO_PATH}" && just build-all); then
888+
echo "✓ Wheels built"
889+
else
890+
echo "❌ FAIL: Wheel build failed"
891+
((++FAILURES))
892+
continue
893+
fi
894+
895+
# Build source distribution (only need one, use system Python)
896+
echo "--> Building source distribution..."
897+
if (cd "${REPO_PATH}" && just build-sourcedist); then
898+
echo "✓ Source distribution built"
899+
else
900+
echo "❌ FAIL: Source distribution build failed"
901+
((++FAILURES))
902+
continue
903+
fi
904+
905+
# Copy artifacts to dist-universe
906+
echo "--> Copying artifacts to dist-universe..."
907+
cp "${REPO_PATH}"/dist/*.whl ./dist-universe/ 2>/dev/null || true
908+
cp "${REPO_PATH}"/dist/*.tar.gz ./dist-universe/ 2>/dev/null || true
909+
910+
BUILT_REPOS="${BUILT_REPOS} ${repo}"
911+
echo "${repo} complete"
912+
done
913+
914+
echo ""
915+
echo "========================================================================"
916+
echo "Build Universe Summary"
917+
echo "========================================================================"
918+
echo "Successfully built:${BUILT_REPOS}"
919+
echo "Failures: ${FAILURES}"
920+
echo ""
921+
echo "Artifacts in dist-universe:"
922+
ls -la ./dist-universe/
923+
echo ""
924+
925+
if [ ${FAILURES} -gt 0 ]; then
926+
echo "❌ BUILD UNIVERSE FAILED: ${FAILURES} repo(s) had errors"
927+
exit 1
928+
else
929+
WHEEL_COUNT=$(ls ./dist-universe/*.whl 2>/dev/null | wc -l)
930+
SDIST_COUNT=$(ls ./dist-universe/*.tar.gz 2>/dev/null | wc -l)
931+
echo "✅ BUILD UNIVERSE COMPLETE"
932+
echo " Wheels: ${WHEEL_COUNT}"
933+
echo " Source dists: ${SDIST_COUNT}"
934+
fi
935+
936+
# Verify all wheels and source dists in dist-universe (usage: `just verify-universe`)
937+
verify-universe: (install-build-tools)
938+
#!/usr/bin/env bash
939+
set -e
940+
VENV_NAME=$(just --quiet _get-system-venv-name)
941+
VENV_PATH="{{ VENV_DIR }}/${VENV_NAME}"
942+
VENV_PYTHON=$(just --quiet _get-venv-python "${VENV_NAME}")
943+
944+
echo "========================================================================"
945+
echo "Verifying WAMP Universe (dist-universe)"
946+
echo "========================================================================"
947+
echo "Using venv: ${VENV_NAME}"
948+
echo ""
949+
950+
# Check if dist-universe exists
951+
if [ ! -d "./dist-universe" ]; then
952+
echo "❌ ERROR: dist-universe/ directory not found"
953+
echo " Run 'just build-universe' first"
954+
exit 1
955+
fi
956+
957+
FAILURES=0
958+
959+
# Count distributions
960+
WHEEL_COUNT=$(ls ./dist-universe/*.whl 2>/dev/null | wc -l)
961+
SDIST_COUNT=$(ls ./dist-universe/*.tar.gz 2>/dev/null | wc -l)
962+
963+
echo "Found ${WHEEL_COUNT} wheel(s) and ${SDIST_COUNT} source dist(s)"
964+
echo ""
965+
966+
if [ "${WHEEL_COUNT}" -eq 0 ] && [ "${SDIST_COUNT}" -eq 0 ]; then
967+
echo "❌ ERROR: No distributions found in dist-universe/"
968+
exit 1
969+
fi
970+
971+
# Verify with twine check
972+
echo "========================================================================"
973+
echo "Running twine check"
974+
echo "========================================================================"
975+
if ${VENV_PYTHON} -m twine check ./dist-universe/*; then
976+
echo "✓ Twine check passed for all packages"
977+
else
978+
echo "❌ FAIL: Twine check failed"
979+
((++FAILURES))
980+
fi
981+
echo ""
982+
983+
# Check wheel types
984+
echo "========================================================================"
985+
echo "Checking wheel types"
986+
echo "========================================================================"
987+
for wheel in ./dist-universe/*.whl; do
988+
WHEEL_NAME=$(basename "$wheel")
989+
# Extract package name (everything before the version)
990+
PKG_NAME=$(echo "$WHEEL_NAME" | sed 's/-[0-9].*//')
991+
992+
if [[ "$WHEEL_NAME" == *"-py2.py3-none-any.whl" ]] || [[ "$WHEEL_NAME" == *"-py3-none-any.whl" ]]; then
993+
echo "${PKG_NAME}: Pure Python wheel"
994+
elif [[ "$WHEEL_NAME" == *"-cp3"*"-linux"* ]] || [[ "$WHEEL_NAME" == *"-cp3"*"-manylinux"* ]]; then
995+
echo "${PKG_NAME}: Platform-specific wheel (CPython/CFFI)"
996+
# Run auditwheel on platform-specific wheels
997+
echo " --> Running auditwheel show..."
998+
if [ -x "${VENV_PATH}/bin/auditwheel" ]; then
999+
"${VENV_PATH}/bin/auditwheel" show "$wheel" 2>/dev/null || echo " ⚠ auditwheel show had warnings"
1000+
else
1001+
echo " ⚠ auditwheel not available"
1002+
fi
1003+
elif [[ "$WHEEL_NAME" == *"-pp3"*"-linux"* ]] || [[ "$WHEEL_NAME" == *"-pp3"*"-manylinux"* ]]; then
1004+
echo "${PKG_NAME}: Platform-specific wheel (PyPy/CFFI)"
1005+
else
1006+
echo "${PKG_NAME}: Unknown wheel type: ${WHEEL_NAME}"
1007+
fi
1008+
done
1009+
echo ""
1010+
1011+
# Summary by package
1012+
echo "========================================================================"
1013+
echo "Package Summary"
1014+
echo "========================================================================"
1015+
for repo in {{ WAMP_REPOS }}; do
1016+
# Convert repo name to package name (autobahn-python -> autobahn)
1017+
case "${repo}" in
1018+
autobahn-python) PKG_PATTERN="autobahn-";;
1019+
wamp-xbr) PKG_PATTERN="xbr-";;
1020+
*) PKG_PATTERN="${repo}-";;
1021+
esac
1022+
1023+
WHEEL_EXISTS=$(ls ./dist-universe/${PKG_PATTERN}*.whl 2>/dev/null | head -1)
1024+
SDIST_EXISTS=$(ls ./dist-universe/${PKG_PATTERN}*.tar.gz 2>/dev/null | head -1)
1025+
1026+
if [ -n "${WHEEL_EXISTS}" ] && [ -n "${SDIST_EXISTS}" ]; then
1027+
echo "${repo}: wheel + sdist"
1028+
elif [ -n "${WHEEL_EXISTS}" ]; then
1029+
echo "${repo}: wheel only (missing sdist)"
1030+
elif [ -n "${SDIST_EXISTS}" ]; then
1031+
echo "${repo}: sdist only (missing wheel)"
1032+
else
1033+
echo "${repo}: MISSING"
1034+
((++FAILURES))
1035+
fi
1036+
done
1037+
echo ""
1038+
1039+
# Final summary
1040+
echo "========================================================================"
1041+
echo "Verification Summary"
1042+
echo "========================================================================"
1043+
echo "Wheels: ${WHEEL_COUNT}"
1044+
echo "Source dists: ${SDIST_COUNT}"
1045+
echo "Failures: ${FAILURES}"
1046+
echo ""
1047+
1048+
if [ ${FAILURES} -gt 0 ]; then
1049+
echo "❌ VERIFICATION FAILED"
1050+
exit 1
1051+
else
1052+
echo "✅ ALL DISTRIBUTIONS VERIFIED SUCCESSFULLY"
1053+
fi
1054+
8391055
# Show dependency tree
8401056
deps venv="": (install venv)
8411057
#!/usr/bin/env bash

0 commit comments

Comments
 (0)