-
-
Notifications
You must be signed in to change notification settings - Fork 1
138 lines (118 loc) · 5.23 KB
/
Copy pathflask_port_finder_test.yml
File metadata and controls
138 lines (118 loc) · 5.23 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
132
133
134
135
136
137
138
name: "🧪 Flask Port Finder & Auto-Healing Test"
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 - Flask Port Finder Test
id: run_demo
run: |
echo "--- Running Omnipkg Demo for Flask Port Finder (Auto-Healing) ---"
mkdir -p /tmp/omnipkg-artifacts
# Use the direct ID '9' and --non-interactive flag to skip the menu and force the correct test
timeout 900 bash -c 'omnipkg demo 9 --non-interactive 2>&1 | tee /tmp/omnipkg-artifacts/flask_demo_output.txt'
# PIPESTATUS[0] captures the exit code of omnipkg, not tee.
DEMO_EXIT_CODE=${PIPESTATUS[0]}
# Save output to GitHub step summary for easy viewing
echo "## Flask Port Finder Demo Output" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat /tmp/omnipkg-artifacts/flask_demo_output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# The overall script should exit with 0 if the final, healed run was successful.
# We add extra checks of the log content for robustness.
if [ $DEMO_EXIT_CODE -eq 0 ]; then
echo "Demo completed with successful exit code ($DEMO_EXIT_CODE). Performing log verification..."
echo "demo_outcome=success" >> $GITHUB_OUTPUT
# Count the number of passed tests in the final summary block
PASSED_COUNT=$(grep -c "✅ TEST .* PASSED" /tmp/omnipkg-artifacts/flask_demo_output.txt || echo "0")
# Check that all 6 tests are marked as passed
if [ "$PASSED_COUNT" -ge 6 ] && grep -q "Demo completed successfully" /tmp/omnipkg-artifacts/flask_demo_output.txt; then
echo "✅ Verification PASSED: Found $PASSED_COUNT passed tests and success message in the logs."
else
echo "❌ Verification FAILED: Expected 6 PASSED tests and a success message, but validation failed."
echo "--- Full Demo Output ---"
cat /tmp/omnipkg-artifacts/flask_demo_output.txt
exit 1
fi
else
echo "❌ Demo failed with a non-zero exit code: $DEMO_EXIT_CODE."
echo "demo_outcome=failure" >> $GITHUB_OUTPUT
echo "--- Full Demo Output ---"
cat /tmp/omnipkg-artifacts/flask_demo_output.txt
exit 1
fi
- name: Archive Demo Output
if: always()
uses: actions/upload-artifact@v4
with:
name: omnipkg-flask-demo-output
path: /tmp/omnipkg-artifacts/
retention-days: 7
compression-level: 6