Skip to content

Update numpy-scipy-c-extension-test.yml #16

Update numpy-scipy-c-extension-test.yml

Update numpy-scipy-c-extension-test.yml #16

name: 🧠 TensorFlow Complex Dependency Switching Test
on:
workflow_dispatch:
push:
branches: ['main']
jobs:
run-tensorflow-test:
runs-on: ubuntu-latest
permissions:
contents: write
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 code
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 tensorflow==2.13.0
- name: ⚙️ Configure omnipkg
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 / '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: 🧪 Debug Environment
run: |
echo "--- Debugging Environment ---"
python --version
pip show omnipkg redis tensorflow
redis-cli -h localhost -p 6379 ping
- name: 🧪 Run the Demo - TensorFlow Test
id: run_demo
run: |
echo "--- Running Omnipkg Demo for TensorFlow Test (Complex Dependencies) ---"
mkdir -p /tmp/omnipkg-artifacts
set -o pipefail
timeout 600 bash -c 'echo "4" | omnipkg demo 2>&1 | tee /tmp/omnipkg-artifacts/tensorflow_demo_output.txt; exit ${PIPESTATUS[0]}'
DEMO_EXIT_CODE=$?
echo "DEBUG: omnipkg demo exit code: $DEMO_EXIT_CODE"
echo "## TensorFlow Demo Output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat /tmp/omnipkg-artifacts/tensorflow_demo_output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
if [ $DEMO_EXIT_CODE -eq 0 ] || \
(grep -q "ALL TENSORFLOW TESTS PASSED" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt && \
grep -q "Demo completed successfully" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt); then
echo "Demo completed successfully (exit code $DEMO_EXIT_CODE, logs verified)."
echo "demo_outcome=success" >> $GITHUB_OUTPUT
if grep -q "tensorflow==2.13.0" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt && \
grep -q "typing_extensions==4.5.0" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt && \
grep -q "tensorflow-estimator==2.13.0" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt && \
grep -q "keras==2.13.1" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt && \
grep -q "ALL TENSORFLOW TESTS PASSED" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt && \
grep -q "Cleanup complete - reset to single version" /tmp/omnipkg-artifacts/tensorflow_demo_output.txt; then
echo "TensorFlow demo verified: tensorflow==2.13.0, typing_extensions==4.5.0, tensorflow-estimator==2.13.0, keras==2.13.1, all tests passed, cleanup complete!"
else
echo "Error: Expected TensorFlow demo output not found."
echo "Missing one of: 'tensorflow==2.13.0', 'typing_extensions==4.5.0', 'tensorflow-estimator==2.13.0', 'keras==2.13.1', 'ALL TENSORFLOW TESTS PASSED', or 'Cleanup complete'"
cat /tmp/omnipkg-artifacts/tensorflow_demo_output.txt
exit 1
fi
else
echo "Demo failed with exit code $DEMO_EXIT_CODE."
echo "demo_outcome=failure" >> $GITHUB_OUTPUT
cat /tmp/omnipkg-artifacts/tensorflow_demo_output.txt
exit 1
fi
- name: 📊 Check Omnipkg Status
id: check_status
run: |
echo "--- Checking Omnipkg Status ---"
mkdir -p /tmp/omnipkg-artifacts
omnipkg status > /tmp/omnipkg-artifacts/status_output.txt
echo "## Omnipkg Status Output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat /tmp/omnipkg-artifacts/status_output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
if grep -q "tensorflow-2.13.0" /tmp/omnipkg-artifacts/status_output.txt && \
grep -q "typing_extensions-4.5.0" /tmp/omnipkg-artifacts/status_output.txt; then
echo "Status verified: TensorFlow bubbles found!"
else
echo "Error: Expected TensorFlow bubbles not found in status output."
cat /tmp/omnipkg-artifacts/status_output.txt
exit 1
fi
- name: 📊 Generate Report
if: always()
run: |
REPORT_FILE="/tmp/omnipkg-artifacts/tensorflow_test_report.md"
echo "# 🧠 TensorFlow Complex Dependency Switching Test Report" > $REPORT_FILE
echo "" >> $REPORT_FILE
echo "**Workflow Run:** [${{ github.run_id }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $REPORT_FILE
echo "**Test Status:** \`${{ job.status }}\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "## Demo Execution Output" >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
cat /tmp/omnipkg-artifacts/tensorflow_demo_output.txt 2>/dev/null || echo 'N/A: Demo output missing.' >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "## Omnipkg Status Output" >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
cat /tmp/omnipkg-artifacts/status_output.txt 2>/dev/null || echo 'N/A: Status output missing.' >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "## Conclusion" >> $REPORT_FILE
if [ "${{ steps.run_demo.outputs.demo_outcome }}" == "success" ]; then
echo "✅ **omnipkg successfully demonstrated seamless version switching for complex dependency packages (TensorFlow).** This test confirms omnipkg's ability to manage large, interconnected dependency graphs with high integrity." >> $REPORT_FILE
else
echo "❌ The TensorFlow Complex Dependency Switching Test failed. Review workflow logs for detailed output and errors." >> $REPORT_FILE
fi
echo "" >> $REPORT_FILE
- name: 🧹 Clean Up Redis
if: always()
run: |
echo "--- Cleaning Up Redis ---"
redis-cli -h localhost -p 6379 KEYS "omnipkg:pkg:*" | xargs -r redis-cli -h localhost -p 6379 DEL
- name: 📦 Upload Artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: omnipkg-tensorflow-outputs
path: /tmp/omnipkg-artifacts/
retention-days: 30
compression-level: 6