Skip to content

ci(win): attempt to build win arm 64 on conda-forge #942

ci(win): attempt to build win arm 64 on conda-forge

ci(win): attempt to build win arm 64 on conda-forge #942

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