Skip to content

Commit 8c5ea63

Browse files
dmitry-shibanovMaxim Lobanov
and
Maxim Lobanov
authored
Adding support for more PyPy versions and installing them on-flight (#168)
* add support to install pypy * resolved comments, update readme, add e2e tests. * resolve throw error * Add pypy unit tests to cover code * add tests * Update test-pypy.yml * Update test-python.yml * Update test-python.yml * Update README.md * fixing tests * change order Co-authored-by: Maxim Lobanov <v-malob@microsoft.com> * add pypy tests and fix issue with pypy-3-nightly Co-authored-by: Maxim Lobanov <v-malob@microsoft.com>
1 parent 2831efe commit 8c5ea63

14 files changed

+1896
-34
lines changed

.github/workflows/test-pypy.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Validate PyPy e2e
2+
on:
3+
push:
4+
branches:
5+
- main
6+
paths-ignore:
7+
- '**.md'
8+
pull_request:
9+
paths-ignore:
10+
- '**.md'
11+
schedule:
12+
- cron: 30 3 * * *
13+
14+
jobs:
15+
setup-pypy:
16+
name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }}
17+
runs-on: ${{ matrix.os }}
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04]
22+
pypy:
23+
- 'pypy-2.7'
24+
- 'pypy-3.6'
25+
- 'pypy-3.7'
26+
- 'pypy-2.7-v7.3.2'
27+
- 'pypy-3.6-v7.3.2'
28+
- 'pypy-3.7-v7.3.2'
29+
- 'pypy-3.6-v7.3.x'
30+
- 'pypy-3.7-v7.x'
31+
- 'pypy-3.6-v7.3.3rc1'
32+
- 'pypy-3.7-nightly'
33+
34+
steps:
35+
- name: Checkout
36+
uses: actions/checkout@v2
37+
38+
- name: setup-python ${{ matrix.pypy }}
39+
uses: ./
40+
with:
41+
python-version: ${{ matrix.pypy }}
42+
43+
- name: PyPy and Python version
44+
run: python --version
45+
46+
- name: Run simple code
47+
run: python -c 'import math; print(math.factorial(5))'

.github/workflows/test.yml renamed to .github/workflows/test-python.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Validate 'setup-python'
1+
name: Validate Python e2e
22
on:
33
push:
44
branches:
@@ -9,7 +9,7 @@ on:
99
paths-ignore:
1010
- '**.md'
1111
schedule:
12-
- cron: 0 0 * * *
12+
- cron: 30 3 * * *
1313

1414
jobs:
1515
default-version:
@@ -18,7 +18,7 @@ jobs:
1818
strategy:
1919
fail-fast: false
2020
matrix:
21-
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04]
21+
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04, ubuntu-20.04]
2222
steps:
2323
- name: Checkout
2424
uses: actions/checkout@v2
@@ -38,7 +38,7 @@ jobs:
3838
strategy:
3939
fail-fast: false
4040
matrix:
41-
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04]
41+
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04, ubuntu-20.04]
4242
python: [3.5.4, 3.6.7, 3.7.5, 3.8.1]
4343
steps:
4444
- name: Checkout
@@ -68,7 +68,7 @@ jobs:
6868
strategy:
6969
fail-fast: false
7070
matrix:
71-
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04]
71+
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04, ubuntu-20.04]
7272
steps:
7373
- name: Checkout
7474
uses: actions/checkout@v2
@@ -91,13 +91,13 @@ jobs:
9191
- name: Run simple code
9292
run: python -c 'import math; print(math.factorial(5))'
9393

94-
setup-pypy:
94+
setup-pypy-legacy:
9595
name: Setup PyPy ${{ matrix.os }}
9696
runs-on: ${{ matrix.os }}
9797
strategy:
9898
fail-fast: false
9999
matrix:
100-
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04]
100+
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04, ubuntu-20.04]
101101
steps:
102102
- name: Checkout
103103
uses: actions/checkout@v2

README.md

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ This action sets up a Python environment for use in actions by:
1717
- Allows for pinning to a specific patch version of Python without the worry of it ever being removed or changed.
1818
- Automatic setup and download of Python packages if using a self-hosted runner.
1919
- Support for pre-release versions of Python.
20+
- Support for installing any version of PyPy on-flight
2021

2122
# Usage
2223

