pre-commit / action

a GitHub action to run `pre-commit`
MIT License
463 stars 145 forks source link

Action started failing recently #210

Closed epage closed 1 month ago

epage commented 1 month ago

In all of my repos, I have a workflow like:

name: pre-commit

permissions: {} # none

on:
  pull_request:
  push:
    branches: [master]

jobs:
  pre-commit:
    permissions:
      contents: read
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-python@v5
    - uses: pre-commit/action@v3.0.1

See https://github.com/clap-rs/clap/blob/master/.github/workflows/pre-commit.yml

Recently, it started to fail

Run python -m pip install pre-commit
  python -m pip install pre-commit
  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
  env:
    RUST_BACKTRACE: 1
    CARGO_TERM_COLOR: always
    CLICOLOR: 1
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

https://github.com/clap-rs/clap/actions/runs/11062889874/job/30738117370?pr=5750

asottile commented 1 month ago

read the output of the action before it

epage commented 1 month ago

For anyone else looking into this, the "action before" being referred to is "setup-python". I kept to the default "don't specify the Python version" documented in this repo but have updated the version of "setup-python" to newer versions. This started failing when ubuntu-latest started getting mapped to the ubuntu-24.04 image.

The "output" being referred to is

Warning: Neither 'python-version' nor 'python-version-file' inputs were supplied. Attempting to find '.python-version' file.
Warning: .python-version doesn't exist.
Warning: The `python-version` input is not set.  The version of Python currently in `PATH` will be used.

I saw that but I took that as the python-version field being defaulted to python --version, not that it would skip installing any version. To resolve this problem, you have to pick a specific Python version to use. It seems there isn't a way to say "get latest" and so users will need to keep in sync versions of Python that work with versions of pre-commit as tools auto-update pre-commit but extra work is needed to auto-update Python version.

asottile commented 1 month ago

python-version: 3.x I believe will auto update to latest -- but idk github made some weird choices with setup-python to make it "more like setup-node" for some reason

epage commented 1 month ago

Thanks for the tip!

rhaschke commented 1 month ago

I ran into the same issue and the comment https://github.com/pre-commit/action/issues/213#issuecomment-2407344245 was not helpful to me. Eventually, I found the issue here. I do not explicitly install python via actions/setup-python at all, because the ubuntu images already come with python installed. However, using this system version of python fails since Python 3.12 / ubuntu-24.04.

So, for me the issue is not yet resolved. Surely, @asottile, you can enforce people to (re)install a specific version of Python via the setup-python action, but then this should be documented in the README, which doesn't yet specify a Python version and emphasizes that this is important: https://github.com/pre-commit/action/blob/576ff52938d158a24ac7e009dfa94b1455e7df99/README.md#L35-L36

asottile commented 1 month ago

skill issue imo. it is in the readme you just didn't follow it or read the output of your own job