Conversation
Not up to standards ⛔🟢 Coverage
|
| Metric | Results |
|---|---|
| Coverage variation | ✅ -28.89% coverage variation |
| Diff coverage | ✅ 100.00% diff coverage |
Coverage variation details
Coverable lines Covered lines Coverage Common ancestor commit (179b07f) 45 41 91.11% Head commit (96a863f) 45 (+0) 28 (-13) 62.22% (-28.89%) Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:
<coverage of head commit> - <coverage of common ancestor commit>
Diff coverage details
Coverable lines Covered lines Diff coverage Pull request (#244) 1 1 100.00% Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:
<covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 0 |
| Duplication | 0 |
🟢 Coverage 100.00% diff coverage · +0.00% coverage variation
Metric Results Coverage variation ✅ +0.00% coverage variation Diff coverage ✅ 100.00% diff coverage Coverage variation details
Coverable lines Covered lines Coverage Common ancestor commit (179b07f) 45 41 91.11% Head commit (08dd2c2) 45 (+0) 41 (+0) 91.11% (+0.00%) Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:
<coverage of head commit> - <coverage of common ancestor commit>Diff coverage details
Coverable lines Covered lines Diff coverage Pull request (#244) 1 1 100.00% Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:
<covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
`PDFDocumentation` and `PublishToGitHubPages` were the only jobs left in `CompletePipeline.yml` whose `if` carries no status check function. GitHub evaluates the implicit `success()` over the entire dependency closure, so the `AppTestingParams`/`AppTesting` jobs skipped by `apptest: false` (v7.12.0) propagated through `PublishTestResults` and `Documentation` - both of which survive on `!cancelled()` - and skipped both jobs even though their conditions were true. Consequence: no consumer of `CompletePipeline.yml` has published documentation to GitHub Pages since v7.12.0, including the pyVHDLModel v0.38.0 and sphinx-reports v0.11.2 releases. The verification pipelines never caught it, because SimplePackage enables application testing and NamespacePackage requested `html` only. NamespacePackage now requests `html latex pdf`, which combines a skipped job with a job conditioned on `documentation_steps`. The GitHub Actions specifics behind this - status check functions, the implicit `success()`, the propagation of skipped jobs along the transitive dependency closure and which function to pick - are documented in a new *Conditional Jobs* section on the Development page instead of in the YAML file. All conditions combining a status check function with further terms are written as a folded block scalar with one term per line. Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
New Features
CompletePipeline.yml.Changes
@r7consumers need no adjustment. Repositories that already requestpagesindocumentation_stepsstart publishing again on their next release without any change on their side.Bug Fixes
CompletePipeline.yml: documentation was never published to GitHub Pages when application testing is disabled.PDFDocumentationandPublishToGitHubPageswere the last two jobs whoseifcarried no status check function:Without one, GitHub keeps the implicit
success(), and that is evaluated over the entire dependency closure, not just overneeds. With the defaultapptest: 'false',AppTestingParamsandAppTestingare skipped, and that state reaches both jobs throughPublishTestResults→Documentation. Those two survive on!cancelled(), but surviving does not stop the propagation, so both documentation jobs were skipped although their condition was true and all of their direct dependencies had succeeded.Present since v7.12.0, which reactivated application testing (
1a11cbb) and addedAppTestingtoPublishTestResults.needs. v7.14.0 (Fix jobs being skipped when application testing is disabled #236) converted the jobs that were failing loudly to!cancelled()but did not reach these two, because they fail silently — a skipped job is not a red pipeline.Both now read:
!failure()rather thanalways(): a skipped dependency must no longer suppress the job, a failed one still must — that was the pre-v7.12.0 behavior.Verified against the pyVHDLModel v0.38.0 release, modelling the job graph of run 30691716593 against the observed results:
needsall successfulVersionCheckInstallPDFDocumentationAppTestingParams,AppTestingPublishToGitHubPagesAppTestingParams,AppTestingDocumentation,IntermediateCleanUp,ArtifactCleanUp,TriggerTaggedReleaseAppTestingParams,AppTestingEvery job without a status check function and with a skipped ancestor was skipped; every job without one and with a clean ancestor set ran. No counterexample.
Two observations rule out the condition itself: the
UnitTestingParamslog of that run echoesdocumentation_steps: html pages, and pyTooling/sphinx-reports passes'html latex pdf pages'explicitly, builds its LaTeX documentation successfully, and still had both jobs skipped.Impact: no repository using
CompletePipeline.ymlhas published documentation since v7.12.0 (2026-07-13). The last successful publish for VHDL/pyVHDLModel was v0.37.0 on 2026-07-05, under v7.11.1. Affected releases are pyVHDLModel v0.38.0 and sphinx-reports v0.11.2; both can be republished by dispatchingPipelineon their tags oncer7carries this release.Documentation
doc/Deveopment.rst— new Conditional Jobs section. The page held a single.. todo::; it now documents the status check functions and the implicitsuccess(), the propagation of skipped jobs along the transitive dependency closure (with this defect as the worked example), which function to pick for which kind of job, and how to verify that a switch skips only what it should. Review request: the GitHub-specific mechanics belong in the documentation, not in comments inside the workflow file.doc/JobTemplate/AllInOne/CompletePipeline.rst— the Behavior topic states which steps are optional and that disabling one disables that step alone, and links to the new section for the mechanics.Unit Tests
The verification pipelines could not have caught this, which is why it shipped:
apptestdocumentation_steps'true''html latex'false)'html'latex/pdf/pages_Checking_NamespacePackage_Pipeline.ymlnow requests'html latex pdf'. It is the pipeline with application testing disabled, so it combines a skipped upstream job with a job conditioned ondocumentation_steps:PDFDocumentationmust run, and would have been skipped before this change.pagesis deliberately not added —PublishToGitHubPagesdeploys, and the verification pipeline would overwrite this repository's own GitHub Pages site with themyFrameworkdummy documentation. Testing that half needs a dry-run mode on the job template; recorded as a finding rather than approximated here.Cost of the new step: one MiKTeX container run per push — kept, as reviewed.
Verified on run 30764122048 (NamespacePackage, this branch):
AppTestingParamsandAppTestingskipped,PDFDocumentationexecuted,PublishToGitHubPagesskipped becausepagesis not requested.IntermediateCleanUpandArtifactCleanUpexecuted, so the reformatted multi-line conditions evaluate as intended. Run conclusion: success.PDFDocumentationitself fails inside the MiKTeX container — unchanged from run 30720291570 on the previous revision, and tolerated viacan-fail: 'true'. That is the unresolved-LaTeX-references finding, tracked separately.Both changed workflows parse as YAML. Every
ifcombining a status check function with further terms is now written as a folded block scalar with one term per line (review request). Note that the extra space in front of&&makes those more-indented lines, which YAML does not fold — the value keeps real newlines:GitHub's expression parser accepts them as whitespace. Since that is a different string than the previous single-line form, it was checked on a real run rather than by parsing alone — see the run linked below.
The job graph of
CompletePipeline.ymlwas re-modelled after the change:AppTestingis now the only job without a status check function that has a skippable ancestor, which is correct — it is skipped by the sameapptestinput.The changed
.rstproduces no docutils messages beyond the pre-existing Sphinx-only constructs.Related Issues and Pull-Requests
CodeQuality,DocCoverage,PublishCoverageResults,PublishTestResults,DocumentationandIntermediateCleanUp, but missed the two jobs that skip silently.1a11cbb, Reactivated Application Testing, released with v7.12.0.PublishToGitHubPageswas skipped on bothmainand thev0.38.0tag.