From d59aa9efa47ecf1391bdfaf1204f100a8c5afb79 Mon Sep 17 00:00:00 2001 From: Victor Westerhuis Date: Tue, 11 Apr 2023 03:50:38 +0200 Subject: [PATCH] Multiple Python versions from version-file in one environment This makes the change from #567 also available for users of .python-version. --- .github/workflows/test-python.yml | 26 ++++++++++++++++++++++++++ dist/setup/index.js | 17 +++++++++++------ src/setup-python.ts | 18 ++++++++++++------ 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 6dbd5a9..3bb2a94 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -271,3 +271,29 @@ jobs: } $pythonVersion shell: pwsh + + setup-python-multiple-python-versions-from-file: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + steps: + - uses: actions/checkout@v3 + - name: Build multi-version file + run: printf '%s\n' 3.7 3.8 3.9 3.10 > .python-version + shell: bash + - name: Setup Python and check latest + uses: ./ + with: + python-version-file: '.python-version' + check-latest: true + - name: Validate version + run: | + $pythonVersion = (python --version) + if ("$pythonVersion" -NotMatch "3.10"){ + Write-Host "The current version is $pythonVersion; expected version is 3.10" + exit 1 + } + $pythonVersion + shell: pwsh diff --git a/dist/setup/index.js b/dist/setup/index.js index aaeeac4..fd00e44 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -67984,6 +67984,15 @@ function cacheDependencies(cache, pythonVersion) { yield cacheDistributor.restoreCache(); }); } +function readVersionFile(versionFile) { + const data = fs_1.default.readFileSync(versionFile, 'utf8'); + const versions = data + .split('\n') + .map(input => input.trim()) + .filter(x => x !== ''); + core.info(`Resolved ${versionFile} as ${versions.join(', ')}`); + return versions; +} function resolveVersionInput() { const versions = core.getMultilineInput('python-version'); let versionFile = core.getInput('python-version-file'); @@ -67997,16 +68006,12 @@ function resolveVersionInput() { if (!fs_1.default.existsSync(versionFile)) { throw new Error(`The specified python version file at: ${versionFile} doesn't exist.`); } - const version = fs_1.default.readFileSync(versionFile, 'utf8'); - core.info(`Resolved ${versionFile} as ${version}`); - return [version]; + return readVersionFile(versionFile); } 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)) { - const version = fs_1.default.readFileSync(versionFile, 'utf8'); - core.info(`Resolved ${versionFile} as ${version}`); - return [version]; + return readVersionFile(versionFile); } utils_1.logWarning(`${versionFile} doesn't exist.`); return versions; diff --git a/src/setup-python.ts b/src/setup-python.ts index 69ea9d3..99e22f9 100644 --- a/src/setup-python.ts +++ b/src/setup-python.ts @@ -22,6 +22,16 @@ async function cacheDependencies(cache: string, pythonVersion: string) { await cacheDistributor.restoreCache(); } +function readVersionFile(versionFile: string) { + const data = fs.readFileSync(versionFile, 'utf8'); + const versions = data + .split('\n') + .map(input => input.trim()) + .filter(x => x !== ''); + core.info(`Resolved ${versionFile} as ${versions.join(', ')}`); + return versions; +} + function resolveVersionInput() { const versions = core.getMultilineInput('python-version'); let versionFile = core.getInput('python-version-file'); @@ -42,9 +52,7 @@ function resolveVersionInput() { `The specified python version file at: ${versionFile} doesn't exist.` ); } - const version = fs.readFileSync(versionFile, 'utf8'); - core.info(`Resolved ${versionFile} as ${version}`); - return [version]; + return readVersionFile(versionFile); } logWarning( @@ -52,9 +60,7 @@ function resolveVersionInput() { ); versionFile = '.python-version'; if (fs.existsSync(versionFile)) { - const version = fs.readFileSync(versionFile, 'utf8'); - core.info(`Resolved ${versionFile} as ${version}`); - return [version]; + return readVersionFile(versionFile); } logWarning(`${versionFile} doesn't exist.`);