on: workflow_call: inputs: python-version: required: false type: string default: "3.11" pytorch-device: required: false type: string default: "cpu" os: required: false type: string default: ubuntu-latest ref: required: false type: string default: ${{ github.sha }} cache-path: required: false type: string cache-key: required: false type: string cache-restore-keys: required: false type: string permissions: contents: read jobs: slow: # Only run tests with slow marker which aren't dynamo tests runs-on: ${{ inputs.os }} strategy: fail-fast: false matrix: pytorch-dtype: ["float32", "float64"] steps: - name: Checkout repository uses: actions/checkout@v6 with: ref: ${{ inputs.ref }} - name: Restore cache if: inputs.cache-path != '' uses: actions/cache/restore@v5 with: path: ${{ inputs.cache-path }} key: ${{ inputs.cache-key }} restore-keys: ${{ inputs.cache-restore-keys }} - uses: ./.github/actions/coverage with: python-version: ${{ inputs.python-version }} pytorch-dtype: ${{ matrix.pytorch-dtype }} pytorch-device: ${{ inputs.pytorch-device }} pytest-extra: '--runslow -k "slow and not test_dynamo"' coverage-artifact: coverage-slow-${{ matrix.pytorch-dtype }} dynamo: # Run all dynamo (torch.compile) related tests runs-on: ${{ inputs.os }} strategy: fail-fast: false matrix: pytorch-dtype: ["float32"] steps: - name: Checkout repository uses: actions/checkout@v6 with: ref: ${{ inputs.ref }} - name: Restore cache if: inputs.cache-path != '' uses: actions/cache/restore@v5 with: path: ${{ inputs.cache-path }} key: ${{ inputs.cache-key }} restore-keys: ${{ inputs.cache-restore-keys }} - uses: ./.github/actions/coverage env: KORNIA_TEST_OPTIMIZER: inductor with: python-version: ${{ inputs.python-version }} pytorch-dtype: ${{ matrix.pytorch-dtype }} pytorch-device: ${{ inputs.pytorch-device }} pytest-extra: '--runslow -k "test_dynamo"' coverage-artifact: coverage-dynamo-${{ matrix.pytorch-dtype }} overall: # Run all tests which didn't have a slow marker or are dynamo tests runs-on: ${{ inputs.os }} strategy: fail-fast: false matrix: pytorch-dtype: ["float32", "float64"] steps: - name: Checkout repository uses: actions/checkout@v6 with: ref: ${{ inputs.ref }} - name: Restore cache if: inputs.cache-path != '' uses: actions/cache/restore@v5 with: path: ${{ inputs.cache-path }} key: ${{ inputs.cache-key }} restore-keys: ${{ inputs.cache-restore-keys }} - uses: ./.github/actions/coverage with: python-version: ${{ inputs.python-version }} pytorch-dtype: ${{ matrix.pytorch-dtype }} pytorch-device: ${{ inputs.pytorch-device }} coverage-artifact: coverage-overall-${{ matrix.pytorch-dtype }} report: runs-on: ${{ inputs.os }} needs: [slow, dynamo, overall] steps: - name: Checkout repository uses: actions/checkout@v6 with: repository: kornia/kornia ref: ${{ inputs.ref }} - name: Download coverage reports uses: actions/download-artifact@v8 with: merge-multiple: true - name: Set pixi environment name id: pixi-env shell: bash run: echo "name=py$(echo '${{ inputs.python-version }}' | tr -d '.')" >> $GITHUB_OUTPUT - name: Setup pixi uses: prefix-dev/setup-pixi@v0.9.6 with: pixi-version: v0.40.0 cache: true environments: ${{ steps.pixi-env.outputs.name }} - name: Install dependencies run: pixi run -e ${{ steps.pixi-env.outputs.name }} install - name: Run coverage run: | pixi run -e ${{ steps.pixi-env.outputs.name }} uv run coverage combine --keep \ $GITHUB_WORKSPACE/coverage-dynamo-float32 \ $GITHUB_WORKSPACE/coverage-slow-float32 \ $GITHUB_WORKSPACE/coverage-slow-float64 \ $GITHUB_WORKSPACE/coverage-overall-float32 \ $GITHUB_WORKSPACE/coverage-overall-float64 pixi run -e ${{ steps.pixi-env.outputs.name }} uv run coverage xml -o coverage.xml pixi run -e ${{ steps.pixi-env.outputs.name }} uv run coverage report --show-missing --skip-covered - if: always() name: Upload coverage uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v3 with: file: coverage.xml token: ${{ secrets.CODECOV_TOKEN }} flags: cpu,${{ inputs.os }}_py-${{ inputs.python-version }}_float32,float64 name: cpu-coverage