Conversation
"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>
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 (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.
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>
…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>
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>
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>
`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>
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>
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 directoryand checks that it exists. Inputs
requirements,mingw_requirements,base_directory; outputsrequirementsandmingw_requirements..github/actions/ComputePacboyPackages— holds the pip → MSYS2 rewrite table and translates a requirementsfile (following nested
-r) or a dependency list into pacboy packages. Inputrequirements, outputpacboy_packages.base_directoryis a single joined path rather than the three directory inputs, so the action does not need toknow whether it is called from
UnitTesting.yml(root/tests/unit),ApplicationTesting.yml(
root/tests/app) orStaticTypeCheck.yml(root/tests/typing).StaticTypeCheck.ymltakesroot_directory,tests_directoryandtyping_directory— defaults'.','tests'and'typing'— and accepts the./requirements syntax through the same action. It had nodirectory parameters at all, which is why its
requirementsdefault had to spell the path out. All threetesting and checking templates now address their requirements files the same way. (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)
Breaking Changes
./-prefixedmingw_requirementsaddresses a different file. It was passed topip installunprocessed, so
./requirements.txtresolved against the working directory; it now resolves againstroot_directory/tests_directory/unittest_directory(orapptest_directory), exactly likerequirements.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 thisworkspace sets it —
CompletePipeline.ymldoes not even expose the parameter, so the eleven repositories thatgo through it cannot reach this change at all.
Changes
The pip → pacboy rewrite table is maintained once.
UnitTesting.ymlandApplicationTesting.ymleachcarried their own copy of the table, the
subPackagestable 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)
pyEDAA.IPXACT,pyEDAA.OSVVM,pyEDAA.OutputFilter,pyEDAA.ToolSetup,pyEDAA.UCIS,pyEDAA.Workflow,pyVersioning, andpyTooling[sphinx].sphinx_reportswas incomplete — it listed three of the seven packages it needs. It requirespyEDAA.Reports,Coverageanddocstr_coverage, so it also needspython-coverage:p,python-lxml:p,python-ruamel-yaml:pandpython-ruamel.yaml.clib:p. Reachable today:pyEDAA.OSVVMrequiressphinx_reports.pyEDAA.ProjectModelloses its base entry and moves tosubPackagesunder anosvvmkey. Itsrequirements are
pyTooling,pyVHDLModel,pySVModelandpySystemRDLModel, none of which has compiledcode, so the
ruamel-yaml/clib/lxmlit listed is needed by nothing it pulls in. OnlypyEDAA.ProjectModel[osvvm]needs anything. This is the only entry that installs fewer packages thanbefore.
packaging,terminalandtestingextras get no entry on purpose — setuptools, colorama andpytest are pure Python — and a comment says so.
StaticTypeCheck.yml'srequirementsdefault 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 notset the parameter sees no difference, and a caller passing a path without
./is unaffected too. The one casethat changes is a caller already passing a
./-prefixed path: it is now rebased onto the typing directoryinstead of the working directory. No consumer does — the two repositories that set the parameter both pass
-r tests/requirements.txt, andCompletePipeline.ymldoes not forward it at all. (Give StaticTypeCheck directory inputs and the './' requirements syntax #257)StaticTypeCheck.ymlruns mypy inroot_directory, mirroring howUnitTesting.ymlruns pytest. At thedefault
'.'this changes nothing. The documentation states whatUnitTesting.rstleaves implicit: the reportpaths 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.yamlwith its C library on MSYS2. They disagreed:UnitTesting.ymlinstalledpython-ruamel-yamlalone and kept theclibvariant beside it as a comment,ApplicationTesting.ymlinstalled both.ruamel.yamlimports_ruamel_yamlfromruamel.yaml.clibandsilently 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.clibprebuilt, so it costs a download andno compilation. (Install 'jsonschema' from pacman on MSYS2 and unify both pacboy tables #252)
A missing
mingw_requirementsfile is reported before the install rather than during it. The existencecheck that
requirementshas always had applies tomingw_requirementstoo, so a typo aborts with aFileNotFoundErrorannotation naming the resolved path. This is not a behaviour change: pip already exited 1on 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.ComputeRequirementsemits the plainrequirementsas itsmingw_requirementsoutput 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.ymlkeeps its hand-writtenpacboy:list — it installs the package under test and has norequirements 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_SHAinstead ofFATHER_SHA, inPrepareJob.yml(10 uses) andPublishReleaseNotes.yml(4 uses). "Second parent" is git's own term and the onethe 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:
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.ymlnow require the job producing each artifact to have succeeded:PDFDocumentationrequiresDocumentation, whose LaTeX sources it converts.PublishToGitHubPagesrequiresDocumentation,PublishCoverageResultsandStaticTypeCheck— the threeHTML trees it assembles.
PublishOnPyPIrequiresPackage, whose wheel and source distribution it uploads.!failure() && !cancelled()is kept alongside, so a failure anywhere in the closure still suppresses thesejobs; the new terms only close the skip. None of the producers is switchable by a caller input, so this cannot
disable a supported configuration.
IntermediateCleanUpandArtifactCleanUpare unchanged on purpose — they delete artifacts and must runwhatever happened — as are
TriggerTaggedReleaseandReleasePage, which download nothing.CompletePipeline.ymlpublishes to GitHub Pages only from branches thegithub-pagesenvironment admits —the repository's default branch and
dev. The environment's protection rules reject a deployment from any otherbranch before a runner is assigned, so the job failed after one second with no step recorded:
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 onmasterare covered too. (CompletePipeline: publish Pages only from branches the environment admits #249)A
jsonschematest dependency lost every MSYS2 job at the install step, before a single test ran.jsonschemadepends onrpds-py, a Rust extension with no wheel formingw_x86_64_ucrt_gnu;maturinrefusesthe target outright, so installing a Rust toolchain would not have helped. MSYS2 ships
mingw-w64-<env>-python-jsonschemaprebuilt, so the rewrite table names it. (Install 'jsonschema' from pacman on MSYS2 and unify both pacboy tables #252)Two rewrite-table entries in
ApplicationTesting.ymlcould never match. The lookup isregExp.match(dependency.lower()), but that copy spelled"pyEDAA.ProjectModel"and"pyEDAA.Reports"incamel-case. A workflow requiring
pyEDAA.Reportsgot none ofpython-ruamel-yaml,python-ruamel.yaml.cliborpython-lxmlon MSYS2.pyEDAA.ReportsandpyVersioningboth use that workflow. (Install 'jsonschema' from pacman on MSYS2 and unify both pacboy tables #252)A dependency list in
requirementswas silently dropped. The parameter accepts either-r <path>or aspace separated list, but only the
-rbranch wrote toGITHUB_OUTPUT. The install step then ranpip installwith 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.ymlandPublishReleaseNotes.ymlcompared a literal string. Both wrote"{FATHER_SHA}" == ""without the
$, so that half of the emptiness check never fired. It was masked by the$? -ne 0test besideit, which catches the case that actually occurs.
Documentation
doc/Development.rst, Conditional Jobs → Guidelines, states the distinction between an unrelated dependencyand a producing one, with the observed failure as the worked example. The rule is not obvious from the symptom.
doc/Deveopment.rstwas missing anland is renamed todoc/Development.rst; the toctree entry indoc/index.rstfollows. The page's title, itsDEV/***labels and every:ref:to them are untouched, so nocross-reference breaks — but the published URL changes from
.../Deveopment.htmlto.../Development.html.The heading of
doc/Instantiation.rstread "Instantiantion". (Fix two documentation typos: Deveopment.rst and 'Instantiantion' #255)UnitTesting.rstandApplicationTesting.rstsaid thatmingw_requirements"is not resolved this way" and is"passed to
pip installunchanged". Both now state that it is resolved and checked likerequirements, andthat leaving it empty installs
requirementson MSYS2 as well. (Extract the pip to pacboy translation into two composite actions #253)StaticTypeCheck.rstgains the three directory inputs, and itsrequirementssection gains the same two-waylookup 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
@r7to@r8— 163occurrences across 26 files, including the generic
some/path/to/a/templateplaceholder. Same shape asc054718("Changed documentation to @r6.") for the previous major.GitHub Pipeline
_Checking_Parameters.ymlgains aRequirements_Checkjob. It writes a small requirements tree —including a nested
-r ./more.txtand a separate MSYS2 override — runs both new actions over it and asserts allthree outputs, twelve pacboy packages among them. It refers to the actions as
./.github/actions/..., so itexercises 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 passingmingw_requirementsthrough unresolved leaves the./path in place. Both were tried.It also resolves
StaticTypeCheck.yml's new default against this repository's owntests/typingand assertsit 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
python-ruamel-yamlis 0.18.17, while pyTooling requiresruamel.yaml ~= 0.19.1: pacman satisfiesthe import, then pip still sees the version unsatisfied. The same shape as the existing
aiohttp >= 3.12 # limited on MSYS2note.ruamel.yaml0.19 replacedclibwithclibz, and MSYS2 packagesclibbut notclibz. The entry is correcttoday and will want revisiting when MSYS2 catches up.
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
ghdl/ghdl#3313.
Important
This is a major release, so
r8has to be created after merging —r7is not moved. Every consumerpinning
@r7stays on v7.15.0 until its pipeline is deliberately changed to@r8. That is twenty pipelinesacross this collaboration.
The documentation published from
devalready tells consumers to use@r8, so the examples name a ref thatcannot 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
./-prefixedmingw_requirementsin the two testing templates (#253), and a./-prefixedrequirementsinStaticTypeCheck.yml(#257). Both are now resolved against a test directory instead of theworking directory.
Neither affects any pipeline in this collaboration —
CompletePipeline.ymldoes not exposemingw_requirementsat all and does not forward
requirementstoStaticTypeCheck, and the handful of repositories that set eitherparameter directly all spell their paths without the
./prefix. But both change a documented contract, and anexternal consumer cannot be surveyed the way this workspace can.