Added OTel instrumentation and metrics export for sync client (#3954) #7789
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: CI | |
| on: | |
| push: | |
| paths-ignore: | |
| - 'docs/**' | |
| - '**/*.rst' | |
| - '**/*.md' | |
| branches: | |
| - master | |
| - '[0-9].[0-9]' | |
| pull_request: | |
| branches: | |
| - master | |
| - '[0-9].[0-9]' | |
| schedule: | |
| - cron: '0 1 * * *' # nightly build | |
| concurrency: | |
| group: ${{ github.event.pull_request.number || github.ref }}-integration | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| # this speeds up coverage with Python 3.12: https://github.com/nedbat/coveragepy/issues/1665 | |
| COVERAGE_CORE: sysmon | |
| # patch releases get included in the base version image when they are published | |
| # for example after 8.2.1 is published, 8.2 image contains 8.2.1 content | |
| CURRENT_CLIENT_LIBS_TEST_STACK_IMAGE_TAG: '8.4.0' | |
| CURRENT_REDIS_VERSION: '8.4.0' | |
| REDIS_VERSION_CUSTOM_MAP: 'custom-21860421418-debian-amd64:8.6' | |
| jobs: | |
| dependency-audit: | |
| name: Dependency audit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: pypa/gh-action-pip-audit@v1.0.8 | |
| with: | |
| inputs: dev_requirements.txt | |
| ignore-vulns: | | |
| GHSA-w596-4wvx-j9j6 # subversion related git pull, dependency for pytest. There is no impact here. | |
| CVE-2026-26007 # dependency for entraid tests | |
| lint: | |
| name: Code linters | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.10" | |
| cache: 'pip' | |
| - name: run code linters | |
| run: | | |
| pip install -r dev_requirements.txt | |
| pip uninstall -y redis # uninstall Redis package installed via redis-entraid | |
| invoke linters | |
| redis_version: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| CURRENT: ${{ env.CURRENT_REDIS_VERSION }} | |
| steps: | |
| - name: Compute outputs | |
| run: | | |
| echo "CURRENT=${{ env.CURRENT_REDIS_VERSION }}" >> $GITHUB_OUTPUT | |
| tests: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| needs: redis_version | |
| strategy: | |
| max-parallel: 30 | |
| fail-fast: false | |
| matrix: | |
| redis-version: ['custom-21860421418-debian-amd64', '${{ needs.redis_version.outputs.CURRENT }}', '8.2', '8.0.2' ,'7.4.4', '7.2.9'] | |
| python-version: ['3.10', '3.14'] | |
| parser-backend: ['plain'] | |
| event-loop: ['asyncio'] | |
| protocol: ['2', '3'] | |
| env: | |
| ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
| name: Redis ${{ matrix.redis-version }}; Python ${{ matrix.python-version }}; RESP Parser:${{matrix.parser-backend}}; EL:${{matrix.event-loop}}; Protocol:${{matrix.protocol}} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Run tests | |
| uses: ./.github/actions/run-tests | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| parser-backend: ${{ matrix.parser-backend }} | |
| redis-version: ${{ matrix.redis-version }} | |
| protocol: ${{ matrix.protocol }} | |
| python-compatibility-tests: | |
| runs-on: ubuntu-latest | |
| needs: [ redis_version ] | |
| timeout-minutes: 60 | |
| strategy: | |
| max-parallel: 30 | |
| fail-fast: false | |
| matrix: | |
| redis-version: [ '${{ needs.redis_version.outputs.CURRENT }}' ] | |
| python-version: ['3.11', '3.12', '3.13'] | |
| parser-backend: [ 'plain' ] | |
| event-loop: [ 'asyncio' ] | |
| protocol: ['2', '3'] | |
| env: | |
| ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
| name: Redis ${{ matrix.redis-version }}; Python ${{ matrix.python-version }}; RESP Parser:${{matrix.parser-backend}}; EL:${{matrix.event-loop}}; Protocol:${{matrix.protocol}} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Run tests | |
| uses: ./.github/actions/run-tests | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| parser-backend: ${{ matrix.parser-backend }} | |
| redis-version: ${{ matrix.redis-version }} | |
| protocol: ${{ matrix.protocol }} | |
| pypy-compatibility-tests: | |
| runs-on: ubuntu-latest | |
| needs: [ redis_version ] | |
| # in pipeline ofter these pypy jobs hang, so their timeout is set | |
| # to just 50 minutes - close to the max time the jobs are running at the moment | |
| # adding more tests will make them even slower, and we will need to adjust the timeout | |
| timeout-minutes: 50 | |
| strategy: | |
| max-parallel: 30 | |
| fail-fast: false | |
| matrix: | |
| redis-version: [ '${{ needs.redis_version.outputs.CURRENT }}' ] | |
| python-version: ['pypy-3.10', 'pypy-3.11'] | |
| parser-backend: [ 'plain' ] | |
| event-loop: [ 'asyncio' ] | |
| protocol: ['2', '3'] | |
| env: | |
| ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
| name: PyPy Redis ${{ matrix.redis-version }}; ${{ matrix.python-version }}; RESP Parser:${{matrix.parser-backend}}; EL:${{matrix.event-loop}}; Protocol:${{matrix.protocol}} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Run tests | |
| uses: ./.github/actions/run-tests | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| parser-backend: ${{ matrix.parser-backend }} | |
| redis-version: ${{ matrix.redis-version }} | |
| protocol: ${{ matrix.protocol }} | |
| hiredis-tests: | |
| runs-on: ubuntu-latest | |
| needs: [redis_version] | |
| timeout-minutes: 60 | |
| strategy: | |
| max-parallel: 30 | |
| fail-fast: false | |
| matrix: | |
| redis-version: [ '${{ needs.redis_version.outputs.CURRENT }}' ] | |
| python-version: [ '3.10', '3.14'] | |
| parser-backend: [ 'hiredis' ] | |
| hiredis-version: [ '>=3.2.0', '<3.0.0' ] | |
| event-loop: [ 'asyncio' ] | |
| protocol: ['2', '3'] | |
| env: | |
| ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
| name: Redis ${{ matrix.redis-version }}; Python ${{ matrix.python-version }}; RESP Parser:${{matrix.parser-backend}} (${{ matrix.hiredis-version }}); EL:${{matrix.event-loop}}; Protocol:${{matrix.protocol}} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Run tests | |
| uses: ./.github/actions/run-tests | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| parser-backend: ${{ matrix.parser-backend }} | |
| redis-version: ${{ matrix.redis-version }} | |
| hiredis-version: ${{ matrix.hiredis-version }} | |
| protocol: ${{ matrix.protocol }} | |
| uvloop-tests: | |
| runs-on: ubuntu-latest | |
| needs: [redis_version] | |
| timeout-minutes: 60 | |
| strategy: | |
| max-parallel: 30 | |
| fail-fast: false | |
| matrix: | |
| redis-version: [ '${{ needs.redis_version.outputs.CURRENT }}' ] | |
| python-version: [ '3.10', '3.14' ] | |
| parser-backend: [ 'plain' ] | |
| event-loop: [ 'uvloop' ] | |
| protocol: ['2', '3'] | |
| env: | |
| ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
| name: Redis ${{ matrix.redis-version }}; Python ${{ matrix.python-version }}; RESP Parser:${{matrix.parser-backend}}; EL:${{matrix.event-loop}}; Protocol:${{matrix.protocol}} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Run tests | |
| uses: ./.github/actions/run-tests | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| parser-backend: ${{ matrix.parser-backend }} | |
| redis-version: ${{ matrix.redis-version }} | |
| event-loop: ${{ matrix.event-loop }} | |
| protocol: ${{ matrix.protocol }} | |
| build-and-test-package: | |
| name: Validate building and installing the package | |
| runs-on: ubuntu-latest | |
| needs: [redis_version] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| extension: ['tar.gz', 'whl'] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.10" | |
| - name: Run installed unit tests | |
| env: | |
| CLIENT_LIBS_TEST_IMAGE_TAG: ${{ env.CURRENT_REDIS_VERSION }} | |
| CLIENT_LIBS_TEST_STACK_IMAGE_TAG: ${{ env.CURRENT_CLIENT_LIBS_TEST_STACK_IMAGE_TAG }} | |
| run: | | |
| bash .github/workflows/install_and_test.sh ${{ matrix.extension }} | |
| install-package-from-commit: | |
| name: Install package from commit hash | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', 'pypy-3.10', 'pypy-3.11'] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: install from pip | |
| run: | | |
| pip install --quiet git+${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git@${GITHUB_SHA} |