mirror of
				https://kkgithub.com/actions/setup-python.git
				synced 2025-11-04 20:51:52 +08: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
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			44 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);
 | 
						|
  });
 | 
						|
});
 |