From f72db171abf897c3f4cea0427d5af95fa57fb1bc Mon Sep 17 00:00:00 2001 From: Ivan <98037481+IvanZosimov@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:57:23 +0200 Subject: [PATCH 1/3] Made env.var pythonLocation consistent for Python and PyPy (#418) * Change find-pypy.ts to redefine pythonLocaction environment variable * Change README.md in order to add sentence about pythonLocation envvar * Change sentence about pythonLocation envvar in README.md * Rephrase the definition of pythonLocation env.var --- README.md | 2 ++ dist/setup/index.js | 2 +- src/find-pypy.ts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7508d353..56103e54 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,8 @@ jobs: - run: pipx run --python '${{ steps.cp310.outputs.python-path }}' nox --version ``` +>The environment variable `pythonLocation` also becomes available after Python or PyPy installation. It contains the absolute path to the folder where the desired version of Python or PyPy is installed. + # Getting started with Python + Actions 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). diff --git a/dist/setup/index.js b/dist/setup/index.js index 9ab89d40..7e267339 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -63993,7 +63993,7 @@ function findPyPyVersion(versionSpec, architecture) { const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); const pythonLocation = pypyInstall.getPyPyBinaryPath(installDir); - core.exportVariable('pythonLocation', pythonLocation); + core.exportVariable('pythonLocation', installDir); core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); core.addPath(pythonLocation); core.addPath(_binDir); diff --git a/src/find-pypy.ts b/src/find-pypy.ts index 1008ed6e..630d685c 100644 --- a/src/find-pypy.ts +++ b/src/find-pypy.ts @@ -54,7 +54,7 @@ export async function findPyPyVersion( `python${binaryExtension}` ); const pythonLocation = pypyInstall.getPyPyBinaryPath(installDir); - core.exportVariable('pythonLocation', pythonLocation); + core.exportVariable('pythonLocation', installDir); core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); core.addPath(pythonLocation); core.addPath(_binDir); From d09bd5e6005b175076f227b13d9730d56e9dcfcb Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Wed, 8 Jun 2022 14:58:05 +0200 Subject: [PATCH 2/3] fix: 3.x-dev can install a 3.y version (#417) * fix: 3.x-dev can install a 3.y version * Update README section for `-dev` --- .github/workflows/test-python.yml | 29 ++++++++++++++++++++++++++++- README.md | 2 +- dist/setup/index.js | 11 +++-------- src/find-python.ts | 10 +++------- 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 02835a96..e0d9a47d 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -1,5 +1,5 @@ name: Validate Python e2e -on: +on: push: branches: - main @@ -120,3 +120,30 @@ jobs: - name: Run simple code run: python -c 'import math; print(math.factorial(5))' + setup-dev-version: + name: Setup 3.9-dev ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: setup-python 3.9-dev + id: setup-python + uses: ./ + with: + python-version: '3.9-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.9.') }} + shell: bash + + - name: Run simple code + run: python -c 'import math; print(math.factorial(5))' diff --git a/README.md b/README.md index 56103e54..dbc7d438 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ Check out our detailed guide on using [Python with GitHub Actions](https://help. - For every minor version of Python, expect only the latest patch to be preinstalled. - If `3.8.1` is installed for example, and `3.8.2` is released, expect `3.8.1` to be removed and replaced by `3.8.2` in the tools cache. - 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. - - Use `-dev` instead of a patch number (e.g., `3.11-dev`) to install the latest release of a minor version, *alpha and beta releases included*. + - Use `-dev` instead of a patch number (e.g., `3.11-dev`) to install the latest patch version release for a given minor version, *alpha and beta releases included*. - Downloadable Python versions from GitHub Releases ([actions/python-versions](https://github.com/actions/python-versions/releases)). - All available versions are listed in the [version-manifest.json](https://github.com/actions/python-versions/blob/main/versions-manifest.json) file. - If there is a specific version of Python that is not available, you can open an issue here diff --git a/dist/setup/index.js b/dist/setup/index.js index 7e267339..0d98b66f 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -64183,15 +64183,10 @@ function useCpythonVersion(version, architecture) { }); } exports.useCpythonVersion = useCpythonVersion; -/** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ +/** Convert versions like `3.8-dev` to a version like `~3.8.0-0`. */ function desugarDevVersion(versionSpec) { - if (versionSpec.endsWith('-dev')) { - const versionRoot = versionSpec.slice(0, -'-dev'.length); - return `>= ${versionRoot}.0-a0`; - } - else { - return versionSpec; - } + const devVersion = /^(\d+)\.(\d+)-dev$/; + return versionSpec.replace(devVersion, '~$1.$2.0-0'); } /** Extracts python version from install path from hosted tool cache as described in README.md */ function versionFromPath(installDir) { diff --git a/src/find-python.ts b/src/find-python.ts index 0a3dde13..f1dad3a9 100644 --- a/src/find-python.ts +++ b/src/find-python.ts @@ -117,14 +117,10 @@ export async function useCpythonVersion( return {impl: 'CPython', version: installed}; } -/** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ +/** Convert versions like `3.8-dev` to a version like `~3.8.0-0`. */ function desugarDevVersion(versionSpec: string) { - if (versionSpec.endsWith('-dev')) { - const versionRoot = versionSpec.slice(0, -'-dev'.length); - return `>= ${versionRoot}.0-a0`; - } else { - return versionSpec; - } + const devVersion = /^(\d+)\.(\d+)-dev$/; + return versionSpec.replace(devVersion, '~$1.$2.0-0'); } /** Extracts python version from install path from hosted tool cache as described in README.md */ From 775367df99e790d68426e89b22fb536e5c0fa248 Mon Sep 17 00:00:00 2001 From: Vladimir Safonkin Date: Thu, 9 Jun 2022 09:54:52 +0200 Subject: [PATCH 3/3] Update docs to v4 version --- README.md | 39 +++++++++++++++++--------- docs/adrs/0000-caching-dependencies.md | 16 +++++------ 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index dbc7d438..1e556d75 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# setup-python V3 +# setup-python V4

GitHub Actions status @@ -20,6 +20,7 @@ This action sets up a Python environment for use in actions by: - Support for pre-release versions of Python. - Support for installing any version of PyPy on-flight - Support for built-in caching of pip, pipenv and poetry dependencies +- Support for `.python-version` file # Usage @@ -29,13 +30,23 @@ Basic: ```yaml steps: - uses: actions/checkout@v3 -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified - run: python my_script.py ``` +Read Python version from file: +```yaml +steps: +- uses: actions/checkout@v3 +- uses: actions/setup-python@v4 + with: + python-version-file: '.python-version' # Read python version from a file +- run: python my_script.py +``` + Matrix Testing: ```yaml jobs: @@ -48,7 +59,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} architecture: x64 @@ -72,7 +83,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Display Python version @@ -90,7 +101,7 @@ jobs: python-version: ['3.7.4', '3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - run: python my_script.py @@ -100,7 +111,7 @@ Download and set up an accurate pre-release version of Python: ```yaml steps: - uses: actions/checkout@v3 -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.11.0-alpha.1' - run: python my_script.py @@ -110,7 +121,7 @@ Download and set up the latest available version of Python (includes both pre-re ```yaml steps: - uses: actions/checkout@v3 -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.11.0-alpha - 3.11.0' # SemVer's version range syntax - run: python my_script.py @@ -130,7 +141,7 @@ jobs: - 'pypy3.8' # the latest available version of PyPy that supports Python 3.8 steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - run: python my_script.py @@ -144,7 +155,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 id: cp310 with: python-version: "3.10" @@ -245,7 +256,7 @@ The requirements file format allows to specify dependency versions using logical ```yaml steps: - uses: actions/checkout@v3 -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.9' cache: 'pip' @@ -258,7 +269,7 @@ steps: - uses: actions/checkout@v3 - name: Install pipenv run: pipx install pipenv -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.9' cache: 'pipenv' @@ -271,7 +282,7 @@ steps: - uses: actions/checkout@v3 - name: Install poetry run: pipx install poetry -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.9' cache: 'poetry' @@ -283,7 +294,7 @@ steps: ```yaml steps: - uses: actions/checkout@v3 -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.9' cache: 'pip' @@ -297,7 +308,7 @@ steps: - uses: actions/checkout@v3 - name: Install pipenv run: pipx install pipenv -- uses: actions/setup-python@v3 +- uses: actions/setup-python@v4 with: python-version: '3.9' cache: 'pipenv' diff --git a/docs/adrs/0000-caching-dependencies.md b/docs/adrs/0000-caching-dependencies.md index 721ea8ed..8a172a07 100644 --- a/docs/adrs/0000-caching-dependencies.md +++ b/docs/adrs/0000-caching-dependencies.md @@ -45,8 +45,8 @@ We won't pursue the goal to provide wide customization of caching in the scope o ``` steps: -- uses: actions/checkout@v2 -- uses: actions/setup-python@v2 +- uses: actions/checkout@v3 +- uses: actions/setup-python@v4 with: python-version: 3.9 cache: pip @@ -56,8 +56,8 @@ steps: ``` steps: -- uses: actions/checkout@v2 -- uses: actions/setup-python@v2 +- uses: actions/checkout@v3 +- uses: actions/setup-python@v4 with: python-version: 3.9 cache: pipenv @@ -66,8 +66,8 @@ steps: ``` steps: -- uses: actions/checkout@v2 -- uses: actions/setup-python@v2 +- uses: actions/checkout@v3 +- uses: actions/setup-python@v4 with: python-version: 3.9 cache: pip @@ -80,8 +80,8 @@ steps: ``` steps: -- uses: actions/checkout@v2 -- uses: actions/setup-python@v2 +- uses: actions/checkout@v3 +- uses: actions/setup-python@v4 with: python-version: 3.9 cache: pip