Skip to content

v7.14.2 - #244

Open
Paebbels wants to merge 1 commit into
mainfrom
dev
Open

v7.14.2#244
Paebbels wants to merge 1 commit into
mainfrom
dev

Conversation

@Paebbels

@Paebbels Paebbels commented Aug 1, 2026

Copy link
Copy Markdown
Member

New Features

  • None. This is a patch release fixing a defect that silently disabled documentation publishing for every consumer of CompletePipeline.yml.

Changes

  • No inputs, outputs or defaults were added, renamed or removed, so @r7 consumers need no adjustment. Repositories that already request pages in documentation_steps start 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. PDFDocumentation and PublishToGitHubPages were the last two jobs whose if carried no status check function:

    if: contains(inputs.documentation_steps, 'pages')

    Without one, GitHub keeps the implicit success(), and that is evaluated over the entire dependency closure, not just over needs. With the default apptest: 'false', AppTestingParams and AppTesting are skipped, and that state reaches both jobs through PublishTestResultsDocumentation. 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 added AppTesting to PublishTestResults.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:

    if: >-
      ${{ !failure() && !cancelled()
       && contains(inputs.documentation_steps, 'pages')
      }}

    !failure() rather than always(): 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:

    job status function direct needs all successful skipped ancestors result
    VersionCheck no yes success
    Install no yes success
    PDFDocumentation no yes AppTestingParams, AppTesting skipped
    PublishToGitHubPages no yes AppTestingParams, AppTesting skipped
    Documentation, IntermediateCleanUp, ArtifactCleanUp, TriggerTaggedRelease yes AppTestingParams, AppTesting success

    Every 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 UnitTestingParams log of that run echoes documentation_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.yml has 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 dispatching Pipeline on their tags once r7 carries 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 implicit success(), 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:

    pipeline apptest documentation_steps exercises the defect?
    SimplePackage 'true' 'html latex' no — nothing is skipped upstream
    NamespacePackage unset (false) 'html' no — no job is conditioned on latex/pdf/pages

    _Checking_NamespacePackage_Pipeline.yml now requests 'html latex pdf'. It is the pipeline with application testing disabled, so it combines a skipped upstream job with a job conditioned on documentation_steps: PDFDocumentation must run, and would have been skipped before this change.

    pages is deliberately not added — PublishToGitHubPages deploys, and the verification pipeline would overwrite this repository's own GitHub Pages site with the myFramework dummy 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): AppTestingParams and AppTesting skipped, PDFDocumentation executed, PublishToGitHubPages skipped because pages is not requested. IntermediateCleanUp and ArtifactCleanUp executed, so the reformatted multi-line conditions evaluate as intended. Run conclusion: success.

    PDFDocumentation itself fails inside the MiKTeX container — unchanged from run 30720291570 on the previous revision, and tolerated via can-fail: 'true'. That is the unresolved-LaTeX-references finding, tracked separately.

  • Both changed workflows parse as YAML. Every if combining 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:

    ${{ !failure() && !cancelled()\n && contains(inputs.documentation_steps, 'latex')\n && contains(inputs.documentation_steps, 'pdf')\n}}
    

    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.yml was re-modelled after the change: AppTesting is now the only job without a status check function that has a skippable ancestor, which is correct — it is skipped by the same apptest input.

  • The changed .rst produces no docutils messages beyond the pre-existing Sphinx-only constructs.


Related Issues and Pull-Requests

  • Follow-up to Fix jobs being skipped when application testing is disabled #236 (v7.14.0), Fix jobs being skipped when application testing is disabled, which fixed the same defect class for CodeQuality, DocCoverage, PublishCoverageResults, PublishTestResults, Documentation and IntermediateCleanUp, but missed the two jobs that skip silently.
  • Regression introduced by 1a11cbb, Reactivated Application Testing, released with v7.12.0.
  • Reported from the VHDL/pyVHDLModel v0.38.0 release run and the tag pipeline, where the release completed but PublishToGitHubPages was skipped on both main and the v0.38.0 tag.

@Paebbels Paebbels added Bug Something isn't working Documentation Improvements or additions to documentation Job Template Tests JobTmpl: CompletePipeline labels Aug 1, 2026
@codacy-production

Copy link
Copy Markdown

Not up to standards ⛔

🟢 Coverage 100.00% diff coverage · -28.89% coverage variation

Metric Results
Coverage variation -28.89% coverage variation
Diff coverage 100.00% diff coverage

View coverage diff in Codacy

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.

@codacy-production

codacy-production Bot commented Aug 1, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity · 0 duplication

Metric Results
Complexity 0
Duplication 0

View in Codacy

🟢 Coverage 100.00% diff coverage · +0.00% coverage variation

Metric Results
Coverage variation +0.00% coverage variation
Diff coverage 100.00% diff coverage

View coverage diff in Codacy

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.

Comment thread .github/workflows/_Checking_NamespacePackage_Pipeline.yml Outdated
Comment thread .github/workflows/CompletePipeline.yml Outdated
Comment thread .github/workflows/CompletePipeline.yml Outdated
Comment thread doc/JobTemplate/AllInOne/CompletePipeline.rst Outdated
`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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug Something isn't working Documentation Improvements or additions to documentation Job Template Tests JobTmpl: CompletePipeline

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants