Skip to content

🐛🧑‍💻 - Documented native Python setup cannot start Linux toolcache interpreter without supported library path propagation #776

Closed

Description

@efraespada

Is there an existing issue for this?

Which actions are affected?

Issue, Pull Request, Commits; repository-owned native verification setup and Python runtime preflight.

Which platforms are affected?

Linux reproduced in a native GitHub Actions candidate-composite job. The local macOS helper installation works.

Description

The documented Python setup example uses actions/setup-python@v6 with update-environment:false, then immediately executes its python-path output to create a private venv. On GeckoCV's Linux runner this interpreter cannot start: libpython3.11.so.1.0 is unavailable to the dynamic loader. setup-python itself reports successful installation of Python 3.11.17.

The pinned setup-python implementation exports its installDir/lib through LD_LIBRARY_PATH only when updateEnvironment is true. Copilot's native setup result accepts only PATH and JAVA_HOME; its closed verification environment also excludes LD_LIBRARY_PATH. Thus merely changing update-environment to true in the consumer does not establish that a resulting Python venv or declared python preflight will work inside the actual native verifier. Forwarding arbitrary caller library paths would weaken isolation and is not requested.

Please own a supported safe preparation/runtime contract for dynamically linked Python toolcache builds, and correct the documented example. Add a real Linux regression that executes setup, the private-venv interpreter, runtime preflight and the configured verifier after credential/tool-option filtering. Acceptable designs should derive or ownership-validate any required library directory, or document and prove an actually self-contained runtime route. Do not turn unavailable Python into a skipped check.

Reproducing the issue

Consumer issue https://github.com/vypdev/geckocv/issues/38; candidate PR https://github.com/vypdev/geckocv/pull/40 at 3f67f9af7508161a45b2059e1817984a90b8537a.

Run https://github.com/vypdev/geckocv/actions/runs/40784214768, job 123153241312. The candidate-composite job has contents:read, checkout persist-credentials:false, a fresh private HOME and no provider secrets. Java, Node and pnpm setup pass. The pinned external setup-python action ece7cb06caefa5fff74198d8649806c4678c61a1 (v6) succeeds with python-version 3.11 and update-environment:false. The next step invokes its python-path and exits 127 before the helper can run:

python: error while loading shared libraries: libpython3.11.so.1.0: cannot open shared object file: No such file or directory

The Linux setup failed in seconds, not at the five-minute limit. The later fixture, preservation, Chromium and coverage steps correctly did not run. This candidate job executes real composite uses steps, but it is not a claimed successful Copilot native continuation; trusted-main adoption and activation remain pending.

copilot Version

v3 inspected at f5e5a4c. Contract/docs: docs/security-operations/operations/verification.mdx, src/infrastructure/untrusted_command_environment.ts and verification_setup_runner.ts.

Relevant Log Output

Successfully set up CPython (3.11.17)
python: error while loading shared libraries: libpython3.11.so.1.0: cannot open shared object file: No such file or directory
Process completed with exit code 127.

Additional context and comments

https://github.com/actions/setup-python/blob/ece7cb06caefa5fff74198d8649806c4678c61a1/src/find-python.ts exports LD_LIBRARY_PATH within if(updateEnvironment). The current Copilot docs recommend update-environment:false for private-venv setup while the closed native result excludes that state. This is distinct from JVM private-home discovery issue #775, assessment diagnostics #774 and large-comparison #773.

Consumer scope, runtime declarations, frozen dependencies, complete configured commands and fail-closed behavior are retained. No runtime-global library edits, privilege escalation, wrapper rewrite or credential expansion has been used to make the candidate check green.