@@ -40,7 +41,7 @@ jobs:
4041
runs-on: ubuntu-latest
4142
strategy:
4243
matrix:
43-
python-version: [ '2.x', '3.x', 'pypy2', 'pypy3' ]
44+
python-version: [ '2.x', '3.x', 'pypy-2.7', 'pypy-3.6', 'pypy-3.7' ]
4445
name: Python ${{ matrix.python-version }} sample
4546
steps:
4647
- uses: actions/checkout@v2
@@ -60,7 +61,7 @@ jobs:
6061
strategy:
6162
matrix:
6263
os: [ubuntu-latest, macos-latest, windows-latest]
63-
python-version: [2.7, 3.6, 3.7, 3.8, pypy2, pypy3]
64+
python-version: [2.7, 3.6, 3.7, 3.8, pypy-2.7, pypy-3.6]
6465
exclude:
6566
- os: macos-latest
6667
python-version: 3.8
@@ -91,7 +92,6 @@ jobs:
9192
with:
9293
python-version: ${{ matrix.python-version }}
9394
- run: python my_script.py
94-
9595
```
9696
9797
Download and set up an accurate pre-release version of Python:
@@ -114,6 +114,27 @@ steps:
114114
- run: python my_script.py
115115
```
116116
117+
Download and set up PyPy:
118+
119+
```yaml
120+
jobs:
121+
build:
122+
runs-on: ubuntu-latest
123+
strategy:
124+
matrix:
125+
python-version:
126+
- pypy-3.6 # the latest available version of PyPy that supports Python 3.6
127+
- pypy-3.7 # the latest available version of PyPy that supports Python 3.7
128+
- pypy-3.7-v7.3.3 # Python 3.7 and PyPy 7.3.3
129+
steps:
130+
- uses: actions/checkout@v2
131+
- uses: actions/setup-python@v2
132+
with:
133+
python-version: ${{ matrix.python-version }}
134+
- run: python my_script.py
135+
```
136+
More details on PyPy syntax and examples of using preview / nightly versions of PyPy can be found in the [Available versions of PyPy](#available-versions-of-pypy) section.
137+
117138
# Getting started with Python + Actions
118139
119140
Check out our detailed guide on using [Python with GitHub Actions](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-python-with-github-actions).
@@ -129,7 +150,21 @@ Check out our detailed guide on using [Python with GitHub Actions](https://help.
129150
- If the exact patch version doesn't matter to you, specifying just the major and minor version will get you the latest preinstalled patch version. In the previous example, the version spec `3.8` will use the `3.8.2` Python version found in the cache.
130151
- Downloadable Python versions from GitHub Releases ([actions/python-versions](https://github.com/actions/python-versions/releases)).
131152
- All available versions are listed in the [version-manifest.json](https://github.com/actions/python-versions/blob/main/versions-manifest.json) file.
132-
- If there is a specific version of Python that is not available, you can open an issue here.
153+
- If there is a specific version of Python that is not available, you can open an issue here
154+
155+
# Available versions of PyPy
156+
157+
`setup-python` is able to configure PyPy from two sources:
158+
159+
- Preinstalled versions of PyPy in the tools cache on GitHub-hosted runners
160+
- For detailed information regarding the available versions of PyPy that are installed see [Supported software](https://docs.github.com/en/actions/reference/specifications-for-github-hosted-runners#supported-software).
161+
- For the latest PyPy release, all versions of Python are cached.
162+
- Cache is updated with a 1-2 week delay. If you specify the PyPy version as `pypy-3.6`, the cached version will be used although a newer version is available. If you need to start using the recently released version right after release, you should specify the exact PyPy version using `pypy-3.6-v7.3.3`.
163+
164+
- Downloadable PyPy versions from the [official PyPy site](https://downloads.python.org/pypy/).
165+
- All available versions that we can download are listed in [versions.json](https://downloads.python.org/pypy/versions.json) file.
166+
- PyPy < 7.3.3 are not available to install on-flight.
167+
- If some versions are not available, you can open an issue in https://foss.heptapod.net/pypy/pypy/
133168

134169
# Hosted Tool Cache
135170

@@ -155,6 +190,20 @@ You should specify only a major and minor version if you are okay with the most
155190
- There will be a single patch version already installed on each runner for every minor version of Python that is supported.
156191
- The patch version that will be preinstalled, will generally be the latest and every time there is a new patch released, the older version that is preinstalled will be replaced.
157192
- Using the most recent patch version will result in a very quick setup since no downloads will be required since a locally installed version Python on the runner will be used.
193+
194+
# Specifying a PyPy version
195+
The version of PyPy should be specified in the format `pypy-<python_version>[-v<pypy_version>]`.
196+
The `<pypy_version>` parameter is optional and can be skipped. The latest version will be used in this case.
197+
198+
```
199+
pypy-3.6 # the latest available version of PyPy that supports Python 3.6
200+
pypy-3.7 # the latest available version of PyPy that supports Python 3.7
201+
pypy-2.7 # the latest available version of PyPy that supports Python 2.7
202+
pypy-3.7-v7.3.3 # Python 3.7 and PyPy 7.3.3
203+
pypy-3.7-v7.x # Python 3.7 and the latest available PyPy 7.x
204+
pypy-3.7-v7.3.3rc1 # Python 3.7 and preview version of PyPy
205+
pypy-3.7-nightly # Python 3.7 and nightly PyPy
206+
```
158207
159208
# Using `setup-python` with a self hosted runner
160209

0 commit comments

Comments
 (0)