mirror of
https://github.com/actions/python-versions.git
synced 2025-12-15 15:32:11 +00:00
Compare commits
99 Commits
3.9.12-203
...
3.11.1-364
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01d7e367e6 | ||
|
|
66440ccb17 | ||
|
|
08fcc9e2f9 | ||
|
|
1248039d12 | ||
|
|
150cd39a1c | ||
|
|
93c66279f2 | ||
|
|
14f269ec5f | ||
|
|
188d4c2fb8 | ||
|
|
99b9e07db6 | ||
|
|
875651ccf2 | ||
|
|
f6ede0f473 | ||
|
|
60672e10e2 | ||
|
|
188c9d47fd | ||
|
|
01c7f11a0c | ||
|
|
2cd33e8674 | ||
|
|
16feed7bc1 | ||
|
|
fe8bc0106f | ||
|
|
4cb1787f1c | ||
|
|
c81386e1fd | ||
|
|
b37d4148f9 | ||
|
|
9b2450c6ee | ||
|
|
a6c0fa93f8 | ||
|
|
929dab97d0 | ||
|
|
149b806fe5 | ||
|
|
1c70aa4fc9 | ||
|
|
379db95d31 | ||
|
|
105f6b74ad | ||
|
|
0d8f04f6f8 | ||
|
|
11c48b4025 | ||
|
|
e7a13ade71 | ||
|
|
024142b9c3 | ||
|
|
5988ec7f4a | ||
|
|
1982aae0b6 | ||
|
|
1e1d9f9032 | ||
|
|
a1a012d197 | ||
|
|
ff7fd271bf | ||
|
|
3b05f53807 | ||
|
|
a28c508174 | ||
|
|
9db1c7f445 | ||
|
|
41636d5136 | ||
|
|
18ea6bb558 | ||
|
|
a22c344dd0 | ||
|
|
ae0a460cc0 | ||
|
|
c8b327c44a | ||
|
|
e1b4a49828 | ||
|
|
42d1484d64 | ||
|
|
e41999429c | ||
|
|
241f220314 | ||
|
|
49da3d9917 | ||
|
|
88aa9c4b9e | ||
|
|
d4c91ae863 | ||
|
|
0f8d1383b5 | ||
|
|
ee30dbfe58 | ||
|
|
f64b4b67c1 | ||
|
|
d57d1eae31 | ||
|
|
714163cc44 | ||
|
|
eaa180e241 | ||
|
|
12ba6443e8 | ||
|
|
73379f970f | ||
|
|
8a2b258410 | ||
|
|
d974a7a429 | ||
|
|
34c0e9a4d6 | ||
|
|
edcd32dbf1 | ||
|
|
045abfcc36 | ||
|
|
6524532238 | ||
|
|
0f97bcdc23 | ||
|
|
bf3c64f950 | ||
|
|
f59a9522eb | ||
|
|
290229025b | ||
|
|
5aad86b0d9 | ||
|
|
52b4d85b8e | ||
|
|
34e7ffccfb | ||
|
|
c3505cc6ce | ||
|
|
15394f2e9d | ||
|
|
22f110545c | ||
|
|
46959ea985 | ||
|
|
b7ef994bae | ||
|
|
687538e9a4 | ||
|
|
1d967fc811 | ||
|
|
bbe229eb2e | ||
|
|
3c5fa6de18 | ||
|
|
0d45fa8df4 | ||
|
|
f41dd90d80 | ||
|
|
b104d17dcc | ||
|
|
8f6a357755 | ||
|
|
53bd6a1e0c | ||
|
|
8fd7008b44 | ||
|
|
1b8db98a89 | ||
|
|
2b001ef9b4 | ||
|
|
dfcce03e53 | ||
|
|
c58bf9c525 | ||
|
|
fb0cb927f6 | ||
|
|
a1129e9e45 | ||
|
|
7d68c84e28 | ||
|
|
7e0253ff52 | ||
|
|
769f6822ee | ||
|
|
18aeba4a09 | ||
|
|
5f1fbb8e56 | ||
|
|
cda7fd9128 |
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ main ]
|
||||||
|
schedule:
|
||||||
|
- cron: '30 8 * * 2'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'python' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||||
|
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
2
.github/workflows/create-pr.yml
vendored
2
.github/workflows/create-pr.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
name: Create Pull Request
|
name: Create Pull Request
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
|
|||||||
9
.github/workflows/get-python-versions.yml
vendored
9
.github/workflows/get-python-versions.yml
vendored
@@ -12,12 +12,13 @@ defaults:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
find_new_versions:
|
find_new_versions:
|
||||||
|
if: github.repository_owner == 'actions'
|
||||||
name: Find new versions
|
name: Find new versions
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
versions_output: ${{ steps.Get_new_versions.outputs.TOOL_VERSIONS }}
|
versions_output: ${{ steps.Get_new_versions.outputs.TOOL_VERSIONS }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
|
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -62,7 +63,7 @@ jobs:
|
|||||||
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
|
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
|
||||||
environment: Get Available Tools Versions - Publishing Approval
|
environment: Get Available Tools Versions - Publishing Approval
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -81,7 +82,7 @@ jobs:
|
|||||||
needs: [find_new_versions, check_new_versions, trigger_builds]
|
needs: [find_new_versions, check_new_versions, trigger_builds]
|
||||||
if: failure()
|
if: failure()
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
Install-Module Pester -Force -Scope CurrentUser
|
Install-Module Pester -Force -Scope CurrentUser
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
Import-Module Pester
|
Import-Module Pester
|
||||||
Invoke-Pester -Configuration @{
|
Invoke-Pester -Configuration @{
|
||||||
|
|||||||
26
.github/workflows/python-builder.yml
vendored
26
.github/workflows/python-builder.yml
vendored
@@ -14,7 +14,7 @@ on:
|
|||||||
PLATFORMS:
|
PLATFORMS:
|
||||||
description: 'Platforms for execution in "os" or "os_arch" format (arch is "x64" by default)'
|
description: 'Platforms for execution in "os" or "os_arch" format (arch is "x64" by default)'
|
||||||
required: true
|
required: true
|
||||||
default: 'ubuntu-18.04,ubuntu-20.04,macos-10.15,windows-2019_x64,windows-2019_x86'
|
default: 'ubuntu-18.04,ubuntu-20.04,ubuntu-22.04,macos-11,windows-2019_x64,windows-2019_x86'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- 'versions-manifest.json'
|
- 'versions-manifest.json'
|
||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
- name: Generate execution matrix
|
- name: Generate execution matrix
|
||||||
id: generate-matrix
|
id: generate-matrix
|
||||||
run: |
|
run: |
|
||||||
$configurations = "${{ github.event.inputs.platforms || 'ubuntu-18.04,ubuntu-20.04,macos-10.15,windows-2019_x64,windows-2019_x86' }}".Split(",").Trim()
|
[String[]]$configurations = "${{ github.event.inputs.platforms || 'ubuntu-18.04,ubuntu-20.04,ubuntu-22.04,macos-11,windows-2019_x64,windows-2019_x86' }}".Split(",").Trim()
|
||||||
$matrix = @()
|
$matrix = @()
|
||||||
|
|
||||||
foreach ($configuration in $configurations) {
|
foreach ($configuration in $configurations) {
|
||||||
@@ -56,7 +56,7 @@ jobs:
|
|||||||
'arch' = $arch
|
'arch' = $arch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "::set-output name=matrix::$($matrix | ConvertTo-Json -Compress)"
|
echo "matrix=$($matrix | ConvertTo-Json -Compress -AsArray)" >> $env:GITHUB_OUTPUT
|
||||||
|
|
||||||
build_python:
|
build_python:
|
||||||
needs: generate_matrix
|
needs: generate_matrix
|
||||||
@@ -70,7 +70,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ jobs:
|
|||||||
-Platform ${{ matrix.platform }} -Architecture ${{ matrix.arch }}
|
-Platform ${{ matrix.platform }} -Architecture ${{ matrix.arch }}
|
||||||
|
|
||||||
- name: Publish artifact
|
- name: Publish artifact
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ${{ env.ARTIFACT_NAME }}
|
name: ${{ env.ARTIFACT_NAME }}
|
||||||
path: ${{ runner.temp }}/artifact
|
path: ${{ runner.temp }}/artifact
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ jobs:
|
|||||||
run: ./helpers/clean-toolcache.ps1 -ToolName "Python"
|
run: ./helpers/clean-toolcache.ps1 -ToolName "Python"
|
||||||
|
|
||||||
- name: Download artifact
|
- name: Download artifact
|
||||||
uses: actions/download-artifact@v2
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ runner.temp }}
|
path: ${{ runner.temp }}
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ jobs:
|
|||||||
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
|
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
|
||||||
|
|
||||||
- name: Setup Python ${{ env.VERSION }}
|
- name: Setup Python ${{ env.VERSION }}
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ env.VERSION }}
|
python-version: ${{ env.VERSION }}
|
||||||
architecture: ${{ matrix.arch }}
|
architecture: ${{ matrix.arch }}
|
||||||
@@ -168,7 +168,7 @@ jobs:
|
|||||||
needs: test_python
|
needs: test_python
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/download-artifact@v2
|
- uses: actions/download-artifact@v3
|
||||||
|
|
||||||
- name: Publish Release ${{ env.VERSION }}
|
- name: Publish Release ${{ env.VERSION }}
|
||||||
id: create_release
|
id: create_release
|
||||||
@@ -182,7 +182,7 @@ jobs:
|
|||||||
Python ${{ env.VERSION }}
|
Python ${{ env.VERSION }}
|
||||||
|
|
||||||
- name: Upload release assets
|
- name: Upload release assets
|
||||||
uses: actions/github-script@v2
|
uses: actions/github-script@v6
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
@@ -190,7 +190,7 @@ jobs:
|
|||||||
for (let artifactDir of fs.readdirSync('.')) {
|
for (let artifactDir of fs.readdirSync('.')) {
|
||||||
let artifactName = fs.readdirSync(`${artifactDir}`)[0];
|
let artifactName = fs.readdirSync(`${artifactDir}`)[0];
|
||||||
console.log(`Upload ${artifactName} asset`);
|
console.log(`Upload ${artifactName} asset`);
|
||||||
github.repos.uploadReleaseAsset({
|
github.rest.repos.uploadReleaseAsset({
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
release_id: ${{ steps.create_release.outputs.id }},
|
release_id: ${{ steps.create_release.outputs.id }},
|
||||||
@@ -205,11 +205,11 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Trigger "Create Pull Request" workflow
|
- name: Trigger "Create Pull Request" workflow
|
||||||
uses: actions/github-script@v3
|
uses: actions/github-script@v6
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.PERSONAL_TOKEN }}
|
github-token: ${{ secrets.PERSONAL_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
github.actions.createWorkflowDispatch({
|
github.rest.actions.createWorkflowDispatch({
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
workflow_id: 'create-pr.yml',
|
workflow_id: 'create-pr.yml',
|
||||||
|
|||||||
2
.github/workflows/python-versions-runner.yml
vendored
2
.github/workflows/python-versions-runner.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Trigger python workflow
|
- name: Trigger python workflow
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
2
.github/workflows/releases-validation.yml
vendored
2
.github/workflows/releases-validation.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
|||||||
python: [3.5.4, 3.6.7, 3.7.5, 3.8.1]
|
python: [3.5.4, 3.6.7, 3.7.5, 3.8.1]
|
||||||
steps:
|
steps:
|
||||||
- name: setup-python ${{ matrix.python }}
|
- name: setup-python ${{ matrix.python }}
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python }}
|
python-version: ${{ matrix.python }}
|
||||||
|
|
||||||
|
|||||||
5
.github/workflows/validate-manifest.yml
vendored
5
.github/workflows/validate-manifest.yml
vendored
@@ -19,9 +19,10 @@ defaults:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validation:
|
validation:
|
||||||
|
if: github.repository_owner == 'actions'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
@@ -34,7 +35,7 @@ jobs:
|
|||||||
needs: [validation]
|
needs: [validation]
|
||||||
if: failure()
|
if: failure()
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -1,16 +1,16 @@
|
|||||||
# Python for Actions
|
# Python for Actions
|
||||||
This repository contains the code and scripts that we use to build Python packages used in [virtual-environments](https://github.com/actions/virtual-environments) and accessible through the [setup-python](https://github.com/actions/setup-python) Action.
|
This repository contains the code and scripts that we use to build Python packages used in [runner-images](https://github.com/actions/runner-images) and accessible through the [setup-python](https://github.com/actions/setup-python) Action.
|
||||||
File [versions-manifest.json](./versions-manifest.json) contains the list of available and released versions.
|
File [versions-manifest.json](./versions-manifest.json) contains the list of available and released versions.
|
||||||
|
|
||||||
> Caution: this is prepared for and only permitted for use by actions `virtual-environments` and `setup-python` action.
|
> Caution: this is prepared for and only permitted for use by actions `runner-images` and `setup-python` action.
|
||||||
|
|
||||||
**Status**: Currently under development and in use for beta and preview actions. This repo is undergoing rapid changes.
|
**Status**: Currently under development and in use for beta and preview actions. This repo is undergoing rapid changes.
|
||||||
|
|
||||||
Some versions are pre-installed on [virtual-environments](https://github.com/actions/virtual-environments) images.
|
Some versions are pre-installed on [runner-images](https://github.com/actions/runner-images) images.
|
||||||
More versions will (soon!) be available to install on-the-fly through the [`setup-python`](https://github.com/actions/setup-python) action.
|
More versions will (soon!) be available to install on-the-fly through the [`setup-python`](https://github.com/actions/setup-python) action.
|
||||||
|
|
||||||
## Adding new versions
|
## Adding new versions
|
||||||
We are trying to build and release new versions of Python as soon as they are released. Please open an issue in [actions/virtual-environments](https://github.com/actions/virtual-environments) if any versions are missing.
|
We are trying to build and release new versions of Python as soon as they are released. Please open an issue in [actions/setup-python](https://github.com/actions/setup-python/issues) if any versions are missing.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure
|
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
|
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
Contains methods that required to build macOS Python artifact from sources. Inherited from base NixPythonBuilder.
|
Contains methods that required to build macOS Python artifact from sources. Inherited from base NixPythonBuilder.
|
||||||
|
|
||||||
|
While python.org provides precompiled binaries for macOS, switching to them risks breaking existing customers.
|
||||||
|
If we wanted to start using the official binaries instead of building from source, we should avoid changing previous versions
|
||||||
|
so we remain backwards compatible.
|
||||||
|
|
||||||
.PARAMETER platform
|
.PARAMETER platform
|
||||||
The full name of platform for which Python should be built.
|
The full name of platform for which Python should be built.
|
||||||
@@ -42,6 +46,15 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
$configureString += " --enable-shared"
|
$configureString += " --enable-shared"
|
||||||
$configureString += " --with-lto"
|
$configureString += " --with-lto"
|
||||||
|
|
||||||
|
### For Python versions which support it, compile a universal2 (arm64 + x86_64 hybrid) build. The arm64 slice
|
||||||
|
### will never be used itself by a Github Actions runner but using a universal2 Python is the only way to build
|
||||||
|
### universal2 C extensions and wheels. This is supported by Python >= 3.10 and was backported to Python >=
|
||||||
|
### 3.9.1 and >= 3.8.10.
|
||||||
|
### Disabled, discussion: https://github.com/actions/python-versions/pull/114
|
||||||
|
# if ($this.Version -ge "3.8.10" -and $this.Version -ne "3.8.13" -and $this.Version -ne "3.9.0" ) {
|
||||||
|
# $configureString += " --enable-universalsdk --with-universal-archs=universal2"
|
||||||
|
# }
|
||||||
|
|
||||||
### OS X 10.11, Apple no longer provides header files for the deprecated system version of OpenSSL.
|
### OS X 10.11, Apple no longer provides header files for the deprecated system version of OpenSSL.
|
||||||
### Solution is to install these libraries from a third-party package manager,
|
### Solution is to install these libraries from a third-party package manager,
|
||||||
### and then add the appropriate paths for the header and library files to configure command.
|
### and then add the appropriate paths for the header and library files to configure command.
|
||||||
@@ -51,6 +64,9 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
$env:CFLAGS = "-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/zlib/include"
|
$env:CFLAGS = "-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/zlib/include"
|
||||||
} else {
|
} else {
|
||||||
$configureString += " --with-openssl=/usr/local/opt/openssl@1.1"
|
$configureString += " --with-openssl=/usr/local/opt/openssl@1.1"
|
||||||
|
if ($this.Version -gt "3.7.12") {
|
||||||
|
$configureString += " --with-tcltk-includes='-I /usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
|
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
|
||||||
@@ -62,6 +78,97 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
$env:CPPFLAGS += "-I$(brew --prefix sqlite3)/include"
|
$env:CPPFLAGS += "-I$(brew --prefix sqlite3)/include"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Write-Host "The passed configure options are: "
|
||||||
|
Write-Host $configureString
|
||||||
|
|
||||||
Execute-Command -Command $configureString
|
Execute-Command -Command $configureString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[string] GetPkgName() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Return Python installation Package.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$nativeVersion = Convert-Version -version $this.Version
|
||||||
|
$architecture = "-macos11"
|
||||||
|
$extension = ".pkg"
|
||||||
|
|
||||||
|
$pkg = "python-${nativeVersion}${architecture}${extension}"
|
||||||
|
|
||||||
|
return $pkg
|
||||||
|
}
|
||||||
|
|
||||||
|
[uri] GetPkgUri() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Get base Python URI and return complete URI for Python installation package.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$base = $this.GetBaseUri()
|
||||||
|
$versionName = $this.GetBaseVersion()
|
||||||
|
$pkg = $this.GetPkgName()
|
||||||
|
|
||||||
|
$uri = "${base}/${versionName}/${pkg}"
|
||||||
|
|
||||||
|
return $uri
|
||||||
|
}
|
||||||
|
|
||||||
|
[string] DownloadPkg() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Download Python installation executable into artifact location.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$pkgUri = $this.GetPkgUri()
|
||||||
|
|
||||||
|
Write-Host "Sources URI: $pkgUri"
|
||||||
|
$pkgLocation = Download-File -Uri $pkgUri -OutputFolder $this.WorkFolderLocation
|
||||||
|
Write-Debug "Done; Package location: $pkgLocation"
|
||||||
|
|
||||||
|
New-Item -Path $this.WorkFolderLocation -Name "build_output.txt" -ItemType File
|
||||||
|
return $pkgLocation
|
||||||
|
}
|
||||||
|
|
||||||
|
[void] CreateInstallationScriptPkg() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Create Python artifact installation script based on specified template.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$installationTemplateLocation = Join-Path -Path $this.InstallationTemplatesLocation -ChildPath "macos-pkg-setup-template.sh"
|
||||||
|
$installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw
|
||||||
|
$installationScriptLocation = New-Item -Path $this.WorkFolderLocation -Name $this.InstallationScriptName -ItemType File
|
||||||
|
|
||||||
|
$variablesToReplace = @{
|
||||||
|
"{{__VERSION_FULL__}}" = $this.Version;
|
||||||
|
"{{__PKG_NAME__}}" = $this.GetPkgName();
|
||||||
|
}
|
||||||
|
|
||||||
|
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
|
||||||
|
$installationTemplateContent | Out-File -FilePath $installationScriptLocation
|
||||||
|
Write-Debug "Done; Installation script location: $installationScriptLocation)"
|
||||||
|
}
|
||||||
|
|
||||||
|
[void] Build() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Generates Python artifact from downloaded Python installation executable.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$PkgVersion = [semver]"3.11.0-beta.1"
|
||||||
|
|
||||||
|
if ($this.Version -ge $PkgVersion) {
|
||||||
|
Write-Host "Download Python $($this.Version) [$($this.Architecture)] package..."
|
||||||
|
$this.DownloadPkg()
|
||||||
|
|
||||||
|
Write-Host "Create installation script..."
|
||||||
|
$this.CreateInstallationScriptPkg()
|
||||||
|
} else {
|
||||||
|
([NixPythonBuilder]$this).Build()
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Archive artifact"
|
||||||
|
$this.ArchiveArtifact()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,9 @@ class UbuntuPythonBuilder : NixPythonBuilder {
|
|||||||
$configureString += " --enable-loadable-sqlite-extensions"
|
$configureString += " --enable-loadable-sqlite-extensions"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Write-Host "The passed configure options are: "
|
||||||
|
Write-Host $configureString
|
||||||
|
|
||||||
Execute-Command -Command $configureString
|
Execute-Command -Command $configureString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
helpers
2
helpers
Submodule helpers updated: 6f1aa3ce73...896369fc7d
78
installers/macos-pkg-setup-template.sh
Normal file
78
installers/macos-pkg-setup-template.sh
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
set -e
|
||||||
|
|
||||||
|
PYTHON_FULL_VERSION="{{__VERSION_FULL__}}"
|
||||||
|
PYTHON_PKG_NAME="{{__PKG_NAME__}}"
|
||||||
|
MAJOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 1)
|
||||||
|
MINOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 2)
|
||||||
|
|
||||||
|
PYTHON_MAJOR=python$MAJOR_VERSION
|
||||||
|
PYTHON_MAJOR_DOT_MINOR=python$MAJOR_VERSION.$MINOR_VERSION
|
||||||
|
PYTHON_MAJOR_MINOR=python$MAJOR_VERSION$MINOR_VERSION
|
||||||
|
|
||||||
|
if [ -z ${AGENT_TOOLSDIRECTORY+x} ]; then
|
||||||
|
# No AGENT_TOOLSDIRECTORY on GitHub images
|
||||||
|
TOOLCACHE_ROOT=$RUNNER_TOOL_CACHE
|
||||||
|
else
|
||||||
|
TOOLCACHE_ROOT=$AGENT_TOOLSDIRECTORY
|
||||||
|
fi
|
||||||
|
|
||||||
|
PYTHON_TOOLCACHE_PATH=$TOOLCACHE_ROOT/Python
|
||||||
|
PYTHON_TOOLCACHE_VERSION_PATH=$PYTHON_TOOLCACHE_PATH/$PYTHON_FULL_VERSION
|
||||||
|
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/x64
|
||||||
|
PYTHON_FRAMEWORK_PATH="/Library/Frameworks/Python.framework/Versions/${MAJOR_VERSION}.${MINOR_VERSION}"
|
||||||
|
PYTHON_APPLICATION_PATH="/Applications/Python ${MAJOR_VERSION}.${MINOR_VERSION}"
|
||||||
|
|
||||||
|
echo "Check if Python hostedtoolcache folder exist..."
|
||||||
|
if [ ! -d $PYTHON_TOOLCACHE_PATH ]; then
|
||||||
|
echo "Creating Python hostedtoolcache folder..."
|
||||||
|
mkdir -p $PYTHON_TOOLCACHE_PATH
|
||||||
|
else
|
||||||
|
# remove ALL other directories for same major.minor python versions
|
||||||
|
find $PYTHON_TOOLCACHE_PATH -name "${MAJOR_VERSION}.${MINOR_VERSION}.*"|while read python_version;do
|
||||||
|
python_version_x64="$python_version/x64"
|
||||||
|
if [ -e "$python_version_x64" ];then
|
||||||
|
echo "Deleting Python $python_version_x64"
|
||||||
|
rm -rf "$python_version_x64"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Install Python binaries from prebuilt package"
|
||||||
|
sudo installer -pkg $PYTHON_PKG_NAME -target /
|
||||||
|
|
||||||
|
echo "Create hostedtoolcach symlinks (Required for the backward compatibility)"
|
||||||
|
echo "Create Python $PYTHON_FULL_VERSION folder"
|
||||||
|
mkdir -p $PYTHON_TOOLCACHE_VERSION_ARCH_PATH
|
||||||
|
cd $PYTHON_TOOLCACHE_VERSION_ARCH_PATH
|
||||||
|
|
||||||
|
ln -s "${PYTHON_FRAMEWORK_PATH}/bin" bin
|
||||||
|
ln -s "${PYTHON_FRAMEWORK_PATH}/include" include
|
||||||
|
ln -s "${PYTHON_FRAMEWORK_PATH}/share" share
|
||||||
|
ln -s "${PYTHON_FRAMEWORK_PATH}/lib" lib
|
||||||
|
|
||||||
|
echo "Create additional symlinks (Required for the UsePythonVersion Azure Pipelines task and the setup-python GitHub Action)"
|
||||||
|
ln -s ./bin/$PYTHON_MAJOR_DOT_MINOR python
|
||||||
|
|
||||||
|
cd bin/
|
||||||
|
|
||||||
|
# This symlink already exists if Python version with the same major.minor version is installed,
|
||||||
|
# since we do not remove the framework folder
|
||||||
|
if [ ! -f $PYTHON_MAJOR_MINOR ]; then
|
||||||
|
ln -s $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f python ]; then
|
||||||
|
ln -s $PYTHON_MAJOR_DOT_MINOR python
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod +x ../python $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR python
|
||||||
|
|
||||||
|
echo "Upgrading pip..."
|
||||||
|
./python -m ensurepip
|
||||||
|
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location
|
||||||
|
|
||||||
|
echo "Install OpenSSL certificates"
|
||||||
|
sh -e "${PYTHON_APPLICATION_PATH}/Install Certificates.command"
|
||||||
|
|
||||||
|
echo "Create complete file"
|
||||||
|
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete
|
||||||
@@ -49,7 +49,14 @@ Describe "Tests" {
|
|||||||
"python ./sources/simple-test.py" | Should -ReturnZeroExitCode
|
"python ./sources/simple-test.py" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($Version -ge "3.2.0") -and -not ([semver]"$($Version.Major).$($Version.Minor)" -eq [semver]"3.11" -and $Version.PreReleaseLabel)) {
|
# linux has no display name and no $DISPLAY environment variable - skip tk test
|
||||||
|
# if (-not (($Platform -match "ubuntu") -or ($Platform -match "linux"))) {
|
||||||
|
# It "Check if tcl/tk has the same headed and library versions" {
|
||||||
|
# "python ./sources/tcltk.py" | Should -ReturnZeroExitCode
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
|
if (($Version -ge "3.2.0") -and ($Version -lt "3.11.0")) {
|
||||||
It "Check if sqlite3 module is installed" {
|
It "Check if sqlite3 module is installed" {
|
||||||
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
|
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
@@ -89,4 +96,8 @@ Describe "Tests" {
|
|||||||
"./dist/simple-test" | Should -ReturnZeroExitCode
|
"./dist/simple-test" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
It "Check urlopen with HTTPS works" {
|
||||||
|
"python ./sources/python-urlopen-https.py" | Should -ReturnZeroExitCode
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,12 @@ os_type = platform.system()
|
|||||||
version = sys.argv[1]
|
version = sys.argv[1]
|
||||||
nativeVersion = sys.argv[2]
|
nativeVersion = sys.argv[2]
|
||||||
|
|
||||||
|
versions=version.split(".")
|
||||||
|
version_major=int(versions[0])
|
||||||
|
version_minor=int(versions[1])
|
||||||
|
|
||||||
|
pkg_installer = os_type == 'Darwin' and (version_major == 3 and version_minor >= 11)
|
||||||
|
|
||||||
lib_dir_path = sysconfig.get_config_var('LIBDIR')
|
lib_dir_path = sysconfig.get_config_var('LIBDIR')
|
||||||
ld_library_name = sysconfig.get_config_var('LDLIBRARY')
|
ld_library_name = sysconfig.get_config_var('LDLIBRARY')
|
||||||
|
|
||||||
@@ -19,7 +25,11 @@ have_libreadline = sysconfig.get_config_var("HAVE_LIBREADLINE")
|
|||||||
### Define expected variables
|
### Define expected variables
|
||||||
if os_type == 'Linux': expected_ld_library_extension = 'so'
|
if os_type == 'Linux': expected_ld_library_extension = 'so'
|
||||||
if os_type == 'Darwin': expected_ld_library_extension = 'dylib'
|
if os_type == 'Darwin': expected_ld_library_extension = 'dylib'
|
||||||
expected_lib_dir_path = '{0}/Python/{1}/x64/lib'.format(os.getenv("AGENT_TOOLSDIRECTORY"), version)
|
|
||||||
|
if pkg_installer:
|
||||||
|
expected_lib_dir_path = f'/Library/Frameworks/Python.framework/Versions/{version_major}.{version_minor}/lib'
|
||||||
|
else:
|
||||||
|
expected_lib_dir_path = f'{os.getenv("AGENT_TOOLSDIRECTORY")}/Python/{version}/x64/lib'
|
||||||
|
|
||||||
# Check modules
|
# Check modules
|
||||||
### Validate libraries path
|
### Validate libraries path
|
||||||
@@ -38,7 +48,8 @@ if is_shared:
|
|||||||
exit(1)
|
exit(1)
|
||||||
else:
|
else:
|
||||||
print('%s was built without shared extensions' % ld_library_name)
|
print('%s was built without shared extensions' % ld_library_name)
|
||||||
exit(1)
|
if not pkg_installer:
|
||||||
|
exit(1)
|
||||||
|
|
||||||
### Validate macOS
|
### Validate macOS
|
||||||
if os_type == 'Darwin':
|
if os_type == 'Darwin':
|
||||||
@@ -59,12 +70,15 @@ if os_type == 'Darwin':
|
|||||||
|
|
||||||
if openssl_includes != expected_openssl_includes:
|
if openssl_includes != expected_openssl_includes:
|
||||||
print('Invalid openssl_includes: %s; Expected: %s' % (openssl_includes, expected_openssl_includes))
|
print('Invalid openssl_includes: %s; Expected: %s' % (openssl_includes, expected_openssl_includes))
|
||||||
exit(1)
|
if not pkg_installer:
|
||||||
|
exit(1)
|
||||||
if openssl_ldflags != expected_openssl_ldflags:
|
if openssl_ldflags != expected_openssl_ldflags:
|
||||||
print('Invalid openssl_ldflags: %s; Expected: %s' % (openssl_ldflags, expected_openssl_ldflags))
|
print('Invalid openssl_ldflags: %s; Expected: %s' % (openssl_ldflags, expected_openssl_ldflags))
|
||||||
exit(1)
|
if not pkg_installer:
|
||||||
|
exit(1)
|
||||||
|
|
||||||
### Validate libreadline
|
### Validate libreadline
|
||||||
if not have_libreadline:
|
if sys.version_info < (3, 12):
|
||||||
print('Missing libreadline')
|
if not have_libreadline:
|
||||||
exit(1)
|
print('Missing libreadline')
|
||||||
|
exit(1)
|
||||||
@@ -7,6 +7,7 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import importlib
|
import importlib
|
||||||
import sys
|
import sys
|
||||||
|
import platform
|
||||||
|
|
||||||
# The Python standard library as of Python 3.0
|
# The Python standard library as of Python 3.0
|
||||||
standard_library = [
|
standard_library = [
|
||||||
@@ -265,6 +266,17 @@ if sys.version_info >= (3, 10):
|
|||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
standard_library.remove('binhex')
|
standard_library.remove('binhex')
|
||||||
|
|
||||||
|
# Exclude tkinter and turtle for Python 3.11 alpha temporarily
|
||||||
|
if sys.version_info >= (3, 11) and platform.system() == 'Linux' and '18.04' in platform.version():
|
||||||
|
standard_library.remove('tkinter')
|
||||||
|
standard_library.remove('turtle')
|
||||||
|
|
||||||
|
# 'smtpd', 'asyncore' and 'asynchat' modules have been removed from Python 3.12
|
||||||
|
if sys.version_info >= (3, 12):
|
||||||
|
standard_library.remove('smtpd')
|
||||||
|
standard_library.remove('asyncore')
|
||||||
|
standard_library.remove('asynchat')
|
||||||
|
|
||||||
# Remove tkinter and Easter eggs
|
# Remove tkinter and Easter eggs
|
||||||
excluded_modules = [
|
excluded_modules = [
|
||||||
'antigravity',
|
'antigravity',
|
||||||
|
|||||||
10
tests/sources/python-urlopen-https.py
Normal file
10
tests/sources/python-urlopen-https.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
from urllib2 import urlopen
|
||||||
|
else:
|
||||||
|
from urllib.request import urlopen
|
||||||
|
|
||||||
|
response = urlopen("https://raw.githubusercontent.com/actions/python-versions/c641695f6a07526c18f10e374e503e649fef9427/.gitignore")
|
||||||
|
data = response.read()
|
||||||
|
assert len(data) == 140, len(data)
|
||||||
10
tests/sources/tcltk.py
Normal file
10
tests/sources/tcltk.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import tkinter
|
||||||
|
import _tkinter
|
||||||
|
|
||||||
|
header = _tkinter.TK_VERSION
|
||||||
|
lib = tkinter.Tk().getvar('tk_version')
|
||||||
|
|
||||||
|
if lib != header:
|
||||||
|
print('header version=' + header)
|
||||||
|
print('lib version=' + lib)
|
||||||
|
exit(1)
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user