aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/psm-interop.yaml
blob: ddbce2fbcdb540ef9c1da8686be44cf3816ac8ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
name: PSM Interop

on:
  pull_request:
  push:
    branches:
      - master

permissions:
  contents: read

jobs:
  unittest:
    # By default, only version is printed out in parens, e.g. "unittest (3.10)"
    # This changes it to "unittest (python3.10)"
    name: "unittest (python${{ matrix.python_version }})"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python_version: ["3.9", "3.10", "3.11"]
      fail-fast: false
    permissions:
      pull-requests: read  # Used by paths-filter to read the diff.
    defaults:
      run:
        working-directory: 'tools/run_tests/xds_k8s_test_driver'

    steps:
      - uses: actions/checkout@v3

      # To add this job to required GitHub checks, it's not enough to use
      # the on.pull_request.paths filter. For required checks, the job needs to
      # return the success status, and not be skipped.
      # Using paths-filter action, we skip the setup/test steps when psm interop
      # files are unchanged, and the job returns success.
      - uses: dorny/paths-filter@v2
        id: paths_filter
        with:
          filters:  |
            psm_interop_src:
              - 'tools/run_tests/xds_k8s_test_driver/**'
              - 'src/proto/grpc/testing/empty.proto'
              - 'src/proto/grpc/testing/messages.proto'
              - 'src/proto/grpc/testing/test.proto'

      - uses: actions/setup-python@v4
        if: ${{ steps.paths_filter.outputs.psm_interop_src == 'true' }}
        with:
          python-version: "${{ matrix.python_version }}"
          cache: 'pip'
          cache-dependency-path: 'tools/run_tests/xds_k8s_test_driver/requirements.lock'

      - name: "Install requirements"
        if: ${{ steps.paths_filter.outputs.psm_interop_src == 'true' }}
        run: |
          pip list
          pip install --upgrade pip setuptools
          pip list
          pip install -r requirements.lock
          pip list

      - name: "Generate protos"
        if: ${{ steps.paths_filter.outputs.psm_interop_src == 'true' }}
        run: >
          python -m grpc_tools.protoc --proto_path=../../../
          --python_out=. --grpc_python_out=.
          src/proto/grpc/testing/empty.proto
          src/proto/grpc/testing/messages.proto
          src/proto/grpc/testing/test.proto

      - name: "Run unit tests"
        if: ${{ steps.paths_filter.outputs.psm_interop_src == 'true' }}
        run: python -m tests.unit