mirror of
https://code.forgejo.org/actions/setup-python
synced 2025-06-08 20:38:19 +02:00
Support free threaded Python versions like '3.13t' (#973)
* Support free threaded Python versions like '3.13t' Python wheels, pyenv, and a number of other tools use 't' in the Python version number to identify free threaded builds. For example, '3.13t', '3.14.0a1', '3.14t-dev'. This PR supports that syntax in `actions/setup-python`, strips the "t", and adds "-freethreading" to the architecture to select the correct Python version. See #771 * Add free threading to advanced usage documentation * Fix desugaring of `3.13.1t` and add test case. * Add freethreaded input and fix handling of prerelease versions * Fix lint * Add 't' suffix to python-version output * Use distinct cache key for free threaded Python * Remove support for syntax like '3.14.0a1' * Clarify use of 't' suffix * Improve error message when trying to use free threaded Python versions before 3.13
This commit is contained in:
parent
7c16f92757
commit
1080e2bd3d
8 changed files with 226 additions and 35 deletions
43
__tests__/find-python.test.ts
Normal file
43
__tests__/find-python.test.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import {desugarVersion, pythonVersionToSemantic} from '../src/find-python';
|
||||
|
||||
describe('desugarVersion', () => {
|
||||
it.each([
|
||||
['3.13', {version: '3.13', freethreaded: false}],
|
||||
['3.13t', {version: '3.13', freethreaded: true}],
|
||||
['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}]
|
||||
])('%s -> %s', (input, expected) => {
|
||||
expect(desugarVersion(input)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
// Test the combined desugarVersion and pythonVersionToSemantic functions
|
||||
describe('pythonVersions', () => {
|
||||
it.each([
|
||||
['3.13', {version: '3.13', freethreaded: false}],
|
||||
['3.13t', {version: '3.13', freethreaded: true}],
|
||||
['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}]
|
||||
])('%s -> %s', (input, expected) => {
|
||||
const {version, freethreaded} = desugarVersion(input);
|
||||
const semanticVersionSpec = pythonVersionToSemantic(version, false);
|
||||
expect({version: semanticVersionSpec, freethreaded}).toEqual(expected);
|
||||
});
|
||||
|
||||
it.each([
|
||||
['3.13', {version: '~3.13.0-0', freethreaded: false}],
|
||||
['3.13t', {version: '~3.13.0-0', freethreaded: true}],
|
||||
['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}]
|
||||
])('%s (allowPreReleases=true) -> %s', (input, expected) => {
|
||||
const {version, freethreaded} = desugarVersion(input);
|
||||
const semanticVersionSpec = pythonVersionToSemantic(version, true);
|
||||
expect({version: semanticVersionSpec, freethreaded}).toEqual(expected);
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue