@@ -161,16 +161,6 @@ jobs:
161161 # Unzip any zipped coverage results
162162 find .coverage-results -type f -name '*.zip' -exec unzip -o {} \;
163163
164- # Find all coverage files and combine them.
165- # We find files starting with .coverage (excluding .coveragerc files and templates)
166- coverage_files=$(find .coverage-results . -type f -name '.coverage*' ! -name '.coveragerc*')
167- if [ -n "${coverage_files}" ]; then
168- coverage combine ${coverage_files}
169- else
170- echo "Error: No coverage files found to combine."
171- exit 1
172- fi
173-
174164 # Find all modified packages
175165 if [[ "${TEST_ALL_PACKAGES}" == "true" ]]; then
176166 modified_packages=$(ls -d packages/*/ | cut -d/ -f1,2 | sort -u)
@@ -189,25 +179,45 @@ jobs:
189179 done
190180
191181 (
192- pkg_log="/tmp/coverage-logs/${pkg//\//_}.log"
193- pkg_status="/tmp/coverage-logs/${pkg//\//_}.status"
182+ pkg_name_clean=$(echo "${pkg}" | sed 's|/$||' | sed 's|/|_|g')
183+ pkg_log="/tmp/coverage-logs/${pkg_name_clean}.log"
184+ pkg_status="/tmp/coverage-logs/${pkg_name_clean}.status"
194185
195186 set +e
196- pushd "${pkg}" > /dev/null
197- if [ -f ".coveragerc" ]; then
198- echo "Using package-specific configuration: ${pkg}/.coveragerc" > "${pkg_log}"
199- if grep -q "fail_under" ".coveragerc"; then
200- COVERAGE_FILE=../../.coverage coverage report --rcfile=".coveragerc" --include="$PWD/**" >> "${pkg_log}" 2>&1
187+
188+ # Find coverage databases belonging specifically to this package across all Python versions
189+ pkg_files=$(find .coverage-results/ -type f -name ".coverage.*.${pkg_name_clean}" -o -name ".coverage.*.${pkg_name_clean}.*")
190+
191+ if [ -n "${pkg_files}" ]; then
192+ # Create a dedicated temp directory for combining this package's coverage databases
193+ temp_combine_dir="/tmp/combine-${pkg_name_clean}"
194+ mkdir -p "${temp_combine_dir}"
195+ cp ${pkg_files} "${temp_combine_dir}/"
196+
197+ pushd "${pkg}" > /dev/null
198+
199+ # Combine only this package's databases into a local .coverage database inside the package directory
200+ COVERAGE_FILE="${PWD}/.coverage" coverage combine "${temp_combine_dir}"/.coverage.* >> "${pkg_log}" 2>&1
201+
202+ # Generate the coverage report using the package-specific local database
203+ if [ -f ".coveragerc" ]; then
204+ echo "Using package-specific configuration: ${pkg}/.coveragerc" > "${pkg_log}"
205+ if grep -q "fail_under" ".coveragerc"; then
206+ COVERAGE_FILE="${PWD}/.coverage" coverage report --rcfile=".coveragerc" --include="$PWD/**" >> "${pkg_log}" 2>&1
207+ else
208+ echo "No fail_under specified in ${pkg}/.coveragerc, enforcing default" >> "${pkg_log}"
209+ COVERAGE_FILE="${PWD}/.coverage" coverage report --rcfile=".coveragerc" --include="$PWD/**" --fail-under="${DEFAULT_FAIL_UNDER}" >> "${pkg_log}" 2>&1
210+ fi
201211 else
202- echo "No fail_under specified in ${pkg}/.coveragerc , enforcing default" > > "${pkg_log}"
203- COVERAGE_FILE=../../. coverage coverage report --rcfile=".coveragerc" --include="$PWD/**" --fail-under="${DEFAULT_FAIL_UNDER}" >> "${pkg_log}" 2>&1
212+ echo "No .coveragerc found for ${pkg}, enforcing default" > "${pkg_log}"
213+ COVERAGE_FILE="${PWD}/. coverage" coverage report --include="$PWD/**" --fail-under="${DEFAULT_FAIL_UNDER}" >> "${pkg_log}" 2>&1
204214 fi
215+ echo $? > "${pkg_status}"
216+ popd > /dev/null
205217 else
206- echo "No .coveragerc found for ${pkg}, enforcing default " > "${pkg_log}"
207- COVERAGE_FILE=../../.coverage coverage report --include="$PWD/**" --fail-under="${DEFAULT_FAIL_UNDER}" >> "${pkg_log}" 2>&1
218+ echo "Warning: No coverage results found for ${pkg}" > "${pkg_log}"
219+ echo 1 > "${pkg_status}"
208220 fi
209- echo $? > "${pkg_status}"
210- popd > /dev/null
211221 set -e
212222 ) &
213223 fi
@@ -221,8 +231,9 @@ jobs:
221231
222232 for pkg in ${modified_packages}; do
223233 if [ -d "${pkg}" ]; then
224- pkg_log="/tmp/coverage-logs/${pkg//\//_}.log"
225- pkg_status="/tmp/coverage-logs/${pkg//\//_}.status"
234+ pkg_name_clean=$(echo "${pkg}" | sed 's|/$||' | sed 's|/|_|g')
235+ pkg_log="/tmp/coverage-logs/${pkg_name_clean}.log"
236+ pkg_status="/tmp/coverage-logs/${pkg_name_clean}.status"
226237
227238 echo "============================================================"
228239 echo "Evaluating coverage for package: ${pkg}"
0 commit comments