# # This workflow allows manually running integration tests against an open PR or a branch. # Go to Actions → "Integration Tests (Manual)" → Run workflow → enter a PR number or branch name. # # It calls dedicated integration-only workflows (dotnet-integration-tests and python-integration-tests), # passing a ref so they check out and test the correct code. # Changed paths are detected here so only the relevant test suites run. # name: Integration Tests (Manual) on: workflow_dispatch: inputs: pr-number: description: "PR number to run integration tests against (leave empty if using branch)" required: false type: string default: "" branch: description: "Branch name to run integration tests against (leave empty if using PR number)" required: false type: string default: "" permissions: contents: read pull-requests: read id-token: write concurrency: group: integration-tests-manual-${{ github.event.inputs.pr-number || github.event.inputs.branch }} cancel-in-progress: true jobs: resolve-ref: name: Resolve ref runs-on: ubuntu-latest outputs: checkout-ref: ${{ steps.resolve.outputs.checkout-ref }} dotnet-changes: ${{ steps.detect-changes.outputs.dotnet }} python-changes: ${{ steps.detect-changes.outputs.python }} steps: - name: Resolve checkout ref id: resolve env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.inputs.pr-number }} BRANCH: ${{ github.event.inputs.branch }} REPO: ${{ github.repository }} run: | if [ -n "$PR_NUMBER" ] && [ -n "$BRANCH" ]; then echo "::error::Please provide either a PR number or a branch name, not both." exit 1 fi if [ -z "$PR_NUMBER" ] && [ -z "$BRANCH" ]; then echo "::error::Please provide either a PR number or a branch name." exit 1 fi if [ -n "$PR_NUMBER" ]; then if ! echo "$PR_NUMBER" | grep -Eq '^[0-9]+$'; then echo "::error::Invalid PR number. Only numeric values are allowed." exit 1 fi PR_DATA=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json state) PR_STATE=$(echo "$PR_DATA" | jq -r '.state') if [ "$PR_STATE" != "OPEN" ]; then echo "::error::PR #$PR_NUMBER is not open (state: $PR_STATE)" exit 1 fi echo "checkout-ref=refs/pull/$PR_NUMBER/head" >> "$GITHUB_OUTPUT" echo "Running integration tests for PR #$PR_NUMBER" else if ! echo "$BRANCH" | grep -Eq '^[a-zA-Z0-9_./-]+$'; then echo "::error::Invalid branch name. Only alphanumeric characters, hyphens, underscores, dots, and slashes are allowed." exit 1 fi echo "checkout-ref=$BRANCH" >> "$GITHUB_OUTPUT" echo "Running integration tests for branch $BRANCH" fi - name: Detect changed paths id: detect-changes env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.inputs.pr-number }} BRANCH: ${{ github.event.inputs.branch }} REPO: ${{ github.repository }} run: | if [ -n "$PR_NUMBER" ]; then CHANGED_FILES=$(gh pr diff "$PR_NUMBER" --repo "$REPO" --name-only) else # For branches, compare against main using the GitHub API CHANGED_FILES=$(gh api "repos/$REPO/compare/main...$BRANCH" --jq '.files[].filename') fi DOTNET_CHANGES=false PYTHON_CHANGES=false if echo "$CHANGED_FILES" | grep -q '^dotnet/'; then DOTNET_CHANGES=true fi if echo "$CHANGED_FILES" | grep -q '^python/'; then PYTHON_CHANGES=true fi echo "dotnet=$DOTNET_CHANGES" >> "$GITHUB_OUTPUT" echo "python=$PYTHON_CHANGES" >> "$GITHUB_OUTPUT" echo "Detected changes — dotnet: $DOTNET_CHANGES, python: $PYTHON_CHANGES" dotnet-integration-tests: name: .NET Integration Tests needs: resolve-ref if: needs.resolve-ref.outputs.dotnet-changes == 'true' uses: ./.github/workflows/dotnet-integration-tests.yml with: checkout-ref: ${{ needs.resolve-ref.outputs.checkout-ref }} secrets: inherit python-integration-tests: name: Python Integration Tests needs: resolve-ref if: needs.resolve-ref.outputs.python-changes == 'true' uses: ./.github/workflows/python-integration-tests.yml with: checkout-ref: ${{ needs.resolve-ref.outputs.checkout-ref }} secrets: inherit