name: 'SDK Python' on: pull_request: branches: - 'main' - 'release/**' paths: - 'packages/sdk-python/**' - '.github/workflows/sdk-python.yml' push: branches: - 'main' - 'release/**' paths: - 'packages/sdk-python/**' - '.github/workflows/sdk-python.yml' jobs: classify_pr: name: 'Classify PR' if: "${{ github.event_name == 'pull_request' }}" runs-on: 'ubuntu-latest' continue-on-error: true outputs: skip_ci: '${{ steps.release_sync.outputs.skip_ci }}' steps: - name: 'Detect release version-sync PR' id: 'release_sync' env: # Repository variables can override these defaults if release naming # or the CI bot account changes. HEAD_REPO: "${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name || '' }}" HEAD_REF: "${{ github.event_name == 'pull_request' && github.head_ref || '' }}" PR_TITLE: "${{ github.event_name == 'pull_request' && github.event.pull_request.title || '' }}" RELEASE_SYNC_HEAD_PREFIX: "${{ vars.RELEASE_SYNC_HEAD_PREFIX || 'release/' }}" RELEASE_SYNC_TITLE_PREFIX: "${{ vars.RELEASE_SYNC_TITLE_PREFIX || 'chore(release):' }}" RELEASE_SYNC_ACTOR: "${{ vars.RELEASE_SYNC_ACTOR || 'qwen-code-ci-bot' }}" run: |- skip_ci=false repo_match=false actor_match=false head_match=false title_match=false [[ "${HEAD_REPO}" == "${GITHUB_REPOSITORY}" ]] && repo_match=true [[ "${GITHUB_ACTOR}" == "${RELEASE_SYNC_ACTOR}" ]] && actor_match=true [[ "${HEAD_REF}" == "${RELEASE_SYNC_HEAD_PREFIX}"* ]] && head_match=true [[ "${PR_TITLE}" == "${RELEASE_SYNC_TITLE_PREFIX}"* ]] && title_match=true if [[ "${GITHUB_EVENT_NAME}" == "pull_request" && "${repo_match}" == "true" && "${actor_match}" == "true" && "${head_match}" == "true" && "${title_match}" == "true" ]]; then skip_ci=true echo "Release sync PR detected: actor=${GITHUB_ACTOR}, head_ref=${HEAD_REF}, title=${PR_TITLE}" else echo "Not a release sync PR: event=${GITHUB_EVENT_NAME}, actor=${GITHUB_ACTOR}, expected_actor=${RELEASE_SYNC_ACTOR}, repo_match=${repo_match}, head_match=${head_match}, title_match=${title_match}" fi echo "skip_ci=${skip_ci}" >> "${GITHUB_OUTPUT}" echo "skip_ci=${skip_ci}" sdk-python: name: 'SDK Python (${{ matrix.python-version }})' needs: 'classify_pr' if: "${{ !cancelled() && needs.classify_pr.outputs.skip_ci != 'true' }}" runs-on: 'ubuntu-latest' strategy: fail-fast: false matrix: python-version: ['3.10', '3.11', '3.12'] steps: - name: 'Checkout' uses: 'actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd' # v6.0.2 - name: 'Set up Python' uses: 'actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405' # v6.2.0 with: python-version: '${{ matrix.python-version }}' - name: 'Install SDK test dependencies' run: | python -m pip install --upgrade pip python -m pip install -e 'packages/sdk-python[dev]' - name: 'Run Ruff' run: 'python -m ruff check --config packages/sdk-python/pyproject.toml packages/sdk-python' - name: 'Run Ruff Format' run: 'python -m ruff format --check --config packages/sdk-python/pyproject.toml packages/sdk-python' - name: 'Run Mypy' run: 'python -m mypy --config-file packages/sdk-python/pyproject.toml packages/sdk-python/src' - name: 'Run Pytest' run: 'python -m pytest -c packages/sdk-python/pyproject.toml packages/sdk-python/tests -q'