fix: run all clients on stainless SDK, fix workflow, properly commit recordings (#4410)

# What does this PR do?

Various fixes to integration test recording + stainless calling of
integration tests:

1. only the library client was being run, they all should be
2. the git check grabs diffs like:

M tests/integration/client-typescript/package-lock.json
 M tests/integration/client-typescript/package.json

it should not

additionally:

Fixes rebase conflicts when stainless workflow runs integration tests
with
  record-if-missing mode on PRs. Previously, the workflow would:
  1. Commit all files in tests/integration/ (including non-recordings)
  2. Try to rebase and push to 'main' instead of the PR branch
  3. Fail with merge conflicts on PR-specific changes

  Changes:
- Add pr_head_ref and is_fork_pr parameters flowing through workflow
chain
- Use target-branch input instead of github.ref_name in recording
commits
- Detect and handle fork PRs by skipping push and uploading recordings
as artifacts
  - Add 7-day artifact retention for fork PR recordings
  - Support both workflow_call and direct pull_request trigger contexts

For same-repo PRs: recordings now commit/push to the PR branch correctly
For fork PRs: recordings upload as downloadable artifacts with
instructions


you can see a failing workflow:
5846590613
with the rebase issues.

---------

Signed-off-by: Charlie Doern <cdoern@redhat.com>
This commit is contained in:
Charlie Doern 2025-12-18 15:24:09 -05:00 committed by GitHub
parent 5d52cb28c2
commit e710622d4c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 62 additions and 11 deletions

View file

@ -24,6 +24,14 @@ inputs:
description: 'Regex pattern to pass to pytest -k'
required: false
default: ''
target-branch:
description: 'Target branch for recording commits (for PRs, use the PR head branch)'
required: false
default: ''
is-fork-pr:
description: 'Whether this is a fork PR (recordings cannot be pushed to forks)'
required: false
default: 'false'
runs:
using: 'composite'
@ -66,23 +74,49 @@ runs:
shell: bash
run: |
echo "Checking for recording changes"
git status --porcelain tests/integration/
git status --porcelain tests/integration/recordings/ tests/integration/*/recordings/
if [[ -n $(git status --porcelain tests/integration/) ]]; then
echo "New recordings detected, committing and pushing"
git add tests/integration/
if [[ -n $(git status --porcelain tests/integration/recordings/ tests/integration/*/recordings/) ]]; then
echo "New recordings detected"
git commit -m "Recordings update from CI (setup: ${{ inputs.setup }}, suite: ${{ inputs.suite }})"
# Determine target branch: use target-branch input if provided, otherwise use current branch
TARGET_BRANCH="${{ inputs.target-branch }}"
if [ -z "$TARGET_BRANCH" ]; then
TARGET_BRANCH="${{ github.ref_name }}"
fi
echo "Target branch: $TARGET_BRANCH"
git fetch origin ${{ github.ref_name }}
git rebase origin/${{ github.ref_name }}
echo "Rebased successfully"
git push origin HEAD:${{ github.ref_name }}
echo "Pushed successfully"
# Check if this is a fork PR
if [ "${{ inputs.is-fork-pr }}" = "true" ]; then
echo "::warning::This is a fork PR. Recordings were updated locally but cannot be pushed to the fork."
echo "::warning::Please download the workflow artifacts and commit the recordings manually."
else
echo "Committing and pushing recordings to branch: $TARGET_BRANCH"
git add tests/integration/recordings/ tests/integration/*/recordings/
git commit -m "Recordings update from CI (setup: ${{ inputs.setup }}, suite: ${{ inputs.suite }})"
git fetch origin "$TARGET_BRANCH"
git rebase "origin/$TARGET_BRANCH"
echo "Rebased successfully"
git push origin "HEAD:$TARGET_BRANCH"
echo "Pushed successfully to $TARGET_BRANCH"
fi
else
echo "No recording changes"
fi
- name: Upload recordings (for fork PRs)
if: ${{ inputs.is-fork-pr == 'true' && (inputs.inference-mode == 'record' || inputs.inference-mode == 'record-if-missing') }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: recordings-${{ github.run_id }}-${{ github.run_attempt || '1' }}-${{ strategy.job-index || github.job }}
path: |
tests/integration/recordings/
tests/integration/*/recordings/
retention-days: 7
if-no-files-found: ignore
- name: Write docker logs to file
if: ${{ always() }}
shell: bash