Activity

  1. added
    bugSomething isn't working
    bugfixSomething isn't working
    priority: highCritical issue, needs immediate attention.
    on Oct 28, 2026
  2. added theissue type on Oct 28, 2026
  3. moved this to Todo in vypdevon Oct 28, 2026
  4. changed the title [-]Documented native Python setup cannot start Linux toolcache interpreter without supported library-path propagation[/-] [+]🐛 - Documented native Python setup cannot start Linux toolcache interpreter without supported library path propagation[/+] on Oct 28, 2026
  5. vypbot commented on Oct 28, 2026

    @vypbot
    Contributor

    Hi! I’m @vypbot, the Copilot assistant for this repository.

    I can answer questions, explain the codebase, propose implementation and test plans, review issues and pull requests for potential bugs or security problems, and help authorized maintainers apply changes.

    Try /copilot help to see the available commands, or mention @vypbot with your question.

  6. efraespada commented on Oct 28, 2026

    @efraespada
    MemberAuthor

    Consumer follow-up: the documented setup-python route's failure remains reproducible in the original Linux run. GeckoCV now exercises a separate self-contained CPython route via uv 0.13.6 without LD_LIBRARY_PATH inheritance. The actual Linux candidate composite passed at dde46cbe7bd2146b99b78b0b158c96bcb745f511: https://github.com/vypdev/geckocv/actions/runs/40787944227 (job 123165736048). Dependency setup took 42 seconds; the private interpreter/venv, hashed wheels, frozen frontend installation, consumer fixture suite and real Chromium launch passed. Downloaded coverage artifact measures the helper at 23/23 lines and 4/4 branches.

    This demonstrates a viable self-contained consumer distribution route inside the existing PATH/JAVA_HOME contract. It does not repair or validate the current setup-python example, change the closed environment, or establish successful Copilot native continuation/trusted-main adoption. The independently reproduced Gradle/JVM home issue remains #775. Please retain the original documentation/runtime failure evidence when resolving this issue; no upstream source was changed from the consumer task.

  7. moved this from Todo to In Progress in vypdevon Oct 29, 2026
  8. added
    branchedIndicates that a branch has been created for this issue.
    on Oct 29, 2026
  9. 8 remaining items

  10. vypbot commented on Oct 29, 2026

    @vypbot
    Contributor

    Issue closed — historical progress

    Current status: closed as completed.

    The last estimate is retained below as history. Closure does not certify a new percentage, tests, or branch alignment.

    Action required: none for this closed issue. If work continues, reopen the issue; a fresh assessment can update this same card.

    Last assessment before closure (historical)

    Progress: 75% — in progress

    > Current status: [R1] Please own a supported safe preparation/runtime contract for dynamically linked Python toolcache builds, and correct the documented example. Add a real Linux regression that executes setup, the private-venv interpreter, runtime preflight and the configured verifier after credential/tool-option filtering. Acceptable designs should derive or ownership-validate any required library directory, or document and prove an actually self-contained runtime route. Do not turn unavailable Python into a skipped check. — Source patches add cache-contained Python library derivation, prepare verifier child environments before preflight and the configured command, keep unavailable Python blocking, update the documented bootstrap, and add real-runtime regression fixtures. The comparison also reports executed container and test results, but those reports are not independent execution attestation; generated metadata does not verify builds or tests.

    Next: [R1] Please own a supported safe preparation/runtime contract for dynamically linked Python toolcache builds, and correct the documented example. Add a real Linux regression that executes setup, the private-venv interpreter, runtime preflight and the configured verifier after credential/tool-option filtering. Acceptable designs should derive or ownership-validate any required library directory, or document and prove an actually self-contained runtime route. Do not turn unavailable Python into a skipped check. — Independently verify the required real Linux native regression end to end: setup-python, private-venv interpreter, runtime preflight, and configured verifier after filtering. Confirm exact-head results; the supplied evidence says native acceptance and exact-head CI remain outstanding.

  11. added a commit that references this issue on Oct 29, 2026
  12. vypbot commented on Oct 29, 2026

    @vypbot
    Contributor

    Issue closed: synchronization recommendation retired

    No branch synchronization is required for this closed issue.

    The previous recommendation is historical. Issue closure does not certify that the branches are synchronized.

  13. moved this from In Progress to Done in vypdevon Oct 29, 2026
  14. added
    100%Progress: 100%
    and removed
    75%Progress: 75%
    in-progressStart work on an admitted issue.
    state:workingWork can proceed on the verified branch or without a branch.
    on Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

100%Progress: 100%branchedIndicates that a branch has been created for this issue.bugSomething isn't workingbugfixSomething isn't workingpriority: highCritical issue, needs immediate attention.size: XXLIndicates an extremely large task or issue that requires significant time and effort to complete.

Type

Projects

  • Status
    Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions