name: '⚡ CodSpeed' on: push: branches: - master pull_request: workflow_dispatch: permissions: contents: read env: AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: foo AZURE_OPENAI_LEGACY_CHAT_DEPLOYMENT_NAME: foo DEEPSEEK_API_KEY: foo FIREWORKS_API_KEY: foo jobs: # This job analyzes which files changed to determine which packages need codspeed runs build: name: 'Detect Changes for Codspeed' runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.labels.*.name, 'codspeed-ignore') }} steps: - name: '📋 Checkout Code' uses: actions/checkout@v4 - name: '🐍 Setup Python 3.11' uses: actions/setup-python@v5 with: python-version: '3.11' - name: '📂 Get Changed Files' id: files uses: Ana06/get-changed-files@v2.3.0 - name: '🔍 Analyze Changed Files & Generate Codspeed Matrix' id: set-matrix run: | python -m pip install packaging requests python .github/scripts/check_diff.py ${{ steps.files.outputs.all }} >> $GITHUB_OUTPUT outputs: codspeed: ${{ steps.set-matrix.outputs.codspeed }} codspeed: name: 'Benchmark' needs: [ build ] runs-on: ubuntu-latest if: ${{ needs.build.outputs.codspeed != '[]' }} strategy: matrix: job-configs: ${{ fromJson(needs.build.outputs.codspeed) }} fail-fast: false steps: - uses: actions/checkout@v4 # We have to use 3.12 as 3.13 is not yet supported - name: '📦 Install UV Package Manager' uses: astral-sh/setup-uv@v6 with: python-version: ${{ matrix.job-configs.python-version }} - uses: actions/setup-python@v5 with: python-version: ${{ matrix.job-configs.python-version }} - name: '📦 Install Test Dependencies' run: uv sync --group test working-directory: ${{ matrix.job-configs.working-directory }} - name: '⚡ Run Benchmarks: ${{ matrix.job-configs.working-directory }}' uses: CodSpeedHQ/action@v3 with: token: ${{ secrets.CODSPEED_TOKEN }} run: | cd ${{ matrix.job-configs.working-directory }} if [ "${{ matrix.job-configs.working-directory }}" = "libs/core" ]; then uv run --no-sync pytest ./tests/benchmarks --codspeed else uv run --no-sync pytest ./tests/ --codspeed fi mode: ${{ matrix.job-configs.working-directory == 'libs/core' && 'walltime' || 'instrumentation' }}