mirror of
				https://kkgithub.com/actions/setup-python.git
				synced 2025-11-04 12:44:05 +08:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0c28554988 | |||
| 7010ec794f | |||
| 306c473438 | 
							
								
								
									
										29
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							@ -61,3 +61,32 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    - name: Run simple code
 | 
			
		||||
      run: python -c 'import math; print(math.factorial(5))'
 | 
			
		||||
 | 
			
		||||
  setup-pre-release-version-from-manifest:
 | 
			
		||||
    name: Setup 3.9.0-beta.4 ${{ matrix.os }}
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04]
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout
 | 
			
		||||
      uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
    - name: setup-python 3.9.0-beta.4
 | 
			
		||||
      uses: ./
 | 
			
		||||
      with:
 | 
			
		||||
        python-version: '3.9.0-beta.4'
 | 
			
		||||
 | 
			
		||||
    - name: Validate version
 | 
			
		||||
      run: |
 | 
			
		||||
        $pythonVersion = (python --version)
 | 
			
		||||
        if ("Python 3.9.0b4" -ne "$pythonVersion"){
 | 
			
		||||
          Write-Host "The current version is $pythonVersion; expected version is 3.9.0b4"
 | 
			
		||||
          exit 1
 | 
			
		||||
        }
 | 
			
		||||
        $pythonVersion
 | 
			
		||||
      shell: pwsh
 | 
			
		||||
 | 
			
		||||
    - name: Run simple code
 | 
			
		||||
      run: python -c 'import math; print(math.factorial(5))'
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								README.md
									
									
									
									
									
								
							@ -16,6 +16,7 @@ This action sets up a Python environment for use in actions by:
 | 
			
		||||
- Ability to download, install and set up Python packages from `actions/python-versions` that do not come preinstalled on runners
 | 
			
		||||
  - Allows for pinning to a specific patch version of Python without the worry of it ever being removed or changed
 | 
			
		||||
- Automatic setup and download of Python packages if using a self-hosted runner
 | 
			
		||||
- Support for pre-release versions of Python
 | 
			
		||||
 | 
			
		||||
# Usage
 | 
			
		||||
 | 
			
		||||
@ -92,6 +93,26 @@ jobs:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Download and set up a accurate pre-release version of Python:
 | 
			
		||||
```yaml
 | 
			
		||||
steps:
 | 
			
		||||
- uses: actions/checkout@v2
 | 
			
		||||
- uses: actions/setup-python@v2
 | 
			
		||||
  with:
 | 
			
		||||
    python-version: '3.9.0-beta.4'
 | 
			
		||||
- run: python my_script.py
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Download and set up the latest available version of Python (includes both pre-release and stable versions):
 | 
			
		||||
```yaml
 | 
			
		||||
steps:
 | 
			
		||||
- uses: actions/checkout@v2
 | 
			
		||||
- uses: actions/setup-python@v2
 | 
			
		||||
  with:
 | 
			
		||||
    python-version: '3.9.0-alpha - 3.9.0' # SemVer's version range syntax
 | 
			
		||||
- run: python my_script.py
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Getting started with Python + Actions
 | 
			
		||||
 | 
			
		||||
