Skip to content

v8.0.0 - #248

Merged
Paebbels merged 20 commits into
mainfrom
dev
Sep 8, 2026
Merged

v8.0.0#248
Paebbels merged 20 commits into
mainfrom
dev

Conversation

@Paebbels

@Paebbels Paebbels commented Aug 6, 2026

Copy link
Copy Markdown
Member

New Features

  • Two composite actions carry logic that both testing job templates used to hold a copy of (Extract the pip to pacboy translation into two composite actions #253):

    • .github/actions/ComputeRequirements — resolves a ./-prefixed requirements file against a base directory
      and checks that it exists. Inputs requirements, mingw_requirements, base_directory; outputs
      requirements and mingw_requirements.
    • .github/actions/ComputePacboyPackages — holds the pip → MSYS2 rewrite table and translates a requirements
      file (following nested -r) or a dependency list into pacboy packages. Input requirements, output
      pacboy_packages.

    base_directory is a single joined path rather than the three directory inputs, so the action does not need to
    know whether it is called from UnitTesting.yml (root/tests/unit), ApplicationTesting.yml
    (root/tests/app) or StaticTypeCheck.yml (root/tests/typing).

  • StaticTypeCheck.yml takes root_directory, tests_directory and typing_directory — defaults '.',
    'tests' and 'typing' — and accepts the ./ requirements syntax through the same action. It had no
    directory parameters at all, which is why its requirements default had to spell the path out. All three
    testing and checking templates now address their requirements files the same way. (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)

Breaking Changes

  • ⚠️ A ./-prefixed mingw_requirements addresses a different file. It was passed to pip install
    unprocessed, so ./requirements.txt resolved against the working directory; it now resolves against
    root_directory/tests_directory/unittest_directory (or apptest_directory), exactly like requirements.
    A caller that spelled the path out (-r tests/unit/mingw.txt) is unaffected — only the ./ form changes.
    (Extract the pip to pacboy translation into two composite actions #253)

    This is limited to callers that set mingw_requirements; its default is '', and no pipeline in this
    workspace sets it — CompletePipeline.yml does not even expose the parameter, so the eleven repositories that
    go through it cannot reach this change at all.

Changes

  • The pip → pacboy rewrite table is maintained once. UnitTesting.yml and ApplicationTesting.yml each
    carried their own copy of the table, the subPackages table and the ~40-line reader — about 130 lines apiece.
    Both now call the actions. The table had drifted twice, and neither drift was found by a test. (Extract the pip to pacboy translation into two composite actions #253)

  • The table is also complete now, and one entry changed meaning. Every entry was recomputed by resolving each
    distribution's requirements transitively down to the distributions that need an MSYS2 package. (Extract the pip to pacboy translation into two composite actions #253)

    • Added: pyEDAA.IPXACT, pyEDAA.OSVVM, pyEDAA.OutputFilter, pyEDAA.ToolSetup, pyEDAA.UCIS,
      pyEDAA.Workflow, pyVersioning, and pyTooling[sphinx].
    • sphinx_reports was incomplete — it listed three of the seven packages it needs. It requires
      pyEDAA.Reports, Coverage and docstr_coverage, so it also needs python-coverage:p, python-lxml:p,
      python-ruamel-yaml:p and python-ruamel.yaml.clib:p. Reachable today: pyEDAA.OSVVM requires
      sphinx_reports.
    • pyEDAA.ProjectModel loses its base entry and moves to subPackages under an osvvm key. Its
      requirements are pyTooling, pyVHDLModel, pySVModel and pySystemRDLModel, none of which has compiled
      code, so the ruamel-yaml/clib/lxml it listed is needed by nothing it pulls in. Only
      pyEDAA.ProjectModel[osvvm] needs anything. This is the only entry that installs fewer packages than
      before.
    • pyTooling's packaging, terminal and testing extras get no entry on purpose — setuptools, colorama and
      pytest are pure Python — and a comment says so.
  • ⚠️ StaticTypeCheck.yml's requirements default changes from '-r tests/typing/requirements.txt' to
    '-r ./requirements.txt'. With the directory defaults it resolves to the same file, so a caller that does not
    set the parameter sees no difference, and a caller passing a path without ./ is unaffected too. The one case
    that changes is a caller already passing a ./-prefixed path: it is now rebased onto the typing directory
    instead of the working directory. No consumer does — the two repositories that set the parameter both pass
    -r tests/requirements.txt, and CompletePipeline.yml does not forward it at all. (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)

  • StaticTypeCheck.yml runs mypy in root_directory, mirroring how UnitTesting.yml runs pytest. At the
    default '.' this changes nothing. The documentation states what UnitTesting.rst leaves implicit: the report
    paths are written relative to that directory but uploaded relative to the repository root, so a non-default
    value has to be accounted for in both. (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)

  • Both testing job templates install ruamel.yaml with its C library on MSYS2. They disagreed:
    UnitTesting.yml installed python-ruamel-yaml alone and kept the clib variant beside it as a comment,
    ApplicationTesting.yml installed both. ruamel.yaml imports _ruamel_yaml from ruamel.yaml.clib and
    silently falls back to its pure-Python parser when that fails; measured on a 186-line file, the C parser is
    6.7× faster (7.63 ms → 1.14 ms). MSYS2 ships python-ruamel.yaml.clib prebuilt, so it costs a download and
    no compilation. (Install 'jsonschema' from pacman on MSYS2 and unify both pacboy tables #252)

  • A missing mingw_requirements file is reported before the install rather than during it. The existence
    check that requirements has always had applies to mingw_requirements too, so a typo aborts with a
    FileNotFoundError annotation naming the resolved path. This is not a behaviour change: pip already exited 1
    on a missing requirements file (ERROR: Could not open requirements file), so such a job failed before too —
    just less legibly, and deeper in the log. (Extract the pip to pacboy translation into two composite actions #253)

  • The MSYS2 install step of both testing templates lost its if. ComputeRequirements emits the plain
    requirements as its mingw_requirements output when no override is given, so the "override or fall back"
    decision is made once inside the action. (Extract the pip to pacboy translation into two composite actions #253)

  • The computed pacboy list is sorted, so the same job produces the same line on two runs and logs can be
    diffed. (Extract the pip to pacboy translation into two composite actions #253)

  • InstallPackage.yml keeps its hand-written pacboy: list — it installs the package under test and has no
    requirements file to translate — and carries a comment naming the single source to keep it in sync with. (Extract the pip to pacboy translation into two composite actions #253)

  • The shell variable holding a merge commit's second parent is SECOND_PARENT_SHA instead of FATHER_SHA, in
    PrepareJob.yml (10 uses) and PublishReleaseNotes.yml (4 uses). "Second parent" is git's own term and the one
    the step is named after; "father" is not git terminology. GHDL's integrated copy of this logic already used that
    name, so the two now agree.

Bug Fixes

  • A job could download an artifact its producer never uploaded. A status check function tolerates a skipped
    dependency — that is what it is for — but it cannot distinguish a dependency that is unrelated from one that
    produces the artifact the job is about to download. Such a job started anyway and failed at the download:

    Unable to download artifact(s): Artifact not found for name: documentation-HTML
    

    Observed on GHDL's pipeline: GitHub cancelled three Windows packaging jobs, the cascade skipped the
    documentation job, and the publishing job ran regardless.

    Three jobs in CompletePipeline.yml now require the job producing each artifact to have succeeded:

    • PDFDocumentation requires Documentation, whose LaTeX sources it converts.
    • PublishToGitHubPages requires Documentation, PublishCoverageResults and StaticTypeCheck — the three
      HTML trees it assembles.
    • PublishOnPyPI requires Package, whose wheel and source distribution it uploads.

    !failure() && !cancelled() is kept alongside, so a failure anywhere in the closure still suppresses these
    jobs; the new terms only close the skip. None of the producers is switchable by a caller input, so this cannot
    disable a supported configuration.

    IntermediateCleanUp and ArtifactCleanUp are unchanged on purpose — they delete artifacts and must run
    whatever happened — as are TriggerTaggedRelease and ReleasePage, which download nothing.

  • CompletePipeline.yml publishes to GitHub Pages only from branches the github-pages environment admits
    the repository's default branch and dev. The environment's protection rules reject a deployment from any other
    branch before a runner is assigned, so the job failed after one second with no step recorded:

    Branch "claude/dependency-updates" is not allowed to deploy to github-pages due to environment protection rules.
    

    Every feature-branch pipeline therefore showed a red job unrelated to its own changes, which is how a real
    failure gets overlooked. The condition reads github.event.repository.default_branch, so repositories on
    master are covered too. (CompletePipeline: publish Pages only from branches the environment admits #249)

  • A jsonschema test dependency lost every MSYS2 job at the install step, before a single test ran.
    jsonschema depends on rpds-py, a Rust extension with no wheel for mingw_x86_64_ucrt_gnu; maturin refuses
    the target outright, so installing a Rust toolchain would not have helped. MSYS2 ships
    mingw-w64-<env>-python-jsonschema prebuilt, so the rewrite table names it. (Install 'jsonschema' from pacman on MSYS2 and unify both pacboy tables #252)

  • Two rewrite-table entries in ApplicationTesting.yml could never match. The lookup is
    regExp.match(dependency.lower()), but that copy spelled "pyEDAA.ProjectModel" and "pyEDAA.Reports" in
    camel-case. A workflow requiring pyEDAA.Reports got none of python-ruamel-yaml, python-ruamel.yaml.clib or
    python-lxml on MSYS2. pyEDAA.Reports and pyVersioning both use that workflow. (Install 'jsonschema' from pacman on MSYS2 and unify both pacboy tables #252)

  • A dependency list in requirements was silently dropped. The parameter accepts either -r <path> or a
    space separated list, but only the -r branch wrote to GITHUB_OUTPUT. The install step then ran pip install
    with an empty argument, installing nothing, and on MSYS2 the pacboy step scanned the empty string and annotated
    Unrecognized dependency format ''. It stayed hidden because the default is '-r ./requirements.txt'. (Extract the pip to pacboy translation into two composite actions #253)

  • PrepareJob.yml and PublishReleaseNotes.yml compared a literal string. Both wrote "{FATHER_SHA}" == ""
    without the $, so that half of the emptiness check never fired. It was masked by the $? -ne 0 test beside
    it, which catches the case that actually occurs.

Documentation

  • doc/Development.rst, Conditional Jobs → Guidelines, states the distinction between an unrelated dependency
    and a producing one, with the observed failure as the worked example. The rule is not obvious from the symptom.

  • doc/Deveopment.rst was missing an l and is renamed to doc/Development.rst; the toctree entry in
    doc/index.rst follows. The page's title, its DEV/*** labels and every :ref: to them are untouched, so no
    cross-reference breaks — but the published URL changes from .../Deveopment.html to .../Development.html.
    The heading of doc/Instantiation.rst read "Instantiantion". (Fix two documentation typos: Deveopment.rst and 'Instantiantion' #255)

  • UnitTesting.rst and ApplicationTesting.rst said that mingw_requirements "is not resolved this way" and is
    "passed to pip install unchanged". Both now state that it is resolved and checked like requirements, and
    that leaving it empty installs requirements on MSYS2 as well. (Extract the pip to pacboy translation into two composite actions #253)

  • StaticTypeCheck.rst gains the three directory inputs, and its requirements section gains the same two-way
    lookup description the two testing templates carry. Its Behavior list says mypy runs in root_directory.
    (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)

  • Every instantiation example and every prose mention of the release branch moves from @r7 to @r8 — 163
    occurrences across 26 files, including the generic some/path/to/a/template placeholder. Same shape as
    c054718 ("Changed documentation to @r6.") for the previous major.

GitHub Pipeline

  • _Checking_Parameters.yml gains a Requirements_Check job. It writes a small requirements tree —
    including a nested -r ./more.txt and a separate MSYS2 override — runs both new actions over it and asserts all
    three outputs, twelve pacboy packages among them. It refers to the actions as ./.github/actions/..., so it
    exercises the branch under test rather than @dev. (Extract the pip to pacboy translation into two composite actions #253)

    It is a control, not a smoke test: re-introducing the camel-case key drops python-lxml:p, and passing
    mingw_requirements through unresolved leaves the ./ path in place. Both were tried.

    It also resolves StaticTypeCheck.yml's new default against this repository's own tests/typing and asserts
    it equals the old literal default, so "both defaults name the same file" is checked rather than claimed — and
    the existence check runs against a file that really is there. (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)

Known Issues

  • MSYS2's python-ruamel-yaml is 0.18.17, while pyTooling requires ruamel.yaml ~= 0.19.1: pacman satisfies
    the import, then pip still sees the version unsatisfied. The same shape as the existing
    aiohttp >= 3.12 # limited on MSYS2 note.
  • ruamel.yaml 0.19 replaced clib with clibz, and MSYS2 packages clib but not clibz. The entry is correct
    today and will want revisiting when MSYS2 catches up.
  • Nothing keeps the rewrite table in sync with the packages it describes. It is a claim about other
    repositories' dependency graphs, and it had gone stale in six places before this release without a sound. A
    GitHub runner cannot check it — the sibling repositories are not there — so it wants a local tool rather than a
    CI job.

Related Issues and Pull-Requests

Important

This is a major release, so r8 has to be created after merging — r7 is not moved. Every consumer
pinning @r7 stays on v7.15.0 until its pipeline is deliberately changed to @r8. That is twenty pipelines
across this collaboration.

The documentation published from dev already tells consumers to use @r8, so the examples name a ref that
cannot be resolved until the branch exists. The window closes when the release is tagged.

Note

Why 8.0.0 rather than 7.16.0. Two changes alter the meaning of an existing parameter rather than adding
one: a ./-prefixed mingw_requirements in the two testing templates (#253), and a ./-prefixed
requirements in StaticTypeCheck.yml (#257). Both are now resolved against a test directory instead of the
working directory.

Neither affects any pipeline in this collaboration — CompletePipeline.yml does not expose mingw_requirements
at all and does not forward requirements to StaticTypeCheck, and the handful of repositories that set either
parameter directly all spell their paths without the ./ prefix. But both change a documented contract, and an
external consumer cannot be surveyed the way this workspace can.

"Second parent" is git's own term and the one the step is named after - *Find merged PullRequest
from second parent of current SHA*. "Father" is not git terminology. GHDL's integrated copy of this
logic already used `SECOND_PARENT_SHA`, so the two now agree.

Renamed in `PrepareJob.yml` (10 uses) and `PublishReleaseNotes.yml` (4 uses). Both files also had
`"{FATHER_SHA}" == ""` without the `$`, so the emptiness check compared the literal string
`{FATHER_SHA}` and never fired; that is now `"${SECOND_PARENT_SHA}"`. It was masked by the `$? -ne 0`
test in the same condition, which catches the case that actually occurs.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@Paebbels Paebbels self-assigned this Aug 6, 2026
@codacy-production

codacy-production Bot commented Aug 6, 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 (958de9e) Report Missing Report Missing Report Missing
Head commit (8e631fc) 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 (#248) 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%

1 Codacy didn't receive coverage data for the commit, or there was an error processing the received data. Check your integration for errors and validate that your coverage setup is correct.

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.

claude-code and others added 2 commits August 7, 2026 07:26
A status check function tolerates a *skipped* dependency - that is what it is for. It does not
distinguish between a dependency that is unrelated and one that produces the artifact the job is
about to download, so a job with `!failure() && !cancelled()` starts even when its input was never
uploaded, and fails with

    Unable to download artifact(s): Artifact not found for name: documentation-HTML

Observed on GHDL's pipeline (Paebbels/ghdl run 1020): GitHub cancelled three Windows packaging jobs,
the cascade skipped the documentation job, and the publishing job ran regardless.

Three jobs in `CompletePipeline.yml` download what another job uploads, and now say so:

* `PDFDocumentation` requires `Documentation`, whose LaTeX artifact it converts.
* `PublishToGitHubPages` requires `Documentation`, `PublishCoverageResults` and `StaticTypeCheck` -
  the three artifacts it assembles.
* `PublishOnPyPI` requires `Package`, whose wheel and source distribution it uploads.

`!failure() && !cancelled()` is kept alongside, so the established semantics are unchanged: a
failure anywhere in the closure still suppresses these jobs. The new terms only close the skip.

The remaining guarded jobs are left alone deliberately. `IntermediateCleanUp` and `ArtifactCleanUp`
delete artifacts and have to run whatever happened; `TriggerTaggedRelease` and `ReleasePage` create
a tag and a release page and download nothing here.

`doc/Deveopment.rst` states the distinction in the *Guidelines* section, since the rule is not
obvious from the symptom.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
A patch release: no template gained or lost an input or an output. `CompletePipeline.yml` changes
*when* three jobs run, and `PrepareJob.yml`/`PublishReleaseNotes.yml` only rename a shell variable.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@Paebbels Paebbels added Bug Something isn't working Documentation Improvements or additions to documentation JobTmpl: CompletePipeline labels Aug 7, 2026
claude-code and others added 4 commits August 21, 2026 21:57
…mits

The 'github-pages' environment admits the default branch and 'dev'
only, so the deploy job on any other branch is failed by GitHub before
a runner is assigned - one second, no steps, no log. Every
feature-branch pipeline therefore shows a red job that has nothing to
do with its changes, which is how a real failure gets overlooked.

pyTooling fixed this in its own pipeline (pyTooling#297) by guarding
the job. Repositories calling 'CompletePipeline.yml' cannot do that -
they have no per-job 'if:' to add - so the guard belongs here, where it
reaches every consumer at once.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
'jsonschema' depends on 'rpds-py', a Rust extension. PyPI has no wheel for
'mingw_x86_64_ucrt_gnu', so pip builds it from source and maturin refuses the
target:

  Python reports SOABI: cp314-mingw_x86_64_ucrt_gnu
  Unsupported platform: mingw_x86_64_ucrt_gnu

MSYS2 ships 'mingw-w64-*-python-rpds-py' and 'mingw-w64-*-python-jsonschema'
prebuilt, so the rewrite table answers for it the same way it already does for
'aiohttp', 'lxml', 'numpy' and 'igraph' - every other dependency that has to be
compiled.

Found in pyTooling, which added 'jsonschema' as a test dependency and lost its
five MSYS2 jobs at the install step.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
…d keys

'ApplicationTesting.yml' carries its own copy of the pip-to-pacboy rewrite
table, so the rule added to 'UnitTesting.yml' has to be added here as well.

Reading the two side by side turned up a second defect. Both look up
'regExp.match(dependency.lower())["PackageName"]', so the key is always
lower-case - but this table spells two of its keys in camel-case:

  "pyEDAA.ProjectModel": ...
  "pyEDAA.Reports":      ...

Those entries can never match. A workflow requiring 'pyEDAA.Reports' got none of
'python-ruamel-yaml', 'python-ruamel.yaml.clib' or 'python-lxml' on MSYS2 and
failed to install them the same way 'jsonschema' just did.
'UnitTesting.yml' spells the same two keys in lower-case, which is why only this
copy is affected. 'pyEDAA.Reports' and 'pyVersioning' both use this workflow.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
The two copies disagreed on one entry: 'UnitTesting.yml' installed
'python-ruamel-yaml' alone and kept the 'clib' variant beside it as a comment,
'ApplicationTesting.yml' installed both. They are meant to be copies of one
table, so they now say the same thing - with the C library.

'ruamel.yaml' does 'from _ruamel_yaml import CParser, CEmitter' and falls back
to its pure-Python parser and emitter when that import fails.
'ruamel.yaml.clib' is what provides '_ruamel_yaml', so the difference is real
rather than cosmetic. Measured on this repository's own override file, 186
lines: 7.63 ms pure Python against 1.14 ms with the C library, a factor of 6.7.

It is not installed by default because upstream made it optional - since 0.19.1
both C libraries sit behind extras ('oldlibyaml' for clib, 'libyaml' for clibz)
and neither is pulled in by a plain install. Before that it was automatic but
capped, '< 3.13' in 0.17 and '< 3.14' in 0.18, so a Python without a published
wheel simply didn't get it.

None of that applies on MSYS2, which ships 'python-ruamel.yaml.clib' prebuilt,
so naming it here costs a package download and no compilation.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Paebbels and others added 5 commits September 7, 2026 21:15
Both version files - `myPackage/__init__.py` and `myFramework/Extension/__init__.py` - move from
7.15.1 to 7.16.0.

The release grew past a patch: `PublishOnPyPI.yml` and `CompletePipeline.yml` gain new inputs, and
`mingw_requirements` changes how a './'-prefixed path is resolved and starts failing the job when
the file is missing.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
`UnitTesting.yml` and `ApplicationTesting.yml` each carried their own copy of the requirements-path
resolution and of the ~20-entry pip to MSYS2 rewrite table. They are meant to be one table and had
drifted twice: camel-case keys that could never match the lower-cased lookup, and a `ruamel.yaml`
entry that installed the C library in one copy but not the other. Neither was caught by a test.

Both steps now call composite actions, so there is one copy of each:

* `.github/actions/ComputeRequirements` resolves a `./`-prefixed requirements file against a base
  directory and checks that it exists.
* `.github/actions/ComputePacboyPackages` holds the rewrite table and translates a requirements file
  or dependency list into pacboy packages.

`mingw_requirements` is now resolved the same way (A16). It reached `pip install` unprocessed, so a
`./`-prefixed path was not rebased onto the test directory and meant a different file on MSYS2 than
on every other system, and a typo surfaced as a pip error instead of a `FileNotFoundError`
annotation naming the resolved path. The existence check is fatal for it as well, which is why this
is a minor release. `ComputeRequirements` emits the plain requirements as `mingw_requirements` when
no override is given, so the MSYS2 install step no longer needs its own `if`.

Two defects fall out of the rewrite:

* A dependency **list** never reached `GITHUB_OUTPUT` - only the `-r <path>` branch wrote it. `pip
  install` was then called with no packages at all, and on MSYS2 the pacboy step scanned the empty
  string and annotated `Unrecognized dependency format ''`. Both branches write the output now.
* The pacboy list is sorted, so two runs of the same job produce a comparable log line.

`_Checking_Parameters.yml` gains a `Requirements_Check` job that resolves a fixture requirements
tree and asserts both outputs. It references the actions as `./.github/actions/...`, so it verifies
the branch rather than `dev`. Re-introducing either drift makes it fail: the camel-case key drops
`python-lxml:p`, and an unresolved `mingw_requirements` keeps the `./` path.

`InstallPackage.yml` keeps its hand-written pacboy list - it installs the package under test and has
no requirements file to translate - with a comment naming the single source.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
`doc/Deveopment.rst` was missing an `l`. The file is renamed to `doc/Development.rst` and the single
reference to it - the toctree entry in `doc/index.rst` - follows. The document's title, its
`DEV/***` labels and every `:ref:` to them are unaffected; only the file name and the page's URL
change.

The heading of `doc/Instantiation.rst` read "Instantiantion". The file name was already correct, so
only the heading and its underline change.

Verified with a Sphinx build: `Development.html` and `Instantiation.html` are produced and no
toctree reference is left dangling.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@pytooling-claude pytooling-claude Bot changed the title v7.15.1 v7.16.0 Sep 7, 2026
claude-code and others added 3 commits September 7, 2026 23:28
Answering the review: the table was missing entries and carried one that no longer matches its
package. Every entry was recomputed by resolving each distribution's requirements transitively
through the sibling repositories down to the distributions that need an MSYS2 package.

Added, because nothing named them before:

  pyedaa.ipxact        python-lxml:p
  pyedaa.osvvm         coverage, lxml, markupsafe, pyaml, ruamel-yaml, ruamel.yaml.clib, types-pyyaml
  pyedaa.outputfilter  ruamel-yaml, ruamel.yaml.clib
  pyedaa.toolsetup     ruamel-yaml, ruamel.yaml.clib
  pyedaa.ucis          python-lxml:p
  pyedaa.workflow      ruamel-yaml, ruamel.yaml.clib
  pyversioning         ruamel-yaml, ruamel.yaml.clib
  pytooling[sphinx]    python-markupsafe:p

`sphinx_reports` was incomplete. It requires pyEDAA.Reports, Coverage and docstr_coverage, so it
needs `python-coverage:p`, `python-lxml:p`, `python-ruamel-yaml:p` and `python-ruamel.yaml.clib:p`
beyond the three it listed.

`pyedaa.projectmodel` moves to `subPackages`. Its requirements are pyTooling, pyVHDLModel, pySVModel
and pySystemRDLModel - none of which has compiled code - so the base package needs nothing. Only
`pyEDAA.ProjectModel[osvvm]` does, through pyEDAA.OSVVM.

pyTooling's `packaging`, `terminal` and `testing` extras add setuptools, colorama and pytest. All
three are pure Python and install from PyPI on MSYS2, so they get no entry; a comment says so, to
stop the next reader from thinking they were forgotten.

The table now carries a comment stating that an entry is transitive - it names every MSYS2 package a
requirement needs, including those its dependencies pull in.

`Requirements_Check` grows to cover the new entries: its fixture requires `sphinx_reports` and
`pyTooling[yaml,pypi,sphinx]`, and asserts all twelve resulting packages.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
claude-code and others added 2 commits September 7, 2026 22:46
`UnitTesting.yml` and `ApplicationTesting.yml` resolve a requirements path starting with `./` against
`root_directory`/`tests_directory`/<test kind>, and check the file exists before installing.
`StaticTypeCheck.yml` had none of that: it took `requirements` verbatim and had no directory inputs at
all, so its default spelled the path out as `-r tests/typing/requirements.txt`.

It now takes `root_directory` ('.'), `tests_directory` ('tests') and `typing_directory` ('typing'),
and resolves `requirements` through the `ComputeRequirements` action - the same one both testing
templates use since #253. All three templates address their requirements files the same way.

The default becomes `-r ./requirements.txt`. With the defaults that resolves to
`tests/typing/requirements.txt`, which is what the old literal default named, so a caller that does
not set `requirements` is unaffected. A caller that passes a path without `./` is unaffected too -
only the `./` form changes meaning, and no consumer uses it: pyEDAA.Workflow and pyVHDLParser, the
only two that set the parameter, both pass `-r tests/requirements.txt`.

`root_directory` is also mypy's working directory, mirroring how `UnitTesting.yml` runs pytest. At
the default '.' this changes nothing. The documentation states what UnitTesting leaves implicit: the
report paths are written relative to this directory but uploaded relative to the repository root, so
a non-default value has to be accounted for in both.

`Requirements_Check` gains a case that resolves the new default against this repository's own
`tests/typing`, so "both defaults name the same file" is checked rather than asserted - including the
existence check, on a file that is really there.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Co-authored-by: Patrick Lehmann <Paebbels@gmail.com>
claude-code and others added 2 commits September 8, 2026 06:30
Both version files - `myPackage/__init__.py` and `myFramework/Extension/__init__.py` - move from
7.16.0 to 8.0.0.

The release carries two changes to the meaning of an existing parameter: a `./`-prefixed
`mingw_requirements` in `UnitTesting.yml` and `ApplicationTesting.yml`, and a `./`-prefixed
`requirements` in `StaticTypeCheck.yml`, both now resolved against a test directory instead of the
working directory. Neither affects any pipeline in this collaboration, but both change a documented
contract, so the release is a major one.

A major release means a new `r8` branch. Every consumer pinning `@r7` has to be moved deliberately;
`r7` stays where it is.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Every instantiation example and every prose mention of the release branch in `doc/` moves from `@r7`
to `@r8` - 163 occurrences across 26 files, including the generic `some/path/to/a/template@r7`
placeholder.

Same shape as `c054718` ("Changed documentation to @r6.") did for the previous major.

The documentation published from `dev` therefore tells consumers to use `@r8` before that branch
exists. The window closes when the release is tagged and `r8` is created; until then the examples
name a ref that cannot be resolved.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@pytooling-claude pytooling-claude Bot changed the title v7.16.0 v8.0.0 Sep 8, 2026
@Paebbels
Paebbels merged commit 04f49c7 into main Sep 8, 2026
150 of 153 checks passed
@Paebbels Paebbels mentioned this pull request Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants