actions / actions/setup-python

Option to setup the oldest available Python rather than the latest version when a range of version specified

Open
#988 4 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

feature request
Dominant language
TypeScript
Stars
2.2k
Forks
739
Avg merge
6d 18h
Merged PRs (30d)
1

Description

Description:
Describe your proposal.

When specifying the python-version with a version range or 3.x, the latest version will be installed.

runs-on: ubuntu-latest
steps:
  - name: Checkout
    uses: actions/checkout@v4

  - name: Set up Python
    uses: actions/setup-python@v5
    with:
      python-version: "3.7 - 3.13"

  - name: Lint
    run: pipx run pre-commit ...

This issue requests an opt-in option to let the action install the oldest major version available on the runner rather than the latest.

- name: Set up Python
  uses: actions/setup-python@v5
  with:
    python-version: "3.7 - 3.13"
    oldest-first: true

Justification:
Justification or a use case for your proposal.

Newer Python may introduce new syntax. The valid code that can run on the latest Python may contain syntax errors in older Python. For example, Python 3.12 supports more powerful f-strings.

$ cat test.py
lines = ['a', 'b', 'c']
string = f'The joined lines are:\n{"\n".join(lines)}'
print(string)

$ python3.12 test.py
The joined lines are:
a
b
c

$ python3.11 test.py
  File "/home/PanXuehai/.../test.py", line 2
    string = f'The joined lines are:\n{"\n".join(lines)}'
                                                         ^
SyntaxError: f-string expression part cannot include a backslash

The linting tool may not complain about the backward incompatible code if the linter runs with the latest Python.

One solution is to pin an old Python in the CI manually. However, the GitHub-hosted runner image may be updated separately with actions/setup-python. Users cannot use:

runs-on: ubuntu-latest
steps:
  - name: Set up Python
    uses: actions/setup-python@v5
    with:
      python-version: "3.7"

Because the CI will break when ubuntu-latest changes from ubuntu-22.04 to ubuntu-24.04.

- The version '3.7' with architecture 'x64' was not found for Ubuntu 24.04.
- The list of all available versions can be found here: https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json

This request reduces the potential CI breakage for the two cases above.

Are you willing to submit a PR?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing how actions/setup-python resolves the python-version range and consult the versions manifest behavior described in the issue. Define the expected behavior for an opt-in oldest-first input, including runner image changes, and verify that existing latest-version behavior remains unchanged.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, typescript
Domain
ci-cd
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.