feat: initialize Task 3 - Enhanced Semantic Search Capabilities #53
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: Test Matrix | |
| on: | |
| push: | |
| branches: [main, development] | |
| paths-ignore: | |
| - '**.md' | |
| - '**/docs/**' | |
| pull_request: | |
| branches: [main, development] | |
| paths-ignore: | |
| - '**.md' | |
| - '**/docs/**' | |
| workflow_dispatch: | |
| jobs: | |
| test-matrix: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12"] | |
| test-type: [unit, integration, e2e] | |
| env: | |
| ENVIRONMENT: ci | |
| PYTHONUNBUFFERED: 1 | |
| PIXI_ENV: ci | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup pixi with cache fallback | |
| id: setup-pixi | |
| uses: prefix-dev/setup-pixi@v0.8.1 | |
| with: | |
| pixi-version: v0.49.0 | |
| cache: false # Temporarily disable during GitHub cache service outage | |
| continue-on-error: true | |
| - name: Secondary cache fallback when pixi cache fails | |
| if: steps.setup-pixi.outputs.cache-hit != 'true' | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.pixi/cache | |
| ~/.cache/pip | |
| .pixi | |
| key: pixi-fallback-${{ runner.os }}-${{ hashFiles('pixi.lock') }} | |
| restore-keys: | | |
| pixi-fallback-${{ runner.os }}- | |
| continue-on-error: true | |
| - name: Ensure .pixi environment exists | |
| shell: bash | |
| run: | | |
| if [ ! -d ".pixi" ]; then | |
| echo "No .pixi directory found, initializing pixi environment..." | |
| pixi run || pixi install --locked || pixi install || true | |
| fi | |
| - name: Install dependencies (pixi) with retry and fallback | |
| shell: bash | |
| run: | | |
| n=0 | |
| until [ "$n" -ge 3 ] | |
| do | |
| # Try locked first, then fallback to update if needed | |
| if pixi install --locked; then | |
| echo "✅ Locked installation successful" | |
| break | |
| elif [ "$n" -eq 2 ]; then | |
| echo "⚠️ Locked install failed, trying update mode as fallback" | |
| pixi install && break | |
| fi | |
| n=$((n+1)) | |
| echo "pixi install failed, retrying ($n/3)..." | |
| sleep 5 | |
| done | |
| - name: Install dev dependencies using pixi | |
| shell: bash | |
| run: | | |
| pixi run -e ci ci-dev | |
| - name: Verify pixi environment | |
| shell: bash | |
| run: | | |
| pixi run -e ci python --version | |
| pixi run -e ci pip --version | |
| - name: Select tests by marker | |
| id: select-tests | |
| shell: bash | |
| run: | | |
| if [[ "${{ matrix.test-type }}" == "unit" ]]; then | |
| echo "PYTEST_MARK=unit" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.test-type }}" == "integration" ]]; then | |
| echo "PYTEST_MARK=integration" >> $GITHUB_ENV | |
| elif [[ "${{ matrix.test-type }}" == "e2e" ]]; then | |
| echo "PYTEST_MARK=e2e" >> $GITHUB_ENV | |
| fi | |
| - name: Run selected tests using pixi | |
| shell: bash | |
| run: | | |
| if [[ -n "$PYTEST_MARK" ]]; then | |
| pixi run -e ci pytest tests/ -m "$PYTEST_MARK" --json-report --json-report-file=pytest-${{ matrix.test-type }}.json | |
| else | |
| pixi run -e ci pytest tests/ --json-report --json-report-file=pytest-${{ matrix.test-type }}.json | |
| fi | |
| - name: Upload test results | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-results-${{ matrix.python-version }}-${{ matrix.test-type }} | |
| path: pytest-${{ matrix.test-type }}.json | |
| aggregate-results: | |
| needs: test-matrix | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| path: ./artifacts | |
| - name: Aggregate and compare test results | |
| shell: bash | |
| run: | | |
| find ./artifacts -name "*.json" -exec cat {} + > all-results.json | |
| # Optionally, add custom aggregation/comparison logic here | |
| - name: Upload aggregated results | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: aggregated-test-results | |
| path: all-results.json | |
| - name: Notify Results (GitHub API) | |
| if: always() | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| shell: bash | |
| run: | | |
| curl -X POST \ | |
| -H "Authorization: token $GITHUB_TOKEN" \ | |
| -H "Accept: application/vnd.github.v3+json" \ | |
| https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.sha }} \ | |
| -d '{"state": "success", "context": "Test Matrix", "description": "Matrix tests complete."}' |