From 0130854fbce1e6e72eb4288a218c75f33c3401c3 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Thu, 15 Dec 2022 14:34:43 +0100 Subject: [PATCH] fixing comments --- .github/workflows/test-python.yml | 13 ++++--- dist/setup/index.js | 31 +++++++---------- docs/advanced-usage.md | 57 +++++++++++++++++++++++++++++++ src/setup-python.ts | 33 +++++++----------- 4 files changed, 91 insertions(+), 43 deletions(-) diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index c1800c2b..7419ba06 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -196,7 +196,8 @@ jobs: } $pythonVersion shell: pwsh - setup-python-multiple-versions: + + setup-python-multiple-python-versions: runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -207,13 +208,17 @@ jobs: - name: Setup Python and check latest uses: ./ with: - python-version: ${{ matrix.python-version }} + python-version: | + 3.7 + 3.8 + 3.9 + 3.10 check-latest: true - name: Validate version run: | $pythonVersion = (python --version) - if ("$pythonVersion" -NotMatch "${{ matrix.python-version }}"){ - Write-Host "The current version is $pythonVersion; expected version is ${{ matrix.python-version }}" + if ("$pythonVersion" -NotMatch "3.10"){ + Write-Host "The current version is $pythonVersion; expected version is 3.10" exit 1 } $pythonVersion diff --git a/dist/setup/index.js b/dist/setup/index.js index 128dbac0..75b57a00 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -66867,31 +66867,31 @@ function cacheDependencies(cache, pythonVersion) { }); } function resolveVersionInput() { - let version = core.getMultilineInput('python-version'); + let versions = core.getMultilineInput('python-version'); let versionFile = core.getInput('python-version-file'); - if (version.length && versionFile) { + if (versions.length && versionFile) { core.warning('Both python-version and python-version-file inputs are specified, only python-version will be used.'); } - if (version.length) { - return version; + if (versions.length) { + return versions; } if (versionFile) { if (!fs_1.default.existsSync(versionFile)) { throw new Error(`The specified python version file at: ${versionFile} doesn't exist.`); } - version = fs_1.default.readFileSync(versionFile, 'utf8'); + const version = fs_1.default.readFileSync(versionFile, 'utf8'); core.info(`Resolved ${versionFile} as ${version}`); - return version; + return [version]; } utils_1.logWarning("Neither 'python-version' nor 'python-version-file' inputs were supplied. Attempting to find '.python-version' file."); versionFile = '.python-version'; if (fs_1.default.existsSync(versionFile)) { - version = fs_1.default.readFileSync(versionFile, 'utf8'); + const version = fs_1.default.readFileSync(versionFile, 'utf8'); core.info(`Resolved ${versionFile} as ${version}`); - return version; + return [version]; } utils_1.logWarning(`${versionFile} doesn't exist.`); - return version; + return versions; } function run() { var _a; @@ -66904,20 +66904,13 @@ function run() { } core.debug(`Python is expected to be installed into ${process.env['RUNNER_TOOL_CACHE']}`); try { - let versions; - const resolvedVersionInput = resolveVersionInput(); + const versions = resolveVersionInput(); const checkLatest = core.getBooleanInput('check-latest'); - if (Array.isArray(resolvedVersionInput)) { - versions = resolvedVersionInput; - } - else { - versions = [resolvedVersionInput]; - } if (versions.length) { let pythonVersion = ''; + const arch = core.getInput('architecture') || os.arch(); + const updateEnvironment = core.getBooleanInput('update-environment'); for (const version of versions) { - const arch = core.getInput('architecture') || os.arch(); - const updateEnvironment = core.getBooleanInput('update-environment'); if (isPyPyVersion(version)) { const installed = yield finderPyPy.findPyPyVersion(version, arch, updateEnvironment, checkLatest); pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 643e73dd..fa022d93 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -2,6 +2,7 @@ - [Using the python-version input](advanced-usage.md#using-the-python-version-input) - [Specifying a Python version](advanced-usage.md#specifying-a-python-version) - [Specifying a PyPy version](advanced-usage.md#specifying-a-pypy-version) + - [Specifying multiple Python and PyPy versions](advanced-usage.md#specifying-multiple-python/pypy-version) - [Matrix Testing](advanced-usage.md#matrix-testing) - [Using the python-version-file input](advanced-usage.md#using-the-python-version-file-input) - [Check latest version](advanced-usage.md#check-latest-version) @@ -132,6 +133,62 @@ jobs: ``` More details on PyPy syntax can be found in the [Available versions of PyPy](#pypy) section. +### Specifying multiple Python/PyPy version +The python-version input can get multiple python/pypy versions. The last specified version will be used as a default one. + +Download and set up multiple Python versions: + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: | + 3.8 + 3.9 + 3.10 + - run: python my_script.py +``` + +Download and set up multiple PyPy versions: + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: | + pypy-3.7-v7.3.x + pypy3.9-nightly + pypy3.8 + - run: python my_script.py +``` + +Download and set up multiple Python/PyPy versions: + +```yaml +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: | + 3.8 + 3.9 + pypy3.9-nightly + pypy3.8 + 3.10 + - run: python my_script.py +``` + ### Matrix Testing Using `setup-python` it's possible to use [matrix syntax](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix) to install several versions of Python or PyPy: diff --git a/src/setup-python.ts b/src/setup-python.ts index 0f3af6de..e9b22d0b 100644 --- a/src/setup-python.ts +++ b/src/setup-python.ts @@ -22,18 +22,18 @@ async function cacheDependencies(cache: string, pythonVersion: string) { await cacheDistributor.restoreCache(); } -function resolveVersionInput(): string | string[] { - let version: string | string[] = core.getMultilineInput('python-version'); +function resolveVersionInput() { + let versions = core.getMultilineInput('python-version'); let versionFile = core.getInput('python-version-file'); - if (version.length && versionFile) { + if (versions.length && versionFile) { core.warning( 'Both python-version and python-version-file inputs are specified, only python-version will be used.' ); } - if (version.length) { - return version; + if (versions.length) { + return versions; } if (versionFile) { @@ -42,9 +42,9 @@ function resolveVersionInput(): string | string[] { `The specified python version file at: ${versionFile} doesn't exist.` ); } - version = fs.readFileSync(versionFile, 'utf8'); + const version = fs.readFileSync(versionFile, 'utf8'); core.info(`Resolved ${versionFile} as ${version}`); - return version; + return [version]; } logWarning( @@ -52,14 +52,14 @@ function resolveVersionInput(): string | string[] { ); versionFile = '.python-version'; if (fs.existsSync(versionFile)) { - version = fs.readFileSync(versionFile, 'utf8'); + const version = fs.readFileSync(versionFile, 'utf8'); core.info(`Resolved ${versionFile} as ${version}`); - return version; + return [version]; } logWarning(`${versionFile} doesn't exist.`); - return version; + return versions; } async function run() { @@ -75,21 +75,14 @@ async function run() { `Python is expected to be installed into ${process.env['RUNNER_TOOL_CACHE']}` ); try { - let versions: string[]; - const resolvedVersionInput = resolveVersionInput(); + const versions = resolveVersionInput(); const checkLatest = core.getBooleanInput('check-latest'); - if (Array.isArray(resolvedVersionInput)) { - versions = resolvedVersionInput as string[]; - } else { - versions = [resolvedVersionInput as string]; - } - if (versions.length) { let pythonVersion = ''; + const arch: string = core.getInput('architecture') || os.arch(); + const updateEnvironment = core.getBooleanInput('update-environment'); for (const version of versions) { - const arch: string = core.getInput('architecture') || os.arch(); - const updateEnvironment = core.getBooleanInput('update-environment'); if (isPyPyVersion(version)) { const installed = await finderPyPy.findPyPyVersion( version,