Integration Tests (Manual) #44
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
| # | |
| # 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 |