mirror of
https://github.com/actions/setup-python.git
synced 2026-09-17 10:01:28 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e797f83bcb | ||
|
|
3d1e2d2ca0 | ||
|
|
65b071217a | ||
|
|
5b668cf765 | ||
|
|
f62a0e252f | ||
|
|
9322b3ca74 | ||
|
|
fbeb884f69 | ||
|
|
03bb6152f4 | ||
|
|
36da51d563 | ||
|
|
3c6f142cc0 | ||
|
|
88ffd4d597 | ||
|
|
532b046aaf | ||
|
|
1264885983 | ||
|
|
e9c40fbc2b | ||
|
|
5fa0ee6f38 | ||
|
|
5db1cf9a59 | ||
|
|
a26af69be9 | ||
|
|
30eafe9548 | ||
|
|
5d95bc16d4 | ||
|
|
6ed2c67c8a | ||
|
|
e348410e00 | ||
|
|
8d9ed9ac5c | ||
|
|
19e4675e06 | ||
|
|
6fd11e170a | ||
|
|
9e62be81b2 | ||
|
|
6ca8e8598f | ||
|
|
8039c45ed9 |
@@ -14,4 +14,4 @@ jobs:
|
|||||||
name: Basic validation
|
name: Basic validation
|
||||||
uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main
|
uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main
|
||||||
with:
|
with:
|
||||||
node-version: '20.x'
|
node-version: '24.x'
|
||||||
|
|||||||
@@ -16,4 +16,4 @@ jobs:
|
|||||||
name: Check dist/
|
name: Check dist/
|
||||||
uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main
|
uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main
|
||||||
with:
|
with:
|
||||||
node-version: '20.x'
|
node-version: '24.x'
|
||||||
|
|||||||
@@ -0,0 +1,221 @@
|
|||||||
|
name: e2e-cache freethread
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- releases/*
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
jobs:
|
||||||
|
python-pip-dependencies-caching:
|
||||||
|
name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }})
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pip'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install numpy pandas requests
|
||||||
|
|
||||||
|
python-pipenv-dependencies-caching:
|
||||||
|
name: Test pipenv (Python ${{ matrix.python-version}}, ${{ matrix.os }})
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.1t, 3.13.2t, 3.13.5t]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
id: cache-pipenv
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pipenv'
|
||||||
|
- name: Install pipenv
|
||||||
|
run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pipenv install requests
|
||||||
|
|
||||||
|
python-poetry-dependencies-caching:
|
||||||
|
name: Test poetry (Python ${{ matrix.python-version}}, ${{ matrix.os }})
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.0, 3.13.1, 3.13.2]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Install poetry
|
||||||
|
run: pipx install poetry
|
||||||
|
- name: Init pyproject.toml
|
||||||
|
run: mv ./__tests__/data/pyproject.toml .
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
freethreaded: true
|
||||||
|
cache: 'poetry'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: poetry install --no-root
|
||||||
|
|
||||||
|
python-pip-dependencies-caching-path:
|
||||||
|
name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}, caching path)
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pip'
|
||||||
|
cache-dependency-path: __tests__/data/requirements.txt
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install numpy pandas requests
|
||||||
|
|
||||||
|
python-pipenv-dependencies-caching-path:
|
||||||
|
name: Test pipenv (Python ${{ matrix.python-version}}, ${{ matrix.os }}, caching path)
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.1t, 3.13.2t, 3.13.5t]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
id: cache-pipenv
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pipenv'
|
||||||
|
cache-dependency-path: '**/pipenv-requirements.txt'
|
||||||
|
- name: Install pipenv
|
||||||
|
run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pipenv install requests
|
||||||
|
|
||||||
|
python-pip-dependencies-caching-with-pip-version:
|
||||||
|
name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }})
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pip'
|
||||||
|
pip-version: '25.0.1'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install numpy pandas requests
|
||||||
|
|
||||||
|
python-pip-dependencies-caching-path-with-pip-version:
|
||||||
|
name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}, caching path)
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pip'
|
||||||
|
cache-dependency-path: __tests__/data/requirements.txt
|
||||||
|
pip-version: '25.0.1'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install numpy pandas requests
|
||||||
+175
-15
@@ -21,10 +21,32 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
python-version: ['3.9', 'pypy-3.9-v7.x', '3.10', 'pypy-3.10-v7.x']
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version:
|
||||||
|
[
|
||||||
|
'3.9',
|
||||||
|
'pypy-3.9-v7.x',
|
||||||
|
'3.10',
|
||||||
|
'pypy-3.10-v7.x',
|
||||||
|
'3.11',
|
||||||
|
'pypy-3.11-v7.x',
|
||||||
|
'3.12',
|
||||||
|
'3.13'
|
||||||
|
]
|
||||||
|
exclude:
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -39,10 +61,31 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
python-version: ['3.9', 'pypy-3.9-v7.x', '3.10', 'pypy-3.10-v7.x']
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version:
|
||||||
|
['3.10', 'pypy-3.10-v7.x', '3.11', 'pypy-3.11-v7.x', '3.12', '3.13']
|
||||||
|
exclude:
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
|
- os: ubuntu-22.04
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
|
- os: ubuntu-22.04-arm
|
||||||
|
python-version: pypy-3.10-v7.x
|
||||||
|
- os: ubuntu-22.04-arm
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
|
- os: ubuntu-22.04-arm
|
||||||
|
python-version: pypy-3.10-v7.x
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
id: cache-pipenv
|
id: cache-pipenv
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -75,10 +118,29 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
python-version: ['3.9', 'pypy-3.9-v7.x', '3.10', 'pypy-3.10-v7.x']
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version:
|
||||||
|
[
|
||||||
|
'3.9',
|
||||||
|
'pypy-3.9-v7.x',
|
||||||
|
'3.10',
|
||||||
|
'pypy-3.10-v7.x',
|
||||||
|
'3.11',
|
||||||
|
'pypy-3.11-v7.x',
|
||||||
|
'3.12',
|
||||||
|
'3.13'
|
||||||
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Install poetry
|
- name: Install poetry
|
||||||
run: pipx install poetry
|
run: pipx install poetry
|
||||||
- name: Init pyproject.toml
|
- name: Init pyproject.toml
|
||||||
@@ -97,10 +159,32 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
python-version: ['3.9', 'pypy-3.9-v7.x', '3.10', 'pypy-3.10-v7.x']
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version:
|
||||||
|
[
|
||||||
|
'3.9',
|
||||||
|
'pypy-3.9-v7.x',
|
||||||
|
'3.10',
|
||||||
|
'pypy-3.10-v7.x',
|
||||||
|
'3.11',
|
||||||
|
'pypy-3.11-v7.x',
|
||||||
|
'3.12',
|
||||||
|
'3.13'
|
||||||
|
]
|
||||||
|
exclude:
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -116,10 +200,29 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
python-version: ['3.9', 'pypy-3.9-v7.x', '3.10', 'pypy-3.10-v7.x']
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version:
|
||||||
|
['3.10', 'pypy-3.10-v7.x', '3.11', 'pypy-3.11-v7.x', '3.12', '3.13']
|
||||||
|
exclude:
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
|
- os: ubuntu-22.04
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
|
- os: ubuntu-22.04-arm
|
||||||
|
python-version: pypy-3.10-v7.x
|
||||||
|
- os: ubuntu-22.04-arm
|
||||||
|
python-version: pypy-3.11-v7.x
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
id: cache-pipenv
|
id: cache-pipenv
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -146,3 +249,60 @@ jobs:
|
|||||||
}
|
}
|
||||||
- name: Run Python Script
|
- name: Run Python Script
|
||||||
run: pipenv run python test-pipenv.py
|
run: pipenv run python test-pipenv.py
|
||||||
|
|
||||||
|
python-pip-dependencies-caching-with-pip-version:
|
||||||
|
name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }})
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pip'
|
||||||
|
pip-version: '25.0.1'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install numpy pandas requests
|
||||||
|
|
||||||
|
python-pip-dependencies-caching-path-with-pip-version:
|
||||||
|
name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}, caching path)
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
windows-latest,
|
||||||
|
macos-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
cache: 'pip'
|
||||||
|
cache-dependency-path: __tests__/data/requirements.txt
|
||||||
|
pip-version: '25.0.1'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install numpy pandas requests
|
||||||
|
|||||||
@@ -19,16 +19,17 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
operating-system:
|
operating-system:
|
||||||
[
|
[
|
||||||
ubuntu-20.04,
|
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
ubuntu-latest,
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
macos-latest,
|
macos-latest,
|
||||||
macos-13
|
macos-13
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Run with setup-python 3.9.13
|
- name: Run with setup-python 3.9.13
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -37,7 +38,7 @@ jobs:
|
|||||||
- name: Verify 3.9.13
|
- name: Verify 3.9.13
|
||||||
run: python __tests__/verify-python.py 3.9.13
|
run: python __tests__/verify-python.py 3.9.13
|
||||||
|
|
||||||
- name: Run with setup-python 3.9.13
|
- name: Run with setup-python 3.10.11
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
python-version: 3.10.11
|
python-version: 3.10.11
|
||||||
@@ -88,6 +89,7 @@ jobs:
|
|||||||
python-version: '<3.13'
|
python-version: '<3.13'
|
||||||
- name: Verify <3.13
|
- name: Verify <3.13
|
||||||
run: python __tests__/verify-python.py 3.12
|
run: python __tests__/verify-python.py 3.12
|
||||||
|
|
||||||
- name: Test Raw Endpoint Access
|
- name: Test Raw Endpoint Access
|
||||||
run: |
|
run: |
|
||||||
curl -L https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json | jq empty
|
curl -L https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json | jq empty
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checking out
|
- name: Checking out
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Publish
|
- name: Publish
|
||||||
id: publish
|
id: publish
|
||||||
uses: actions/publish-immutable-action@v0.0.4
|
uses: actions/publish-immutable-action@v0.0.4
|
||||||
|
|||||||
@@ -18,7 +18,15 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-20.04, ubuntu-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
graalpy:
|
graalpy:
|
||||||
- 'graalpy-22.3'
|
- 'graalpy-22.3'
|
||||||
- 'graalpy-23.0'
|
- 'graalpy-23.0'
|
||||||
@@ -27,7 +35,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python ${{ matrix.graalpy }}
|
- name: setup-python ${{ matrix.graalpy }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -65,12 +73,20 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-20.04, ubuntu-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
graalpy: ['graalpy22.3', 'graalpy23.0', 'graalpy23.1', 'graalpy24.1']
|
graalpy: ['graalpy22.3', 'graalpy23.0', 'graalpy23.1', 'graalpy24.1']
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python ${{ matrix.graalpy }}
|
- name: setup-python ${{ matrix.graalpy }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -92,7 +108,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, macos-13]
|
os: [ubuntu-latest, macos-latest, macos-13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup GraalPy and check latest
|
- name: Setup GraalPy and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
id: graalpy
|
id: graalpy
|
||||||
|
|||||||
+100
-12
@@ -21,7 +21,15 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
[macos-latest, windows-latest, ubuntu-20.04, ubuntu-latest, macos-13]
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
pypy:
|
pypy:
|
||||||
- 'pypy-2.7'
|
- 'pypy-2.7'
|
||||||
- 'pypy-3.10'
|
- 'pypy-3.10'
|
||||||
@@ -34,10 +42,63 @@ jobs:
|
|||||||
- 'pypy-2.7-v7.3.12rc1'
|
- 'pypy-2.7-v7.3.12rc1'
|
||||||
- 'pypy-3.10-nightly'
|
- 'pypy-3.10-nightly'
|
||||||
- 'pypy3.10-v7.3.17'
|
- 'pypy3.10-v7.3.17'
|
||||||
|
- 'pypy3.11-v7.3.19'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.pypy }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.pypy }}
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: PyPy and Python version
|
||||||
|
run: python --version
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
- name: Assert PyPy is running
|
||||||
|
run: |
|
||||||
|
import platform
|
||||||
|
assert platform.python_implementation().lower() == "pypy"
|
||||||
|
shell: python
|
||||||
|
|
||||||
|
- name: Assert expected binaries (or symlinks) are present
|
||||||
|
run: |
|
||||||
|
EXECUTABLE=${{ matrix.pypy }}
|
||||||
|
EXECUTABLE=${EXECUTABLE/pypy-/pypy} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name
|
||||||
|
EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe
|
||||||
|
${EXECUTABLE} --version
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
check-non-eol:
|
||||||
|
name: Check non-eol ${{ matrix.pypy }} on ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
- macos-13
|
||||||
|
- macos-14
|
||||||
|
- macos-15
|
||||||
|
- windows-2022
|
||||||
|
- windows-2025
|
||||||
|
- ubuntu-22.04
|
||||||
|
- ubuntu-24.04
|
||||||
|
- ubuntu-22.04-arm
|
||||||
|
- ubuntu-24.04-arm
|
||||||
|
pypy: ['pypy-2.7', 'pypy-3.10', 'pypy-3.11']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python ${{ matrix.pypy }}
|
- name: setup-python ${{ matrix.pypy }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -76,12 +137,20 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
[macos-latest, windows-latest, ubuntu-20.04, ubuntu-latest, macos-13]
|
[
|
||||||
pypy: ['pypy2.7', 'pypy3.9', 'pypy3.10-nightly']
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
pypy: ['pypy2.7', 'pypy3.9', 'pypy3.10-nightly', 'pypy3.11']
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python ${{ matrix.pypy }}
|
- name: setup-python ${{ matrix.pypy }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -101,13 +170,22 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup PyPy and check latest
|
- name: Setup PyPy and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
python-version: 'pypy-3.10-v7.3.x'
|
python-version: 'pypy-3.11-v7.3.x'
|
||||||
check-latest: true
|
check-latest: true
|
||||||
- name: PyPy and Python version
|
- name: PyPy and Python version
|
||||||
run: python --version
|
run: python --version
|
||||||
@@ -123,7 +201,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Assert expected binaries (or symlinks) are present
|
- name: Assert expected binaries (or symlinks) are present
|
||||||
run: |
|
run: |
|
||||||
EXECUTABLE="pypy-3.10-v7.3.x"
|
EXECUTABLE="pypy-3.11-v7.3.x"
|
||||||
EXECUTABLE=${EXECUTABLE/-/} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name
|
EXECUTABLE=${EXECUTABLE/-/} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name
|
||||||
EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe
|
EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe
|
||||||
${EXECUTABLE} --version
|
${EXECUTABLE} --version
|
||||||
@@ -134,13 +212,23 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup PyPy and check latest
|
- name: Setup PyPy and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
python-version: |
|
python-version: |
|
||||||
|
pypy-3.11-v7.3.x
|
||||||
pypy-3.10-v7.3.x
|
pypy-3.10-v7.3.x
|
||||||
pypy3.9
|
pypy3.9
|
||||||
check-latest: true
|
check-latest: true
|
||||||
@@ -158,7 +246,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Assert expected binaries (or symlinks) are present
|
- name: Assert expected binaries (or symlinks) are present
|
||||||
run: |
|
run: |
|
||||||
EXECUTABLE="pypy-3.10-v7.3.x"
|
EXECUTABLE="pypy-3.11-v7.3.x"
|
||||||
EXECUTABLE=${EXECUTABLE/-/} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name
|
EXECUTABLE=${EXECUTABLE/-/} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name
|
||||||
EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe
|
EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe
|
||||||
${EXECUTABLE} --version
|
${EXECUTABLE} --version
|
||||||
|
|||||||
@@ -0,0 +1,557 @@
|
|||||||
|
name: Validate Python e2e freethread
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
schedule:
|
||||||
|
- cron: 30 3 * * *
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
setup-versions-from-manifest:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python }}
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-file:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} version file
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: echo ${{ matrix.python }} > .python-version
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: .python-version
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-file-without-parameter:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} version file without parameter
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: echo ${{ matrix.python }} > .python-version
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-standard-pyproject-file:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} standard pyproject file
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0, 3.13.1, 3.13.2]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo '[project]
|
||||||
|
requires-python = "${{ matrix.python }}"
|
||||||
|
' > pyproject.toml
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: pyproject.toml
|
||||||
|
freethreaded: true
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-poetry-pyproject-file:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} poetry pyproject file
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0, 3.13.1, 3.13.2]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo '[tool.poetry.dependencies]
|
||||||
|
python = "${{ matrix.python }}"
|
||||||
|
' > pyproject.toml
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: pyproject.toml
|
||||||
|
freethreaded: true
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-tool-versions-file:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} .tool-versions file
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0t, 3.13.1t, 3.13.2t, 3.14t-dev]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-tool-versions-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo "python ${{ matrix.python }}" > .tool-versions
|
||||||
|
|
||||||
|
- name: setup-python using .tool-versions ${{ matrix.python }}
|
||||||
|
id: setup-python-tool-versions
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: .tool-versions
|
||||||
|
|
||||||
|
setup-versions-from-pipfile-with-python_version:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} Pipfile
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13t, 3.14t-dev]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo '[requires]
|
||||||
|
python_version = "${{ matrix.python }}"
|
||||||
|
' > Pipfile
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: Pipfile
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-pipfile-with-python_full_version:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} .tool-versions file
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0t, 3.13.1t, 3.13.2t, 3.14t-dev]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo '[requires]
|
||||||
|
python_full_version = "${{ matrix.python }}"
|
||||||
|
' > Pipfile
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: Pipfile
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-pre-release-version-from-manifest:
|
||||||
|
name: Setup 3.14.0-alpha.6 ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python 3.14.0-alpha.6
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: '3.14.0-alpha.6'
|
||||||
|
freethreaded: true
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-dev-version:
|
||||||
|
name: Setup 3.14t-dev ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python 3.14t-dev
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: '3.14t-dev'
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Validate version
|
||||||
|
run: ${{ startsWith(steps.setup-python.outputs.python-version, '3.14.') }}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-prerelease-version:
|
||||||
|
name: Setup 3.14t ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python 3.14t
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: '3.14t'
|
||||||
|
allow-prereleases: true
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Validate version
|
||||||
|
run: ${{ startsWith(steps.setup-python.outputs.python-version, '3.14.') }}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-noenv:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} (noenv)
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.0t, 3.13.1t, 3.13.2t]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python }}
|
||||||
|
update-environment: false
|
||||||
|
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
check-latest:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
python-version: [3.13t, 3.14t-dev]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python and check latest
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
check-latest: true
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
setup-python-multiple-python-versions:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Setup Python and check latest
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: |
|
||||||
|
3.13.1t
|
||||||
|
3.13.2t
|
||||||
|
3.14t-dev
|
||||||
|
- name: Verify Python version
|
||||||
|
run: ${{ steps.setup-python.outputs.python-path }} -VVV
|
||||||
|
|
||||||
|
setup-versions-with-freethread-input:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} using freethread input parameter
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.13.1, 3.13.2, 3.14-dev, 3.14.0-alpha.6]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python }}
|
||||||
|
freethreaded: true
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
- name: Validate GIL
|
||||||
|
run: python ./__tests__/verify-freethreaded.py
|
||||||
@@ -24,15 +24,16 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.0]
|
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python ${{ matrix.python }}
|
- name: setup-python ${{ matrix.python }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -67,15 +68,16 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.0]
|
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: build-version-file ${{ matrix.python }}
|
- name: build-version-file ${{ matrix.python }}
|
||||||
run: echo ${{ matrix.python }} > .python-version
|
run: echo ${{ matrix.python }} > .python-version
|
||||||
@@ -113,15 +115,16 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.0]
|
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: build-version-file ${{ matrix.python }}
|
- name: build-version-file ${{ matrix.python }}
|
||||||
run: echo ${{ matrix.python }} > .python-version
|
run: echo ${{ matrix.python }} > .python-version
|
||||||
@@ -157,15 +160,16 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
python: [3.9.13, 3.10.11, 3.11.9, '==3.12.3', 3.13.0]
|
python: [3.9.13, 3.10.11, 3.11.9, '==3.12.3', 3.13.2]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: build-version-file ${{ matrix.python }}
|
- name: build-version-file ${{ matrix.python }}
|
||||||
run: |
|
run: |
|
||||||
@@ -206,15 +210,16 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.0]
|
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: build-version-file ${{ matrix.python }}
|
- name: build-version-file ${{ matrix.python }}
|
||||||
run: |
|
run: |
|
||||||
@@ -245,8 +250,8 @@ jobs:
|
|||||||
- name: Run simple code
|
- name: Run simple code
|
||||||
run: python -c 'import math; print(math.factorial(5))'
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
setup-pre-release-version-from-manifest:
|
setup-versions-from-tool-versions-file:
|
||||||
name: Setup 3.14.0-alpha.1 ${{ matrix.os }}
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} .tool-versions file
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@@ -255,20 +260,62 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
|
python: [pypy3.11-7.3.18, graalpy-24.1.2, 3.13.2, 3.14-dev]
|
||||||
|
exclude:
|
||||||
|
- os: windows-latest
|
||||||
|
python: graalpy-24.1.2
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python 3.14.0-alpha.1
|
- name: build-tool-versions-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo "python ${{ matrix.python }}" > .tool-versions
|
||||||
|
|
||||||
|
- name: setup-python using .tool-versions ${{ matrix.python }}
|
||||||
|
id: setup-python-tool-versions
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: .tool-versions
|
||||||
|
|
||||||
|
setup-versions-from-pipfile-with-python_version:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} Pipfile with python_version
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.9.13, 3.10.11, 3.11.9, 3.13.2]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo '[requires]
|
||||||
|
python_version = "${{ matrix.python }}"
|
||||||
|
' > Pipfile
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
python-version: '3.14.0-alpha.1'
|
python-version-file: Pipfile
|
||||||
|
|
||||||
- name: Check python-path
|
- name: Check python-path
|
||||||
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
@@ -277,8 +324,101 @@ jobs:
|
|||||||
- name: Validate version
|
- name: Validate version
|
||||||
run: |
|
run: |
|
||||||
$pythonVersion = (python --version)
|
$pythonVersion = (python --version)
|
||||||
if ("Python 3.14.0a1" -ne "$pythonVersion"){
|
if ("Python ${{ matrix.python }}".replace("==", "") -ne "$pythonVersion"){
|
||||||
Write-Host "The current version is $pythonVersion; expected version is 3.14.0a1"
|
Write-Host "The current version is $pythonVersion; expected version is ${{ matrix.python }}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
$pythonVersion
|
||||||
|
shell: pwsh
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-versions-from-pipfile-with-python_full_version:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }} Pipfile with python_full_version
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
python: [3.9.13, 3.10.11, 3.11.9, 3.13.2]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: build-version-file ${{ matrix.python }}
|
||||||
|
run: |
|
||||||
|
echo '[requires]
|
||||||
|
python_full_version = "${{ matrix.python }}"
|
||||||
|
' > Pipfile
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.python }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version-file: Pipfile
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Validate version
|
||||||
|
run: |
|
||||||
|
$pythonVersion = (python --version)
|
||||||
|
if ("Python ${{ matrix.python }}".replace("==", "") -ne "$pythonVersion"){
|
||||||
|
Write-Host "The current version is $pythonVersion; expected version is ${{ matrix.python }}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
$pythonVersion
|
||||||
|
shell: pwsh
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
setup-pre-release-version-from-manifest:
|
||||||
|
name: Setup 3.14.0-alpha.6 ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
macos-13,
|
||||||
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
|
]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: setup-python 3.14.0-alpha.6
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: '3.14.0-alpha.6'
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Validate version
|
||||||
|
run: |
|
||||||
|
$pythonVersion = (python --version)
|
||||||
|
if ("Python 3.14.0a6" -ne "$pythonVersion"){
|
||||||
|
Write-Host "The current version is $pythonVersion; expected version is 3.14.0a6"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
$pythonVersion
|
$pythonVersion
|
||||||
@@ -293,10 +433,19 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python 3.14-dev
|
- name: setup-python 3.14-dev
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -321,10 +470,19 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python 3.14
|
- name: setup-python 3.14
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -354,15 +512,16 @@ jobs:
|
|||||||
[
|
[
|
||||||
macos-latest,
|
macos-latest,
|
||||||
windows-latest,
|
windows-latest,
|
||||||
ubuntu-20.04,
|
|
||||||
ubuntu-22.04,
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
macos-13,
|
macos-13,
|
||||||
ubuntu-latest
|
ubuntu-latest,
|
||||||
|
ubuntu-24.04-arm
|
||||||
]
|
]
|
||||||
python: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
python: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: setup-python ${{ matrix.python }}
|
- name: setup-python ${{ matrix.python }}
|
||||||
id: setup-python
|
id: setup-python
|
||||||
@@ -382,10 +541,19 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Python and check latest
|
- name: Setup Python and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -406,9 +574,18 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-13]
|
os:
|
||||||
|
[
|
||||||
|
macos-latest,
|
||||||
|
windows-latest,
|
||||||
|
ubuntu-22.04,
|
||||||
|
ubuntu-22.04-arm,
|
||||||
|
ubuntu-24.04-arm,
|
||||||
|
ubuntu-latest,
|
||||||
|
macos-13
|
||||||
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup Python and check latest
|
- name: Setup Python and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
|||||||
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
@@ -18,8 +18,8 @@ See [action.yml](action.yml)
|
|||||||
**Python**
|
**Python**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -28,8 +28,8 @@ steps:
|
|||||||
**PyPy**
|
**PyPy**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: 'pypy3.10'
|
python-version: 'pypy3.10'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -38,13 +38,23 @@ steps:
|
|||||||
**GraalPy**
|
**GraalPy**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: 'graalpy-24.0'
|
python-version: 'graalpy-24.0'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Free threaded Python**
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version: '3.13t'
|
||||||
|
- run: python my_script.py
|
||||||
|
```
|
||||||
|
|
||||||
The `python-version` input is optional. If not supplied, the action will try to resolve the version from the default `.python-version` file. If the `.python-version` file doesn't exist Python or PyPy version from the PATH will be used. The default version of Python or PyPy in PATH varies between runners and can be changed unexpectedly so we recommend always setting Python version explicitly using the `python-version` or `python-version-file` inputs.
|
The `python-version` input is optional. If not supplied, the action will try to resolve the version from the default `.python-version` file. If the `.python-version` file doesn't exist Python or PyPy version from the PATH will be used. The default version of Python or PyPy in PATH varies between runners and can be changed unexpectedly so we recommend always setting Python version explicitly using the `python-version` or `python-version-file` inputs.
|
||||||
|
|
||||||
The action will first check the local [tool cache](docs/advanced-usage.md#hosted-tool-cache) for a [semver](https://github.com/npm/node-semver#versions) match. If unable to find a specific version in the tool cache, the action will attempt to download a version of Python from [GitHub Releases](https://github.com/actions/python-versions/releases) and for PyPy from the official [PyPy's dist](https://downloads.python.org/pypy/).
|
The action will first check the local [tool cache](docs/advanced-usage.md#hosted-tool-cache) for a [semver](https://github.com/npm/node-semver#versions) match. If unable to find a specific version in the tool cache, the action will attempt to download a version of Python from [GitHub Releases](https://github.com/actions/python-versions/releases) and for PyPy from the official [PyPy's dist](https://downloads.python.org/pypy/).
|
||||||
@@ -73,8 +83,8 @@ The action defaults to searching for a dependency file (`requirements.txt` or `p
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'pip' # caching pip dependencies
|
cache: 'pip' # caching pip dependencies
|
||||||
@@ -84,6 +94,8 @@ steps:
|
|||||||
|
|
||||||
>The requirements file format allows for specifying dependency versions using logical operators (for example chardet>=3.0.4) or specifying dependencies without any versions. In this case the pip install -r requirements.txt command will always try to install the latest available package version. To be sure that the cache will be used, please stick to a specific dependency version and update it manually if necessary.
|
>The requirements file format allows for specifying dependency versions using logical operators (for example chardet>=3.0.4) or specifying dependencies without any versions. In this case the pip install -r requirements.txt command will always try to install the latest available package version. To be sure that the cache will be used, please stick to a specific dependency version and update it manually if necessary.
|
||||||
|
|
||||||
|
>The `setup-python` action does not handle authentication for pip when installing packages from private repositories. For help, refer [pip’s VCS support documentation](https://pip.pypa.io/en/stable/topics/vcs-support/) or visit the [pip repository](https://github.com/pypa/pip).
|
||||||
|
|
||||||
See examples of using `cache` and `cache-dependency-path` for `pipenv` and `poetry` in the section: [Caching packages](docs/advanced-usage.md#caching-packages) of the [Advanced usage](docs/advanced-usage.md) guide.
|
See examples of using `cache` and `cache-dependency-path` for `pipenv` and `poetry` in the section: [Caching packages](docs/advanced-usage.md#caching-packages) of the [Advanced usage](docs/advanced-usage.md) guide.
|
||||||
|
|
||||||
## Advanced usage
|
## Advanced usage
|
||||||
@@ -98,6 +110,7 @@ See examples of using `cache` and `cache-dependency-path` for `pipenv` and `poet
|
|||||||
- [Using `setup-python` with a self-hosted runner](docs/advanced-usage.md#using-setup-python-with-a-self-hosted-runner)
|
- [Using `setup-python` with a self-hosted runner](docs/advanced-usage.md#using-setup-python-with-a-self-hosted-runner)
|
||||||
- [Using `setup-python` on GHES](docs/advanced-usage.md#using-setup-python-on-ghes)
|
- [Using `setup-python` on GHES](docs/advanced-usage.md#using-setup-python-on-ghes)
|
||||||
- [Allow pre-releases](docs/advanced-usage.md#allow-pre-releases)
|
- [Allow pre-releases](docs/advanced-usage.md#allow-pre-releases)
|
||||||
|
- [Using the pip-version input](docs/advanced-usage.md#using-the-pip-version-input)
|
||||||
|
|
||||||
## Recommended permissions
|
## Recommended permissions
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ name = "pypi"
|
|||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
flake8 = "==6.0.0"
|
flake8 = "==6.0.0"
|
||||||
numpy = "==1.25.1"
|
numpy = "==2.2.4"
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
|
|
||||||
|
|||||||
Generated
+60
-28
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "dcea65dabfe8442466b5e9280ecab72cfa7bf555791ee0ad55b6e7255dca1f43"
|
"sha256": "9d0bc7ff1f9078396b19f05bc5cd57894f3783c68f96fa9d623b1ea5a1b168f5"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {
|
"requires": {
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
"sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"
|
"sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
|
"markers": "python_full_version >= '3.8.1'",
|
||||||
"version": "==6.0.0"
|
"version": "==6.0.0"
|
||||||
},
|
},
|
||||||
"mccabe": {
|
"mccabe": {
|
||||||
@@ -34,34 +35,65 @@
|
|||||||
},
|
},
|
||||||
"numpy": {
|
"numpy": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:012097b5b0d00a11070e8f2e261128c44157a8689f7dedcf35576e525893f4fe",
|
"sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286",
|
||||||
"sha256:0d3fe3dd0506a28493d82dc3cf254be8cd0d26f4008a417385cbf1ae95b54004",
|
"sha256:0d54974f9cf14acf49c60f0f7f4084b6579d24d439453d5fc5805d46a165b542",
|
||||||
"sha256:0def91f8af6ec4bb94c370e38c575855bf1d0be8a8fbfba42ef9c073faf2cf19",
|
"sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f",
|
||||||
"sha256:1a180429394f81c7933634ae49b37b472d343cccb5bb0c4a575ac8bbc433722f",
|
"sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d",
|
||||||
"sha256:1d5d3c68e443c90b38fdf8ef40e60e2538a27548b39b12b73132456847f4b631",
|
"sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0",
|
||||||
"sha256:20e1266411120a4f16fad8efa8e0454d21d00b8c7cee5b5ccad7565d95eb42dd",
|
"sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7",
|
||||||
"sha256:247d3ffdd7775bdf191f848be8d49100495114c82c2bd134e8d5d075fb386a1c",
|
"sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3",
|
||||||
"sha256:35a9527c977b924042170a0887de727cd84ff179e478481404c5dc66b4170009",
|
"sha256:218f061d2faa73621fa23d6359442b0fc658d5b9a70801373625d958259eaca3",
|
||||||
"sha256:38eb6548bb91c421261b4805dc44def9ca1a6eef6444ce35ad1669c0f1a3fc5d",
|
"sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146",
|
||||||
"sha256:3d7abcdd85aea3e6cdddb59af2350c7ab1ed764397f8eec97a038ad244d2d105",
|
"sha256:2fa8fa7697ad1646b5c93de1719965844e004fcad23c91228aca1cf0800044a1",
|
||||||
"sha256:41a56b70e8139884eccb2f733c2f7378af06c82304959e174f8e7370af112e09",
|
"sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6",
|
||||||
"sha256:4a90725800caeaa160732d6b31f3f843ebd45d6b5f3eec9e8cc287e30f2805bf",
|
"sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc",
|
||||||
"sha256:6b82655dd8efeea69dbf85d00fca40013d7f503212bc5259056244961268b66e",
|
"sha256:4ba5054787e89c59c593a4169830ab362ac2bee8a969249dc56e5d7d20ff8df9",
|
||||||
"sha256:6c6c9261d21e617c6dc5eacba35cb68ec36bb72adcff0dee63f8fbc899362588",
|
"sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592",
|
||||||
"sha256:77d339465dff3eb33c701430bcb9c325b60354698340229e1dff97745e6b3efa",
|
"sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00",
|
||||||
"sha256:791f409064d0a69dd20579345d852c59822c6aa087f23b07b1b4e28ff5880fcb",
|
"sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298",
|
||||||
"sha256:9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf",
|
"sha256:7051ee569db5fbac144335e0f3b9c2337e0c8d5c9fee015f259a5bd70772b7e8",
|
||||||
"sha256:c1516db588987450b85595586605742879e50dcce923e8973f79529651545b57",
|
"sha256:7716e4a9b7af82c06a2543c53ca476fa0b57e4d760481273e09da04b74ee6ee2",
|
||||||
"sha256:c40571fe966393b212689aa17e32ed905924120737194b5d5c1b20b9ed0fb171",
|
"sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392",
|
||||||
"sha256:d412c1697c3853c6fc3cb9751b4915859c7afe6a277c2bf00acf287d56c4e625",
|
"sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb",
|
||||||
"sha256:d5154b1a25ec796b1aee12ac1b22f414f94752c5f94832f14d8d6c9ac40bcca6",
|
"sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8",
|
||||||
"sha256:d736b75c3f2cb96843a5c7f8d8ccc414768d34b0a75f466c05f3a739b406f10b",
|
"sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd",
|
||||||
"sha256:e8f6049c4878cb16960fbbfb22105e49d13d752d4d8371b55110941fb3b17800",
|
"sha256:8146f3550d627252269ac42ae660281d673eb6f8b32f113538e0cc2a9aed42b9",
|
||||||
"sha256:f76aebc3358ade9eacf9bc2bb8ae589863a4f911611694103af05346637df1b7",
|
"sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0",
|
||||||
"sha256:fd67b306320dcadea700a8f79b9e671e607f8696e98ec255915c0c6d6b818503"
|
"sha256:892c10d6a73e0f14935c31229e03325a7b3093fafd6ce0af704be7f894d95687",
|
||||||
|
"sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc",
|
||||||
|
"sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f",
|
||||||
|
"sha256:9eeea959168ea555e556b8188da5fa7831e21d91ce031e95ce23747b7609f8a4",
|
||||||
|
"sha256:a0258ad1f44f138b791327961caedffbf9612bfa504ab9597157806faa95194a",
|
||||||
|
"sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39",
|
||||||
|
"sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4",
|
||||||
|
"sha256:a84eda42bd12edc36eb5b53bbcc9b406820d3353f1994b6cfe453a33ff101775",
|
||||||
|
"sha256:ab2939cd5bec30a7430cbdb2287b63151b77cf9624de0532d629c9a1c59b1d5c",
|
||||||
|
"sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd",
|
||||||
|
"sha256:adf8c1d66f432ce577d0197dceaac2ac00c0759f573f28516246351c58a85020",
|
||||||
|
"sha256:b4adfbbc64014976d2f91084915ca4e626fbf2057fb81af209c1a6d776d23e3d",
|
||||||
|
"sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24",
|
||||||
|
"sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7",
|
||||||
|
"sha256:bd3ad3b0a40e713fc68f99ecfd07124195333f1e689387c180813f0e94309d6f",
|
||||||
|
"sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba",
|
||||||
|
"sha256:cf28633d64294969c019c6df4ff37f5698e8326db68cc2b66576a51fad634880",
|
||||||
|
"sha256:d0f35b19894a9e08639fd60a1ec1978cb7f5f7f1eace62f38dd36be8aecdef4d",
|
||||||
|
"sha256:db1f1c22173ac1c58db249ae48aa7ead29f534b9a948bc56828337aa84a32ed6",
|
||||||
|
"sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854",
|
||||||
|
"sha256:df2f57871a96bbc1b69733cd4c51dc33bea66146b8c63cacbfed73eec0883017",
|
||||||
|
"sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8",
|
||||||
|
"sha256:e642d86b8f956098b564a45e6f6ce68a22c2c97a04f5acd3f221f57b8cb850ae",
|
||||||
|
"sha256:e9e0a277bb2eb5d8a7407e14688b85fd8ad628ee4e0c7930415687b6564207a4",
|
||||||
|
"sha256:ea2bb7e2ae9e37d96835b3576a4fa4b3a97592fbea8ef7c3587078b0068b8f09",
|
||||||
|
"sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff",
|
||||||
|
"sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960",
|
||||||
|
"sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee",
|
||||||
|
"sha256:f4162988a360a29af158aeb4a2f4f09ffed6a969c9776f8f3bdee9b06a8ab7e5",
|
||||||
|
"sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c",
|
||||||
|
"sha256:f7de08cbe5551911886d1ab60de58448c6df0f67d9feb7d1fb21e9875ef95e91"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==1.25.1"
|
"markers": "python_version >= '3.10'",
|
||||||
|
"version": "==2.2.4"
|
||||||
},
|
},
|
||||||
"pycodestyle": {
|
"pycodestyle": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -81,4 +113,4 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {}
|
"develop": {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
numpy==1.22.3
|
numpy==2.2.4
|
||||||
flake8==6.0.0
|
flake8==6.0.0
|
||||||
Generated
+82
-49
@@ -1,4 +1,4 @@
|
|||||||
# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "altgraph"
|
name = "altgraph"
|
||||||
@@ -6,6 +6,7 @@ version = "0.17.4"
|
|||||||
description = "Python graph (network) package"
|
description = "Python graph (network) package"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"},
|
{file = "altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"},
|
||||||
{file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"},
|
{file = "altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406"},
|
||||||
@@ -17,6 +18,7 @@ version = "4.0.1"
|
|||||||
description = "the modular source code checker: pep8 pyflakes and co"
|
description = "the modular source code checker: pep8 pyflakes and co"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
|
{file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
|
||||||
{file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
|
{file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
|
||||||
@@ -29,22 +31,28 @@ pyflakes = ">=2.4.0,<2.5.0"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "importlib-metadata"
|
name = "importlib-metadata"
|
||||||
version = "8.2.0"
|
version = "8.5.0"
|
||||||
description = "Read metadata from Python packages"
|
description = "Read metadata from Python packages"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
|
groups = ["main"]
|
||||||
|
markers = "python_version == \"3.9\""
|
||||||
files = [
|
files = [
|
||||||
{file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"},
|
{file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"},
|
||||||
{file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"},
|
{file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
zipp = ">=0.5"
|
zipp = ">=3.20"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
|
||||||
|
cover = ["pytest-cov"]
|
||||||
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
||||||
|
enabler = ["pytest-enabler (>=2.2)"]
|
||||||
perf = ["ipython"]
|
perf = ["ipython"]
|
||||||
test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"]
|
test = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
|
||||||
|
type = ["pytest-mypy"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "macholib"
|
name = "macholib"
|
||||||
@@ -52,6 +60,8 @@ version = "1.16.3"
|
|||||||
description = "Mach-O header analysis and editing"
|
description = "Mach-O header analysis and editing"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
groups = ["main"]
|
||||||
|
markers = "sys_platform == \"darwin\""
|
||||||
files = [
|
files = [
|
||||||
{file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"},
|
{file = "macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c"},
|
||||||
{file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"},
|
{file = "macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30"},
|
||||||
@@ -66,6 +76,7 @@ version = "0.6.1"
|
|||||||
description = "McCabe checker, plugin for flake8"
|
description = "McCabe checker, plugin for flake8"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
|
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
|
||||||
{file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
|
{file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
|
||||||
@@ -73,24 +84,27 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "packaging"
|
name = "packaging"
|
||||||
version = "24.1"
|
version = "24.2"
|
||||||
description = "Core utilities for Python packages"
|
description = "Core utilities for Python packages"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
|
{file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
|
||||||
{file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
|
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pefile"
|
name = "pefile"
|
||||||
version = "2023.2.7"
|
version = "2024.8.26"
|
||||||
description = "Python PE parsing module"
|
description = "Python PE parsing module"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6.0"
|
python-versions = ">=3.6.0"
|
||||||
|
groups = ["main"]
|
||||||
|
markers = "sys_platform == \"win32\""
|
||||||
files = [
|
files = [
|
||||||
{file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"},
|
{file = "pefile-2024.8.26-py3-none-any.whl", hash = "sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f"},
|
||||||
{file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"},
|
{file = "pefile-2024.8.26.tar.gz", hash = "sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -99,6 +113,7 @@ version = "2.8.0"
|
|||||||
description = "Python style guide checker"
|
description = "Python style guide checker"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
|
{file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
|
||||||
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
|
{file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
|
||||||
@@ -110,6 +125,7 @@ version = "2.4.0"
|
|||||||
description = "passive checker of Python programs"
|
description = "passive checker of Python programs"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
|
{file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
|
||||||
{file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
|
{file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
|
||||||
@@ -117,96 +133,113 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyinstaller"
|
name = "pyinstaller"
|
||||||
version = "5.13.1"
|
version = "6.10.0"
|
||||||
description = "PyInstaller bundles a Python application and all its dependencies into a single package."
|
description = "PyInstaller bundles a Python application and all its dependencies into a single package."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "<3.13,>=3.7"
|
python-versions = "<3.14,>=3.8"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "pyinstaller-5.13.1-py3-none-macosx_10_13_universal2.whl", hash = "sha256:3c9cfe6d5d2f392d5d47389f6d377a8f225db460cdd01048b5a3de1d99c24ebe"},
|
{file = "pyinstaller-6.10.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:d60fb22859e11483af735aec115fdde09467cdbb29edd9844839f2c920b748c0"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:29341d2e86d5ce7df993e797ee96ef679041fc85376d31c35c7b714085a21299"},
|
{file = "pyinstaller-6.10.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:46d75359668993ddd98630a3669dc5249f3c446e35239b43bc7f4155bc574748"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-manylinux2014_i686.whl", hash = "sha256:ad6e31a8f35a463c6140e4cf979859197edc9831a1039253408b0fe5eec274dc"},
|
{file = "pyinstaller-6.10.0-py3-none-manylinux2014_i686.whl", hash = "sha256:3398a98fa17d47ccb31f8779ecbdacec025f7adb2f22757a54b706ac8b4fe906"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:5d801db3ceee58d01337473ea897e96e4bb21421a169dd7cf8716754617ff7fc"},
|
{file = "pyinstaller-6.10.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e9989f354ae4ed8a3bec7bdb37ae0d170751d6520e500f049c7cd0632d31d5c3"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:2519db3edec87d8c33924c2c4b7e176d8c1bbd9ba892d77efb67281925e621d6"},
|
{file = "pyinstaller-6.10.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:b7c90c91921b3749083115b28f30f40abf2bb481ceff196d2b2ce0eaa2b3d429"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e033218c8922f0342b6095fb444ecb3bc6747dfa58cac5eac2b985350f4b681e"},
|
{file = "pyinstaller-6.10.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6cf876d7d93b8b4f28d1ad57fa24645cf43119c79e985dd5e5f7a801245e6f53"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:086e68aa1e72f6aa13b9d170a395755e2b194b8ab410caeed02d16b432410c8c"},
|
{file = "pyinstaller-6.10.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:db05e3f2f10f9f78c56f1fb163d9cb453433429fe4281218ebaf1ebfd39ba942"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:aa609aca62edd8cdcf7740677a21525e6c23b5e9a8f821ec8a80c68947771b5d"},
|
{file = "pyinstaller-6.10.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:28eca3817f176fdc19747e1afcf434f13bb9f17a644f611be2c5a61b1f498ed7"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-win32.whl", hash = "sha256:b8d4000af72bf72f8185d420cd0a0aee0961f03a5c3511dc3ff08cdaef0583de"},
|
{file = "pyinstaller-6.10.0-py3-none-win32.whl", hash = "sha256:703e041718987e46ba0568a2c71ecf2459fddef57cf9edf3efeed4a53e3dae3f"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-win_amd64.whl", hash = "sha256:b70ebc10811b30bbea4cf5b81fd1477db992c2614cf215edc987cda9c5468911"},
|
{file = "pyinstaller-6.10.0-py3-none-win_amd64.whl", hash = "sha256:95b55966e563e8b8f31a43882aea10169e9a11fdf38e626d86a2907b640c0701"},
|
||||||
{file = "pyinstaller-5.13.1-py3-none-win_arm64.whl", hash = "sha256:78d1601a11475b95dceff6eaf0c9cd74d93e3f47b5ce4ad63cd76e7a369d3d04"},
|
{file = "pyinstaller-6.10.0-py3-none-win_arm64.whl", hash = "sha256:308e0a8670c9c9ac0cebbf1bbb492e71b6675606f2ec78bc4adfc830d209e087"},
|
||||||
{file = "pyinstaller-5.13.1.tar.gz", hash = "sha256:a2e7a1d76a7ac26f1db849d691a374f2048b0e204233028d25d79a90ecd1fec8"},
|
{file = "pyinstaller-6.10.0.tar.gz", hash = "sha256:143840f8056ff7b910bf8f16f6cd92cc10a6c2680bb76d0a25d558d543d21270"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
altgraph = "*"
|
altgraph = "*"
|
||||||
|
importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
|
||||||
macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""}
|
macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""}
|
||||||
|
packaging = ">=22.0"
|
||||||
pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""}
|
pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""}
|
||||||
pyinstaller-hooks-contrib = ">=2021.4"
|
pyinstaller-hooks-contrib = ">=2024.8"
|
||||||
pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""}
|
pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""}
|
||||||
setuptools = ">=42.0.0"
|
setuptools = ">=42.0.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
encryption = ["tinyaes (>=1.0.0)"]
|
completion = ["argcomplete"]
|
||||||
hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"]
|
hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyinstaller-hooks-contrib"
|
name = "pyinstaller-hooks-contrib"
|
||||||
version = "2024.8"
|
version = "2025.1"
|
||||||
description = "Community maintained hooks for PyInstaller"
|
description = "Community maintained hooks for PyInstaller"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "pyinstaller_hooks_contrib-2024.8-py3-none-any.whl", hash = "sha256:0057fe9a5c398d3f580e73e58793a1d4a8315ca91c3df01efea1c14ed557825a"},
|
{file = "pyinstaller_hooks_contrib-2025.1-py3-none-any.whl", hash = "sha256:d3c799470cbc0bda60dcc8e6b4ab976777532b77621337f2037f558905e3a8e9"},
|
||||||
{file = "pyinstaller_hooks_contrib-2024.8.tar.gz", hash = "sha256:29b68d878ab739e967055b56a93eb9b58e529d5b054fbab7a2f2bacf80cef3e2"},
|
{file = "pyinstaller_hooks_contrib-2025.1.tar.gz", hash = "sha256:130818f9e9a0a7f2261f1fd66054966a3a50c99d000981c5d1db11d3ad0c6ab2"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
|
importlib_metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
|
||||||
packaging = ">=22.0"
|
packaging = ">=22.0"
|
||||||
setuptools = ">=42.0.0"
|
setuptools = ">=42.0.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pywin32-ctypes"
|
name = "pywin32-ctypes"
|
||||||
version = "0.2.2"
|
version = "0.2.3"
|
||||||
description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
|
description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.6"
|
||||||
|
groups = ["main"]
|
||||||
|
markers = "sys_platform == \"win32\""
|
||||||
files = [
|
files = [
|
||||||
{file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"},
|
{file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"},
|
||||||
{file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"},
|
{file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "setuptools"
|
name = "setuptools"
|
||||||
version = "72.1.0"
|
version = "80.9.0"
|
||||||
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.9"
|
||||||
|
groups = ["main"]
|
||||||
files = [
|
files = [
|
||||||
{file = "setuptools-72.1.0-py3-none-any.whl", hash = "sha256:5a03e1860cf56bb6ef48ce186b0e557fdba433237481a9a625176c2831be15d1"},
|
{file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"},
|
||||||
{file = "setuptools-72.1.0.tar.gz", hash = "sha256:8d243eff56d095e5817f796ede6ae32941278f542e0f941867cc05ae52b162ec"},
|
{file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "ordered-set (>=3.1.1)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
|
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""]
|
||||||
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
|
core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"]
|
||||||
test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
|
cover = ["pytest-cov"]
|
||||||
|
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
|
||||||
|
enabler = ["pytest-enabler (>=2.2)"]
|
||||||
|
test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
|
||||||
|
type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zipp"
|
name = "zipp"
|
||||||
version = "3.20.0"
|
version = "3.20.2"
|
||||||
description = "Backport of pathlib-compatible object wrapper for zip files"
|
description = "Backport of pathlib-compatible object wrapper for zip files"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
|
groups = ["main"]
|
||||||
|
markers = "python_version == \"3.9\""
|
||||||
files = [
|
files = [
|
||||||
{file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"},
|
{file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"},
|
||||||
{file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"},
|
{file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
|
||||||
|
cover = ["pytest-cov"]
|
||||||
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
||||||
test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"]
|
enabler = ["pytest-enabler (>=2.2)"]
|
||||||
|
test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
|
||||||
|
type = ["pytest-mypy"]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.1"
|
||||||
python-versions = ">=3.8,<3.13"
|
python-versions = ">=3.9,<3.14"
|
||||||
content-hash = "46617f6f661c740ba597c9c9ff83ccf6b41b6a77139e38b062fec14d3a57c6d9"
|
content-hash = "9a14798bf374c540031f893ff18f9b187bd984391e9da99d13c0e6710b7de09e"
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ description = ""
|
|||||||
authors = ["Your Name <you@example.com>"]
|
authors = ["Your Name <you@example.com>"]
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = ">=3.8,<3.13"
|
python = ">=3.9,<3.14"
|
||||||
flake8 = "^4.0.1"
|
flake8 = "^4.0.1"
|
||||||
pyinstaller = "5.13.1"
|
pyinstaller = "6.10.0"
|
||||||
|
setuptools = ">=78.1.1"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["poetry-core>=1.0.0"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
certifi==2020.6.20
|
certifi==2020.6.20
|
||||||
chardet==3.0.4
|
chardet==3.0.4
|
||||||
docutils==0.16
|
docutils==0.16
|
||||||
idna==2.10
|
idna==3.7
|
||||||
Kivy==2.0.0rc3
|
Kivy==2.0.0rc3
|
||||||
Kivy-Garden==0.1.4
|
Kivy-Garden==0.1.4
|
||||||
packaging==20.7
|
packaging==20.7
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ docutils==0.16
|
|||||||
|
|
||||||
future==0.18.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'
|
future==0.18.2; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'
|
||||||
|
|
||||||
idna==2.9
|
idna==3.7
|
||||||
|
|
||||||
itsdangerous==1.1.0
|
itsdangerous==1.1.0
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ pillow>=10.2.0
|
|||||||
|
|
||||||
pygments==2.6.1
|
pygments==2.6.1
|
||||||
|
|
||||||
pyinstaller==5.13.1
|
pyinstaller==6.10.0
|
||||||
|
|
||||||
pyparsing==2.4.7; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'
|
pyparsing==2.4.7; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
import {desugarVersion, pythonVersionToSemantic} from '../src/find-python';
|
||||||
|
|
||||||
|
describe('desugarVersion', () => {
|
||||||
|
it.each([
|
||||||
|
['3.13', {version: '3.13', freethreaded: false}],
|
||||||
|
['3.13t', {version: '3.13', freethreaded: true}],
|
||||||
|
['3.13.1', {version: '3.13.1', freethreaded: false}],
|
||||||
|
['3.13.1t', {version: '3.13.1', freethreaded: true}],
|
||||||
|
['3.14-dev', {version: '~3.14.0-0', freethreaded: false}],
|
||||||
|
['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}]
|
||||||
|
])('%s -> %s', (input, expected) => {
|
||||||
|
expect(desugarVersion(input)).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test the combined desugarVersion and pythonVersionToSemantic functions
|
||||||
|
describe('pythonVersions', () => {
|
||||||
|
it.each([
|
||||||
|
['3.13', {version: '3.13', freethreaded: false}],
|
||||||
|
['3.13t', {version: '3.13', freethreaded: true}],
|
||||||
|
['3.13.1', {version: '3.13.1', freethreaded: false}],
|
||||||
|
['3.13.1t', {version: '3.13.1', freethreaded: true}],
|
||||||
|
['3.14-dev', {version: '~3.14.0-0', freethreaded: false}],
|
||||||
|
['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}]
|
||||||
|
])('%s -> %s', (input, expected) => {
|
||||||
|
const {version, freethreaded} = desugarVersion(input);
|
||||||
|
const semanticVersionSpec = pythonVersionToSemantic(version, false);
|
||||||
|
expect({version: semanticVersionSpec, freethreaded}).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
['3.13', {version: '~3.13.0-0', freethreaded: false}],
|
||||||
|
['3.13t', {version: '~3.13.0-0', freethreaded: true}],
|
||||||
|
['3.13.1', {version: '3.13.1', freethreaded: false}],
|
||||||
|
['3.13.1t', {version: '3.13.1', freethreaded: true}],
|
||||||
|
['3.14-dev', {version: '~3.14.0-0', freethreaded: false}],
|
||||||
|
['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}]
|
||||||
|
])('%s (allowPreReleases=true) -> %s', (input, expected) => {
|
||||||
|
const {version, freethreaded} = desugarVersion(input);
|
||||||
|
const semanticVersionSpec = pythonVersionToSemantic(version, true);
|
||||||
|
expect({version: semanticVersionSpec, freethreaded}).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
+32
-11
@@ -56,7 +56,7 @@ describe('Finder tests', () => {
|
|||||||
await io.mkdirP(pythonDir);
|
await io.mkdirP(pythonDir);
|
||||||
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
|
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
|
||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
await finder.useCpythonVersion('3.x', 'x64', true, false, false);
|
await finder.useCpythonVersion('3.x', 'x64', true, false, false, false);
|
||||||
expect(spyCoreAddPath).toHaveBeenCalled();
|
expect(spyCoreAddPath).toHaveBeenCalled();
|
||||||
expect(spyCoreExportVariable).toHaveBeenCalledWith(
|
expect(spyCoreExportVariable).toHaveBeenCalledWith(
|
||||||
'pythonLocation',
|
'pythonLocation',
|
||||||
@@ -73,7 +73,7 @@ describe('Finder tests', () => {
|
|||||||
await io.mkdirP(pythonDir);
|
await io.mkdirP(pythonDir);
|
||||||
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
|
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
|
||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
await finder.useCpythonVersion('3.x', 'x64', false, false, false);
|
await finder.useCpythonVersion('3.x', 'x64', false, false, false, false);
|
||||||
expect(spyCoreAddPath).not.toHaveBeenCalled();
|
expect(spyCoreAddPath).not.toHaveBeenCalled();
|
||||||
expect(spyCoreExportVariable).not.toHaveBeenCalled();
|
expect(spyCoreExportVariable).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
@@ -96,7 +96,7 @@ describe('Finder tests', () => {
|
|||||||
});
|
});
|
||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
await expect(
|
await expect(
|
||||||
finder.useCpythonVersion('1.2.3', 'x64', true, false, false)
|
finder.useCpythonVersion('1.2.3', 'x64', true, false, false, false)
|
||||||
).resolves.toEqual({
|
).resolves.toEqual({
|
||||||
impl: 'CPython',
|
impl: 'CPython',
|
||||||
version: '1.2.3'
|
version: '1.2.3'
|
||||||
@@ -135,7 +135,14 @@ describe('Finder tests', () => {
|
|||||||
});
|
});
|
||||||
// This will throw if it doesn't find it in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the manifest (because no such version exists)
|
||||||
await expect(
|
await expect(
|
||||||
finder.useCpythonVersion('1.2.4-beta.2', 'x64', false, false, false)
|
finder.useCpythonVersion(
|
||||||
|
'1.2.4-beta.2',
|
||||||
|
'x64',
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
)
|
||||||
).resolves.toEqual({
|
).resolves.toEqual({
|
||||||
impl: 'CPython',
|
impl: 'CPython',
|
||||||
version: '1.2.4-beta.2'
|
version: '1.2.4-beta.2'
|
||||||
@@ -186,7 +193,7 @@ describe('Finder tests', () => {
|
|||||||
|
|
||||||
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
|
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
|
||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
await finder.useCpythonVersion('1.2', 'x64', true, true, false);
|
await finder.useCpythonVersion('1.2', 'x64', true, true, false, false);
|
||||||
|
|
||||||
expect(infoSpy).toHaveBeenCalledWith("Resolved as '1.2.3'");
|
expect(infoSpy).toHaveBeenCalledWith("Resolved as '1.2.3'");
|
||||||
expect(infoSpy).toHaveBeenCalledWith(
|
expect(infoSpy).toHaveBeenCalledWith(
|
||||||
@@ -197,7 +204,14 @@ describe('Finder tests', () => {
|
|||||||
);
|
);
|
||||||
expect(installSpy).toHaveBeenCalled();
|
expect(installSpy).toHaveBeenCalled();
|
||||||
expect(addPathSpy).toHaveBeenCalledWith(expPath);
|
expect(addPathSpy).toHaveBeenCalledWith(expPath);
|
||||||
await finder.useCpythonVersion('1.2.4-beta.2', 'x64', false, true, false);
|
await finder.useCpythonVersion(
|
||||||
|
'1.2.4-beta.2',
|
||||||
|
'x64',
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
);
|
||||||
expect(spyCoreAddPath).toHaveBeenCalled();
|
expect(spyCoreAddPath).toHaveBeenCalled();
|
||||||
expect(spyCoreExportVariable).toHaveBeenCalledWith(
|
expect(spyCoreExportVariable).toHaveBeenCalledWith(
|
||||||
'pythonLocation',
|
'pythonLocation',
|
||||||
@@ -224,7 +238,7 @@ describe('Finder tests', () => {
|
|||||||
});
|
});
|
||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
await expect(
|
await expect(
|
||||||
finder.useCpythonVersion('1.2', 'x64', false, false, false)
|
finder.useCpythonVersion('1.2', 'x64', false, false, false, false)
|
||||||
).resolves.toEqual({
|
).resolves.toEqual({
|
||||||
impl: 'CPython',
|
impl: 'CPython',
|
||||||
version: '1.2.3'
|
version: '1.2.3'
|
||||||
@@ -251,17 +265,17 @@ describe('Finder tests', () => {
|
|||||||
});
|
});
|
||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
await expect(
|
await expect(
|
||||||
finder.useCpythonVersion('1.1', 'x64', false, false, false)
|
finder.useCpythonVersion('1.1', 'x64', false, false, false, false)
|
||||||
).rejects.toThrow();
|
).rejects.toThrow();
|
||||||
await expect(
|
await expect(
|
||||||
finder.useCpythonVersion('1.1', 'x64', false, false, true)
|
finder.useCpythonVersion('1.1', 'x64', false, false, true, false)
|
||||||
).resolves.toEqual({
|
).resolves.toEqual({
|
||||||
impl: 'CPython',
|
impl: 'CPython',
|
||||||
version: '1.1.0-beta.2'
|
version: '1.1.0-beta.2'
|
||||||
});
|
});
|
||||||
// Check 1.1.0 version specifier does not fallback to '1.1.0-beta.2'
|
// Check 1.1.0 version specifier does not fallback to '1.1.0-beta.2'
|
||||||
await expect(
|
await expect(
|
||||||
finder.useCpythonVersion('1.1.0', 'x64', false, false, true)
|
finder.useCpythonVersion('1.1.0', 'x64', false, false, true, false)
|
||||||
).rejects.toThrow();
|
).rejects.toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -269,7 +283,14 @@ describe('Finder tests', () => {
|
|||||||
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
|
||||||
let thrown = false;
|
let thrown = false;
|
||||||
try {
|
try {
|
||||||
await finder.useCpythonVersion('3.300000', 'x64', true, false, false);
|
await finder.useCpythonVersion(
|
||||||
|
'3.300000',
|
||||||
|
'x64',
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
);
|
||||||
} catch {
|
} catch {
|
||||||
thrown = true;
|
thrown = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,29 @@ import * as tc from '@actions/tool-cache';
|
|||||||
|
|
||||||
jest.mock('@actions/http-client');
|
jest.mock('@actions/http-client');
|
||||||
jest.mock('@actions/tool-cache');
|
jest.mock('@actions/tool-cache');
|
||||||
|
jest.mock('@actions/tool-cache', () => ({
|
||||||
const mockManifest = [{version: '1.0.0'}];
|
getManifestFromRepo: jest.fn()
|
||||||
|
}));
|
||||||
|
const mockManifest = [
|
||||||
|
{
|
||||||
|
version: '1.0.0',
|
||||||
|
stable: true,
|
||||||
|
files: [
|
||||||
|
{
|
||||||
|
filename: 'tool-v1.0.0-linux-x64.tar.gz',
|
||||||
|
platform: 'linux',
|
||||||
|
arch: 'x64',
|
||||||
|
download_url: 'https://example.com/tool-v1.0.0-linux-x64.tar.gz'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
describe('getManifest', () => {
|
describe('getManifest', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
it('should return manifest from repo', async () => {
|
it('should return manifest from repo', async () => {
|
||||||
(tc.getManifestFromRepo as jest.Mock).mockResolvedValue(mockManifest);
|
(tc.getManifestFromRepo as jest.Mock).mockResolvedValue(mockManifest);
|
||||||
const manifest = await getManifest();
|
const manifest = await getManifest();
|
||||||
|
|||||||
+154
-10
@@ -10,12 +10,14 @@ import {
|
|||||||
validatePythonVersionFormatForPyPy,
|
validatePythonVersionFormatForPyPy,
|
||||||
isCacheFeatureAvailable,
|
isCacheFeatureAvailable,
|
||||||
getVersionInputFromFile,
|
getVersionInputFromFile,
|
||||||
getVersionInputFromPlainFile,
|
getVersionsInputFromPlainFile,
|
||||||
getVersionInputFromTomlFile,
|
getVersionInputFromTomlFile,
|
||||||
|
getVersionInputFromPipfileFile,
|
||||||
getNextPageUrl,
|
getNextPageUrl,
|
||||||
isGhes,
|
isGhes,
|
||||||
IS_WINDOWS,
|
IS_WINDOWS,
|
||||||
getDownloadFileName
|
getDownloadFileName,
|
||||||
|
getVersionInputFromToolVersions
|
||||||
} from '../src/utils';
|
} from '../src/utils';
|
||||||
|
|
||||||
jest.mock('@actions/cache');
|
jest.mock('@actions/cache');
|
||||||
@@ -23,10 +25,10 @@ jest.mock('@actions/core');
|
|||||||
|
|
||||||
describe('validatePythonVersionFormatForPyPy', () => {
|
describe('validatePythonVersionFormatForPyPy', () => {
|
||||||
it.each([
|
it.each([
|
||||||
['3.6', true],
|
['3.12', true],
|
||||||
['3.7', true],
|
['3.13', true],
|
||||||
['3.6.x', false],
|
['3.12.x', false],
|
||||||
['3.7.x', false],
|
['3.13.x', false],
|
||||||
['3.x', false],
|
['3.x', false],
|
||||||
['3', false]
|
['3', false]
|
||||||
])('%s -> %s', (input, expected) => {
|
])('%s -> %s', (input, expected) => {
|
||||||
@@ -94,24 +96,52 @@ const tempDir = path.join(
|
|||||||
);
|
);
|
||||||
|
|
||||||
describe('Version from file test', () => {
|
describe('Version from file test', () => {
|
||||||
it.each([getVersionInputFromPlainFile, getVersionInputFromFile])(
|
it.each([getVersionsInputFromPlainFile, getVersionInputFromFile])(
|
||||||
'Version from plain file test',
|
'Version from plain file test',
|
||||||
async _fn => {
|
async _fn => {
|
||||||
await io.mkdirP(tempDir);
|
await io.mkdirP(tempDir);
|
||||||
const pythonVersionFileName = 'python-version.file';
|
const pythonVersionFileName = 'python-version.file';
|
||||||
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
const pythonVersionFileContent = '3.7';
|
const pythonVersionFileContent = '3.13';
|
||||||
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersionFileContent]);
|
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersionFileContent]);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
it.each([getVersionsInputFromPlainFile, getVersionInputFromFile])(
|
||||||
|
'Versions from multiline plain file test',
|
||||||
|
async _fn => {
|
||||||
|
await io.mkdirP(tempDir);
|
||||||
|
const pythonVersionFileName = 'python-version.file';
|
||||||
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
|
const pythonVersionFileContent = '3.13\r\n3.12';
|
||||||
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
|
expect(_fn(pythonVersionFilePath)).toEqual(['3.13', '3.12']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
it.each([getVersionsInputFromPlainFile, getVersionInputFromFile])(
|
||||||
|
'Version from complex plain file test',
|
||||||
|
async _fn => {
|
||||||
|
await io.mkdirP(tempDir);
|
||||||
|
const pythonVersionFileName = 'python-version.file';
|
||||||
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
|
const pythonVersionFileContent =
|
||||||
|
'3.13/envs/virtualenv\r# 3.12\n3.11\r\n3.10\r\n 3.9 \r\n';
|
||||||
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
|
expect(_fn(pythonVersionFilePath)).toEqual([
|
||||||
|
'3.13',
|
||||||
|
'3.11',
|
||||||
|
'3.10',
|
||||||
|
'3.9'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
);
|
||||||
it.each([getVersionInputFromTomlFile, getVersionInputFromFile])(
|
it.each([getVersionInputFromTomlFile, getVersionInputFromFile])(
|
||||||
'Version from standard pyproject.toml test',
|
'Version from standard pyproject.toml test',
|
||||||
async _fn => {
|
async _fn => {
|
||||||
await io.mkdirP(tempDir);
|
await io.mkdirP(tempDir);
|
||||||
const pythonVersionFileName = 'pyproject.toml';
|
const pythonVersionFileName = 'pyproject.toml';
|
||||||
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
const pythonVersion = '>=3.7.0';
|
const pythonVersion = '>=3.13.0';
|
||||||
const pythonVersionFileContent = `[project]\nrequires-python = "${pythonVersion}"`;
|
const pythonVersionFileContent = `[project]\nrequires-python = "${pythonVersion}"`;
|
||||||
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
|
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
|
||||||
@@ -123,7 +153,7 @@ describe('Version from file test', () => {
|
|||||||
await io.mkdirP(tempDir);
|
await io.mkdirP(tempDir);
|
||||||
const pythonVersionFileName = 'pyproject.toml';
|
const pythonVersionFileName = 'pyproject.toml';
|
||||||
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
const pythonVersion = '>=3.7.0';
|
const pythonVersion = '>=3.13.0';
|
||||||
const pythonVersionFileContent = `[tool.poetry.dependencies]\npython = "${pythonVersion}"`;
|
const pythonVersionFileContent = `[tool.poetry.dependencies]\npython = "${pythonVersion}"`;
|
||||||
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
|
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
|
||||||
@@ -139,6 +169,120 @@ describe('Version from file test', () => {
|
|||||||
expect(_fn(pythonVersionFilePath)).toEqual([]);
|
expect(_fn(pythonVersionFilePath)).toEqual([]);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = 'python 3.13.2\nnodejs 16';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['3.13.2']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions with comment',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = '# python 3.13\npython 3.12';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['3.12']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions with whitespace',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = ' python 3.13 ';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['3.13']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions with v prefix',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = 'python v3.13.2';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['3.13.2']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions with pypy version',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = 'python pypy3.10-7.3.19';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['pypy3.10-7.3.19']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions with alpha Releases',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = 'python 3.14.0a5t';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['3.14.0a5t']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromToolVersions])(
|
||||||
|
'Version from .tool-versions with dev suffix',
|
||||||
|
async _fn => {
|
||||||
|
const toolVersionFileName = '.tool-versions';
|
||||||
|
const toolVersionFilePath = path.join(tempDir, toolVersionFileName);
|
||||||
|
const toolVersionContent = 'python 3.14t-dev';
|
||||||
|
fs.writeFileSync(toolVersionFilePath, toolVersionContent);
|
||||||
|
expect(_fn(toolVersionFilePath)).toEqual(['3.14t-dev']);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromPipfileFile, getVersionInputFromFile])(
|
||||||
|
'Version from python_version in Pipfile',
|
||||||
|
async _fn => {
|
||||||
|
await io.mkdirP(tempDir);
|
||||||
|
const pythonVersionFileName = 'Pipfile';
|
||||||
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
|
const pythonVersion = '3.13';
|
||||||
|
const pythonVersionFileContent = `[requires]\npython_version = "${pythonVersion}"`;
|
||||||
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
|
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromPipfileFile, getVersionInputFromFile])(
|
||||||
|
'Version from python_full_version in Pipfile',
|
||||||
|
async _fn => {
|
||||||
|
await io.mkdirP(tempDir);
|
||||||
|
const pythonVersionFileName = 'Pipfile';
|
||||||
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
|
const pythonVersion = '3.13.0';
|
||||||
|
const pythonVersionFileContent = `[requires]\npython_full_version = "${pythonVersion}"`;
|
||||||
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
|
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each([getVersionInputFromPipfileFile, getVersionInputFromFile])(
|
||||||
|
'Pipfile undefined version',
|
||||||
|
async _fn => {
|
||||||
|
await io.mkdirP(tempDir);
|
||||||
|
const pythonVersionFileName = 'Pipfile';
|
||||||
|
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
|
||||||
|
const pythonVersionFileContent = ``;
|
||||||
|
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
|
||||||
|
expect(_fn(pythonVersionFilePath)).toEqual([]);
|
||||||
|
}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getNextPageUrl', () => {
|
describe('getNextPageUrl', () => {
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import sys
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print(f"Using GIL: {sys._is_gil_enabled()}\n")
|
||||||
+6
-1
@@ -26,6 +26,11 @@ inputs:
|
|||||||
allow-prereleases:
|
allow-prereleases:
|
||||||
description: "When 'true', a version range passed to 'python-version' input will match prerelease versions if no GA versions are found. Only 'x.y' version range is supported for CPython."
|
description: "When 'true', a version range passed to 'python-version' input will match prerelease versions if no GA versions are found. Only 'x.y' version range is supported for CPython."
|
||||||
default: false
|
default: false
|
||||||
|
freethreaded:
|
||||||
|
description: "When 'true', use the freethreaded version of Python."
|
||||||
|
default: false
|
||||||
|
pip-version:
|
||||||
|
description: "Used to specify the version of pip to install with the Python. Supported format: major[.minor][.patch]."
|
||||||
outputs:
|
outputs:
|
||||||
python-version:
|
python-version:
|
||||||
description: "The installed Python or PyPy version. Useful when given a version range as input."
|
description: "The installed Python or PyPy version. Useful when given a version range as input."
|
||||||
@@ -34,7 +39,7 @@ outputs:
|
|||||||
python-path:
|
python-path:
|
||||||
description: "The absolute path to the Python or PyPy executable."
|
description: "The absolute path to the Python or PyPy executable."
|
||||||
runs:
|
runs:
|
||||||
using: 'node20'
|
using: 'node24'
|
||||||
main: 'dist/setup/index.js'
|
main: 'dist/setup/index.js'
|
||||||
post: 'dist/cache-save/index.js'
|
post: 'dist/cache-save/index.js'
|
||||||
post-if: success()
|
post-if: success()
|
||||||
|
|||||||
Vendored
+2713
-4418
File diff suppressed because one or more lines are too long
Vendored
+3520
-5786
File diff suppressed because one or more lines are too long
+126
-63
@@ -22,6 +22,7 @@
|
|||||||
- [macOS](advanced-usage.md#macos)
|
- [macOS](advanced-usage.md#macos)
|
||||||
- [Using `setup-python` on GHES](advanced-usage.md#using-setup-python-on-ghes)
|
- [Using `setup-python` on GHES](advanced-usage.md#using-setup-python-on-ghes)
|
||||||
- [Allow pre-releases](advanced-usage.md#allow-pre-releases)
|
- [Allow pre-releases](advanced-usage.md#allow-pre-releases)
|
||||||
|
- [Using the pip-version input](advanced-usage.md#using-the-pip-version-input)
|
||||||
|
|
||||||
## Using the `python-version` input
|
## Using the `python-version` input
|
||||||
|
|
||||||
@@ -31,8 +32,8 @@ If there is a specific version of Python that you need and you don't want to wor
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.12.6'
|
python-version: '3.12.6'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -45,8 +46,8 @@ You can specify **only a major and minor version** if you are okay with the most
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -59,8 +60,8 @@ You can specify the version with **prerelease tag** to download and set up an ac
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.14.0-alpha.1'
|
python-version: '3.14.0-alpha.1'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -70,21 +71,46 @@ It's also possible to use **x.y-dev syntax** to download and set up the latest p
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.14-dev'
|
python-version: '3.14-dev'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can specify the [free threading](https://docs.python.org/3/howto/free-threading-python.html) version of Python by setting the `freethreaded` input to `true` or by using the special **t** suffix in some cases.
|
||||||
|
You can use the **t** suffix when specifying the major and minor version (e.g., `3.13t`), with a patch version (e.g., `3.13.1t`), or with the **x.y-dev syntax** (e.g., `3.14t-dev`).
|
||||||
|
Free threaded Python is only available starting with the 3.13 release.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version: '3.13t'
|
||||||
|
- run: python my_script.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the **t** suffix is not `semver` syntax. If you wish to specify a range, you must use the `freethreaded` input instead of the `t` suffix.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version: '>=3.13'
|
||||||
|
freethreaded: true
|
||||||
|
- run: python my_script.py
|
||||||
|
```
|
||||||
|
|
||||||
You can also use several types of ranges that are specified in [semver](https://github.com/npm/node-semver#ranges), for instance:
|
You can also use several types of ranges that are specified in [semver](https://github.com/npm/node-semver#ranges), for instance:
|
||||||
|
|
||||||
- **[ranges](https://github.com/npm/node-semver#ranges)** to download and set up the latest available version of Python satisfying a range:
|
- **[ranges](https://github.com/npm/node-semver#ranges)** to download and set up the latest available version of Python satisfying a range:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '>=3.9 <3.14'
|
python-version: '>=3.9 <3.14'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -94,8 +120,8 @@ steps:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13.0-alpha - 3.13.0'
|
python-version: '3.13.0-alpha - 3.13.0'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -105,8 +131,8 @@ steps:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.x'
|
python-version: '3.x'
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -138,8 +164,8 @@ jobs:
|
|||||||
- 'pypy3.10' # the latest available version of PyPy that supports Python 3.10
|
- 'pypy3.10' # the latest available version of PyPy that supports Python 3.10
|
||||||
- 'pypy3.10-v7.3.17' # Python 3.10 and PyPy 7.3.17
|
- 'pypy3.10-v7.3.17' # Python 3.10 and PyPy 7.3.17
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -156,8 +182,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: |
|
python-version: |
|
||||||
3.11
|
3.11
|
||||||
@@ -173,8 +199,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: |
|
python-version: |
|
||||||
pypy-3.10-v7.3.x
|
pypy-3.10-v7.3.x
|
||||||
@@ -190,8 +216,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: |
|
python-version: |
|
||||||
3.11
|
3.11
|
||||||
@@ -215,9 +241,9 @@ jobs:
|
|||||||
python-version: ['3.x', 'pypy3.8', 'pypy3.9' ]
|
python-version: ['3.x', 'pypy3.8', 'pypy3.9' ]
|
||||||
name: Python ${{ matrix.python-version }} sample
|
name: Python ${{ matrix.python-version }} sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
architecture: x64
|
architecture: x64
|
||||||
@@ -241,9 +267,9 @@ jobs:
|
|||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
python-version: '3.9'
|
python-version: '3.9'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Display Python version
|
- name: Display Python version
|
||||||
@@ -253,14 +279,14 @@ jobs:
|
|||||||
|
|
||||||
## Using the `python-version-file` input
|
## Using the `python-version-file` input
|
||||||
|
|
||||||
`setup-python` action can read the Python or PyPy version from a version file. `python-version-file` input is used to specify the path to the version file. If the file that was supplied to `python-version-file` input doesn't exist, the action will fail with an error.
|
`setup-python` action can read Python or PyPy version from a version file. `python-version-file` input is used for specifying the path to the version file. If the file that was supplied to `python-version-file` input doesn't exist, the action will fail with error.
|
||||||
|
|
||||||
>In case both `python-version` and `python-version-file` inputs are supplied, the `python-version-file` input will be ignored due to its lower priority.
|
>In case both `python-version` and `python-version-file` inputs are supplied, the `python-version-file` input will be ignored due to its lower priority. The .tool-versions file supports version specifications in accordance with asdf standards, adhering to Semantic Versioning ([semver](https://semver.org)).
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version-file: '.python-version' # Read python version from a file .python-version
|
python-version-file: '.python-version' # Read python version from a file .python-version
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
@@ -268,13 +294,31 @@ steps:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version-file: 'pyproject.toml' # Read python version from a file pyproject.toml
|
python-version-file: 'pyproject.toml' # Read python version from a file pyproject.toml
|
||||||
- run: python my_script.py
|
- run: python my_script.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version-file: '.tool-versions' # Read python version from a file .tool-versions
|
||||||
|
- run: python my_script.py
|
||||||
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version-file: 'Pipfile' # Read python version from a file Pipfile
|
||||||
|
- run: python my_script.py
|
||||||
|
```
|
||||||
|
|
||||||
## Check latest version
|
## Check latest version
|
||||||
|
|
||||||
The `check-latest` flag defaults to `false`. Use the default or set `check-latest` to `false` if you prefer stability and if you want to ensure a specific `Python or PyPy` version is always used.
|
The `check-latest` flag defaults to `false`. Use the default or set `check-latest` to `false` if you prefer stability and if you want to ensure a specific `Python or PyPy` version is always used.
|
||||||
@@ -283,8 +327,8 @@ If `check-latest` is set to `true`, the action first checks if the cached versio
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
check-latest: true
|
check-latest: true
|
||||||
@@ -298,8 +342,8 @@ steps:
|
|||||||
**Caching pipenv dependencies:**
|
**Caching pipenv dependencies:**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'pipenv'
|
cache: 'pipenv'
|
||||||
@@ -311,10 +355,10 @@ steps:
|
|||||||
**Caching poetry dependencies:**
|
**Caching poetry dependencies:**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Install poetry
|
- name: Install poetry
|
||||||
run: pipx install poetry
|
run: pipx install poetry
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'poetry'
|
cache: 'poetry'
|
||||||
@@ -326,8 +370,8 @@ steps:
|
|||||||
**Using a list of file paths to cache dependencies**
|
**Using a list of file paths to cache dependencies**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'pipenv'
|
cache: 'pipenv'
|
||||||
@@ -341,8 +385,8 @@ steps:
|
|||||||
**Using wildcard patterns to cache dependencies**
|
**Using wildcard patterns to cache dependencies**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
@@ -353,8 +397,8 @@ steps:
|
|||||||
**Using a list of wildcard patterns to cache dependencies**
|
**Using a list of wildcard patterns to cache dependencies**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
@@ -368,8 +412,8 @@ steps:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
@@ -391,8 +435,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
id: cp312
|
id: cp312
|
||||||
with:
|
with:
|
||||||
python-version: "3.9.0 - 3.12.0"
|
python-version: "3.9.0 - 3.12.0"
|
||||||
@@ -408,8 +452,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
id: cp313
|
id: cp313
|
||||||
with:
|
with:
|
||||||
python-version: "3.13"
|
python-version: "3.13"
|
||||||
@@ -424,8 +468,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
id: cp313
|
id: cp313
|
||||||
with:
|
with:
|
||||||
python-version: "3.13.0"
|
python-version: "3.13.0"
|
||||||
@@ -433,16 +477,16 @@ jobs:
|
|||||||
- run: echo '${{ steps.cp313.outputs.cache-hit }}' # true if cache-hit occurred on the primary key
|
- run: echo '${{ steps.cp313.outputs.cache-hit }}' # true if cache-hit occurred on the primary key
|
||||||
```
|
```
|
||||||
|
|
||||||
## Environment variables
|
### Environment variables
|
||||||
|
|
||||||
These environment variables become available after setup-python action execution:
|
These environment variables become available after setup-python action execution:
|
||||||
|
|
||||||
| **Env.variable** | **Description** |
|
| **Env.variable** | **Description**|
|
||||||
| ----------- | ----------- |
|
|----------------------|-------------|
|
||||||
| pythonLocation |Contains the absolute path to the folder where the requested version of Python or PyPy is installed|
|
| `pythonLocation` | Contains the absolute path to the folder where the requested version of Python, PyPy, or GraalPy is installed. <br><br>**Executable location by implementation:** <br>• **CPython** – `$pythonLocation/bin/python` (Linux/macOS), `$pythonLocation/python.exe` (Windows) <br>• **PyPy** – `$pythonLocation/bin/python` (Linux/macOS), `$pythonLocation/python.exe` (Windows) <br>• **GraalPy** – `$pythonLocation/bin/python` (Linux/macOS) <br><br>Note: CPython versions include a symlink or copy of the Python executable at the root, while PyPy and GraalPy retain upstream directory layouts. |
|
||||||
| Python_ROOT_DIR | https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython |
|
| `Python_ROOT_DIR` | https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython |
|
||||||
| Python2_ROOT_DIR |https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2|
|
| `Python2_ROOT_DIR` | https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 |
|
||||||
| Python3_ROOT_DIR |https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3|
|
| `Python3_ROOT_DIR` | https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 |
|
||||||
|
|
||||||
## Using `update-environment` flag
|
## Using `update-environment` flag
|
||||||
|
|
||||||
@@ -455,8 +499,8 @@ Such a requirement on side-effect could be because you don't want your composite
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
id: cp313
|
id: cp313
|
||||||
with:
|
with:
|
||||||
python-version: '3.13'
|
python-version: '3.13'
|
||||||
@@ -601,11 +645,30 @@ jobs:
|
|||||||
python_version: ["3.11", "3.12", "3.13"]
|
python_version: ["3.11", "3.12", "3.13"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: "${{ matrix.python_version }}"
|
python-version: "${{ matrix.python_version }}"
|
||||||
allow-prereleases: true
|
allow-prereleases: true
|
||||||
- run: pipx run nox --error-on-missing-interpreters -s tests-${{ matrix.python_version }}
|
- run: pipx run nox --error-on-missing-interpreters -s tests-${{ matrix.python_version }}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Using the pip-version input
|
||||||
|
|
||||||
|
The `pip-version` input allows you to specify the desired version of **Pip** to use with the standard Python version.
|
||||||
|
The version of Pip should be specified in the format `major`, `major.minor`, or `major.minor.patch` (for example: 25, 25.1, or 25.0.1).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version: '3.13'
|
||||||
|
pip-version: '25.0.1'
|
||||||
|
- name: Display Pip version
|
||||||
|
run: pip --version
|
||||||
|
```
|
||||||
|
> The `pip-version` input is supported only with standard Python versions. It is not available when using PyPy or GraalPy.
|
||||||
|
|
||||||
|
> Using a specific or outdated version of pip may result in compatibility or security issues and can cause job failures. For best practices and guidance, refer to the official [pip documentation](https://pip.pypa.io/en/stable/).
|
||||||
|
|||||||
Generated
+428
-449
File diff suppressed because it is too large
Load Diff
+13
-10
@@ -1,9 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-python",
|
"name": "setup-python",
|
||||||
"version": "5.0.0",
|
"version": "6.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Setup python action",
|
"description": "Setup python action",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=24.0.0"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "ncc build -o dist/setup src/setup-python.ts && ncc build -o dist/cache-save src/cache-save.ts",
|
"build": "ncc build -o dist/setup src/setup-python.ts && ncc build -o dist/cache-save src/cache-save.ts",
|
||||||
"format": "prettier --no-error-on-unmatched-pattern --config ./.prettierrc.js --write \"**/*.{ts,yml,yaml}\"",
|
"format": "prettier --no-error-on-unmatched-pattern --config ./.prettierrc.js --write \"**/*.{ts,yml,yaml}\"",
|
||||||
@@ -25,31 +28,31 @@
|
|||||||
"author": "GitHub",
|
"author": "GitHub",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^4.0.0",
|
"@actions/cache": "^4.0.3",
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.10.0",
|
||||||
"@actions/exec": "^1.1.0",
|
"@actions/exec": "^1.1.0",
|
||||||
"@actions/glob": "^0.4.0",
|
"@actions/glob": "^0.5.0",
|
||||||
"@actions/http-client": "^2.2.3",
|
"@actions/http-client": "^2.2.3",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.0.2",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^2.0.2",
|
||||||
"@iarna/toml": "^3.0.0",
|
"@iarna/toml": "^3.0.0",
|
||||||
"semver": "^7.6.0"
|
"semver": "^7.7.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.12",
|
"@types/jest": "^29.5.12",
|
||||||
"@types/node": "^20.11.25",
|
"@types/node": "^24.1.0",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.7.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
||||||
"@typescript-eslint/parser": "^5.54.0",
|
"@typescript-eslint/parser": "^5.54.0",
|
||||||
"@vercel/ncc": "^0.38.0",
|
"@vercel/ncc": "^0.38.3",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-config-prettier": "^8.6.0",
|
"eslint-config-prettier": "^8.6.0",
|
||||||
"eslint-plugin-jest": "^27.9.0",
|
"eslint-plugin-jest": "^27.9.0",
|
||||||
"eslint-plugin-node": "^11.1.0",
|
"eslint-plugin-node": "^11.1.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-circus": "^29.7.0",
|
"jest-circus": "^29.7.0",
|
||||||
"prettier": "^2.8.4",
|
"prettier": "^3.5.3",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^29.3.2",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -38,11 +38,12 @@ async function saveCache(packageManager: string) {
|
|||||||
core.debug(`paths for caching are ${cachePaths.join(', ')}`);
|
core.debug(`paths for caching are ${cachePaths.join(', ')}`);
|
||||||
|
|
||||||
if (!isCacheDirectoryExists(cachePaths)) {
|
if (!isCacheDirectoryExists(cachePaths)) {
|
||||||
throw new Error(
|
core.warning(
|
||||||
`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePaths.join(
|
`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePaths.join(
|
||||||
', '
|
', '
|
||||||
)}. This likely indicates that there are no dependencies to cache. Consider removing the cache step if it is not needed.`
|
)}. This likely indicates that there are no dependencies to cache. Consider removing the cache step if it is not needed.`
|
||||||
);
|
);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const primaryKey = core.getState(State.STATE_CACHE_PRIMARY_KEY);
|
const primaryKey = core.getState(State.STATE_CACHE_PRIMARY_KEY);
|
||||||
|
|||||||
+4
-1
@@ -96,7 +96,10 @@ export async function findPyPyVersion(
|
|||||||
core.addPath(pythonLocation);
|
core.addPath(pythonLocation);
|
||||||
core.addPath(_binDir);
|
core.addPath(_binDir);
|
||||||
}
|
}
|
||||||
core.setOutput('python-version', 'pypy' + resolvedPyPyVersion);
|
core.setOutput(
|
||||||
|
'python-version',
|
||||||
|
`pypy${resolvedPythonVersion}-${resolvedPyPyVersion}`
|
||||||
|
);
|
||||||
core.setOutput('python-path', pythonPath);
|
core.setOutput('python-path', pythonPath);
|
||||||
|
|
||||||
return {resolvedPyPyVersion, resolvedPythonVersion};
|
return {resolvedPyPyVersion, resolvedPythonVersion};
|
||||||
|
|||||||
+108
-16
@@ -8,6 +8,7 @@ import * as installer from './install-python';
|
|||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import * as exec from '@actions/exec';
|
||||||
|
|
||||||
// Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
|
// Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
|
||||||
// This is where pip is, along with anything that pip installs.
|
// This is where pip is, along with anything that pip installs.
|
||||||
@@ -30,20 +31,53 @@ function binDir(installDir: string): string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function installPip(pythonLocation: string) {
|
||||||
|
const pipVersion = core.getInput('pip-version');
|
||||||
|
|
||||||
|
// Validate pip-version format: major[.minor][.patch]
|
||||||
|
const versionRegex = /^\d+(\.\d+)?(\.\d+)?$/;
|
||||||
|
if (pipVersion && !versionRegex.test(pipVersion)) {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid pip-version "${pipVersion}". Please specify a version in the format major[.minor][.patch].`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pipVersion) {
|
||||||
|
core.info(
|
||||||
|
`pip-version input is specified. Installing pip version ${pipVersion}`
|
||||||
|
);
|
||||||
|
await exec.exec(
|
||||||
|
`${pythonLocation}/python -m pip install --upgrade pip==${pipVersion} --disable-pip-version-check --no-warn-script-location`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function useCpythonVersion(
|
export async function useCpythonVersion(
|
||||||
version: string,
|
version: string,
|
||||||
architecture: string,
|
architecture: string,
|
||||||
updateEnvironment: boolean,
|
updateEnvironment: boolean,
|
||||||
checkLatest: boolean,
|
checkLatest: boolean,
|
||||||
allowPreReleases: boolean
|
allowPreReleases: boolean,
|
||||||
|
freethreaded: boolean
|
||||||
): Promise<InstalledVersion> {
|
): Promise<InstalledVersion> {
|
||||||
let manifest: tc.IToolRelease[] | null = null;
|
let manifest: tc.IToolRelease[] | null = null;
|
||||||
const desugaredVersionSpec = desugarDevVersion(version);
|
const {version: desugaredVersionSpec, freethreaded: versionFreethreaded} =
|
||||||
|
desugarVersion(version);
|
||||||
let semanticVersionSpec = pythonVersionToSemantic(
|
let semanticVersionSpec = pythonVersionToSemantic(
|
||||||
desugaredVersionSpec,
|
desugaredVersionSpec,
|
||||||
allowPreReleases
|
allowPreReleases
|
||||||
);
|
);
|
||||||
|
if (versionFreethreaded) {
|
||||||
|
// Use the freethreaded version if it was specified in the input, e.g., 3.13t
|
||||||
|
freethreaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`);
|
core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`);
|
||||||
|
if (freethreaded) {
|
||||||
|
// Free threaded versions use an architecture suffix like `x64-freethreaded`
|
||||||
|
core.debug(`Using freethreaded version of ${semanticVersionSpec}`);
|
||||||
|
architecture += '-freethreaded';
|
||||||
|
}
|
||||||
|
|
||||||
if (checkLatest) {
|
if (checkLatest) {
|
||||||
manifest = await installer.getManifest();
|
manifest = await installer.getManifest();
|
||||||
@@ -90,16 +124,22 @@ export async function useCpythonVersion(
|
|||||||
|
|
||||||
if (!installDir) {
|
if (!installDir) {
|
||||||
const osInfo = await getOSInfo();
|
const osInfo = await getOSInfo();
|
||||||
throw new Error(
|
const msg = [
|
||||||
[
|
`The version '${version}' with architecture '${architecture}' was not found for ${
|
||||||
`The version '${version}' with architecture '${architecture}' was not found for ${
|
osInfo
|
||||||
osInfo
|
? `${osInfo.osName} ${osInfo.osVersion}`
|
||||||
? `${osInfo.osName} ${osInfo.osVersion}`
|
: 'this operating system'
|
||||||
: 'this operating system'
|
}.`
|
||||||
}.`,
|
];
|
||||||
`The list of all available versions can be found here: ${installer.MANIFEST_URL}`
|
if (freethreaded) {
|
||||||
].join(os.EOL)
|
msg.push(
|
||||||
|
`Free threaded versions are only available for Python 3.13.0 and later.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
msg.push(
|
||||||
|
`The list of all available versions can be found here: ${installer.MANIFEST_URL}`
|
||||||
);
|
);
|
||||||
|
throw new Error(msg.join(os.EOL));
|
||||||
}
|
}
|
||||||
|
|
||||||
const _binDir = binDir(installDir);
|
const _binDir = binDir(installDir);
|
||||||
@@ -136,15 +176,36 @@ export async function useCpythonVersion(
|
|||||||
if (IS_WINDOWS) {
|
if (IS_WINDOWS) {
|
||||||
// Add --user directory
|
// Add --user directory
|
||||||
// `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
|
// `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
|
||||||
// So if `findLocalTool` succeeded above, we must have a conformant `installDir`
|
// Extract version details
|
||||||
const version = path.basename(path.dirname(installDir));
|
const version = path.basename(path.dirname(installDir));
|
||||||
const major = semver.major(version);
|
const major = semver.major(version);
|
||||||
const minor = semver.minor(version);
|
const minor = semver.minor(version);
|
||||||
|
|
||||||
|
const basePath = process.env['APPDATA'] || '';
|
||||||
|
let versionSuffix = `${major}${minor}`;
|
||||||
|
// Append '-32' for x86 architecture if Python version is >= 3.10
|
||||||
|
if (
|
||||||
|
architecture === 'x86' &&
|
||||||
|
(major > 3 || (major === 3 && minor >= 10))
|
||||||
|
) {
|
||||||
|
versionSuffix += '-32';
|
||||||
|
} else if (architecture === 'arm64') {
|
||||||
|
versionSuffix += '-arm64';
|
||||||
|
}
|
||||||
|
// Append 't' for freethreaded builds
|
||||||
|
if (freethreaded) {
|
||||||
|
versionSuffix += 't';
|
||||||
|
if (architecture === 'x86-freethreaded') {
|
||||||
|
versionSuffix += '-32';
|
||||||
|
} else if (architecture === 'arm64-freethreaded') {
|
||||||
|
versionSuffix += '-arm64';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Add user Scripts path
|
||||||
const userScriptsDir = path.join(
|
const userScriptsDir = path.join(
|
||||||
process.env['APPDATA'] || '',
|
basePath,
|
||||||
'Python',
|
'Python',
|
||||||
`Python${major}${minor}`,
|
`Python${versionSuffix}`,
|
||||||
'Scripts'
|
'Scripts'
|
||||||
);
|
);
|
||||||
core.addPath(userScriptsDir);
|
core.addPath(userScriptsDir);
|
||||||
@@ -153,10 +214,41 @@ export async function useCpythonVersion(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const installed = versionFromPath(installDir);
|
const installed = versionFromPath(installDir);
|
||||||
core.setOutput('python-version', installed);
|
let pythonVersion = installed;
|
||||||
|
if (freethreaded) {
|
||||||
|
// Add the freethreaded suffix to the version (e.g., 3.13.1t)
|
||||||
|
pythonVersion += 't';
|
||||||
|
}
|
||||||
|
core.setOutput('python-version', pythonVersion);
|
||||||
core.setOutput('python-path', pythonPath);
|
core.setOutput('python-path', pythonPath);
|
||||||
|
|
||||||
return {impl: 'CPython', version: installed};
|
const binaryPath = IS_WINDOWS ? installDir : _binDir;
|
||||||
|
await installPip(binaryPath);
|
||||||
|
|
||||||
|
return {impl: 'CPython', version: pythonVersion};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Desugar free threaded and dev versions */
|
||||||
|
export function desugarVersion(versionSpec: string) {
|
||||||
|
const {version, freethreaded} = desugarFreeThreadedVersion(versionSpec);
|
||||||
|
return {version: desugarDevVersion(version), freethreaded};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Identify freethreaded versions like, 3.13t, 3.13.1t, 3.13t-dev.
|
||||||
|
* Returns the version without the `t` and the architectures suffix, if freethreaded */
|
||||||
|
function desugarFreeThreadedVersion(versionSpec: string) {
|
||||||
|
const majorMinor = /^(\d+\.\d+(\.\d+)?)(t)$/;
|
||||||
|
if (majorMinor.test(versionSpec)) {
|
||||||
|
return {version: versionSpec.replace(majorMinor, '$1'), freethreaded: true};
|
||||||
|
}
|
||||||
|
const devVersion = /^(\d+\.\d+)(t)(-dev)$/;
|
||||||
|
if (devVersion.test(versionSpec)) {
|
||||||
|
return {
|
||||||
|
version: versionSpec.replace(devVersion, '$1$3'),
|
||||||
|
freethreaded: true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {version: versionSpec, freethreaded: false};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Convert versions like `3.8-dev` to a version like `~3.8.0-0`. */
|
/** Convert versions like `3.8-dev` to a version like `~3.8.0-0`. */
|
||||||
|
|||||||
+10
-5
@@ -8,6 +8,7 @@ import * as exec from '@actions/exec';
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
IS_LINUX,
|
||||||
IS_WINDOWS,
|
IS_WINDOWS,
|
||||||
WINDOWS_PLATFORMS,
|
WINDOWS_PLATFORMS,
|
||||||
IPyPyManifestRelease,
|
IPyPyManifestRelease,
|
||||||
@@ -246,7 +247,7 @@ export function pypyVersionToSemantic(versionSpec: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function isArchPresentForWindows(item: any, architecture: string) {
|
export function isArchPresentForWindows(item: any, architecture: string) {
|
||||||
architecture = replaceX32toX86(architecture);
|
architecture = pypyArchitecture(architecture);
|
||||||
return item.files.some(
|
return item.files.some(
|
||||||
(file: any) =>
|
(file: any) =>
|
||||||
WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture
|
WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture
|
||||||
@@ -258,13 +259,14 @@ export function isArchPresentForMacOrLinux(
|
|||||||
architecture: string,
|
architecture: string,
|
||||||
platform: string
|
platform: string
|
||||||
) {
|
) {
|
||||||
|
architecture = pypyArchitecture(architecture);
|
||||||
return item.files.some(
|
return item.files.some(
|
||||||
(file: any) => file.arch === architecture && file.platform === platform
|
(file: any) => file.arch === architecture && file.platform === platform
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function findAssetForWindows(releases: any, architecture: string) {
|
export function findAssetForWindows(releases: any, architecture: string) {
|
||||||
architecture = replaceX32toX86(architecture);
|
architecture = pypyArchitecture(architecture);
|
||||||
return releases.files.find(
|
return releases.files.find(
|
||||||
(item: any) =>
|
(item: any) =>
|
||||||
WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture
|
WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture
|
||||||
@@ -276,15 +278,18 @@ export function findAssetForMacOrLinux(
|
|||||||
architecture: string,
|
architecture: string,
|
||||||
platform: string
|
platform: string
|
||||||
) {
|
) {
|
||||||
|
architecture = pypyArchitecture(architecture);
|
||||||
return releases.files.find(
|
return releases.files.find(
|
||||||
(item: any) => item.arch === architecture && item.platform === platform
|
(item: any) => item.arch === architecture && item.platform === platform
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function replaceX32toX86(architecture: string): string {
|
function pypyArchitecture(architecture: string): string {
|
||||||
// convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value.
|
if (IS_WINDOWS && architecture === 'x32') {
|
||||||
if (architecture === 'x32') {
|
// convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value.
|
||||||
architecture = 'x86';
|
architecture = 'x86';
|
||||||
|
} else if (IS_LINUX && architecture === 'arm64') {
|
||||||
|
architecture = 'aarch64';
|
||||||
}
|
}
|
||||||
return architecture;
|
return architecture;
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-4
@@ -5,6 +5,7 @@ import * as exec from '@actions/exec';
|
|||||||
import * as httpm from '@actions/http-client';
|
import * as httpm from '@actions/http-client';
|
||||||
import {ExecOptions} from '@actions/exec/lib/interfaces';
|
import {ExecOptions} from '@actions/exec/lib/interfaces';
|
||||||
import {IS_WINDOWS, IS_LINUX, getDownloadFileName} from './utils';
|
import {IS_WINDOWS, IS_LINUX, getDownloadFileName} from './utils';
|
||||||
|
import {IToolRelease} from '@actions/tool-cache';
|
||||||
|
|
||||||
const TOKEN = core.getInput('token');
|
const TOKEN = core.getInput('token');
|
||||||
const AUTH = !TOKEN ? undefined : `token ${TOKEN}`;
|
const AUTH = !TOKEN ? undefined : `token ${TOKEN}`;
|
||||||
@@ -31,14 +32,41 @@ export async function findReleaseFromManifest(
|
|||||||
|
|
||||||
return foundRelease;
|
return foundRelease;
|
||||||
}
|
}
|
||||||
|
function isIToolRelease(obj: any): obj is IToolRelease {
|
||||||
|
return (
|
||||||
|
typeof obj === 'object' &&
|
||||||
|
obj !== null &&
|
||||||
|
typeof obj.version === 'string' &&
|
||||||
|
typeof obj.stable === 'boolean' &&
|
||||||
|
Array.isArray(obj.files) &&
|
||||||
|
obj.files.every(
|
||||||
|
(file: any) =>
|
||||||
|
typeof file.filename === 'string' &&
|
||||||
|
typeof file.platform === 'string' &&
|
||||||
|
typeof file.arch === 'string' &&
|
||||||
|
typeof file.download_url === 'string'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
export async function getManifest(): Promise<tc.IToolRelease[]> {
|
export async function getManifest(): Promise<tc.IToolRelease[]> {
|
||||||
try {
|
try {
|
||||||
return await getManifestFromRepo();
|
const repoManifest = await getManifestFromRepo();
|
||||||
|
if (
|
||||||
|
Array.isArray(repoManifest) &&
|
||||||
|
repoManifest.length &&
|
||||||
|
repoManifest.every(isIToolRelease)
|
||||||
|
) {
|
||||||
|
return repoManifest;
|
||||||
|
}
|
||||||
|
throw new Error(
|
||||||
|
'The repository manifest is invalid or does not include any valid tool release (IToolRelease) entries.'
|
||||||
|
);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
core.debug('Fetching the manifest via the API failed.');
|
core.debug('Fetching the manifest via the API failed.');
|
||||||
if (err instanceof Error) {
|
if (err instanceof Error) {
|
||||||
core.debug(err.message);
|
core.debug(err.message);
|
||||||
|
} else {
|
||||||
|
core.error('An unexpected error occurred while fetching the manifest.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return await getManifestFromURL();
|
return await getManifestFromURL();
|
||||||
@@ -93,6 +121,9 @@ async function installPython(workingDirectory: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function installCpythonFromRelease(release: tc.IToolRelease) {
|
export async function installCpythonFromRelease(release: tc.IToolRelease) {
|
||||||
|
if (!release.files || release.files.length === 0) {
|
||||||
|
throw new Error('No files found in the release to download.');
|
||||||
|
}
|
||||||
const downloadUrl = release.files[0].download_url;
|
const downloadUrl = release.files[0].download_url;
|
||||||
|
|
||||||
core.info(`Download from "${downloadUrl}"`);
|
core.info(`Download from "${downloadUrl}"`);
|
||||||
@@ -113,9 +144,13 @@ export async function installCpythonFromRelease(release: tc.IToolRelease) {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err instanceof tc.HTTPError) {
|
if (err instanceof tc.HTTPError) {
|
||||||
// Rate limit?
|
// Rate limit?
|
||||||
if (err.httpStatusCode === 403 || err.httpStatusCode === 429) {
|
if (err.httpStatusCode === 403) {
|
||||||
|
core.error(
|
||||||
|
`Received HTTP status code 403. This indicates a permission issue or restricted access.`
|
||||||
|
);
|
||||||
|
} else if (err.httpStatusCode === 429) {
|
||||||
core.info(
|
core.info(
|
||||||
`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`
|
`Received HTTP status code 429. This usually indicates the rate limit has been exceeded`
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
core.info(err.message);
|
core.info(err.message);
|
||||||
|
|||||||
+5
-3
@@ -11,7 +11,7 @@ import {
|
|||||||
logWarning,
|
logWarning,
|
||||||
IS_MAC,
|
IS_MAC,
|
||||||
getVersionInputFromFile,
|
getVersionInputFromFile,
|
||||||
getVersionInputFromPlainFile
|
getVersionsInputFromPlainFile
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
function isPyPyVersion(versionSpec: string) {
|
function isPyPyVersion(versionSpec: string) {
|
||||||
@@ -35,7 +35,7 @@ async function cacheDependencies(cache: string, pythonVersion: string) {
|
|||||||
|
|
||||||
function resolveVersionInputFromDefaultFile(): string[] {
|
function resolveVersionInputFromDefaultFile(): string[] {
|
||||||
const couples: [string, (versionFile: string) => string[]][] = [
|
const couples: [string, (versionFile: string) => string[]][] = [
|
||||||
['.python-version', getVersionInputFromPlainFile]
|
['.python-version', getVersionsInputFromPlainFile]
|
||||||
];
|
];
|
||||||
for (const [versionFile, _fn] of couples) {
|
for (const [versionFile, _fn] of couples) {
|
||||||
logWarning(
|
logWarning(
|
||||||
@@ -92,6 +92,7 @@ async function run() {
|
|||||||
const versions = resolveVersionInput();
|
const versions = resolveVersionInput();
|
||||||
const checkLatest = core.getBooleanInput('check-latest');
|
const checkLatest = core.getBooleanInput('check-latest');
|
||||||
const allowPreReleases = core.getBooleanInput('allow-prereleases');
|
const allowPreReleases = core.getBooleanInput('allow-prereleases');
|
||||||
|
const freethreaded = core.getBooleanInput('freethreaded');
|
||||||
|
|
||||||
if (versions.length) {
|
if (versions.length) {
|
||||||
let pythonVersion = '';
|
let pythonVersion = '';
|
||||||
@@ -132,7 +133,8 @@ async function run() {
|
|||||||
arch,
|
arch,
|
||||||
updateEnvironment,
|
updateEnvironment,
|
||||||
checkLatest,
|
checkLatest,
|
||||||
allowPreReleases
|
allowPreReleases,
|
||||||
|
freethreaded
|
||||||
);
|
);
|
||||||
pythonVersion = installed.version;
|
pythonVersion = installed.version;
|
||||||
core.info(`Successfully set up ${installed.impl} (${pythonVersion})`);
|
core.info(`Successfully set up ${installed.impl} (${pythonVersion})`);
|
||||||
|
|||||||
+98
-9
@@ -228,7 +228,7 @@ function extractValue(obj: any, keys: string[]): string | undefined {
|
|||||||
* If none is present, returns an empty list.
|
* If none is present, returns an empty list.
|
||||||
*/
|
*/
|
||||||
export function getVersionInputFromTomlFile(versionFile: string): string[] {
|
export function getVersionInputFromTomlFile(versionFile: string): string[] {
|
||||||
core.debug(`Trying to resolve version form ${versionFile}`);
|
core.debug(`Trying to resolve version from ${versionFile}`);
|
||||||
|
|
||||||
let pyprojectFile = fs.readFileSync(versionFile, 'utf8');
|
let pyprojectFile = fs.readFileSync(versionFile, 'utf8');
|
||||||
// Normalize the line endings in the pyprojectFile
|
// Normalize the line endings in the pyprojectFile
|
||||||
@@ -269,23 +269,112 @@ export function getVersionInputFromTomlFile(versionFile: string): string[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Python version extracted from a plain text file.
|
* Python versions extracted from a plain text file.
|
||||||
|
* - Resolves multiple versions from multiple lines.
|
||||||
|
* - Handles pyenv-virtualenv pointers (e.g. `3.10/envs/virtualenv`).
|
||||||
|
* - Ignores empty lines and lines starting with `#`
|
||||||
|
* - Trims whitespace.
|
||||||
*/
|
*/
|
||||||
export function getVersionInputFromPlainFile(versionFile: string): string[] {
|
export function getVersionsInputFromPlainFile(versionFile: string): string[] {
|
||||||
core.debug(`Trying to resolve version form ${versionFile}`);
|
core.debug(`Trying to resolve versions from ${versionFile}`);
|
||||||
const version = fs.readFileSync(versionFile, 'utf8').trim();
|
const content = fs.readFileSync(versionFile, 'utf8').trim();
|
||||||
core.info(`Resolved ${versionFile} as ${version}`);
|
const lines = content.split(/\r\n|\r|\n/);
|
||||||
return [version];
|
const versions = lines
|
||||||
|
.map(line => {
|
||||||
|
if (line.startsWith('#') || line.trim() === '') {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
let version: string = line.trim();
|
||||||
|
version = version.split('/')[0];
|
||||||
|
return version;
|
||||||
|
})
|
||||||
|
.filter(version => version !== undefined) as string[];
|
||||||
|
core.info(`Resolved ${versionFile} as ${versions.join(', ')}`);
|
||||||
|
return versions;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Python version extracted from a plain or TOML file.
|
* Python version extracted from a .tool-versions file.
|
||||||
|
*/
|
||||||
|
export function getVersionInputFromToolVersions(versionFile: string): string[] {
|
||||||
|
if (!fs.existsSync(versionFile)) {
|
||||||
|
core.warning(`File ${versionFile} does not exist.`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const fileContents = fs.readFileSync(versionFile, 'utf8');
|
||||||
|
const lines = fileContents.split('\n');
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
// Skip commented lines
|
||||||
|
if (line.trim().startsWith('#')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const match = line.match(/^\s*python\s*v?\s*(?<version>[^\s]+)\s*$/);
|
||||||
|
if (match) {
|
||||||
|
return [match.groups?.version.trim() || ''];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
core.warning(`No Python version found in ${versionFile}`);
|
||||||
|
|
||||||
|
return [];
|
||||||
|
} catch (error) {
|
||||||
|
core.error(`Error reading ${versionFile}: ${(error as Error).message}`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Python version extracted from the Pipfile file.
|
||||||
|
*/
|
||||||
|
export function getVersionInputFromPipfileFile(versionFile: string): string[] {
|
||||||
|
core.debug(`Trying to resolve version from ${versionFile}`);
|
||||||
|
|
||||||
|
if (!fs.existsSync(versionFile)) {
|
||||||
|
core.warning(`File ${versionFile} does not exist.`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
let pipfileFile = fs.readFileSync(versionFile, 'utf8');
|
||||||
|
// Normalize the line endings in the pipfileFile
|
||||||
|
pipfileFile = pipfileFile.replace(/\r\n/g, '\n');
|
||||||
|
|
||||||
|
const pipfileConfig = toml.parse(pipfileFile);
|
||||||
|
const keys = ['requires'];
|
||||||
|
|
||||||
|
if (!('requires' in pipfileConfig)) {
|
||||||
|
core.warning(`No Python version found in ${versionFile}`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
if ('python_full_version' in (pipfileConfig['requires'] as toml.JsonMap)) {
|
||||||
|
// specifies a full python version
|
||||||
|
keys.push('python_full_version');
|
||||||
|
} else {
|
||||||
|
keys.push('python_version');
|
||||||
|
}
|
||||||
|
const versions = [];
|
||||||
|
const version = extractValue(pipfileConfig, keys);
|
||||||
|
if (version !== undefined) {
|
||||||
|
versions.push(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info(`Extracted ${versions} from ${versionFile}`);
|
||||||
|
return versions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Python version extracted from a plain, .tool-versions, Pipfile or TOML file.
|
||||||
*/
|
*/
|
||||||
export function getVersionInputFromFile(versionFile: string): string[] {
|
export function getVersionInputFromFile(versionFile: string): string[] {
|
||||||
if (versionFile.endsWith('.toml')) {
|
if (versionFile.endsWith('.toml')) {
|
||||||
return getVersionInputFromTomlFile(versionFile);
|
return getVersionInputFromTomlFile(versionFile);
|
||||||
|
} else if (versionFile.match('.tool-versions')) {
|
||||||
|
return getVersionInputFromToolVersions(versionFile);
|
||||||
|
} else if (versionFile.match('Pipfile')) {
|
||||||
|
return getVersionInputFromPipfileFile(versionFile);
|
||||||
} else {
|
} else {
|
||||||
return getVersionInputFromPlainFile(versionFile);
|
return getVersionsInputFromPlainFile(versionFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user