casaroli opened a new pull request, #19681:
URL: https://github.com/apache/nuttx/pull/19681

   ## Summary
   
   The documentation job installs its Python environment with `pipenv install`, 
which does not honour the committed `Pipfile.lock`. Every run in the logs — 
failing and passing alike — prints `Locking dependencies...` and `Updated 
Pipfile.lock`, then installs from the set it has just re-resolved. Each 
documentation build therefore takes whatever PyPI resolves that day rather than 
what the lock file names.
   
   On the evening of 2026-08-03 one of those resolutions produced a virtualenv 
without `packaging`, and four unrelated pull requests failed identically, 
before Sphinx had read a single file:
   
   ```
   File ".../sphinx/extension.py", line 7, in <module>
       from packaging.version import InvalidVersion, Version
   ModuleNotFoundError: No module named 'packaging'
   make: *** [Makefile:52: clean] Error 1
   ```
   
   ```
   failure  08-03T23:37  feature/st7123-touch
   failure  08-03T22:03  feature/mpu6050-drdy-interrupt
   failure  08-03T21:30  fdpic-libelf
   failure  08-03T21:30  arm-pic-r9
   success  08-03T18:54  arm-pic-r9      <- same branch, three hours earlier
   ```
   
   `pipenv sync` installs exactly what `Pipfile.lock` names and never 
re-resolves, which is what the lock file is for. Nothing else about the job 
changes.
   
   The lock is complete enough to install from as it stands: it covers all 
fourteen packages the `Pipfile` asks for, and it does contain `packaging`.
   
   `pipenv install --deploy` was the other candidate. It refuses to run when 
the lock does not match the `Pipfile` instead of silently re-resolving, which 
is stricter and arguably more correct — but the two hashes do not currently 
agree, so it would fail the job outright until someone regenerates the lock. 
`sync` fixes the flakiness now without that. Happy to switch if maintainers 
would rather have the strict form and a regenerated lock in the same PR.
   
   ## Why the trigger changes
   
   The workflow ran only for changes under `Documentation/`, so a change to the 
documentation build was never exercised by the build it changed. It now 
triggers on `.github/workflows/doc.yml` as well.
   
   That is what tests this PR: without it, a workflow-only change would report 
no documentation build at all.
   
   ## Impact
   
   CI only. No effect on any build, board or API.
   
   Nothing is pinned that was not pinned before — determinism comes from the 
lock file, not from freezing the `pipenv` version, and no other workflow in the 
tree pins its pip installs.
   
   ## Testing
   
   The documentation job on this PR is the test, and it exercises exactly the 
changed file.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to