mirror of
https://code.forgejo.org/actions/setup-python
synced 2025-03-15 06:36:56 +01:00

* 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
43 lines
1.9 KiB
TypeScript
43 lines
1.9 KiB
TypeScript
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);
|
|
});
|
|
});
|