Description
In .github/workflows/run_tests_coverage_pr.yml, the workflow fails to detect changed packages whenever a pull request branch is behind develop. As a result, the PR coverage report comments:
Coverage Report
No coverage information available.
even though the tests run, succeed, and all other CI checks are green.
What Happens:
- Shallow Fetch of Base Branch: In
.github/workflows/run_tests_coverage_pr.yml (lines 124–127), the step Get list of changed directories executes a shallow fetch (--depth=1).
- Divergent History with No Merge Base: Because
--depth=1 only fetches the single latest commit on develop, if develop has moved forward since the feature branch was created, git cannot find a common ancestor with HEAD.
- Silent Failure via
continue-on-error: Because there is no merge base in the shallow history, git diff origin/${{ github.base_ref }}...HEAD fails. Because the step specifies continue-on-error: true, the error does not fail the job. Instead, files and directories evaluate to an empty string "".
- Coverage Script Exits Early: The downstream script
.github/workflows/scripts/run_tests_coverage/run receives an empty directory list and exits with code 0.
- Bot Posts Default Fallback: Because the
$TABLE is empty, the stdlib-bot publishes the fallback "No coverage information available." comment instead of the coverage table.
Comparison with Other Workflows:
Other workflows in the repository (such as .github/workflows/lint_changed_files.yml and .github/workflows/run_affected_tests.yml) avoid this issue by computing the common ancestor commit using git merge-base. Because actions/checkout already fetches history (fetch-depth: 1000), the git merge-base calculation works reliably even if the branch is behind develop.
Proposed Fix:
Update the Get list of changed directories step in .github/workflows/run_tests_coverage_pr.yml to use git merge-base, matching the standard used in the linting workflow:
- git fetch origin ${{ github.base_ref }} --depth=1
- files=$(git diff --diff-filter=AM --name-only origin/${{ github.base_ref }}...HEAD)
+ ancestor_commit=$(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }})
+ files=$(git diff --diff-filter=AM --name-only $ancestor_commit ${{ github.event.pull_request.head.sha }})
directories=$(for file in $files; do dirname $file; done | sort -u | tr '\n' ' ' | sed 's/ $//')
echo "directories=${directories}" >> $GITHUB_OUTPUT
Related Issues
None.
Questions
If the proposed fix looks good, I am happy to open a PR to update the workflow file!
Demo
This bug can be observed in PR #15633.
- On the initial commit, the feature branch was behind
develop, and the coverage action silently failed with the fallback message.
- Once
develop was merged into the PR branch (syncing the history), the coverage table generated successfully, confirming that the missing merge-base was the root cause.
Reproduction
- Open a Pull Request where the feature branch is behind
develop.
- Wait for the
run_tests_coverage_pr.yml GitHub Actions workflow to execute.
- Observe the
Get list of changed directories step silently failing to find changed files.
- Observe the
stdlib-bot commenting the fallback text: "No coverage information available."
Expected Results
The workflow should correctly identify the changed directories using the merge base (identical to how .github/workflows/lint_changed_files.yml operates) and generate a valid coverage table for the PR.
Actual Results
The workflow silently fails to calculate the git diff due to the shallow fetch, resulting in the bot commenting a useless fallback message on the PR.
Version
develop (Latest)
Environments
N/A
Browser Version
No response
Node.js / npm Version
No response
Platform
Ubuntu (GitHub Actions Runners)
Checklist
Description
In
.github/workflows/run_tests_coverage_pr.yml, the workflow fails to detect changed packages whenever a pull request branch is behinddevelop. As a result, the PR coverage report comments:even though the tests run, succeed, and all other CI checks are green.
What Happens:
.github/workflows/run_tests_coverage_pr.yml(lines 124–127), the stepGet list of changed directoriesexecutes a shallow fetch (--depth=1).--depth=1only fetches the single latest commit ondevelop, ifdevelophas moved forward since the feature branch was created, git cannot find a common ancestor withHEAD.continue-on-error: Because there is no merge base in the shallow history,git diff origin/${{ github.base_ref }}...HEADfails. Because the step specifiescontinue-on-error: true, the error does not fail the job. Instead,filesanddirectoriesevaluate to an empty string""..github/workflows/scripts/run_tests_coverage/runreceives an empty directory list and exits with code0.$TABLEis empty, thestdlib-botpublishes the fallback "No coverage information available." comment instead of the coverage table.Comparison with Other Workflows:
Other workflows in the repository (such as
.github/workflows/lint_changed_files.ymland.github/workflows/run_affected_tests.yml) avoid this issue by computing the common ancestor commit usinggit merge-base. Becauseactions/checkoutalready fetches history (fetch-depth: 1000), thegit merge-basecalculation works reliably even if the branch is behinddevelop.Proposed Fix:
Update the
Get list of changed directoriesstep in.github/workflows/run_tests_coverage_pr.ymlto usegit merge-base, matching the standard used in the linting workflow:Related Issues
None.
Questions
If the proposed fix looks good, I am happy to open a PR to update the workflow file!
Demo
This bug can be observed in PR #15633.
develop, and the coverage action silently failed with the fallback message.developwas merged into the PR branch (syncing the history), the coverage table generated successfully, confirming that the missing merge-base was the root cause.Reproduction
develop.run_tests_coverage_pr.ymlGitHub Actions workflow to execute.Get list of changed directoriesstep silently failing to find changed files.stdlib-botcommenting the fallback text: "No coverage information available."Expected Results
The workflow should correctly identify the changed directories using the merge base (identical to how
.github/workflows/lint_changed_files.ymloperates) and generate a valid coverage table for the PR.Actual Results
The workflow silently fails to calculate the git diff due to the shallow fetch, resulting in the bot commenting a useless fallback message on the PR.
Version
develop (Latest)
Environments
N/A
Browser Version
No response
Node.js / npm Version
No response
Platform
Ubuntu (GitHub Actions Runners)
Checklist