From bdd8c56024d7f764c68322c7cef963453dc71a29 Mon Sep 17 00:00:00 2001 From: Sam Gross Date: Mon, 10 Feb 2025 18:13:21 +0000 Subject: [PATCH] Remove support for syntax like '3.14.0a1' --- __tests__/find-python.test.ts | 17 +++-------------- dist/setup/index.js | 23 ++++------------------- docs/advanced-usage.md | 2 +- src/find-python.ts | 23 ++++------------------- 4 files changed, 12 insertions(+), 53 deletions(-) diff --git a/__tests__/find-python.test.ts b/__tests__/find-python.test.ts index 956c5cbd..c7b827c4 100644 --- a/__tests__/find-python.test.ts +++ b/__tests__/find-python.test.ts @@ -7,10 +7,7 @@ describe('desugarVersion', () => { ['3.13.1', {version: '3.13.1', freethreaded: false}], ['3.13.1t', {version: '3.13.1', freethreaded: true}], ['3.14-dev', {version: '~3.14.0-0', freethreaded: false}], - ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}], - ['3.14.0a4', {version: '3.14.0a4', freethreaded: false}], - ['3.14.0rc1', {version: '3.14.0rc1', freethreaded: false}], - ['3.14.0rc1t', {version: '3.14.0rc1', freethreaded: true}] + ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}] ])('%s -> %s', (input, expected) => { expect(desugarVersion(input)).toEqual(expected); }); @@ -24,11 +21,7 @@ describe('pythonVersions', () => { ['3.13.1', {version: '3.13.1', freethreaded: false}], ['3.13.1t', {version: '3.13.1', freethreaded: true}], ['3.14-dev', {version: '~3.14.0-0', freethreaded: false}], - ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}], - ['3.14.0a4', {version: '3.14.0-alpha.4', freethreaded: false}], - ['3.14.0a4t', {version: '3.14.0-alpha.4', freethreaded: true}], - ['3.14.0rc1', {version: '3.14.0-rc.1', freethreaded: false}], - ['3.14.0rc1t', {version: '3.14.0-rc.1', freethreaded: true}] + ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}] ])('%s -> %s', (input, expected) => { const {version, freethreaded} = desugarVersion(input); const semanticVersionSpec = pythonVersionToSemantic(version, false); @@ -41,11 +34,7 @@ describe('pythonVersions', () => { ['3.13.1', {version: '3.13.1', freethreaded: false}], ['3.13.1t', {version: '3.13.1', freethreaded: true}], ['3.14-dev', {version: '~3.14.0-0', freethreaded: false}], - ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}], - ['3.14.0a4', {version: '3.14.0-alpha.4', freethreaded: false}], - ['3.14.0a4t', {version: '3.14.0-alpha.4', freethreaded: true}], - ['3.14.0rc1', {version: '3.14.0-rc.1', freethreaded: false}], - ['3.14.0rc1t', {version: '3.14.0-rc.1', freethreaded: true}] + ['3.14t-dev', {version: '~3.14.0-0', freethreaded: true}] ])('%s (allowPreReleases=true) -> %s', (input, expected) => { const {version, freethreaded} = desugarVersion(input); const semanticVersionSpec = pythonVersionToSemantic(version, true); diff --git a/dist/setup/index.js b/dist/setup/index.js index 41a7f5d7..aada8df6 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -91135,17 +91135,9 @@ function desugarVersion(versionSpec) { return { version: desugarDevVersion(version), freethreaded }; } exports.desugarVersion = desugarVersion; -/* Identify freethreaded versions like, 3.13t, 3.13.1t, 3.13t-dev, 3.14.0a1t. +/* Identify freethreaded versions like, 3.13t, 3.13.1t, 3.13t-dev. * Returns the version without the `t` and the architectures suffix, if freethreaded */ function desugarFreeThreadedVersion(versionSpec) { - // e.g., 3.14.0a1t -> 3.14.0a1 - const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)(t)/g; - if (prereleaseVersion.test(versionSpec)) { - return { - version: versionSpec.replace(prereleaseVersion, '$1$2'), - freethreaded: true - }; - } const majorMinor = /^(\d+\.\d+(\.\d+)?)(t)$/; if (majorMinor.test(versionSpec)) { return { version: versionSpec.replace(majorMinor, '$1'), freethreaded: true }; @@ -91172,22 +91164,15 @@ function versionFromPath(installDir) { } /** * Python's prelease versions look like `3.7.0b2`. - * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-beta.2`. + * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent. * * For easier use of the action, we also map 'x.y' to allow pre-release before 'x.y.0' release if allowPreReleases is true */ function pythonVersionToSemantic(versionSpec, allowPreReleases) { - const preleaseMap = { - a: 'alpha', - b: 'beta', - rc: 'rc' - }; - const prereleaseVersion = /(\d+\.\d+\.\d+)(a|b|rc)(\d+)/g; - let result = versionSpec.replace(prereleaseVersion, (_, p1, p2, p3) => { - return `${p1}-${preleaseMap[p2]}.${p3}`; - }); + const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; const majorMinor = /^(\d+)\.(\d+)$/; + let result = versionSpec.replace(prereleaseVersion, '$1-$2'); if (allowPreReleases) { result = result.replace(majorMinor, '~$1.$2.0-0'); } diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index d6c092c7..0958f5a7 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -77,7 +77,7 @@ steps: - run: python my_script.py ``` -You can specify the [free threading](https://docs.python.org/3/howto/free-threading-python.html) version of Python by setting the `freethreaded` input to `true` or by using the special **t** suffix in some cases. Pre-release free threading versions can be specified like `3.14.0a3t` or `3.14t-dev`. +You can specify the [free threading](https://docs.python.org/3/howto/free-threading-python.html) version of Python by setting the `freethreaded` input to `true` or by using the special **t** suffix in some cases. Pre-release free threading versions can be specified like `3.14t-dev`. Free threaded Python is only available starting with the 3.13 release. ```yaml diff --git a/src/find-python.ts b/src/find-python.ts index 4852cad0..e50ded1f 100644 --- a/src/find-python.ts +++ b/src/find-python.ts @@ -182,17 +182,9 @@ export function desugarVersion(versionSpec: string) { return {version: desugarDevVersion(version), freethreaded}; } -/* Identify freethreaded versions like, 3.13t, 3.13.1t, 3.13t-dev, 3.14.0a1t. +/* Identify freethreaded versions like, 3.13t, 3.13.1t, 3.13t-dev. * Returns the version without the `t` and the architectures suffix, if freethreaded */ function desugarFreeThreadedVersion(versionSpec: string) { - // e.g., 3.14.0a1t -> 3.14.0a1 - const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)(t)/g; - if (prereleaseVersion.test(versionSpec)) { - return { - version: versionSpec.replace(prereleaseVersion, '$1$2'), - freethreaded: true - }; - } const majorMinor = /^(\d+\.\d+(\.\d+)?)(t)$/; if (majorMinor.test(versionSpec)) { return {version: versionSpec.replace(majorMinor, '$1'), freethreaded: true}; @@ -228,7 +220,7 @@ interface InstalledVersion { /** * Python's prelease versions look like `3.7.0b2`. - * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-beta.2`. + * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent. * * For easier use of the action, we also map 'x.y' to allow pre-release before 'x.y.0' release if allowPreReleases is true @@ -237,16 +229,9 @@ export function pythonVersionToSemantic( versionSpec: string, allowPreReleases: boolean ) { - const preleaseMap: {[key: string]: string} = { - a: 'alpha', - b: 'beta', - rc: 'rc' - }; - const prereleaseVersion = /(\d+\.\d+\.\d+)(a|b|rc)(\d+)/g; - let result = versionSpec.replace(prereleaseVersion, (_, p1, p2, p3) => { - return `${p1}-${preleaseMap[p2]}.${p3}`; - }); + const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; const majorMinor = /^(\d+)\.(\d+)$/; + let result = versionSpec.replace(prereleaseVersion, '$1-$2'); if (allowPreReleases) { result = result.replace(majorMinor, '~$1.$2.0-0'); }