Skip to content

fix(win): improve detection of msvc on windows for dispatcher.c pip i… #1417

fix(win): improve detection of msvc on windows for dispatcher.c pip i…

fix(win): improve detection of msvc on windows for dispatcher.c pip i… #1417

name: "🔥 LIVE - Python Library Hot-Swap"
on:
push:
branches: [ development ]
pull_request:
branches: [ development ]
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
services:
redis:
image: redis:7
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e . redis rich==13.7.1
- name: Configure omnipkg for non-interactive use
run: |
python - << 'EOF'
import sys
import site
import json
from pathlib import Path
import os
import sysconfig
try:
site_packages_path = site.getsitepackages()[0]
except (IndexError, AttributeError):
site_packages_path = sysconfig.get_paths()['purelib']
project_root = Path(os.environ['GITHUB_WORKSPACE'])
builder_script = project_root / 'src' / 'omnipkg' / 'package_meta_builder.py'
if not builder_script.exists():
print(f"Error: {builder_script} does not exist")
sys.exit(1)
config_data = {
'site_packages_path': site_packages_path,
'multiversion_base': str(Path(site_packages_path) / '.omnipkg_versions'),
'python_executable': sys.executable,
'builder_script_path': str(builder_script),
'redis_host': 'localhost',
'redis_port': 6379,
'redis_key_prefix': 'omnipkg:pkg:',
'paths_to_index': [str(Path(sys.executable).parent), '/usr/local/bin', '/usr/bin', '/bin', '/usr/sbin', '/sbin'],
'auto_cleanup': True,
'cleanup_threshold_days': 30
}
config_dir = Path.home() / '.config' / 'omnipkg'
config_dir.mkdir(parents=True, exist_ok=True)
config_path = config_dir / 'config.json'
try:
with open(config_path, 'w') as f:
json.dump(config_data, f, indent=2)
print(f'omnipkg config created at {config_path}:')
print(json.dumps(config_data, indent=2))
except Exception as e:
print(f"Error writing config: {e}")
sys.exit(1)
EOF
- name: Run the Demo - Rich Test
id: run_demo
run: |
echo "--- Running Omnipkg Demo for Rich Test (Python Module Switching) ---"
mkdir -p /tmp/omnipkg-artifacts
# Set pipefail to catch any failures in the pipeline
set -o pipefail
# Run the demo with proper error handling
if timeout 900 bash -c 'echo "1" | omnipkg demo' 2>&1 | tee /tmp/omnipkg-artifacts/rich_demo_output.txt; then
DEMO_EXIT_CODE=0
else
DEMO_EXIT_CODE=$?
fi
echo "## Rich Demo Output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat /tmp/omnipkg-artifacts/rich_demo_output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Check if demo completed successfully based on output content
if grep -q "Demo completed successfully!" /tmp/omnipkg-artifacts/rich_demo_output.txt || \
(grep -q "ALL RICH LIBRARY TESTS PASSED!" /tmp/omnipkg-artifacts/rich_demo_output.txt && \
grep -q "OMNIPKG RICH HANDLING IS FULLY FUNCTIONAL!" /tmp/omnipkg-artifacts/rich_demo_output.txt); then
echo "Demo completed successfully based on output content."
echo "demo_outcome=success" >> $GITHUB_OUTPUT
# Verify expected versions were tested
if grep -q "rich==13.7.1" /tmp/omnipkg-artifacts/rich_demo_output.txt && \
grep -q "rich==13.5.3" /tmp/omnipkg-artifacts/rich_demo_output.txt && \
grep -q "rich==13.4.2" /tmp/omnipkg-artifacts/rich_demo_output.txt; then
echo "✅ Rich demo verified: all expected versions (13.7.1, 13.5.3, 13.4.2) were tested successfully!"
exit 0
else
echo "⚠️ Warning: Not all expected Rich versions found in output, but demo appears to have completed."
echo "Proceeding anyway since core functionality passed."
exit 0
fi
else
echo "❌ Demo failed or did not complete successfully."
echo "demo_outcome=failure" >> $GITHUB_OUTPUT
echo "Demo output:"
cat /tmp/omnipkg-artifacts/rich_demo_output.txt
exit 1
fi
- name: Archive Demo Output
if: always()
uses: actions/upload-artifact@v4
with:
name: omnipkg-rich-demo-output
path: /tmp/omnipkg-artifacts/
retention-days: 7
compression-level: 6