Skip to content

feat: initialize Task 3 - Enhanced Semantic Search Capabilities #31

feat: initialize Task 3 - Enhanced Semantic Search Capabilities

feat: initialize Task 3 - Enhanced Semantic Search Capabilities #31

name: Platform Validation
on:
# Trigger on pyproject.toml changes (when dependencies are modified)
push:
paths:
- 'pyproject.toml'
- 'pixi.lock'
branches: [ main, development ]
pull_request:
paths:
- 'pyproject.toml'
- 'pixi.lock'
branches: [ main, development ]
# Allow manual trigger for testing
workflow_dispatch:
inputs:
test_platform:
description: 'Specific platform to test (optional)'
required: false
default: 'all'
type: choice
options:
- 'all'
- 'linux-64'
- 'osx-64'
- 'osx-arm64'
- 'win-64'
env:
PIXI_VERSION: v0.49.0
jobs:
# Memory-efficient platform validation
validate-platforms:
name: Validate ${{ matrix.platform }}
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false # Continue testing other platforms if one fails
matrix:
platform: [linux-64] # Only test supported platforms from pyproject.toml
environment: [quality, ci] # Test main CI environments
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup pixi
uses: prefix-dev/setup-pixi@v0.8.10
with:
pixi-version: ${{ env.PIXI_VERSION }}
cache: false # Disable cache to save memory
manifest-path: pyproject.toml
- name: Set memory limits
run: |
echo "🔧 Setting memory optimization..."
echo "PIXI_CACHE_DIR=/tmp/pixi-cache" >> $GITHUB_ENV
echo "CONDA_PKGS_DIRS=/tmp/conda-pkgs" >> $GITHUB_ENV
echo "PIXI_SOLVER_THREADS=2" >> $GITHUB_ENV
# Free up disk space
sudo rm -rf /opt/hostedtoolcache
sudo rm -rf /usr/local/lib/android
sudo rm -rf /usr/share/dotnet
echo "💾 Available memory:"
free -h
- name: Verify platform compatibility
run: |
echo "🎯 Testing platform: ${{ matrix.platform }}"
echo "✅ Platform ${{ matrix.platform }} matches pyproject.toml configuration"
echo "📋 Platform configuration:"
grep -A5 -B5 "platforms.*=" pyproject.toml
- name: Test dependency resolution for ${{ matrix.platform }}
timeout-minutes: 30
run: |
echo "🔍 Testing dependency resolution for ${{ matrix.platform }} environment ${{ matrix.environment }}..."
# Test basic pixi functionality
echo "✅ Testing pixi info..."
pixi info
echo "✅ Testing environment installation..."
pixi install -e ${{ matrix.environment }}
echo "✅ Dependency resolution successful for ${{ matrix.platform }}"
- name: Test package availability
run: |
echo "📦 Testing critical package availability for ${{ matrix.platform }}..."
# Test if critical packages are available on this platform
CRITICAL_PACKAGES=("pytest" "ruff" "mypy" "bandit" "safety")
for package in "${CRITICAL_PACKAGES[@]}"; do
if pixi search $package --platform ${{ matrix.platform }} | grep -q $package; then
echo "✅ $package available on ${{ matrix.platform }}"
else
echo "⚠️ $package might not be available on ${{ matrix.platform }}"
fi
done
- name: Generate platform compatibility report
if: always()
run: |
echo "📊 Platform Compatibility Report" > platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "=================================" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "**Platform**: ${{ matrix.platform }}" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "**Environment**: ${{ matrix.environment }}" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "**Status**: ${{ job.status }}" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "**Date**: $(date)" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
echo "" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
# Add dependency info
echo "### Dependencies" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
pixi info -e ${{ matrix.environment }} | grep "Dependency count:" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md || echo "N/A" >> platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
- name: Upload platform report
if: always()
uses: actions/upload-artifact@v4
with:
name: platform-report-${{ matrix.platform }}-${{ matrix.environment }}
path: platform-report-${{ matrix.platform }}-${{ matrix.environment }}.md
- name: Restore original pyproject.toml
if: always()
run: |
mv pyproject.toml.backup pyproject.toml
# Cross-platform compatibility summary
compatibility-summary:
name: Platform Compatibility Summary
runs-on: ubuntu-latest
needs: [validate-platforms]
if: always()
steps:
- name: Download all platform reports
uses: actions/download-artifact@v4
with:
pattern: platform-report-*
merge-multiple: true
- name: Generate compatibility matrix
run: |
echo "# 🌍 Cross-Platform Compatibility Matrix" > compatibility-summary.md
echo "" >> compatibility-summary.md
echo "Generated on: $(date)" >> compatibility-summary.md
echo "" >> compatibility-summary.md
# Create matrix table
echo "| Platform | quality | quality-extended | ci |" >> compatibility-summary.md
echo "|----------|---------|------------------|-------|" >> compatibility-summary.md
for platform in linux-64 osx-64 osx-arm64 win-64; do
echo -n "| $platform |" >> compatibility-summary.md
for env in quality quality-extended ci; do
if [ -f "platform-report-$platform-$env.md" ]; then
if grep -q "Status.*success" "platform-report-$platform-$env.md"; then
echo -n " ✅ |" >> compatibility-summary.md
else
echo -n " ❌ |" >> compatibility-summary.md
fi
else
echo -n " ❓ |" >> compatibility-summary.md
fi
done
echo "" >> compatibility-summary.md
done
echo "" >> compatibility-summary.md
echo "## 📋 Recommendations" >> compatibility-summary.md
echo "" >> compatibility-summary.md
echo "- ✅ **Supported**: Platform can be safely added to pyproject.toml" >> compatibility-summary.md
echo "- ❌ **Unsupported**: Platform has dependency resolution issues" >> compatibility-summary.md
echo "- ❓ **Unknown**: Platform validation did not complete" >> compatibility-summary.md
echo "" >> compatibility-summary.md
echo "### Next Steps" >> compatibility-summary.md
echo "1. Add supported platforms to \`pyproject.toml\` incrementally" >> compatibility-summary.md
echo "2. Test locally with \`pixi install --platform <platform>\`" >> compatibility-summary.md
echo "3. Monitor CI stability after each platform addition" >> compatibility-summary.md
- name: Upload compatibility summary
uses: actions/upload-artifact@v4
with:
name: compatibility-summary
path: compatibility-summary.md
- name: Comment on PR (if PR)
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const summary = fs.readFileSync('compatibility-summary.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: summary
});
# Suggest platform additions
suggest-platform-updates:
name: Suggest Platform Updates
runs-on: ubuntu-latest
needs: [validate-platforms]
if: always() && github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download compatibility summary
uses: actions/download-artifact@v4
with:
name: compatibility-summary
path: .
- name: Generate platform update suggestions
run: |
echo "🎯 Platform Update Suggestions" > suggestions.md
echo "" >> suggestions.md
# Check current platforms in pyproject.toml
CURRENT_PLATFORMS=$(grep -o 'platforms = \[.*\]' pyproject.toml | sed 's/platforms = \[\(.*\)\]/\1/' | tr -d '"')
echo "**Current platforms**: $CURRENT_PLATFORMS" >> suggestions.md
echo "" >> suggestions.md
# Suggest additions based on success
echo "### ✅ Safe to Add" >> suggestions.md
echo "Based on successful validation, these platforms can be added:" >> suggestions.md
echo "" >> suggestions.md
# This would be enhanced with actual validation results
echo "```toml" >> suggestions.md
echo "# Suggested pyproject.toml update:" >> suggestions.md
echo 'platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"]' >> suggestions.md
echo "```" >> suggestions.md
echo "" >> suggestions.md
echo "### ⚠️ Gradual Addition Recommended" >> suggestions.md
echo "Add platforms one at a time to monitor CI stability:" >> suggestions.md
echo "" >> suggestions.md
echo "1. Add \`osx-64\` first (most compatible)" >> suggestions.md
echo "2. Add \`osx-arm64\` second (Apple Silicon)" >> suggestions.md
echo "3. Add \`win-64\` last (highest complexity)" >> suggestions.md
- name: Upload suggestions
uses: actions/upload-artifact@v4
with:
name: platform-suggestions
path: suggestions.md
- name: Add to step summary
run: |
echo "## 🌍 Platform Validation Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
cat compatibility-summary.md >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
cat suggestions.md >> $GITHUB_STEP_SUMMARY