ci(win): attempt to build win arm 64 on conda-forge #942
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |