mirror of
https://github.com/actions/python-versions.git
synced 2025-12-15 15:32:11 +00:00
Compare commits
69 Commits
3.10.8-327
...
3.12.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d3aa48b3c | ||
|
|
c1cf5de988 | ||
|
|
5a451d6492 | ||
|
|
87d20c715f | ||
|
|
225ba42747 | ||
|
|
ab4e944c0f | ||
|
|
7693cef346 | ||
|
|
c7573bf15e | ||
|
|
80893f523f | ||
|
|
6d04944fbd | ||
|
|
256e6ddd57 | ||
|
|
c6bbc68f56 | ||
|
|
b539ede4c3 | ||
|
|
e952c806a5 | ||
|
|
ed7a676026 | ||
|
|
b8accc4e9f | ||
|
|
6f472a7a9e | ||
|
|
71129be509 | ||
|
|
dfc7050017 | ||
|
|
eb846d7d39 | ||
|
|
e49c162d5a | ||
|
|
ad06198644 | ||
|
|
66b48edbf9 | ||
|
|
61e2b82f97 | ||
|
|
f99915cae1 | ||
|
|
1fbaf20636 | ||
|
|
a4dd6d4b89 | ||
|
|
80b21460cf | ||
|
|
2e59cc3fa4 | ||
|
|
b7447f0e37 | ||
|
|
b558df2c7a | ||
|
|
6dd0b7502a | ||
|
|
01d7e367e6 | ||
|
|
fe45ddc7b4 | ||
|
|
9feffedd12 | ||
|
|
66440ccb17 | ||
|
|
c483dd7702 | ||
|
|
69e05af37b | ||
|
|
626f42cb96 | ||
|
|
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 |
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@@ -1 +1 @@
|
|||||||
* @actions/virtual-environments-owners
|
* @actions/setup-actions-team
|
||||||
|
|||||||
@@ -1,20 +1,21 @@
|
|||||||
name: Build python package
|
name: Build Python package
|
||||||
|
run-name: Generate Python ${{ inputs.VERSION || '3.11.0' }}
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
VERSION:
|
VERSION:
|
||||||
description: 'Python version to build and upload'
|
description: 'Python version to build and upload'
|
||||||
default: '3.9.9'
|
default: '3.11.0'
|
||||||
required: true
|
required: true
|
||||||
PUBLISH_RELEASES:
|
PUBLISH_RELEASES:
|
||||||
description: 'Whether to publish releases'
|
description: 'Whether to publish releases'
|
||||||
required: true
|
required: true
|
||||||
default: 'false'
|
type: boolean
|
||||||
|
default: false
|
||||||
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,ubuntu-22.04,macos-10.15,windows-2019_x64,windows-2019_x86'
|
default: 'ubuntu-20.04,ubuntu-22.04,macos-11_x64,macos-11_arm64,windows-2019_x64,windows-2019_x86'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- 'versions-manifest.json'
|
- 'versions-manifest.json'
|
||||||
@@ -24,7 +25,7 @@ on:
|
|||||||
- 'main'
|
- 'main'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
VERSION: ${{ github.event.inputs.VERSION || '3.9.9' }}
|
VERSION: ${{ inputs.VERSION || '3.11.0' }}
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -38,7 +39,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,ubuntu-22.04,macos-10.15,windows-2019_x64,windows-2019_x86' }}".Split(",").Trim()
|
[String[]]$configurations = "${{ inputs.platforms || 'ubuntu-20.04,ubuntu-22.04,macos-11,macos-11_arm64,windows-2019_x64,windows-2019_x86' }}".Split(",").Trim()
|
||||||
$matrix = @()
|
$matrix = @()
|
||||||
|
|
||||||
foreach ($configuration in $configurations) {
|
foreach ($configuration in $configurations) {
|
||||||
@@ -56,7 +57,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
|
||||||
@@ -66,11 +67,11 @@ jobs:
|
|||||||
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
|
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
ARTIFACT_NAME: python-${{ github.event.inputs.VERSION || '3.9.9' }}-${{ matrix.platform }}-${{ matrix.arch }}
|
ARTIFACT_NAME: python-${{ inputs.VERSION || '3.11.0' }}-${{ matrix.platform }}-${{ matrix.arch }}
|
||||||
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 +81,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
|
||||||
@@ -93,11 +94,11 @@ jobs:
|
|||||||
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
|
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
ARTIFACT_NAME: python-${{ github.event.inputs.VERSION || '3.9.9' }}-${{ matrix.platform }}-${{ matrix.arch }}
|
ARTIFACT_NAME: python-${{ inputs.VERSION || '3.11.0' }}-${{ matrix.platform }}-${{ matrix.arch }}
|
||||||
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 +106,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 +132,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@v3
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ env.VERSION }}
|
python-version: ${{ env.VERSION }}
|
||||||
architecture: ${{ matrix.arch }}
|
architecture: ${{ matrix.arch }}
|
||||||
@@ -154,6 +155,7 @@ jobs:
|
|||||||
$pesterContainer = New-PesterContainer -Path './python-tests.ps1' -Data @{
|
$pesterContainer = New-PesterContainer -Path './python-tests.ps1' -Data @{
|
||||||
Version="${{ env.VERSION }}";
|
Version="${{ env.VERSION }}";
|
||||||
Platform="${{ matrix.platform }}";
|
Platform="${{ matrix.platform }}";
|
||||||
|
Architecture="${{ matrix.arch }}";
|
||||||
}
|
}
|
||||||
$Result = Invoke-Pester -Container $pesterContainer -PassThru
|
$Result = Invoke-Pester -Container $pesterContainer -PassThru
|
||||||
if ($Result.FailedCount -gt 0) {
|
if ($Result.FailedCount -gt 0) {
|
||||||
@@ -164,11 +166,11 @@ jobs:
|
|||||||
|
|
||||||
publish_release:
|
publish_release:
|
||||||
name: Publish release
|
name: Publish release
|
||||||
if: github.event_name == 'workflow_dispatch' && github.event.inputs.PUBLISH_RELEASES == 'true'
|
if: github.event_name == 'workflow_dispatch' && inputs.PUBLISH_RELEASES
|
||||||
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 +184,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 +192,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 +207,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.GITHUB_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',
|
||||||
68
.github/workflows/codeql-analysis.yml
vendored
68
.github/workflows/codeql-analysis.yml
vendored
@@ -1,70 +1,16 @@
|
|||||||
# For most projects, this workflow file will not need changing; you simply need
|
name: CodeQL analysis
|
||||||
# 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:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '30 8 * * 2'
|
- cron: '0 3 * * 0'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
call-codeQL-analysis:
|
||||||
name: Analyze
|
name: CodeQL analysis
|
||||||
runs-on: ubuntu-latest
|
uses: actions/reusable-workflows/.github/workflows/codeql-analysis.yml@main
|
||||||
permissions:
|
with:
|
||||||
actions: read
|
languages: "['python']"
|
||||||
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@v1
|
|
||||||
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@v1
|
|
||||||
|
|
||||||
# ℹ️ 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@v1
|
|
||||||
33
.github/workflows/create-pr.yml
vendored
33
.github/workflows/create-pr.yml
vendored
@@ -2,32 +2,9 @@ name: Create Pull Request
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
create_pr:
|
create-pr:
|
||||||
name: Create Pull Request
|
uses: actions/versions-package-tools/.github/workflows/create-pr-to-update-manifest.yml@main
|
||||||
runs-on: ubuntu-latest
|
with:
|
||||||
steps:
|
tool-name: "python"
|
||||||
- uses: actions/checkout@v2
|
secrets: inherit
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Create versions-manifest.json
|
|
||||||
run: |
|
|
||||||
./helpers/packages-generation/manifest-generator.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" `
|
|
||||||
-GitHubAccessToken "${{secrets.GITHUB_TOKEN}}" `
|
|
||||||
-OutputFile "./versions-manifest.json" `
|
|
||||||
-ConfigurationFile "./config/python-manifest-config.json"
|
|
||||||
- name: Create GitHub PR
|
|
||||||
run: |
|
|
||||||
$formattedDate = Get-Date -Format "MM/dd/yyyy"
|
|
||||||
./helpers/github/create-pull-request.ps1 `
|
|
||||||
-RepositoryFullName "$env:GITHUB_REPOSITORY" `
|
|
||||||
-AccessToken "${{secrets.GITHUB_TOKEN}}" `
|
|
||||||
-BranchName "update-versions-manifest-file" `
|
|
||||||
-CommitMessage "Update versions-manifest" `
|
|
||||||
-PullRequestTitle "[versions-manifest] Update for release from ${formattedDate}" `
|
|
||||||
-PullRequestBody "Update versions-manifest.json for release from ${formattedDate}"
|
|
||||||
|
|||||||
94
.github/workflows/get-python-versions.yml
vendored
94
.github/workflows/get-python-versions.yml
vendored
@@ -4,92 +4,10 @@ on:
|
|||||||
- cron: '0 3,15 * * *'
|
- cron: '0 3,15 * * *'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
|
||||||
TOOL_NAME: "Python"
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
find_new_versions:
|
get-new-python-versions:
|
||||||
name: Find new versions
|
uses: actions/versions-package-tools/.github/workflows/get-new-tool-versions.yml@main
|
||||||
runs-on: ubuntu-latest
|
with:
|
||||||
outputs:
|
tool-name: "Python"
|
||||||
versions_output: ${{ steps.Get_new_versions.outputs.TOOL_VERSIONS }}
|
image-url: "https://avatars.githubusercontent.com/u/1525981?s=200&v=4"
|
||||||
steps:
|
secrets: inherit
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- id: Get_new_versions
|
|
||||||
name: Get new versions
|
|
||||||
run: ./helpers/get-new-tool-versions/get-new-tool-versions.ps1 -ToolName ${{ env.TOOL_NAME }}
|
|
||||||
|
|
||||||
check_new_versions:
|
|
||||||
name: Check new versions
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: find_new_versions
|
|
||||||
env:
|
|
||||||
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Check Versions
|
|
||||||
if: env.TOOL_VERSIONS == ''
|
|
||||||
run: |
|
|
||||||
Write-Host "No new versions were found"
|
|
||||||
Import-Module "./helpers/github/github-api.psm1"
|
|
||||||
$gitHubApi = Get-GitHubApi -RepositoryFullName "$env:GITHUB_REPOSITORY" `
|
|
||||||
-AccessToken "${{ secrets.PERSONAL_TOKEN }}"
|
|
||||||
$gitHubApi.CancelWorkflow("$env:GITHUB_RUN_ID")
|
|
||||||
Start-Sleep -Seconds 60
|
|
||||||
- name: Send Slack notification
|
|
||||||
run: |
|
|
||||||
$pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID"
|
|
||||||
$message = "The following versions of '${{ env.TOOL_NAME }}' are available to upload: ${{ env.TOOL_VERSIONS }}\nLink to the pipeline: $pipelineUrl"
|
|
||||||
./helpers/get-new-tool-versions/send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" `
|
|
||||||
-ToolName "${{ env.TOOL_NAME }}" `
|
|
||||||
-ImageUrl "https://avatars.githubusercontent.com/u/1525981?s=200&v=4" `
|
|
||||||
-Text "$message"
|
|
||||||
|
|
||||||
trigger_builds:
|
|
||||||
name: Trigger builds
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [find_new_versions, check_new_versions]
|
|
||||||
env:
|
|
||||||
TOOL_VERSIONS: ${{needs.find_new_versions.outputs.versions_output}}
|
|
||||||
environment: Get Available Tools Versions - Publishing Approval
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Trigger "Build python packages" workflow
|
|
||||||
run:
|
|
||||||
./helpers/github/run-ci-builds.ps1 -RepositoryFullName "$env:GITHUB_REPOSITORY" `
|
|
||||||
-AccessToken "${{ secrets.PERSONAL_TOKEN }}" `
|
|
||||||
-WorkflowFileName "python-builder.yml" `
|
|
||||||
-WorkflowDispatchRef "main" `
|
|
||||||
-ToolVersions "${{ env.TOOL_VERSIONS }}" `
|
|
||||||
-PublishReleases "true"
|
|
||||||
|
|
||||||
check_build:
|
|
||||||
name: Check build for failures
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [find_new_versions, check_new_versions, trigger_builds]
|
|
||||||
if: failure()
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Send Slack notification if build fails
|
|
||||||
run: |
|
|
||||||
$pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID"
|
|
||||||
$message = "The build of the '${{ env.TOOL_NAME }}' detection pipeline failed :progress-error:\nLink to the pipeline: $pipelineUrl"
|
|
||||||
./helpers/get-new-tool-versions/send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" `
|
|
||||||
-ToolName "${{ env.TOOL_NAME }}" `
|
|
||||||
-Text "$message" `
|
|
||||||
-ImageUrl "https://avatars.githubusercontent.com/u/1525981?s=200&v=4"
|
|
||||||
@@ -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 @{
|
||||||
|
|||||||
4
.github/workflows/python-versions-runner.yml
vendored
4
.github/workflows/python-versions-runner.yml
vendored
@@ -21,11 +21,11 @@ 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: |
|
||||||
$versions = ${{ github.event.inputs.versions }}
|
$versions = ${{ github.event.inputs.versions }}
|
||||||
./builders/python-versions-runner.ps1 -Versions $versions.Split(",") -PublishRelease ${{ github.event.inputs.publish-releases }}
|
./builders/python-versions-runner.ps1 -Versions $versions.Split(",") -PublishRelease ${{ github.event.inputs.publish-releases }}
|
||||||
env:
|
env:
|
||||||
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
|
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
6
.github/workflows/releases-validation.yml
vendored
6
.github/workflows/releases-validation.yml
vendored
@@ -14,11 +14,11 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04]
|
os: [macos-latest, windows-latest, ubuntu-20.04, ubuntu-22.04]
|
||||||
python: [3.5.4, 3.6.7, 3.7.5, 3.8.1]
|
python: [3.9.12, 3.10.8, 3.11.10]
|
||||||
steps:
|
steps:
|
||||||
- name: setup-python ${{ matrix.python }}
|
- name: setup-python ${{ matrix.python }}
|
||||||
uses: actions/setup-python@v3
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python }}
|
python-version: ${{ matrix.python }}
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/test-python-version.yml
vendored
2
.github/workflows/test-python-version.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04]
|
os: [macos-latest, windows-latest, ubuntu-20.04, ubuntu-22.04]
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python ${{ github.event.inputs.version }}
|
- name: Setup Python ${{ github.event.inputs.version }}
|
||||||
uses: actions/setup-python@main
|
uses: actions/setup-python@main
|
||||||
|
|||||||
47
.github/workflows/validate-manifest.yml
vendored
47
.github/workflows/validate-manifest.yml
vendored
@@ -1,48 +1,21 @@
|
|||||||
name: Validate manifest
|
name: Validate manifest
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
# The GITHUB_TOKEN secret is used to create a PR
|
||||||
|
# The pull_request event will not be triggered by it
|
||||||
|
# That's one of the reasons we need the schedule to validate the versions-manifest.json file
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 8,20 * * *'
|
- cron: '0 8,20 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
paths:
|
paths:
|
||||||
- 'versions-manifest.json'
|
- 'versions-manifest.json'
|
||||||
|
|
||||||
env:
|
|
||||||
TOOL_NAME: "Python"
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validation:
|
manifest:
|
||||||
runs-on: ubuntu-latest
|
uses: actions/versions-package-tools/.github/workflows/validate-manifest.yml@main
|
||||||
steps:
|
with:
|
||||||
- uses: actions/checkout@v2
|
tool-name: "Python"
|
||||||
with:
|
image-url: "https://avatars.githubusercontent.com/u/1525981?s=200&v=4"
|
||||||
submodules: true
|
secrets: inherit
|
||||||
|
|
||||||
- name: Validate python-versions manifest
|
|
||||||
run: .\helpers\packages-generation\manifest-validator.ps1 -ManifestPath '.\versions-manifest.json'
|
|
||||||
|
|
||||||
check_build:
|
|
||||||
name: Check validation for failures
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [validation]
|
|
||||||
if: failure()
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: Send Slack notification if validation fails
|
|
||||||
run: |
|
|
||||||
$pipelineUrl = "$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID"
|
|
||||||
$message = "The validation of python-versions manifest failed. \nLink to the pipeline: $pipelineUrl"
|
|
||||||
.\helpers\get-new-tool-versions\send-slack-notification.ps1 -Url "${{ secrets.SLACK_CHANNEL_URL }}" `
|
|
||||||
-ToolName "${{ env.TOOL_NAME }}" `
|
|
||||||
-Text "$message" `
|
|
||||||
-ImageUrl "https://www.python.org/static/community_logos/python-powered-h-100x130.png"
|
|
||||||
25
README.md
25
README.md
@@ -1,16 +1,25 @@
|
|||||||
# 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.
|
Some versions are pre-installed on [runner-images](https://github.com/actions/runner-images) images.
|
||||||
|
More versions are available to install on-the-fly through the [`setup-python`](https://github.com/actions/setup-python) action.
|
||||||
|
|
||||||
Some versions are pre-installed on [virtual-environments](https://github.com/actions/virtual-environments) images.
|
## Building installation packages
|
||||||
More versions will (soon!) be available to install on-the-fly through the [`setup-python`](https://github.com/actions/setup-python) action.
|
**Ubuntu:** The official Python sources are downloaded from [python.org](https://www.python.org/ftp/python/), built using the `make` tool, and archived along with the installation script for further distribution and installation. We build each Python version against all [versions of Ubuntu](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources) that are available at the time the Python version is released.
|
||||||
|
|
||||||
## Adding new versions
|
**macOS:**
|
||||||
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.
|
- For **Python < 3.11**, the official Python sources are downloaded from [python.org](https://www.python.org/ftp/python/), built using the `make` tool, and archived along with the installation script for further distribution and installation. For backward compatibility, we build each Python version against the oldest [version of macOS](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources) that is available at the time the Python version is released.
|
||||||
|
- For **Python >= 3.11**, the official macOS `universal2` Python binaries are simply downloaded from [python.org](https://www.python.org/ftp/python/) and archived along with the installation script for further distribution and installation.
|
||||||
|
|
||||||
|
**Windows:** The official Python executables are simply downloaded from [python.org](https://www.python.org/ftp/python/) and archived along with the installation script for further distribution and installation.
|
||||||
|
|
||||||
|
## Support policy
|
||||||
|
We aim to make new versions of Python available as soon as they are released. Both stable and prerelease versions are considered for building and releasing. Please open an issue in [actions/setup-python](https://github.com/actions/setup-python) if a version you're looking for isn't available.
|
||||||
|
|
||||||
|
When a new version of an operating system is released and made available for use with [GitHub hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources), we will provide the **latest existing patch versions of Python for all major versions that have not reached [end-of-life](https://devguide.python.org/versions/)**. Any subsequent Python versions will be made available for the new OS as well.
|
||||||
|
|
||||||
## 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
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ function Invoke-Workflow {
|
|||||||
}
|
}
|
||||||
} | ConvertTo-Json
|
} | ConvertTo-Json
|
||||||
$headers = @{
|
$headers = @{
|
||||||
Authorization="Bearer $env:PERSONAL_TOKEN"
|
Authorization="Bearer $env:TOKEN"
|
||||||
}
|
}
|
||||||
$actionsRepoUri = "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/actions"
|
$actionsRepoUri = "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/actions"
|
||||||
Invoke-RestMethod -uri "$actionsRepoUri/workflows/python-builder.yml/dispatches" -method POST -headers $headers -body $payload
|
Invoke-RestMethod -uri "$actionsRepoUri/workflows/build-python-packages.yml/dispatches" -method POST -headers $headers -body $payload
|
||||||
|
|
||||||
$result = [PSCustomObject]@{
|
$result = [PSCustomObject]@{
|
||||||
Version = $Version
|
Version = $Version
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ 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.
|
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
|
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.
|
so we remain backwards compatible.
|
||||||
@@ -31,6 +31,14 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Prepare system environment by installing dependencies and required packages.
|
Prepare system environment by installing dependencies and required packages.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
|
if ($this.Version -eq "3.7.17") {
|
||||||
|
# We have preinstalled ncurses and readLine on the hoster runners. But we need to install bzip2 for
|
||||||
|
# setting up an environemnt
|
||||||
|
# If we get any issues realted to ncurses or readline we can try to run this command
|
||||||
|
# brew install ncurses readline
|
||||||
|
Execute-Command -Command "brew install bzip2"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[void] Configure() {
|
[void] Configure() {
|
||||||
@@ -64,9 +72,22 @@ 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"
|
||||||
|
|
||||||
|
# For Python 3.7.2 and 3.7.3 we need to provide PATH for zlib to pack it properly. Otherwise the build will fail
|
||||||
|
# with the error: zipimport.ZipImportError: can't decompress data; zlib not available
|
||||||
|
if ($this.Version -eq "3.7.2" -or $this.Version -eq "3.7.3" -or $this.Version -eq "3.7.17") {
|
||||||
|
$env:LDFLAGS = "-L/usr/local/opt/zlib/lib"
|
||||||
|
$env:CFLAGS = "-I/usr/local/opt/zlib/include"
|
||||||
|
}
|
||||||
|
|
||||||
if ($this.Version -gt "3.7.12") {
|
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'"
|
$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'"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this.Version -eq "3.7.17") {
|
||||||
|
$env:LDFLAGS += " -L$(brew --prefix bzip2)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix ncurses)/lib"
|
||||||
|
$env:CFLAGS += " -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(brew --prefix ncurses)/include"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
|
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
|
||||||
@@ -143,6 +164,7 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
$variablesToReplace = @{
|
$variablesToReplace = @{
|
||||||
"{{__VERSION_FULL__}}" = $this.Version;
|
"{{__VERSION_FULL__}}" = $this.Version;
|
||||||
"{{__PKG_NAME__}}" = $this.GetPkgName();
|
"{{__PKG_NAME__}}" = $this.GetPkgName();
|
||||||
|
"{{__ARCH__}}" = $this.Architecture;
|
||||||
}
|
}
|
||||||
|
|
||||||
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
|
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
|
||||||
@@ -158,7 +180,7 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
|
|
||||||
$PkgVersion = [semver]"3.11.0-beta.1"
|
$PkgVersion = [semver]"3.11.0-beta.1"
|
||||||
|
|
||||||
if ($this.Version -ge $PkgVersion) {
|
if (($this.Version -ge $PkgVersion) -or ($this.Architecture -eq "arm64")) {
|
||||||
Write-Host "Download Python $($this.Version) [$($this.Architecture)] package..."
|
Write-Host "Download Python $($this.Version) [$($this.Architecture)] package..."
|
||||||
$this.DownloadPkg()
|
$this.DownloadPkg()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"regex": "python-\\d+\\.\\d+\\.\\d+-(\\w+\\.\\d+)?-?(\\w+)-(\\d+\\.\\d+)?-?(x\\d+)",
|
"regex": "python-\\d+\\.\\d+\\.\\d+-(\\w+\\.\\d+)?-?(\\w+)-(\\d+\\.\\d+)?-?((x|arm)\\d+)",
|
||||||
"groups": {
|
"groups": {
|
||||||
"arch": 4,
|
"arch": 4,
|
||||||
"platform": 2,
|
"platform": 2,
|
||||||
|
|||||||
2
helpers
2
helpers
Submodule helpers updated: 6f1aa3ce73...896369fc7d
@@ -2,6 +2,7 @@ set -e
|
|||||||
|
|
||||||
PYTHON_FULL_VERSION="{{__VERSION_FULL__}}"
|
PYTHON_FULL_VERSION="{{__VERSION_FULL__}}"
|
||||||
PYTHON_PKG_NAME="{{__PKG_NAME__}}"
|
PYTHON_PKG_NAME="{{__PKG_NAME__}}"
|
||||||
|
ARCH="{{__ARCH__}}"
|
||||||
MAJOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 1)
|
MAJOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 1)
|
||||||
MINOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 2)
|
MINOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 2)
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@ fi
|
|||||||
|
|
||||||
PYTHON_TOOLCACHE_PATH=$TOOLCACHE_ROOT/Python
|
PYTHON_TOOLCACHE_PATH=$TOOLCACHE_ROOT/Python
|
||||||
PYTHON_TOOLCACHE_VERSION_PATH=$PYTHON_TOOLCACHE_PATH/$PYTHON_FULL_VERSION
|
PYTHON_TOOLCACHE_VERSION_PATH=$PYTHON_TOOLCACHE_PATH/$PYTHON_FULL_VERSION
|
||||||
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/x64
|
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/$ARCH
|
||||||
PYTHON_FRAMEWORK_PATH="/Library/Frameworks/Python.framework/Versions/${MAJOR_VERSION}.${MINOR_VERSION}"
|
PYTHON_FRAMEWORK_PATH="/Library/Frameworks/Python.framework/Versions/${MAJOR_VERSION}.${MINOR_VERSION}"
|
||||||
PYTHON_APPLICATION_PATH="/Applications/Python ${MAJOR_VERSION}.${MINOR_VERSION}"
|
PYTHON_APPLICATION_PATH="/Applications/Python ${MAJOR_VERSION}.${MINOR_VERSION}"
|
||||||
|
|
||||||
@@ -29,10 +30,10 @@ if [ ! -d $PYTHON_TOOLCACHE_PATH ]; then
|
|||||||
else
|
else
|
||||||
# remove ALL other directories for same major.minor python versions
|
# remove ALL other directories for same major.minor python versions
|
||||||
find $PYTHON_TOOLCACHE_PATH -name "${MAJOR_VERSION}.${MINOR_VERSION}.*"|while read python_version;do
|
find $PYTHON_TOOLCACHE_PATH -name "${MAJOR_VERSION}.${MINOR_VERSION}.*"|while read python_version;do
|
||||||
python_version_x64="$python_version/x64"
|
python_version_arch="$python_version/$ARCH"
|
||||||
if [ -e "$python_version_x64" ];then
|
if [ -e "$python_version_arch" ];then
|
||||||
echo "Deleting Python $python_version_x64"
|
echo "Deleting Python $python_version_arch"
|
||||||
rm -rf "$python_version_x64"
|
rm -rf "$python_version_arch"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@@ -54,7 +55,13 @@ echo "Create additional symlinks (Required for the UsePythonVersion Azure Pipeli
|
|||||||
ln -s ./bin/$PYTHON_MAJOR_DOT_MINOR python
|
ln -s ./bin/$PYTHON_MAJOR_DOT_MINOR python
|
||||||
|
|
||||||
cd bin/
|
cd bin/
|
||||||
ln -s $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR
|
|
||||||
|
# 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
|
if [ ! -f python ]; then
|
||||||
ln -s $PYTHON_MAJOR_DOT_MINOR python
|
ln -s $PYTHON_MAJOR_DOT_MINOR python
|
||||||
fi
|
fi
|
||||||
@@ -63,10 +70,10 @@ chmod +x ../python $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR pyt
|
|||||||
|
|
||||||
echo "Upgrading pip..."
|
echo "Upgrading pip..."
|
||||||
./python -m ensurepip
|
./python -m ensurepip
|
||||||
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location
|
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location --root-user-action=ignore
|
||||||
|
|
||||||
echo "Install OpenSSL certificates"
|
echo "Install OpenSSL certificates"
|
||||||
sh -e "${PYTHON_APPLICATION_PATH}/Install Certificates.command"
|
sh -e "${PYTHON_APPLICATION_PATH}/Install Certificates.command"
|
||||||
|
|
||||||
echo "Create complete file"
|
echo "Create complete file"
|
||||||
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete
|
touch $PYTHON_TOOLCACHE_VERSION_PATH/${ARCH}.complete
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ chmod +x ../python $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJORMINOR pyth
|
|||||||
|
|
||||||
echo "Upgrading pip..."
|
echo "Upgrading pip..."
|
||||||
./python -m ensurepip
|
./python -m ensurepip
|
||||||
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location
|
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location --root-user-action=ignore
|
||||||
|
|
||||||
echo "Create complete file"
|
echo "Create complete file"
|
||||||
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete
|
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete
|
||||||
|
|||||||
@@ -101,7 +101,9 @@ if ($null -ne $InstalledVersions) {
|
|||||||
if (Test-Path -Path $InstalledVersion) {
|
if (Test-Path -Path $InstalledVersion) {
|
||||||
Write-Host "Deleting $InstalledVersion..."
|
Write-Host "Deleting $InstalledVersion..."
|
||||||
Remove-Item -Path $InstalledVersion -Recurse -Force
|
Remove-Item -Path $InstalledVersion -Recurse -Force
|
||||||
Remove-Item -Path "$($InstalledVersion.Parent.FullName)/${Architecture}.complete" -Force -Verbose
|
if (Test-Path -Path "$($InstalledVersion.Parent.FullName)/${Architecture}.complete") {
|
||||||
|
Remove-Item -Path "$($InstalledVersion.Parent.FullName)/${Architecture}.complete" -Force -Verbose
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -132,7 +134,7 @@ if ($MajorVersion -ne "2") {
|
|||||||
|
|
||||||
Write-Host "Install and upgrade Pip"
|
Write-Host "Install and upgrade Pip"
|
||||||
$PythonExePath = Join-Path -Path $PythonArchPath -ChildPath "python.exe"
|
$PythonExePath = Join-Path -Path $PythonArchPath -ChildPath "python.exe"
|
||||||
cmd.exe /c "$PythonExePath -m ensurepip && $PythonExePath -m pip install --upgrade pip --no-warn-script-location"
|
cmd.exe /c "$PythonExePath -m ensurepip && $PythonExePath -m pip install --upgrade pip --no-warn-script-location --root-user-action=ignore"
|
||||||
|
|
||||||
Write-Host "Create complete file"
|
Write-Host "Create complete file"
|
||||||
New-Item -ItemType File -Path $PythonVersionPath -Name "$Architecture.complete" | Out-Null
|
New-Item -ItemType File -Path $PythonVersionPath -Name "$Architecture.complete" | Out-Null
|
||||||
|
|||||||
@@ -5,16 +5,16 @@ $Configuration = Read-ConfigurationFile -Filepath $ConfigurationFile
|
|||||||
|
|
||||||
$stableTestCases = @(
|
$stableTestCases = @(
|
||||||
@{ ReleaseName = "python-3.8.3-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
|
@{ ReleaseName = "python-3.8.3-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
|
||||||
@{ ReleaseName = "python-3.8.3-linux-18.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "18.04"; arch = "x64"} },
|
|
||||||
@{ ReleaseName = "python-3.8.3-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
|
@{ ReleaseName = "python-3.8.3-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
|
||||||
|
@{ ReleaseName = "python-3.8.3-linux-22.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "22.04"; arch = "x64"} },
|
||||||
@{ ReleaseName = "python-3.8.3-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
|
@{ ReleaseName = "python-3.8.3-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
|
||||||
@{ ReleaseName = "python-3.8.3-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} }
|
@{ ReleaseName = "python-3.8.3-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} }
|
||||||
) | ForEach-Object { $_.Configuration = $Configuration; $_ }
|
) | ForEach-Object { $_.Configuration = $Configuration; $_ }
|
||||||
|
|
||||||
$unstableTestCases = @(
|
$unstableTestCases = @(
|
||||||
@{ ReleaseName = "python-3.9.0-alpha.2-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
|
@{ ReleaseName = "python-3.9.0-alpha.2-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
|
||||||
@{ ReleaseName = "python-3.9.0-rc.4-linux-18.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "18.04"; arch = "x64"} },
|
|
||||||
@{ ReleaseName = "python-3.9.0-beta.2-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
|
@{ ReleaseName = "python-3.9.0-beta.2-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
|
||||||
|
@{ ReleaseName = "python-3.9.0-rc.4-linux-22.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "22.04"; arch = "x64"} },
|
||||||
@{ ReleaseName = "python-3.9.0-beta.2-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
|
@{ ReleaseName = "python-3.9.0-beta.2-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
|
||||||
@{ ReleaseName = "python-3.9.0-beta.2-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} }
|
@{ ReleaseName = "python-3.9.0-beta.2-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} }
|
||||||
) | ForEach-Object { $_.Configuration = $Configuration; $_ }
|
) | ForEach-Object { $_.Configuration = $Configuration; $_ }
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ param (
|
|||||||
[semver] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
|
[semver] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
|
||||||
$Version,
|
$Version,
|
||||||
[string] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
|
[string] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
|
||||||
$Platform
|
$Platform,
|
||||||
|
[string] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
|
||||||
|
$Architecture
|
||||||
)
|
)
|
||||||
|
|
||||||
Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1")
|
Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1")
|
||||||
@@ -56,7 +58,7 @@ Describe "Tests" {
|
|||||||
# }
|
# }
|
||||||
# }
|
# }
|
||||||
|
|
||||||
if (($Version -ge "3.2.0") -and -not ([semver]"$($Version.Major).$($Version.Minor)" -eq [semver]"3.11" -and $Version.PreReleaseLabel)) {
|
if (($Version -ge "3.2.0") -and ($Version -lt "3.11.0") -and (($Platform -ne "darwin") -or ($Architecture -ne "arm64"))) {
|
||||||
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
|
||||||
}
|
}
|
||||||
@@ -80,7 +82,7 @@ Describe "Tests" {
|
|||||||
|
|
||||||
It "Check if python configuration is correct" {
|
It "Check if python configuration is correct" {
|
||||||
$nativeVersion = Convert-Version -version $Version
|
$nativeVersion = Convert-Version -version $Version
|
||||||
"python ./sources/python-config-test.py $Version $nativeVersion" | Should -ReturnZeroExitCode
|
"python ./sources/python-config-test.py $Version $nativeVersion $Architecture" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Check if shared libraries are linked correctly" {
|
It "Check if shared libraries are linked correctly" {
|
||||||
@@ -93,7 +95,8 @@ Describe "Tests" {
|
|||||||
It "Validate Pyinstaller" {
|
It "Validate Pyinstaller" {
|
||||||
"pip install pyinstaller" | Should -ReturnZeroExitCode
|
"pip install pyinstaller" | Should -ReturnZeroExitCode
|
||||||
"pyinstaller --onefile ./sources/simple-test.py" | Should -ReturnZeroExitCode
|
"pyinstaller --onefile ./sources/simple-test.py" | Should -ReturnZeroExitCode
|
||||||
"./dist/simple-test" | Should -ReturnZeroExitCode
|
$distPath = [IO.Path]::Combine($pwd, "dist", "simple-test")
|
||||||
|
"$distPath" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import distutils.sysconfig
|
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
pprint(sysconfig.get_config_vars())
|
pprint(sysconfig.get_config_vars())
|
||||||
pprint(distutils.sysconfig.get_config_vars())
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
import distutils.sysconfig
|
|
||||||
from distutils.version import LooseVersion
|
|
||||||
import sysconfig
|
import sysconfig
|
||||||
import sys
|
import sys
|
||||||
import platform
|
import platform
|
||||||
@@ -9,12 +7,13 @@ import os
|
|||||||
os_type = platform.system()
|
os_type = platform.system()
|
||||||
version = sys.argv[1]
|
version = sys.argv[1]
|
||||||
nativeVersion = sys.argv[2]
|
nativeVersion = sys.argv[2]
|
||||||
|
architecture = sys.argv[3]
|
||||||
|
|
||||||
versions=version.split(".")
|
versions=version.split(".")
|
||||||
version_major=int(versions[0])
|
version_major=int(versions[0])
|
||||||
version_minor=int(versions[1])
|
version_minor=int(versions[1])
|
||||||
|
|
||||||
pkg_installer = os_type == 'Darwin' and (version_major == 3 and version_minor >= 11)
|
pkg_installer = os_type == 'Darwin' and ((version_major == 3 and version_minor >= 11) or (architecture == "arm64"))
|
||||||
|
|
||||||
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')
|
||||||
@@ -40,7 +39,7 @@ if lib_dir_path != expected_lib_dir_path:
|
|||||||
### Validate shared libraries
|
### Validate shared libraries
|
||||||
if is_shared:
|
if is_shared:
|
||||||
print('%s was built with shared extensions' % ld_library_name)
|
print('%s was built with shared extensions' % ld_library_name)
|
||||||
|
|
||||||
### Validate libpython extension
|
### Validate libpython extension
|
||||||
ld_library_extension = ld_library_name.split('.')[-1]
|
ld_library_extension = ld_library_name.split('.')[-1]
|
||||||
if ld_library_extension != expected_ld_library_extension:
|
if ld_library_extension != expected_ld_library_extension:
|
||||||
@@ -54,7 +53,7 @@ else:
|
|||||||
### Validate macOS
|
### Validate macOS
|
||||||
if os_type == 'Darwin':
|
if os_type == 'Darwin':
|
||||||
### Validate openssl links
|
### Validate openssl links
|
||||||
if LooseVersion(nativeVersion) < LooseVersion("3.7.0"):
|
if version_major == 3 and version_minor < 7:
|
||||||
expected_ldflags = '-L/usr/local/opt/openssl@1.1/lib'
|
expected_ldflags = '-L/usr/local/opt/openssl@1.1/lib'
|
||||||
ldflags = sysconfig.get_config_var('LDFLAGS')
|
ldflags = sysconfig.get_config_var('LDFLAGS')
|
||||||
|
|
||||||
@@ -64,7 +63,7 @@ if os_type == 'Darwin':
|
|||||||
else:
|
else:
|
||||||
expected_openssl_includes = '-I/usr/local/opt/openssl@1.1/include'
|
expected_openssl_includes = '-I/usr/local/opt/openssl@1.1/include'
|
||||||
expected_openssl_ldflags ='-L/usr/local/opt/openssl@1.1/lib'
|
expected_openssl_ldflags ='-L/usr/local/opt/openssl@1.1/lib'
|
||||||
|
|
||||||
openssl_includes = sysconfig.get_config_var('OPENSSL_INCLUDES')
|
openssl_includes = sysconfig.get_config_var('OPENSSL_INCLUDES')
|
||||||
openssl_ldflags = sysconfig.get_config_var('OPENSSL_LDFLAGS')
|
openssl_ldflags = sysconfig.get_config_var('OPENSSL_LDFLAGS')
|
||||||
|
|
||||||
@@ -78,6 +77,7 @@ if os_type == 'Darwin':
|
|||||||
exit(1)
|
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,7 +7,6 @@ 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 = [
|
||||||
@@ -266,10 +265,14 @@ 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
|
# 'smtpd', 'asyncore' and 'asynchat' modules have been removed from Python 3.12
|
||||||
if sys.version_info >= (3, 11) and platform.system() == 'Linux' and '18.04' in platform.version():
|
# https://docs.python.org/dev/whatsnew/3.12.html
|
||||||
standard_library.remove('tkinter')
|
if sys.version_info >= (3, 12):
|
||||||
standard_library.remove('turtle')
|
standard_library.remove('distutils')
|
||||||
|
standard_library.remove('imp')
|
||||||
|
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 = [
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user