-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathnumpy-scipy-c-extension-test.yml
More file actions
131 lines (113 loc) · 4.9 KB
/
Copy pathnumpy-scipy-c-extension-test.yml
File metadata and controls
131 lines (113 loc) · 4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: "🔥 Live NumPy/SciPy Hot-Swapping"
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 omnipkg (editable) and Redis client
run: |
python -m pip install --upgrade pip
pip install -e . redis
- 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 - NumPy + SciPy
id: run_demo
run: |
echo "--- Running Omnipkg Demo for NumPy + SciPy (C Extension Nuclear Testing) ---"
mkdir -p /tmp/omnipkg-artifacts
# Use the modern, non-interactive argument instead of a pipe
timeout 900 bash -c 'omnipkg demo 3 --non-interactive 2>&1 | tee /tmp/omnipkg-artifacts/numpy_scipy_demo_output.txt'
DEMO_EXIT_CODE=${PIPESTATUS} # Use PIPESTATUS to get the exit code of the first command in the pipe
echo "## NumPy + SciPy Demo Output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat /tmp/omnipkg-artifacts/numpy_scipy_demo_output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
if [ $DEMO_EXIT_CODE -eq 0 ] || \
(grep -q "ALL TESTS PASSED!" /tmp/omnipkg-artifacts/numpy_scipy_demo_output.txt && \
grep -q "OMNIPKG SURVIVED NUCLEAR TESTING" /tmp/omnipkg-artifacts/numpy_scipy_demo_output.txt && \
grep -q "Demo completed successfully" /tmp/omnipkg-artifacts/numpy_scipy_demo_output.txt); then
echo "Demo completed successfully (exit code $DEMO_EXIT_CODE, logs verified)."
echo "demo_outcome=success" >> $GITHUB_OUTPUT
PASSED_COUNT=$(grep -c "PASSED" /tmp/omnipkg-artifacts/numpy_scipy_demo_output.txt || echo "0")
if [ "$PASSED_COUNT" -ge 6 ]; then
echo "NumPy + SciPy demo verified: Found $PASSED_COUNT PASSED results (expected at least 6)!"
else
echo "Error: Expected at least 6 PASSED results, but found only $PASSED_COUNT."
cat /tmp/omnipkg-artifacts/numpy_scipy_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/numpy_scipy_demo_output.txt
exit 1
fi
- name: Archive Demo Output
if: always()
uses: actions/upload-artifact@v4
with:
name: omnipkg-numpy-scipy-demo-output
path: /tmp/omnipkg-artifacts/
retention-days: 7
compression-level: 6