Compare commits

...

79 Commits

Author SHA1 Message Date
Mikhail Timofeev
0d45fa8df4 Merge pull request #162 from actions/update-versions-manifest-file 2022-05-08 20:19:03 +04:00
Service account
f41dd90d80 Update versions-manifest 2022-05-08 15:31:51 +00:00
Marko Zivic
b104d17dcc Merge pull request #161 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 05/04/2022
2022-05-04 11:35:03 +02:00
Service account
8f6a357755 Update versions-manifest 2022-05-04 09:06:41 +00:00
Mikhail Timofeev
53bd6a1e0c Merge pull request #160 from mikhailkoliada/add_ubuntu22-04
Add Ubuntu22.04 support
2022-05-04 11:28:14 +04:00
Mikhail Koliada
8fd7008b44 Add Ubuntu22.04 support 2022-05-03 19:18:56 +02:00
Marko Zivic
1b8db98a89 Merge pull request #159 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 04/29/2022
2022-04-29 11:48:58 +02:00
Service account
2b001ef9b4 Update versions-manifest 2022-04-29 08:39:35 +00:00
Marko Zivic
dfcce03e53 Merge pull request #157 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 04/15/2022
2022-04-15 12:40:43 +02:00
Service account
c58bf9c525 Update versions-manifest 2022-04-15 06:22:48 +00:00
Vladimir Safonkin
fb0cb927f6 Merge pull request #155 from vsafonkin/v-vsafonkin/python-3.11.0-alpha-7
Exclude tkinter and turtle for Python 3.11.0 alpha7 on Ubuntu 18.04
2022-04-12 19:08:12 +03:00
Vladimir Safonkin
a1129e9e45 Exclude tkinter and turtle for Python 3.11.0 alpha7 on Ubuntu 18.04 2022-04-11 09:04:36 +02:00
Ethan Chiu
7e0253ff52 Merge pull request #153 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/24/2022
2022-03-24 11:47:07 -07:00
Ethan Chiu
769f6822ee Merge branch 'main' into update-versions-manifest-file 2022-03-24 11:46:23 -07:00
Service account
18aeba4a09 Update versions-manifest 2022-03-24 18:06:51 +00:00
Mikhail Timofeev
5f1fbb8e56 Merge pull request #152 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/24/2022
2022-03-24 22:06:29 +04:00
Service account
cda7fd9128 Update versions-manifest 2022-03-24 18:04:48 +00:00
Ethan Chiu
5ce03b9d33 Merge pull request #151 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/24/2022
2022-03-24 07:30:07 -07:00
Service account
daf0a68842 Update versions-manifest 2022-03-24 14:26:38 +00:00
Ethan Chiu
78b21b7354 Merge pull request #150 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/21/2022
2022-03-21 13:47:28 -07:00
Service account
ce8fa50334 Update versions-manifest 2022-03-21 20:31:43 +00:00
Ethan Chiu
8bea4cf3f8 Merge pull request #149 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/21/2022
2022-03-21 10:19:11 -07:00
Service account
cf55c35a73 Update versions-manifest 2022-03-21 17:06:45 +00:00
Ethan Chiu
b4ee3eb7b0 Merge pull request #148 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/21/2022
2022-03-21 10:01:42 -07:00
Service account
153004cc91 Update versions-manifest 2022-03-21 16:00:38 +00:00
Mikhail Timofeev
3d1cc99059 Merge pull request #147 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/19/2022
2022-03-20 23:53:10 +04:00
Service account
ce7d5698da Update versions-manifest 2022-03-19 19:32:06 +00:00
Ethan Chiu
386cf095d8 Merge pull request #146 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/17/2022
2022-03-17 12:22:11 -07:00
Service account
2552b10e27 Update versions-manifest 2022-03-17 19:09:53 +00:00
Ethan Chiu
cd04e6bb36 Merge pull request #142 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 03/17/2022
2022-03-17 11:35:53 -07:00
Service account
0cbb516273 Update versions-manifest 2022-03-17 03:48:11 +00:00
Maksim Shilov
ba3a558474 Remove AzDo related code (#144) 2022-02-25 20:02:07 +03:00
Mikhail Timofeev
79e9e3beab Merge pull request #143 from nikolai-frolov/users/v-nfrolov/update-python-builder
Add ability to choose platform to build Python
2022-02-21 11:11:41 +03:00
Maksim Shilov
e74fccfe13 Adding python-versions-runner workflow (#137) 2022-02-18 15:14:27 +03:00
nikolai-frolov
044e2816fb Minor corrections according to comments 2022-02-18 13:18:51 +03:00
nikolai-frolov
588fb9d893 Update generate_matrix job to allow execution via PR 2022-02-17 11:55:26 +03:00
nikolai-frolov
3ec6c98bc8 Add ability to choose platform to build Python 2022-02-16 20:42:04 +03:00
github-actions[bot]
797eb71c41 Update versions-manifest (#141)
Co-authored-by: Service account <no-reply@microsoft.com>
2022-02-07 10:44:15 +03:00
github-actions[bot]
210583e703 Update versions-manifest (#140)
Co-authored-by: Service account <no-reply@microsoft.com>
2022-02-04 11:51:05 +03:00
github-actions[bot]
8cfdc61c3b Update versions-manifest (#139)
Co-authored-by: Service account <no-reply@microsoft.com>
2022-02-03 10:43:25 +03:00
github-actions[bot]
b27516266f Update versions-manifest (#138)
Co-authored-by: Service account <no-reply@microsoft.com>
2022-01-27 10:54:24 +03:00
Dmitry Shibanov
8beb652c81 extend check for all alpha versions of 3.11 python (#136) 2022-01-27 10:23:10 +03:00
Mikhail Timofeev
7e70acf5f2 Merge pull request #135 from mikhailkoliada/migrate_to_pester5
Migrate build pipeline to Pester v5
2022-01-25 11:28:40 +03:00
Mikhail Koliada
135879dbe3 assign results to a var 2022-01-24 20:31:33 +03:00
Mikhail Timofeev
765df7c393 Merge pull request #134 from shilovmaksim/shilovmaksim/get-python-versions
Migrate get-python-packages workflow from ado to gh
2022-01-24 11:03:27 +03:00
Mikhail Koliada
811f1bc41a install latest pester 2022-01-21 13:26:46 +03:00
Mikhail Koliada
133a2c6b96 Migrate build pipeline to Pester v5 2022-01-21 12:55:40 +03:00
Maksim Shilov
ba826d5d0b Correct names for workflow, jobs and workflows to trigger 2022-01-21 12:06:50 +03:00
Maksim Shilov
9975c96a92 Migrate get-python-packages to gh 2022-01-21 11:56:38 +03:00
Mikhail Timofeev
a5914bfabd Merge pull request #132 from mikhailkoliada/python_versions_gh_migrate
Migrate python-versions pipeline from AzDO to GH Actions
2022-01-17 10:54:57 +03:00
github-actions[bot]
af28f23a02 Update versions-manifest (#133)
Co-authored-by: Service account <no-reply@microsoft.com>
2022-01-16 18:47:43 +03:00
Mikhail Koliada
e3851845a3 Update python-builder.psm1 2022-01-15 14:28:07 +03:00
Mikhail Koliada
3beea61c1f specify architecture on setup 2022-01-14 19:56:43 +03:00
Mikhail Koliada
41f641758a another round of improvements 2022-01-14 19:53:00 +03:00
Mikhail Koliada
3792b6282a misc improvements 2022-01-14 12:03:40 +03:00
Mikhail Koliada
4a2af81ac1 Update .github/workflows/python-builder.yml
Co-authored-by: Mikhail Timofeev <48208649+miketimofeev@users.noreply.github.com>
2022-01-13 19:27:50 +03:00
Mikhail Koliada
59e54b2d8b Migrate python-versions pipeline to GH Actions 2022-01-13 18:38:58 +03:00
Mikhail Timofeev
c310309d73 Merge pull request #131 from actions/v-mkoliada/switch_to_win2019
Migrate windows pipelines to windows-2019
2021-12-22 16:50:33 +03:00
Mikhail Koliada
026f6eb35e Migrate windows pipelines to windows-2019 2021-12-22 14:34:13 +03:00
Mikhail Timofeev
71d3f7dafc Merge pull request #130 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 12/22/2021
2021-12-22 13:54:20 +03:00
Service account
79fa4f7a23 Update versions-manifest 2021-12-22 10:53:57 +00:00
Mikhail Timofeev
63966c6b23 Merge pull request #128 from actions/v-mkoliada/clean_macos-10.15_migration
Migrate macOS pipelines to macOS-10.15
2021-12-22 13:02:02 +03:00
Mikhail Koliada
e9b568c830 Migrate macOS pipelines to macOS-10.15 2021-12-22 12:34:45 +03:00
Mikhail Timofeev
9e322ab404 Merge pull request #129 from actions/python3.11_sqlite
Skip sqlite module test for python3.11.0-alpha.3
2021-12-22 10:58:11 +03:00
Mikhail Koliada
1499930abd Skip sqlite module test for python3.11 2021-12-21 20:51:08 +03:00
Mikhail Timofeev
5aa825ba9f Merge pull request #127 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 12/14/2021
2021-12-14 16:33:21 +03:00
Service account
1a5414fab1 Update versions-manifest 2021-12-14 13:26:26 +00:00
github-actions[bot]
2e89c64089 Update versions-manifest (#126) 2021-11-16 09:54:41 +03:00
Mikhail Timofeev
71d75d73e0 Merge pull request #125 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 11/06/2021
2021-11-06 11:03:26 +03:00
Service account
d5c09cb931 Update versions-manifest 2021-11-06 08:02:31 +00:00
github-actions[bot]
6f2b7dc488 Update versions-manifest (#123)
Co-authored-by: Service account <no-reply@microsoft.com>
2021-10-19 15:34:31 +03:00
Hugo van Kemenade
641a2765a7 When upgrading pip, don't warn there's a new version of pip available (#117) 2021-10-18 14:37:19 +03:00
Nikolay Frolov
cd4aab3bcf Uptake of the latest changes for helpers submodule (#121) 2021-10-14 16:56:42 +03:00
MaksimZhukov
a0626d7456 Merge pull request #122 from actions/remove-ubuntu16
Remove Ubuntu 16.04 from pipeline
2021-10-14 11:37:19 +03:00
MaksimZhukov
c188065d51 Update build-python-packages.yml 2021-10-14 10:59:35 +03:00
MaksimZhukov
33626e4771 Merge pull request #120 from vsafonkin/v-vlsafo/remove-ubuntu-16.04
Remove Ubuntu 16.04 from images
2021-10-13 12:36:06 +03:00
Vladimir Safonkin
6b02f07da7 Remove Ubuntu 16.04 from images 2021-10-12 16:10:31 +03:00
MaksimZhukov
42ff8b9a2a Merge pull request #119 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 10/12/2021
2021-10-12 03:10:57 +03:00
Service account
3562b8bc34 Update versions-manifest 2021-10-12 00:09:27 +00:00
22 changed files with 1256 additions and 457 deletions

View File

@@ -30,4 +30,4 @@ jobs:
-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}"
-PullRequestBody "Update versions-manifest.json for release from ${formattedDate}"

View File

@@ -0,0 +1,95 @@
name: Get Python versions
on:
schedule:
- cron: '0 3,15 * * *'
workflow_dispatch:
env:
TOOL_NAME: "Python"
defaults:
run:
shell: pwsh
jobs:
find_new_versions:
name: Find new versions
runs-on: ubuntu-latest
outputs:
versions_output: ${{ steps.Get_new_versions.outputs.TOOL_VERSIONS }}
steps:
- 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"

218
.github/workflows/python-builder.yml vendored Normal file
View File

@@ -0,0 +1,218 @@
name: Build python package
on:
workflow_dispatch:
inputs:
VERSION:
description: 'Python version to build and upload'
default: '3.9.9'
required: true
PUBLISH_RELEASES:
description: 'Whether to publish releases'
required: true
default: 'false'
PLATFORMS:
description: 'Platforms for execution in "os" or "os_arch" format (arch is "x64" by default)'
required: true
default: 'ubuntu-18.04,ubuntu-20.04,ubuntu-22.04,macos-10.15,windows-2019_x64,windows-2019_x86'
pull_request:
paths-ignore:
- 'versions-manifest.json'
- 'LICENSE'
- '**.md'
branches:
- 'main'
env:
VERSION: ${{ github.event.inputs.VERSION || '3.9.9' }}
defaults:
run:
shell: pwsh
jobs:
generate_matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.generate-matrix.outputs.matrix }}
steps:
- name: Generate execution matrix
id: generate-matrix
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()
$matrix = @()
foreach ($configuration in $configurations) {
$parts = $configuration.Split("_")
$os = $parts[0]
$arch = if ($parts[1]) {$parts[1]} else {"x64"}
switch -wildcard ($os) {
"*ubuntu*" { $platform = $os.Replace("ubuntu","linux")}
"*macos*" { $platform = 'darwin' }
"*windows*" { $platform = 'win32' }
}
$matrix += @{
'platform' = $platform
'os' = $os
'arch' = $arch
}
}
echo "::set-output name=matrix::$($matrix | ConvertTo-Json -Compress)"
build_python:
needs: generate_matrix
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
runs-on: ${{ matrix.os }}
env:
ARTIFACT_NAME: python-${{ github.event.inputs.VERSION || '3.9.9' }}-${{ matrix.platform }}-${{ matrix.arch }}
steps:
- name: Check out repository code
uses: actions/checkout@v2
with:
submodules: true
- name: Build Python ${{ env.VERSION }}
run: |
./builders/build-python.ps1 -Version $env:VERSION `
-Platform ${{ matrix.platform }} -Architecture ${{ matrix.arch }}
- name: Publish artifact
uses: actions/upload-artifact@v2
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ runner.temp }}/artifact
test_python:
needs: [generate_matrix, build_python]
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
runs-on: ${{ matrix.os }}
env:
ARTIFACT_NAME: python-${{ github.event.inputs.VERSION || '3.9.9' }}-${{ matrix.platform }}-${{ matrix.arch }}
steps:
- name: Check out repository code
uses: actions/checkout@v2
with:
submodules: true
- name: Fully cleanup the toolcache directory before testing
run: ./helpers/clean-toolcache.ps1 -ToolName "Python"
- name: Download artifact
uses: actions/download-artifact@v2
with:
path: ${{ runner.temp }}
- name: Extract files
run: |
if ('${{ matrix.platform }}' -eq 'win32') {
$artifactName = "${{ env.ARTIFACT_NAME }}.zip"
7z.exe x "$artifactName" -y | Out-Null
} else {
$artifactName = "${{ env.ARTIFACT_NAME }}.tar.gz"
tar -xzf $artifactName
}
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
- name: Apply build artifact to the local machine
run: |
if ('${{ matrix.platform }}' -eq 'win32') {
powershell ./setup.ps1
} else {
sh ./setup.sh
cp ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}/build_output.txt ${{ runner.temp }}
}
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
- name: Setup Python ${{ env.VERSION }}
uses: actions/setup-python@v2
with:
python-version: ${{ env.VERSION }}
architecture: ${{ matrix.arch }}
- name: Verbose sysconfig dump
if: runner.os == 'Linux' || runner.os == 'macOS'
run: python ./sources/python-config-output.py
working-directory: ${{ github.workspace }}/tests
- name: Verbose python binary links
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
$pythonLocation = which python
if ('${{ matrix.platform }}' -eq 'darwin') { otool -L $pythonLocation } else { ldd $pythonLocation }
- name: Run tests
run: |
Install-Module Pester -Force -Scope CurrentUser
Import-Module Pester
$pesterContainer = New-PesterContainer -Path './python-tests.ps1' -Data @{
Version="${{ env.VERSION }}";
Platform="${{ matrix.platform }}";
}
$Result = Invoke-Pester -Container $pesterContainer -PassThru
if ($Result.FailedCount -gt 0) {
$host.SetShouldExit($Result.FailedCount)
exit $Result.FailedCount
}
working-directory: ${{ github.workspace }}/tests
publish_release:
name: Publish release
if: github.event_name == 'workflow_dispatch' && github.event.inputs.PUBLISH_RELEASES == 'true'
needs: test_python
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v2
- name: Publish Release ${{ env.VERSION }}
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.VERSION }}-${{ github.run_id }}
release_name: ${{ env.VERSION }}
body: |
Python ${{ env.VERSION }}
- name: Upload release assets
uses: actions/github-script@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
for (let artifactDir of fs.readdirSync('.')) {
let artifactName = fs.readdirSync(`${artifactDir}`)[0];
console.log(`Upload ${artifactName} asset`);
github.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ steps.create_release.outputs.id }},
name: artifactName,
data: fs.readFileSync(`./${artifactDir}/${artifactName}`)
});
}
trigger_pr:
name: Trigger "Create Pull Request" workflow
needs: publish_release
runs-on: ubuntu-latest
steps:
- name: Trigger "Create Pull Request" workflow
uses: actions/github-script@v3
with:
github-token: ${{ secrets.PERSONAL_TOKEN }}
script: |
github.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'create-pr.yml',
ref: 'main'
});

View File

@@ -0,0 +1,31 @@
name: Python versions runner
on:
workflow_dispatch:
inputs:
versions:
description: 'Versions to build'
required: true
default: '","'
publish-releases:
description: 'Whether to publish releases'
required: true
default: 'false'
defaults:
run:
shell: pwsh
jobs:
trigger_builds:
name: Trigger python build
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Trigger python workflow
run: |
$versions = ${{ github.event.inputs.versions }}
./builders/python-versions-runner.ps1 -Versions $versions.Split(",") -PublishRelease ${{ github.event.inputs.publish-releases }}
env:
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}

View File

@@ -14,7 +14,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest, ubuntu-16.04, ubuntu-18.04, ubuntu-20.04]
os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04]
python: [3.5.4, 3.6.7, 3.7.5, 3.8.1]
steps:
- name: setup-python ${{ matrix.python }}

View File

@@ -1,31 +1,32 @@
name: Validate manifest
on:
schedule:
- cron: '0 8,20 * * *'
pull_request:
branches:
schedule:
- cron: '0 8,20 * * *'
pull_request:
branches:
- main
paths:
paths:
- 'versions-manifest.json'
env:
TOOL_NAME: "Python"
defaults:
run:
shell: pwsh
jobs:
validation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
- uses: actions/checkout@v2
with:
submodules: true
- name: Validate python-versions manifest
run: .\helpers\packages-generation\manifest-validator.ps1 -ManifestUrl https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json -AccessToken ${{ secrets.GITHUB_TOKEN }}
- name: Validate python-versions manifest
run: .\helpers\packages-generation\manifest-validator.ps1 -ManifestPath '.\versions-manifest.json'
check_build:
name: Check validation for failures

View File

@@ -1,132 +0,0 @@
name: $(date:yyyyMMdd)$(rev:.r)-Python-$(VERSION)
trigger: none
pr: none
stages:
- stage: Build_Python_MacOS
dependsOn: []
variables:
VmImage: 'macOS-10.14'
Platform: darwin
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Python_MacOS
condition: succeeded()
dependsOn: Build_Python_MacOS
variables:
VmImage: 'macOS-10.14'
Platform: darwin
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Python_Ubuntu_1604
dependsOn: []
variables:
VmImage: 'ubuntu-16.04'
Platform: linux-16.04
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Python_Ubuntu_1604
condition: succeeded()
dependsOn: Build_Python_Ubuntu_1604
variables:
VmImage: 'ubuntu-16.04'
Platform: linux-16.04
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Python_Ubuntu_1804
dependsOn: []
variables:
VmImage: 'ubuntu-18.04'
Platform: linux-18.04
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Python_Ubuntu_1804
condition: succeeded()
dependsOn: Build_Python_Ubuntu_1804
variables:
VmImage: 'ubuntu-18.04'
Platform: linux-18.04
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Python_Ubuntu_2004
dependsOn: []
variables:
VmImage: 'ubuntu-20.04'
Platform: linux-20.04
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Python_Ubuntu_2004
condition: succeeded()
dependsOn: Build_Python_Ubuntu_2004
variables:
VmImage: 'ubuntu-20.04'
Platform: linux-20.04
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Python_X64_Windows
dependsOn: []
variables:
VmImage: 'vs2017-win2016'
Platform: win32
Architecture: x64
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Python_x64_Windows
condition: succeeded()
dependsOn: Build_Python_X64_Windows
variables:
VmImage: 'vs2017-win2016'
Platform: win32
Architecture: x64
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Build_Python_x86_Windows
dependsOn: []
variables:
VmImage: 'vs2017-win2016'
Platform: win32
Architecture: x86
jobs:
- template: /azure-pipelines/templates/build-job.yml
- stage: Test_Python_x86_Windows
condition: succeeded()
dependsOn: Build_Python_x86_Windows
variables:
VmImage: 'vs2017-win2016'
Platform: win32
Architecture: x86
jobs:
- template: /azure-pipelines/templates/test-job.yml
- stage: Publish_Release
dependsOn: [Test_Python_MacOS, Test_Python_Ubuntu_1604, Test_Python_Ubuntu_1804, Test_Python_Ubuntu_2004, Test_Python_x64_Windows, Test_Python_x86_Windows]
jobs:
- deployment: Publish_Release
pool:
name: Azure Pipelines
vmImage: ubuntu-18.04
environment: 'Get Available Tools Versions - Publishing Approval'
strategy:
runOnce:
deploy:
steps:
- template: /azure-pipelines/templates/publish-release-steps.yml

View File

@@ -1,38 +0,0 @@
trigger: none
pr:
autoCancel: true
branches:
include:
- main
paths:
exclude:
- versions-manifest.json
jobs:
- job: Run_Builds
pool:
name: Azure Pipelines
vmImage: 'ubuntu-latest'
timeoutInMinutes: 180
steps:
- checkout: self
submodules: true
- task: PowerShell@2
displayName: 'Run build'
inputs:
targetType: filePath
filePath: './helpers/azure-devops/run-ci-builds.ps1 '
arguments: |
-TeamFoundationCollectionUri $(System.TeamFoundationCollectionUri) `
-AzureDevOpsProjectName $(System.TeamProject) `
-AzureDevOpsAccessToken $(System.AccessToken) `
-SourceBranch $(Build.SourceBranch) `
-DefinitionId $(DEFINITION_ID) `
-SourceVersion $(Build.SourceVersion) `
-ManifestLink $(MANIFEST_LINK) `
-WaitForBuilds $(WAIT_FOR_BUILDS) `
-ToolVersions "$(PYTHON_VERSIONS)" `
-RetryIntervalSec $(RETRY_INTERVAL_SEC) `
-RetryCount $(RETRY_COUNT)

View File

@@ -1,23 +0,0 @@
jobs:
- job: Build_Python
timeoutInMinutes: 90
pool:
name: Azure Pipelines
vmImage: $(VmImage)
steps:
- checkout: self
submodules: true
- task: PowerShell@2
displayName: 'Build Python $(VERSION)'
inputs:
targetType: filePath
filePath: './builders/build-python.ps1'
arguments: '-Version $(VERSION) -Platform $(Platform) -Architecture $(Architecture)'
pwsh: true
- task: PublishPipelineArtifact@1
displayName: 'Publish Artifact: Python $(VERSION)'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: 'python-$(VERSION)-$(Platform)-$(Architecture)'

View File

@@ -1,47 +0,0 @@
steps:
- download: none
- checkout: self
submodules: true
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
path: $(Build.BinariesDirectory)
- task: PowerShell@2
displayName: 'Create release Python $(VERSION)'
inputs:
TargetType: inline
script: |
$tagName = "$(VERSION)-$(Build.BuildId)"
$releaseBody = "Python $(VERSION)"
./helpers/github/create-release.ps1 -RepositoryFullName "$(Build.Repository.Name)" `
-AccessToken "$(GITHUB_TOKEN)" `
-ToolVersion "$(VERSION)" `
-TagName "$tagName" `
-ReleaseBody "$releaseBody" `
-EventType "$(EVENT_TYPE)"
- task: GitHubRelease@1
displayName: 'Upload release assets'
inputs:
gitHubConnection: 'Github Connection'
action: edit
tag: '$(VERSION)-$(Build.BuildId)'
title: '$(VERSION)'
releaseNotesSource: inline
releaseNotesInline: '$(RELEASE_NOTES_CONTENT)'
assets: '$(Build.BinariesDirectory)/*/*'
assetUploadMode: replace
addChangeLog: false
- task: PowerShell@2
displayName: 'Trigger "Create Pull Request" workflow'
inputs:
TargetType: inline
script: |
Import-Module (Join-Path (Get-Location).Path "github-api.psm1")
$gitHubApi = Get-GitHubApi -RepositoryFullName "$(Build.Repository.Name)" -AccessToken "$(GITHUB_TOKEN)"
$gitHubApi.CreateWorkflowDispatch("$(WORKFLOW_FILE_NAME)", "$(WORKFLOW_DISPATCH_REF)", "$(INPUTS)")
Write-Host "Please find created Pull request here: $(Build.Repository.Uri)/pulls"
workingDirectory: '$(Build.SourcesDirectory)/helpers/github'

View File

@@ -1,91 +0,0 @@
jobs:
- job: Test_Python
pool:
name: Azure Pipelines
vmImage: $(VmImage)
variables:
TestRunTitle: 'python-$(Platform)-$(Architecture)'
steps:
- checkout: self
submodules: true
- task: PowerShell@2
displayName: Fully cleanup the toolcache directory before testing
inputs:
targetType: filePath
filePath: helpers/clean-toolcache.ps1
arguments: -ToolName "Python"
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
artifact: 'python-$(VERSION)-$(Platform)-$(Architecture)'
path: $(Build.BinariesDirectory)
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '$(Build.BinariesDirectory)/python-$(VERSION)-$(Platform)-$(Architecture).*'
destinationFolder: $(Build.BinariesDirectory)
cleanDestinationFolder: false
overwriteExistingFiles: true
- task: PowerShell@2
displayName: 'Apply build artifact to the local machines'
inputs:
TargetType: inline
script: |
if ($env:PLATFORM -match 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh }
workingDirectory: '$(Build.BinariesDirectory)'
- task: UsePythonVersion@0
displayName: 'Use Python $(VERSION)'
inputs:
versionSpec: '$(VERSION)'
architecture: '$(Architecture)'
- task: PowerShell@2
displayName: 'Verbose sysconfig dump'
inputs:
TargetType: inline
script: |
Invoke-Expression "python ./sources/python-config-output.py"
workingDirectory: '$(Build.SourcesDirectory)/tests'
condition: ne(variables['Platform'], 'win32')
- task: PowerShell@2
displayName: 'Verbose python binary links'
inputs:
TargetType: inline
script: |
$pythonLocation = which python
if ($env:PLATFORM -match 'darwin') { otool -L $pythonLocation } else { ldd $pythonLocation }
workingDirectory: '$(Build.BinariesDirectory)'
condition: ne(variables['Platform'], 'win32')
- task: PowerShell@2
displayName: 'Run tests'
inputs:
TargetType: inline
script: |
Install-Module Pester -Force -Scope CurrentUser -RequiredVersion 4.10.1
Import-Module Pester
$pesterParams = @{
Path="./python-tests.ps1";
Parameters=@{
Version="$(VERSION)";
Platform="$(Platform)";
}
}
Invoke-Pester -Script $pesterParams -OutputFile "test_results.xml" -OutputFormat NUnitXml
pwsh: true
workingDirectory: '$(Build.SourcesDirectory)/tests'
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFiles: '*.xml'
testResultsFormat: NUnit
searchFolder: 'tests'
failTaskOnFailedTests: true
testRunTitle: "$(TestRunTitle)"
condition: always()

View File

@@ -0,0 +1,52 @@
function Invoke-Workflow {
param (
[string] $Version,
[string] $PublishRelease
)
$payload = @{
"ref" = "main"
"inputs" = @{
"VERSION" = "$Version"
"PUBLISH_RELEASES" = "$PublishRelease"
}
} | ConvertTo-Json
$headers = @{
Authorization="Bearer $env:PERSONAL_TOKEN"
}
$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
$result = [PSCustomObject]@{
Version = $Version
Conclusion = "failure"
Url = "Not run"
}
# Triggering workflow and verifying that it has been triggered with retries
while (-not $workflowToCheck) {
Start-Sleep -seconds 40
$workflowRuns = (Invoke-RestMethod "$actionsRepoUri/runs").workflow_runs | Where-Object {$_.status -like "*progress*" -and $_.id -ne $env:GITHUB_RUN_ID}
$workflowToCheck = $workflowRuns | Where-Object {
(Invoke-RestMethod "$actionsRepoUri/runs/$($_.id)/jobs").jobs.steps.name -like "*$Version"
}
$retries++
if ($retries -gt 10) {
Write-Host "Workflow triggered for version '$Version' not found or something went wrong with fetching the workflow status"
return $result
}
}
# Waiting for workflow to complete
while ($workflowToCheck.status -ne "completed") {
Start-Sleep -Seconds 120
$workflowToCheck = Invoke-RestMethod "$actionsRepoUri/runs/$($workflowToCheck.id)"
Write-Host "Workflow run with Id: $($workflowToCheck.id) for version '$Version' - status '$($workflowToCheck.status)'"
}
$result.Conclusion = $workflowToCheck.conclusion
$result.Url = $workflowToCheck.html_url
if ($workflowToCheck.conclusion -ne "success") {
Write-Host "Triggered workflow for version '$Version' completed unsuccessfully with result '$($workflowToCheck.conclusion)'. Check the logs: $($workflowToCheck.html_url)"
return $result
}
Write-Host "Triggered workflow for version '$Version' succeeded; Url: $($workflowToCheck.html_url)"
return $result
}

View File

@@ -22,6 +22,13 @@ class macOSPythonBuilder : NixPythonBuilder {
[string] $platform
) : Base($version, $architecture, $platform) { }
[void] PrepareEnvironment() {
<#
.SYNOPSIS
Prepare system environment by installing dependencies and required packages.
#>
}
[void] Configure() {
<#
.SYNOPSIS
@@ -40,8 +47,8 @@ class macOSPythonBuilder : NixPythonBuilder {
### and then add the appropriate paths for the header and library files to configure command.
### Link to documentation (https://cpython-devguide.readthedocs.io/setup/#build-dependencies)
if ($this.Version -lt "3.7.0") {
$env:LDFLAGS = "-L/usr/local/opt/openssl@1.1/lib"
$env:CFLAGS = "-I/usr/local/opt/openssl@1.1/include"
$env:LDFLAGS = "-L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/zlib/lib"
$env:CFLAGS = "-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/zlib/include"
} else {
$configureString += " --with-openssl=/usr/local/opt/openssl@1.1"
}
@@ -57,15 +64,4 @@ class macOSPythonBuilder : NixPythonBuilder {
Execute-Command -Command $configureString
}
[void] PrepareEnvironment() {
<#
.SYNOPSIS
Prepare system environment by installing dependencies and required packages.
#>
### reinstall header files to Avoid issue with X11 headers on Mojave
$pkgName = "/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg"
Execute-Command -Command "sudo installer -pkg $pkgName -target /"
}
}

View File

@@ -41,10 +41,16 @@ class PythonBuilder {
PythonBuilder ([semver] $version, [string] $architecture, [string] $platform) {
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
$this.HostedToolcacheLocation = $env:AGENT_TOOLSDIRECTORY
$this.TempFolderLocation = $env:BUILD_SOURCESDIRECTORY
$this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY
$this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
$artifactDirectory = Join-Path $env:RUNNER_TEMP "artifact"
$workDirectory = Join-Path $env:RUNNER_TEMP "work"
New-Item -Force -Type Directory $artifactDirectory
New-Item -Force -Type Directory $workDirectory
$this.HostedToolcacheLocation = $env:RUNNER_TOOL_CACHE
$this.TempFolderLocation = $env:RUNNER_TEMP
$this.WorkFolderLocation = $workDirectory
$this.ArtifactFolderLocation = $artifactDirectory
$this.Version = $version
$this.Architecture = $architecture

View File

@@ -0,0 +1,31 @@
<#
.SYNOPSIS
Generate Python artifact.
.DESCRIPTION
Script that triggering and fetching the result of the "Build python package" workflows with provided python versions
.PARAMETER Version
Required parameter. Python versions to trigger builds for.
.PARAMETER PublishRelease
Switch parameter. Whether to publish release for built version.
#>
param(
[Parameter (Mandatory=$true, HelpMessage="Python version to trigger build for")]
[array] $Versions,
[Parameter (Mandatory=$false, HelpMessage="Whether to publish release for built version")]
[string] $PublishRelease
)
$summary = $Versions | ForEach-Object -Parallel {
Import-Module "./builders/invoke-workflow.psm1"
Invoke-Workflow -Version $_ -PublishRelease $Using:PublishRelease
}
Write-Host "Results of triggered workflows:"
$summary | Out-String
if ($summary.Conclusion -contains "failure" -or $summary.Conclusion -contains "cancelled") {
exit 1
}

View File

@@ -86,10 +86,7 @@ class UbuntuPythonBuilder : NixPythonBuilder {
Execute-Command -Command "sudo apt install -y $_"
}
if ($this.Platform -ne "linux-16.04") {
### On Ubuntu-1804, libgdbm-compat-dev has older modules that are no longer in libgdbm-dev
Execute-Command -Command "sudo apt install -y libgdbm-compat-dev"
}
### On Ubuntu-1804, libgdbm-compat-dev has older modules that are no longer in libgdbm-dev
Execute-Command -Command "sudo apt install -y libgdbm-compat-dev"
}
}

Submodule helpers updated: e71d476320...6f1aa3ce73

View File

@@ -48,9 +48,9 @@ fi
chmod +x ../python $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJORMINOR python
echo "Upgrading PIP..."
echo "Upgrading pip..."
./python -m ensurepip
./python -m pip install --ignore-installed pip --no-warn-script-location
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location
echo "Create complete file"
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete

View File

@@ -5,7 +5,6 @@ $Configuration = Read-ConfigurationFile -Filepath $ConfigurationFile
$stableTestCases = @(
@{ ReleaseName = "python-3.8.3-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.8.3-linux-16.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "16.04"; 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-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
@@ -14,7 +13,6 @@ $stableTestCases = @(
$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-beta.1-linux-16.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "16.04"; 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-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },

View File

@@ -9,29 +9,31 @@ Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1")
Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1")
Import-Module (Join-Path $PSScriptRoot "../builders/python-version.psm1")
function Analyze-MissingModules([string] $buildOutputLocation) {
$searchStringStart = "Failed to build these modules:"
$searchStringEnd = "running build_scripts"
$pattern = "$searchStringStart(.*?)$searchStringEnd"
BeforeAll {
function Analyze-MissingModules([string] $buildOutputLocation) {
$searchStringStart = "Failed to build these modules:"
$searchStringEnd = "running build_scripts"
$pattern = "$searchStringStart(.*?)$searchStringEnd"
$buildContent = Get-Content -Path $buildOutputLocation
$splitBuiltOutput = $buildContent -split "\n";
$buildContent = Get-Content -Path $buildOutputLocation
$splitBuiltOutput = $buildContent -split "\n";
### Search for missing modules that are displayed between the search strings
$regexMatch = [regex]::match($SplitBuiltOutput, $Pattern)
if ($regexMatch.Success)
{
$module = $regexMatch.Groups[1].Value.Trim()
Write-Host "Failed missing modules:"
Write-Host $module
if ( ($module -eq "_tkinter") -and ( [semver]"$($Version.Major).$($Version.Minor)" -ge [semver]"3.10" -and $Version.PreReleaseLabel ) ) {
Write-Host "$module $Version ignored"
} else {
return 1
### Search for missing modules that are displayed between the search strings
$regexMatch = [regex]::match($SplitBuiltOutput, $Pattern)
if ($regexMatch.Success)
{
$module = $regexMatch.Groups[1].Value.Trim()
Write-Host "Failed missing modules:"
Write-Host $module
if ( ($module -eq "_tkinter") -and ( [semver]"$($Version.Major).$($Version.Minor)" -ge [semver]"3.10" -and $Version.PreReleaseLabel ) ) {
Write-Host "$module $Version ignored"
} else {
return 1
}
}
}
return 0
return 0
}
}
Describe "Tests" {
@@ -39,7 +41,7 @@ Describe "Tests" {
"python --version" | Should -ReturnZeroExitCode
$pythonLocation = (Get-Command "python").Path
$pythonLocation | Should -Not -BeNullOrEmpty
$expectedPath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "Python"
$expectedPath = Join-Path -Path $env:RUNNER_TOOL_CACHE -ChildPath "Python"
$pythonLocation.startsWith($expectedPath) | Should -BeTrue
}
@@ -47,7 +49,7 @@ Describe "Tests" {
"python ./sources/simple-test.py" | Should -ReturnZeroExitCode
}
if ($Version -ge "3.2.0") {
if (($Version -ge "3.2.0") -and -not ([semver]"$($Version.Major).$($Version.Minor)" -eq [semver]"3.11" -and $Version.PreReleaseLabel)) {
It "Check if sqlite3 module is installed" {
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
}
@@ -61,7 +63,7 @@ Describe "Tests" {
if (IsNixPlatform $Platform) {
It "Check for failed modules in build_output" {
$buildOutputLocation = Join-Path $env:BUILD_BINARIESDIRECTORY "build_output.txt"
$buildOutputLocation = Join-Path $env:RUNNER_TEMP "build_output.txt"
Analyze-MissingModules $buildOutputLocation | Should -Be 0
}

View File

@@ -7,6 +7,7 @@ from __future__ import print_function
import importlib
import sys
import platform
# The Python standard library as of Python 3.0
standard_library = [
@@ -265,6 +266,11 @@ if sys.version_info >= (3, 10):
if sys.version_info >= (3, 11):
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')
# Remove tkinter and Easter eggs
excluded_modules = [
'antigravity',

File diff suppressed because it is too large Load Diff