8000 Adding support for more PyPy versions and installing them on-flight (… · wookie184/setup-python@8c5ea63 · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Feb 16, 2022. It is now read-only.

Commit 8c5ea63

Browse files
dmitry-shibanovMaxim Lobanov
andauthored
Adding support for more PyPy versions and installing them on-flight (actions#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

File tree

14 files changed

+1896
-34
lines changed
  • 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)
    0