Check out our detailed guide on using [Python with GitHub Actions](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-python-with-github-actions).
 | 
			
		||||
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "version": "1.2.3",
 | 
			
		||||
    "stable": true,
 | 
			
		||||
    "release_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6",
 | 
			
		||||
    "files": [
 | 
			
		||||
      {
 | 
			
		||||
        "filename": "sometool-1.2.3-linux-x64.tar.gz",
 | 
			
		||||
        "arch": "x64",
 | 
			
		||||
        "platform": "linux",
 | 
			
		||||
        "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6/sometool-1.2.3-linux-x64.tar.gz"
 | 
			
		||||
      }      
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								__tests__/data/versions-manifest.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								__tests__/data/versions-manifest.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
      "version": "1.2.3",
 | 
			
		||||
      "stable": true,
 | 
			
		||||
      "release_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6",
 | 
			
		||||
      "files": [
 | 
			
		||||
        {
 | 
			
		||||
          "filename": "sometool-1.2.3-linux-x64.tar.gz",
 | 
			
		||||
          "arch": "x64",
 | 
			
		||||
          "platform": "linux",
 | 
			
		||||
          "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6/sometool-1.2.3-linux-x64.tar.gz"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "filename": "sometool-1.2.3-darwin-x64.tar.gz",
 | 
			
		||||
          "arch": "x64",
 | 
			
		||||
          "platform": "darwin",
 | 
			
		||||
          "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6/sometool-1.2.3-darwin-x64.tar.gz"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "filename": "sometool-1.2.3-win32-x64.tar.gz",
 | 
			
		||||
          "arch": "x64",
 | 
			
		||||
          "platform": "win32",
 | 
			
		||||
          "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6/sometool-1.2.3-win32-x64.tar.gz"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "version": "1.2.3-beta.2",
 | 
			
		||||
      "stable": false,
 | 
			
		||||
      "release_url": "https://github.com/actions/sometool/releases/tag/1.2.3-beta.2-20200402.5",
 | 
			
		||||
      "files": [
 | 
			
		||||
        {
 | 
			
		||||
          "filename": "sometool-1.2.3-linux-x64.tar.gz",
 | 
			
		||||
          "arch": "x64",
 | 
			
		||||
          "platform": "linux",
 | 
			
		||||
          "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-beta.2-20200402.5/sometool-1.2.3-linux-x64.tar.gz"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "filename": "sometool-1.2.3-darwin-x64.tar.gz",
 | 
			
		||||
          "arch": "x64",
 | 
			
		||||
          "platform": "darwin",
 | 
			
		||||
          "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.5/sometool-1.2.3-darwin-x64.tar.gz"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "filename": "sometool-1.2.3-win32-x64.tar.gz",
 | 
			
		||||
          "arch": "x64",
 | 
			
		||||
          "platform": "win32",
 | 
			
		||||
          "download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.5/sometool-1.2.3-win32-x64.tar.gz"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
@ -22,7 +22,7 @@ import * as tc from '@actions/tool-cache';
 | 
			
		||||
import * as finder from '../src/find-python';
 | 
			
		||||
import * as installer from '../src/install-python';
 | 
			
		||||
 | 
			
		||||
const pythonRelease = require('./data/python-release.json');
 | 
			
		||||
const manifestData = require('./data/versions-manifest.json');
 | 
			
		||||
 | 
			
		||||
describe('Finder tests', () => {
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
@ -38,12 +38,9 @@ describe('Finder tests', () => {
 | 
			
		||||
    await finder.findPythonVersion('3.x', 'x64');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('Finds Python if it is not installed, but exists in the manifest', async () => {
 | 
			
		||||
    const findSpy: jest.SpyInstance = jest.spyOn(
 | 
			
		||||
      installer,
 | 
			
		||||
      'findReleaseFromManifest'
 | 
			
		||||
    );
 | 
			
		||||
    findSpy.mockImplementation(() => <tc.IToolRelease>pythonRelease);
 | 
			
		||||
  it('Finds stable Python version if it is not installed, but exists in the manifest', async () => {
 | 
			
		||||
    const findSpy: jest.SpyInstance = jest.spyOn(tc, 'getManifestFromRepo');
 | 
			
		||||
    findSpy.mockImplementation(() => <tc.IToolRelease[]>manifestData);
 | 
			
		||||
 | 
			
		||||
    const installSpy: jest.SpyInstance = jest.spyOn(
 | 
			
		||||
      installer,
 | 
			
		||||
@ -58,6 +55,28 @@ describe('Finder tests', () => {
 | 
			
		||||
    await finder.findPythonVersion('1.2.3', 'x64');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('Finds pre-release Python version in the manifest', async () => {
 | 
			
		||||
    const findSpy: jest.SpyInstance = jest.spyOn(tc, 'getManifestFromRepo');
 | 
			
		||||
    findSpy.mockImplementation(() => <tc.IToolRelease[]>manifestData);
 | 
			
		||||
 | 
			
		||||
    const installSpy: jest.SpyInstance = jest.spyOn(
 | 
			
		||||
      installer,
 | 
			
		||||
      'installCpythonFromRelease'
 | 
			
		||||
    );
 | 
			
		||||
    installSpy.mockImplementation(async () => {
 | 
			
		||||
      const pythonDir: string = path.join(
 | 
			
		||||
        toolDir,
 | 
			
		||||
        'Python',
 | 
			
		||||
        '1.2.3-beta.2',
 | 
			
		||||
        'x64'
 | 
			
		||||
      );
 | 
			
		||||
      await io.mkdirP(pythonDir);
 | 
			
		||||
      fs.writeFileSync(`${pythonDir}.complete`, 'hello');
 | 
			
		||||
    });
 | 
			
		||||
    // This will throw if it doesn't find it in the manifest (because no such version exists)
 | 
			
		||||
    await finder.findPythonVersion('1.2.3-beta.2', 'x64');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('Errors if Python is not installed', async () => {
 | 
			
		||||
    // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | 
			
		||||
    let thrown = false;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8746
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8746
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -3030,9 +3030,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "lodash": {
 | 
			
		||||
      "version": "4.17.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
 | 
			
		||||
      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
 | 
			
		||||
      "version": "4.17.19",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
 | 
			
		||||
      "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.memoize": {
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ export async function findReleaseFromManifest(
 | 
			
		||||
  );
 | 
			
		||||
  return await tc.findFromManifest(
 | 
			
		||||
    semanticVersionSpec,
 | 
			
		||||
    true,
 | 
			
		||||
    false,
 | 
			
		||||
    manifest,
 | 
			
		||||
    architecture
 | 
			
		||||
  );
 | 
			
		||||
@ -58,13 +58,12 @@ export async function installCpythonFromRelease(release: tc.IToolRelease) {
 | 
			
		||||
 | 
			
		||||
  core.info(`Download from "${downloadUrl}"`);
 | 
			
		||||
  const pythonPath = await tc.downloadTool(downloadUrl, undefined, AUTH);
 | 
			
		||||
  const fileName = path.basename(pythonPath, '.zip');
 | 
			
		||||
  core.info('Extract downloaded archive');
 | 
			
		||||
  let pythonExtractedFolder;
 | 
			
		||||
  if (IS_WINDOWS) {
 | 
			
		||||
    pythonExtractedFolder = await tc.extractZip(pythonPath, `./${fileName}`);
 | 
			
		||||
    pythonExtractedFolder = await tc.extractZip(pythonPath);
 | 
			
		||||
  } else {
 | 
			
		||||
    pythonExtractedFolder = await tc.extractTar(pythonPath, `./${fileName}`);
 | 
			
		||||
    pythonExtractedFolder = await tc.extractTar(pythonPath);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  core.info('Execute installation script');
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user