11name : uipath - Integration Tests
22
33on :
4- push :
5- branches : [ main, develop ]
64 pull_request :
75 branches : [ main ]
86
@@ -12,30 +10,71 @@ permissions:
1210 actions : read
1311
1412jobs :
13+ detect-changed-packages :
14+ runs-on : ubuntu-latest
15+ outputs :
16+ packages : ${{ steps.detect.outputs.packages }}
17+ count : ${{ steps.detect.outputs.count }}
18+ steps :
19+ - name : Checkout
20+ uses : actions/checkout@v4
21+ with :
22+ fetch-depth : 0
23+
24+ - name : Setup Python
25+ uses : actions/setup-python@v5
26+ with :
27+ python-version : ' 3.11'
28+
29+ - name : Detect changed packages
30+ id : detect
31+ env :
32+ GITHUB_EVENT_NAME : ${{ github.event_name }}
33+ BASE_SHA : ${{ github.event.pull_request.base.sha }}
34+ HEAD_SHA : ${{ github.event.pull_request.head.sha }}
35+ run : python .github/scripts/detect_changed_packages.py
36+
1537 discover-testcases :
38+ needs : [detect-changed-packages]
39+ if : needs.detect-changed-packages.outputs.count > 0
1640 runs-on : ubuntu-latest
1741 outputs :
1842 testcases : ${{ steps.discover.outputs.testcases }}
43+ count : ${{ steps.discover.outputs.count }}
1944 steps :
2045 - name : Checkout code
2146 uses : actions/checkout@v4
2247
2348 - name : Discover testcases
2449 id : discover
25- working-directory : packages/uipath
50+ env :
51+ PACKAGES : ${{ needs.detect-changed-packages.outputs.packages }}
2652 run : |
27- # Find all testcase folders (excluding common folders like README, etc.)
28- testcase_dirs=$(find testcases -maxdepth 1 -type d -name "*-*" | sed 's|testcases/||' | sort)
29-
30- echo "Found testcase directories:"
31- echo "$testcase_dirs"
53+ # Discover testcases from all affected packages
54+ all_testcases="[]"
55+
56+ for package in $(echo "$PACKAGES" | jq -r '.[]'); do
57+ testcases_dir="packages/$package/testcases"
58+ if [ -d "$testcases_dir" ]; then
59+ testcase_dirs=$(find "$testcases_dir" -maxdepth 1 -type d -name "*-*" | sed "s|$testcases_dir/||" | sort)
60+ if [ -n "$testcase_dirs" ]; then
61+ echo "Found testcases in $package:"
62+ echo "$testcase_dirs"
63+ # Add as package/testcase entries
64+ package_testcases=$(echo "$testcase_dirs" | jq -R -c --arg pkg "$package" '{package: $pkg, testcase: .}')
65+ all_testcases=$(echo "$all_testcases" | jq -c --argjson new "[$( echo "$package_testcases" | paste -sd, )]" '. + $new')
66+ fi
67+ fi
68+ done
3269
33- # Convert to JSON array for matrix
34- testcases_json=$(echo "$testcase_dirs" | jq -R -s -c 'split("\n")[:-1]')
35- echo "testcases=$testcases_json" >> $GITHUB_OUTPUT
70+ echo "All testcases: $all_testcases"
71+ count=$(echo "$all_testcases" | jq 'length')
72+ echo "testcases=$all_testcases" >> $GITHUB_OUTPUT
73+ echo "count=$count" >> $GITHUB_OUTPUT
3674
3775 integration-tests :
3876 needs : [discover-testcases]
77+ if : needs.discover-testcases.outputs.count > 0
3978 runs-on : ubuntu-latest
4079 container :
4180 image : ghcr.io/astral-sh/uv:python3.12-bookworm
@@ -48,14 +87,14 @@ jobs:
4887 testcase : ${{ fromJson(needs.discover-testcases.outputs.testcases) }}
4988 environment : [alpha, cloud, staging]
5089
51- name : " ${{ matrix.testcase }} / ${{ matrix.environment }}"
90+ name : " ${{ matrix.testcase.testcase }} / ${{ matrix.environment }}"
5291
5392 steps :
5493 - name : Checkout code
5594 uses : actions/checkout@v4
5695
5796 - name : Install dependencies
58- working-directory : packages/uipath
97+ working-directory : packages/${{ matrix.testcase.package }}
5998 run : uv sync
6099
61100 - name : Run testcase
@@ -70,12 +109,13 @@ jobs:
70109 TELEMETRY_CONNECTION_STRING : ${{ secrets.APPLICATIONINSIGHTS_CONNECTION_STRING }}
71110 APP_INSIGHTS_APP_ID : ${{ secrets.APP_INSIGHTS_APP_ID }}
72111 APP_INSIGHTS_API_KEY : ${{ secrets.APP_INSIGHTS_API_KEY }}
73- working-directory : packages/uipath /testcases/${{ matrix.testcase }}
112+ working-directory : packages/${{ matrix.testcase.package }} /testcases/${{ matrix.testcase .testcase }}
74113 run : |
75114 # If any errors occur execution will stop with exit code
76115 set -e
77116
78- echo "Running testcase: ${{ matrix.testcase }}"
117+ echo "Running testcase: ${{ matrix.testcase.testcase }}"
118+ echo "Package: ${{ matrix.testcase.package }}"
79119 echo "Environment: ${{ matrix.environment }}"
80120 echo "Working directory: $(pwd)"
81121
@@ -84,12 +124,20 @@ jobs:
84124 bash ../common/validate_output.sh
85125
86126 summarize-results :
87- needs : [integration-tests]
127+ needs : [detect-changed-packages, discover-testcases, integration-tests]
88128 runs-on : ubuntu-latest
89- if : always() # This ensures the job runs even if the tests fail
129+ if : always()
90130 steps :
91131 - name : Check integration tests status
92132 run : |
133+ if [[ "${{ needs.detect-changed-packages.outputs.count }}" == "0" ]]; then
134+ echo "No packages changed - skipping integration tests"
135+ exit 0
136+ fi
137+ if [[ "${{ needs.discover-testcases.outputs.count }}" == "0" ]]; then
138+ echo "No testcases found for changed packages - skipping"
139+ exit 0
140+ fi
93141 if [[ "${{ needs.integration-tests.result }}" == "success" ]]; then
94142 echo "All integration tests passed"
95143 else
0 commit comments