Compare commits
64
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6468490367 | ||
|
|
4be9a4cca1 | ||
|
|
89a619f4b9 | ||
|
|
ac42875cb8 | ||
|
|
280f63ac35 | ||
|
|
f85839ce0d | ||
|
|
594273ac16 | ||
|
|
bc57fd3c5f | ||
|
|
a887886318 | ||
|
|
ff4ca0b2e5 | ||
|
|
0b6a06284d | ||
|
|
50e47adc8b | ||
|
|
99a84463ad | ||
|
|
a7aea91c95 | ||
|
|
cdd1351989 | ||
|
|
2aa5c75cf9 | ||
|
|
13b26039fa | ||
|
|
aa8915507a | ||
|
|
57bf4da3a5 | ||
|
|
085cf7607e | ||
|
|
ae06e9c90f | ||
|
|
c4030498aa | ||
|
|
6701f7c8b0 | ||
|
|
1430296346 | ||
|
|
abc7af4881 | ||
|
|
c2464b5d82 | ||
|
|
ff07bfffbb | ||
|
|
46856eea96 | ||
|
|
1c92aa7fd8 | ||
|
|
4e23e7ccf5 | ||
|
|
e643db6cb1 | ||
|
|
15099a8cbe | ||
|
|
a3078ebf0c | ||
|
|
87b41b829e | ||
|
|
b41aabd79c | ||
|
|
ca3edf5446 | ||
|
|
04b0679602 | ||
|
|
6204b3717e | ||
|
|
d20146a86c | ||
|
|
4df41f4916 | ||
|
|
636e550e78 | ||
|
|
bbbf87f2cf | ||
|
|
1cb5ff2fb0 | ||
|
|
654b037263 | ||
|
|
06e3e6702d | ||
|
|
5c851d6172 | ||
|
|
67794a4d5f | ||
|
|
58a9c4b1d9 | ||
|
|
9b7480ff6d | ||
|
|
7ef20701e6 | ||
|
|
4dee72fe2f | ||
|
|
94ccfe8b74 | ||
|
|
6e82fdd5b2 | ||
|
|
0baa79c808 | ||
|
|
614a9e29eb | ||
|
|
22860d08aa | ||
|
|
d0bb4295e9 | ||
|
|
2a3a8176d7 | ||
|
|
06026eac83 | ||
|
|
572e346b1c | ||
|
|
10f5e8e4f5 | ||
|
|
1c756eb429 | ||
|
|
95394a105a | ||
|
|
eb1676d8ac |
@@ -0,0 +1,33 @@
|
|||||||
|
name: Create Pull Request
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: pwsh
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create_pr:
|
||||||
|
name: Create Pull Request
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
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}"
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
name: Create release
|
||||||
|
on:
|
||||||
|
repository_dispatch:
|
||||||
|
types: [create-release]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create_release:
|
||||||
|
name: Create release ${{ github.event.client_payload.ToolVersion }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Create release for Python ${{ github.event.client_payload.ToolVersion }}
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ github.event.client_payload.TagName }}
|
||||||
|
release_name: ${{ github.event.client_payload.ToolVersion }}
|
||||||
|
body: ${{ github.event.client_payload.ReleaseBody }}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
name: Manifest config tests
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- 'versions-manifest.json'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
RunTests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Install Pester
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Install-Module Pester -Force -Scope CurrentUser
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Import-Module Pester
|
||||||
|
Invoke-Pester -Configuration @{
|
||||||
|
Run = @{
|
||||||
|
Path = "tests/ManifestConfig.Tests.ps1"
|
||||||
|
Exit = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
name: Validate 'versions-manifest.json' file
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- 'versions-manifest.json'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
setup-versions-from-manifest:
|
||||||
|
name: Setup ${{ matrix.python }} ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-latest, windows-latest, ubuntu-16.04, 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 }}
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python }}
|
||||||
|
|
||||||
|
- name: Validate version
|
||||||
|
run: |
|
||||||
|
$pythonVersion = (python --version)
|
||||||
|
if ("Python ${{ matrix.python }}" -ne "$pythonVersion"){
|
||||||
|
Write-Host "The current version is $pythonVersion; expected version is ${{ matrix.python }}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
$pythonVersion
|
||||||
|
shell: pwsh
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
[submodule "helpers"]
|
||||||
|
path = helpers
|
||||||
|
url = https://github.com/actions/versions-package-tools
|
||||||
|
branch = main
|
||||||
@@ -10,7 +10,7 @@ Some versions are pre-installed on [virtual-environments](https://github.com/act
|
|||||||
More versions will (soon!) be available to install on-the-fly through the [`setup-python`](https://github.com/actions/setup-python) action.
|
More versions will (soon!) be available to install on-the-fly through the [`setup-python`](https://github.com/actions/setup-python) action.
|
||||||
|
|
||||||
## Adding new versions
|
## Adding new versions
|
||||||
We are trying to build and release new versions of Python as soon as they are released. Please open an issue if any versions are missing.
|
We are trying to build and release new versions of Python as soon as they are released. Please open an issue in [actions/virtual-environments](https://github.com/actions/virtual-environments) if any versions are missing.
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure
|
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ stages:
|
|||||||
dependsOn: []
|
dependsOn: []
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'macOS-10.14'
|
VmImage: 'macOS-10.14'
|
||||||
Platform: macos-1014
|
Platform: darwin
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/build-job.yml
|
- template: /azure-pipelines/templates/build-job.yml
|
||||||
@@ -17,7 +17,7 @@ stages:
|
|||||||
dependsOn: Build_Python_MacOS
|
dependsOn: Build_Python_MacOS
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'macOS-10.14'
|
VmImage: 'macOS-10.14'
|
||||||
Platform: macos-1014
|
Platform: darwin
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/test-job.yml
|
- template: /azure-pipelines/templates/test-job.yml
|
||||||
@@ -26,7 +26,7 @@ stages:
|
|||||||
dependsOn: []
|
dependsOn: []
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'ubuntu-16.04'
|
VmImage: 'ubuntu-16.04'
|
||||||
Platform: ubuntu-1604
|
Platform: linux-16.04
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/build-job.yml
|
- template: /azure-pipelines/templates/build-job.yml
|
||||||
@@ -36,7 +36,7 @@ stages:
|
|||||||
dependsOn: Build_Python_Ubuntu_1604
|
dependsOn: Build_Python_Ubuntu_1604
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'ubuntu-16.04'
|
VmImage: 'ubuntu-16.04'
|
||||||
Platform: ubuntu-1604
|
Platform: linux-16.04
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/test-job.yml
|
- template: /azure-pipelines/templates/test-job.yml
|
||||||
@@ -45,7 +45,7 @@ stages:
|
|||||||
dependsOn: []
|
dependsOn: []
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'ubuntu-18.04'
|
VmImage: 'ubuntu-18.04'
|
||||||
Platform: ubuntu-1804
|
Platform: linux-18.04
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/build-job.yml
|
- template: /azure-pipelines/templates/build-job.yml
|
||||||
@@ -55,7 +55,26 @@ stages:
|
|||||||
dependsOn: Build_Python_Ubuntu_1804
|
dependsOn: Build_Python_Ubuntu_1804
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'ubuntu-18.04'
|
VmImage: 'ubuntu-18.04'
|
||||||
Platform: ubuntu-1804
|
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
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/test-job.yml
|
- template: /azure-pipelines/templates/test-job.yml
|
||||||
@@ -64,7 +83,7 @@ stages:
|
|||||||
dependsOn: []
|
dependsOn: []
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'vs2017-win2016'
|
VmImage: 'vs2017-win2016'
|
||||||
Platform: windows-2016
|
Platform: win32
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/build-job.yml
|
- template: /azure-pipelines/templates/build-job.yml
|
||||||
@@ -74,7 +93,7 @@ stages:
|
|||||||
dependsOn: Build_Python_X64_Windows
|
dependsOn: Build_Python_X64_Windows
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'vs2017-win2016'
|
VmImage: 'vs2017-win2016'
|
||||||
Platform: windows-2016
|
Platform: win32
|
||||||
Architecture: x64
|
Architecture: x64
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/test-job.yml
|
- template: /azure-pipelines/templates/test-job.yml
|
||||||
@@ -83,7 +102,7 @@ stages:
|
|||||||
dependsOn: []
|
dependsOn: []
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'vs2017-win2016'
|
VmImage: 'vs2017-win2016'
|
||||||
Platform: windows-2016
|
Platform: win32
|
||||||
Architecture: x86
|
Architecture: x86
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/build-job.yml
|
- template: /azure-pipelines/templates/build-job.yml
|
||||||
@@ -93,7 +112,21 @@ stages:
|
|||||||
dependsOn: Build_Python_x86_Windows
|
dependsOn: Build_Python_x86_Windows
|
||||||
variables:
|
variables:
|
||||||
VmImage: 'vs2017-win2016'
|
VmImage: 'vs2017-win2016'
|
||||||
Platform: windows-2016
|
Platform: win32
|
||||||
Architecture: x86
|
Architecture: x86
|
||||||
jobs:
|
jobs:
|
||||||
- template: /azure-pipelines/templates/test-job.yml
|
- 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
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ pr:
|
|||||||
autoCancel: true
|
autoCancel: true
|
||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
- master
|
- main
|
||||||
paths:
|
paths:
|
||||||
exclude:
|
exclude:
|
||||||
- versions-manifest.json
|
- versions-manifest.json
|
||||||
@@ -29,6 +29,10 @@ jobs:
|
|||||||
-AzureDevOpsProjectName $(System.TeamProject) `
|
-AzureDevOpsProjectName $(System.TeamProject) `
|
||||||
-AzureDevOpsAccessToken $(System.AccessToken) `
|
-AzureDevOpsAccessToken $(System.AccessToken) `
|
||||||
-SourceBranch $(Build.SourceBranch) `
|
-SourceBranch $(Build.SourceBranch) `
|
||||||
|
-DefinitionId $(DEFINITION_ID) `
|
||||||
-SourceVersion $(Build.SourceVersion) `
|
-SourceVersion $(Build.SourceVersion) `
|
||||||
|
-ManifestLink $(MANIFEST_LINK) `
|
||||||
|
-WaitForBuilds $(WAIT_FOR_BUILDS) `
|
||||||
-ToolVersions "$(PYTHON_VERSIONS)" `
|
-ToolVersions "$(PYTHON_VERSIONS)" `
|
||||||
-DefinitionId $(DEFINITION_ID)
|
-RetryIntervalSec $(RETRY_INTERVAL_SEC) `
|
||||||
|
-RetryCount $(RETRY_COUNT)
|
||||||
@@ -8,12 +8,23 @@ jobs:
|
|||||||
- checkout: self
|
- checkout: self
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
|
# We need this temporary step to have a consistent version of PowerShell on all images.
|
||||||
|
- task: PowerShell@2
|
||||||
|
displayName: 'Update PowerShell version for macOS'
|
||||||
|
condition: eq(variables['Platform'], 'darwin')
|
||||||
|
inputs:
|
||||||
|
TargetType: inline
|
||||||
|
script: |
|
||||||
|
brew update
|
||||||
|
brew cask upgrade powershell
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: 'Build Python $(VERSION)'
|
displayName: 'Build Python $(VERSION)'
|
||||||
inputs:
|
inputs:
|
||||||
targetType: filePath
|
targetType: filePath
|
||||||
filePath: './builders/build-python.ps1'
|
filePath: './builders/build-python.ps1'
|
||||||
arguments: '-Version $(VERSION) -Platform $(Platform) -Architecture $(Architecture)'
|
arguments: '-Version $(VERSION) -Platform $(Platform) -Architecture $(Architecture)'
|
||||||
|
pwsh: true
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@1
|
- task: PublishPipelineArtifact@1
|
||||||
displayName: 'Publish Artifact: Python $(VERSION)'
|
displayName: 'Publish Artifact: Python $(VERSION)'
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
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'
|
||||||
@@ -3,10 +3,19 @@ jobs:
|
|||||||
pool:
|
pool:
|
||||||
name: Azure Pipelines
|
name: Azure Pipelines
|
||||||
vmImage: $(VmImage)
|
vmImage: $(VmImage)
|
||||||
|
variables:
|
||||||
|
TestRunTitle: 'python-$(Platform)-$(Architecture)'
|
||||||
steps:
|
steps:
|
||||||
- checkout: self
|
- checkout: self
|
||||||
submodules: true
|
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
|
- task: DownloadPipelineArtifact@2
|
||||||
inputs:
|
inputs:
|
||||||
source: 'current'
|
source: 'current'
|
||||||
@@ -18,13 +27,14 @@ jobs:
|
|||||||
archiveFilePatterns: '$(Build.BinariesDirectory)/python-$(VERSION)-$(Platform)-$(Architecture).*'
|
archiveFilePatterns: '$(Build.BinariesDirectory)/python-$(VERSION)-$(Platform)-$(Architecture).*'
|
||||||
destinationFolder: $(Build.BinariesDirectory)
|
destinationFolder: $(Build.BinariesDirectory)
|
||||||
cleanDestinationFolder: false
|
cleanDestinationFolder: false
|
||||||
|
overwriteExistingFiles: true
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: 'Apply build artifact to the local machines'
|
displayName: 'Apply build artifact to the local machines'
|
||||||
inputs:
|
inputs:
|
||||||
TargetType: inline
|
TargetType: inline
|
||||||
script: |
|
script: |
|
||||||
if ($env:PLATFORM -match 'windows') { powershell ./setup.ps1 } else { sh ./setup.sh }
|
if ($env:PLATFORM -match 'win32') { powershell ./setup.ps1 } else { sh ./setup.sh }
|
||||||
workingDirectory: '$(Build.BinariesDirectory)'
|
workingDirectory: '$(Build.BinariesDirectory)'
|
||||||
|
|
||||||
- task: UsePythonVersion@0
|
- task: UsePythonVersion@0
|
||||||
@@ -40,7 +50,7 @@ jobs:
|
|||||||
script: |
|
script: |
|
||||||
Invoke-Expression "python ./sources/python-config-output.py"
|
Invoke-Expression "python ./sources/python-config-output.py"
|
||||||
workingDirectory: '$(Build.SourcesDirectory)/tests'
|
workingDirectory: '$(Build.SourcesDirectory)/tests'
|
||||||
condition: ne(variables['Platform'], 'windows-2016')
|
condition: ne(variables['Platform'], 'win32')
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: 'Verbose python binary links'
|
displayName: 'Verbose python binary links'
|
||||||
@@ -48,16 +58,16 @@ jobs:
|
|||||||
TargetType: inline
|
TargetType: inline
|
||||||
script: |
|
script: |
|
||||||
$pythonLocation = which python
|
$pythonLocation = which python
|
||||||
if ($env:PLATFORM -match 'macos') { otool -L $pythonLocation } else { ldd $pythonLocation }
|
if ($env:PLATFORM -match 'darwin') { otool -L $pythonLocation } else { ldd $pythonLocation }
|
||||||
workingDirectory: '$(Build.BinariesDirectory)'
|
workingDirectory: '$(Build.BinariesDirectory)'
|
||||||
condition: ne(variables['Platform'], 'windows-2016')
|
condition: ne(variables['Platform'], 'win32')
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: 'Run tests'
|
displayName: 'Run tests'
|
||||||
inputs:
|
inputs:
|
||||||
TargetType: inline
|
TargetType: inline
|
||||||
script: |
|
script: |
|
||||||
Install-Module Pester -Force -Scope CurrentUser
|
Install-Module Pester -Force -Scope CurrentUser -RequiredVersion 4.10.1
|
||||||
Import-Module Pester
|
Import-Module Pester
|
||||||
$pesterParams = @{
|
$pesterParams = @{
|
||||||
Path="./python-tests.ps1";
|
Path="./python-tests.ps1";
|
||||||
@@ -67,6 +77,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Invoke-Pester -Script $pesterParams -OutputFile "test_results.xml" -OutputFormat NUnitXml
|
Invoke-Pester -Script $pesterParams -OutputFile "test_results.xml" -OutputFormat NUnitXml
|
||||||
|
pwsh: true
|
||||||
workingDirectory: '$(Build.SourcesDirectory)/tests'
|
workingDirectory: '$(Build.SourcesDirectory)/tests'
|
||||||
|
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
|
|||||||
+11
-11
@@ -1,6 +1,6 @@
|
|||||||
using module "./builders/win-python-builder.psm1"
|
using module "./win-python-builder.psm1"
|
||||||
using module "./builders/ubuntu-python-builder.psm1"
|
using module "./ubuntu-python-builder.psm1"
|
||||||
using module "./builders/macos-python-builder.psm1"
|
using module "./macos-python-builder.psm1"
|
||||||
|
|
||||||
<#
|
<#
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
@@ -21,7 +21,7 @@ Required parameter. The platform for which Python will be built.
|
|||||||
#>
|
#>
|
||||||
|
|
||||||
param(
|
param(
|
||||||
[Parameter (Mandatory=$true)][Version] $Version,
|
[Parameter (Mandatory=$true)][semver] $Version,
|
||||||
[Parameter (Mandatory=$true)][string] $Platform,
|
[Parameter (Mandatory=$true)][string] $Platform,
|
||||||
[string] $Architecture = "x64"
|
[string] $Architecture = "x64"
|
||||||
)
|
)
|
||||||
@@ -29,6 +29,7 @@ param(
|
|||||||
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "common-helpers.psm1") -DisableNameChecking
|
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "common-helpers.psm1") -DisableNameChecking
|
||||||
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "nix-helpers.psm1") -DisableNameChecking
|
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "nix-helpers.psm1") -DisableNameChecking
|
||||||
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "win-helpers.psm1") -DisableNameChecking
|
Import-Module (Join-Path $PSScriptRoot "../helpers" | Join-Path -ChildPath "win-helpers.psm1") -DisableNameChecking
|
||||||
|
Import-Module (Join-Path $PSScriptRoot "python-version.psm1") -DisableNameChecking
|
||||||
|
|
||||||
function Get-PythonBuilder {
|
function Get-PythonBuilder {
|
||||||
<#
|
<#
|
||||||
@@ -49,18 +50,17 @@ function Get-PythonBuilder {
|
|||||||
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
param (
|
param(
|
||||||
[version] $Version,
|
[semver] $Version,
|
||||||
[string] $Architecture,
|
[string] $Architecture,
|
||||||
[string] $Platform
|
[string] $Platform
|
||||||
)
|
)
|
||||||
|
|
||||||
$Platform = $Platform.ToLower()
|
if ($Platform -match 'win32') {
|
||||||
if ($Platform -match 'windows') {
|
|
||||||
$builder = [WinPythonBuilder]::New($Version, $Architecture, $Platform)
|
$builder = [WinPythonBuilder]::New($Version, $Architecture, $Platform)
|
||||||
} elseif ($Platform -match 'ubuntu') {
|
} elseif ($Platform -match 'linux') {
|
||||||
$builder = [UbuntuPythonBuilder]::New($Version, $Architecture, $Platform)
|
$builder = [UbuntuPythonBuilder]::New($Version, $Architecture, $Platform)
|
||||||
} elseif ($Platform -match 'macos') {
|
} elseif ($Platform -match 'darwin') {
|
||||||
$builder = [macOSPythonBuilder]::New($Version, $Architecture, $Platform)
|
$builder = [macOSPythonBuilder]::New($Version, $Architecture, $Platform)
|
||||||
} else {
|
} else {
|
||||||
Write-Host "##vso[task.logissue type=error;] Invalid platform: $Platform"
|
Write-Host "##vso[task.logissue type=error;] Invalid platform: $Platform"
|
||||||
@@ -71,5 +71,5 @@ function Get-PythonBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
### Create Python builder instance, and build artifact
|
### Create Python builder instance, and build artifact
|
||||||
$Builder = Get-PythonBuilder -Version $Version -Architecture $Architecture -Platform $Platform
|
$Builder = Get-PythonBuilder -Version $Version -Architecture $Architecture -Platform $Platform
|
||||||
$Builder.Build()
|
$Builder.Build()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using module "./builders/nix-python-builder.psm1"
|
using module "./nix-python-builder.psm1"
|
||||||
|
|
||||||
class macOSPythonBuilder : NixPythonBuilder {
|
class macOSPythonBuilder : NixPythonBuilder {
|
||||||
<#
|
<#
|
||||||
@@ -17,7 +17,7 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
#>
|
#>
|
||||||
|
|
||||||
macOSPythonBuilder(
|
macOSPythonBuilder(
|
||||||
[version] $version,
|
[semver] $version,
|
||||||
[string] $architecture,
|
[string] $architecture,
|
||||||
[string] $platform
|
[string] $platform
|
||||||
) : Base($version, $architecture, $platform) { }
|
) : Base($version, $architecture, $platform) { }
|
||||||
@@ -29,17 +29,29 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
#>
|
#>
|
||||||
|
|
||||||
$pythonBinariesLocation = $this.GetFullPythonToolcacheLocation()
|
$pythonBinariesLocation = $this.GetFullPythonToolcacheLocation()
|
||||||
$configureString = "./configure --prefix=$pythonBinariesLocation --enable-optimizations --enable-shared --with-lto"
|
$configureString = "./configure"
|
||||||
|
$configureString += " --prefix=$pythonBinariesLocation"
|
||||||
|
$configureString += " --enable-optimizations"
|
||||||
|
$configureString += " --enable-shared"
|
||||||
|
$configureString += " --with-lto"
|
||||||
|
|
||||||
### OS X 10.11, Apple no longer provides header files for the deprecated system version of OpenSSL.
|
### OS X 10.11, Apple no longer provides header files for the deprecated system version of OpenSSL.
|
||||||
### Solution is to install these libraries from a third-party package manager,
|
### Solution is to install these libraries from a third-party package manager,
|
||||||
### and then add the appropriate paths for the header and library files to configure command.
|
### and then add the appropriate paths for the header and library files to configure command.
|
||||||
### Link to documentation (https://cpython-devguide.readthedocs.io/setup/#build-dependencies)
|
### Link to documentation (https://cpython-devguide.readthedocs.io/setup/#build-dependencies)
|
||||||
if ($this.Version -lt "3.7.0") {
|
if ($this.Version -lt "3.7.0") {
|
||||||
$env:LDFLAGS="-L$(brew --prefix openssl)/lib"
|
$env:LDFLAGS = "-L/usr/local/opt/[email protected]/lib"
|
||||||
$env:CFLAGS="-I$(brew --prefix openssl)/include"
|
$env:CFLAGS = "-I/usr/local/opt/[email protected]/include"
|
||||||
} else {
|
} else {
|
||||||
$configureString += " --with-openssl=/usr/local/opt/openssl"
|
$configureString += " --with-openssl=/usr/local/opt/openssl@1.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
|
||||||
|
### Link to documentation (https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.enable_load_extension)
|
||||||
|
if ($this.Version -ge "3.2.0") {
|
||||||
|
$configureString += " --enable-loadable-sqlite-extensions"
|
||||||
|
$env:LDFLAGS += " -L$(brew --prefix sqlite3)/lib"
|
||||||
|
$env:CFLAGS += " -I$(brew --prefix sqlite3)/include"
|
||||||
}
|
}
|
||||||
|
|
||||||
Execute-Command -Command $configureString
|
Execute-Command -Command $configureString
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using module "./builders/python-builder.psm1"
|
using module "./python-builder.psm1"
|
||||||
|
|
||||||
class NixPythonBuilder : PythonBuilder {
|
class NixPythonBuilder : PythonBuilder {
|
||||||
<#
|
<#
|
||||||
@@ -33,13 +33,12 @@ class NixPythonBuilder : PythonBuilder {
|
|||||||
[string] $OutputArtifactName
|
[string] $OutputArtifactName
|
||||||
|
|
||||||
NixPythonBuilder(
|
NixPythonBuilder(
|
||||||
[version] $version,
|
[semver] $version,
|
||||||
[string] $architecture,
|
[string] $architecture,
|
||||||
[string] $platform
|
[string] $platform
|
||||||
) : Base($version, $architecture, $platform) {
|
) : Base($version, $architecture, $platform) {
|
||||||
$this.InstallationTemplateName = "nix-setup-template.sh"
|
$this.InstallationTemplateName = "nix-setup-template.sh"
|
||||||
$this.InstallationScriptName = "setup.sh"
|
$this.InstallationScriptName = "setup.sh"
|
||||||
|
|
||||||
$this.OutputArtifactName = "python-$Version-$Platform-$Architecture.tar.gz"
|
$this.OutputArtifactName = "python-$Version-$Platform-$Architecture.tar.gz"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,8 +49,10 @@ class NixPythonBuilder : PythonBuilder {
|
|||||||
#>
|
#>
|
||||||
|
|
||||||
$base = $this.GetBaseUri()
|
$base = $this.GetBaseUri()
|
||||||
|
$versionName = $this.GetBaseVersion()
|
||||||
|
$nativeVersion = Convert-Version -version $this.Version
|
||||||
|
|
||||||
return "${base}/$($this.Version)/Python-$($this.Version).tgz"
|
return "${base}/${versionName}/Python-${nativeVersion}.tgz"
|
||||||
}
|
}
|
||||||
|
|
||||||
[string] GetPythonBinary() {
|
[string] GetPythonBinary() {
|
||||||
@@ -95,9 +96,7 @@ class NixPythonBuilder : PythonBuilder {
|
|||||||
$installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw
|
$installationTemplateContent = Get-Content -Path $installationTemplateLocation -Raw
|
||||||
|
|
||||||
$variablesToReplace = @{
|
$variablesToReplace = @{
|
||||||
"{{__VERSION_MAJOR__}}" = $this.Version.Major;
|
"{{__VERSION_FULL__}}" = $this.Version;
|
||||||
"{{__VERSION_MINOR__}}" = $this.Version.Minor;
|
|
||||||
"{{__VERSION_BUILD__}}" = $this.Version.Build;
|
|
||||||
}
|
}
|
||||||
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
|
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class PythonBuilder {
|
|||||||
|
|
||||||
#>
|
#>
|
||||||
|
|
||||||
[version] $Version
|
[semver] $Version
|
||||||
[string] $Architecture
|
[string] $Architecture
|
||||||
[string] $Platform
|
[string] $Platform
|
||||||
[string] $HostedToolcacheLocation
|
[string] $HostedToolcacheLocation
|
||||||
@@ -38,17 +38,17 @@ class PythonBuilder {
|
|||||||
[string] $ArtifactFolderLocation
|
[string] $ArtifactFolderLocation
|
||||||
[string] $InstallationTemplatesLocation
|
[string] $InstallationTemplatesLocation
|
||||||
|
|
||||||
PythonBuilder ([version] $version, [string] $architecture, [string] $platform) {
|
PythonBuilder ([semver] $version, [string] $architecture, [string] $platform) {
|
||||||
$this.Version = $version
|
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
|
||||||
$this.Architecture = $architecture
|
|
||||||
$this.Platform = $platform
|
|
||||||
|
|
||||||
$this.HostedToolcacheLocation = $env:AGENT_TOOLSDIRECTORY
|
$this.HostedToolcacheLocation = $env:AGENT_TOOLSDIRECTORY
|
||||||
$this.TempFolderLocation = $env:BUILD_SOURCESDIRECTORY
|
$this.TempFolderLocation = $env:BUILD_SOURCESDIRECTORY
|
||||||
$this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY
|
$this.WorkFolderLocation = $env:BUILD_BINARIESDIRECTORY
|
||||||
$this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
|
$this.ArtifactFolderLocation = $env:BUILD_STAGINGDIRECTORY
|
||||||
|
|
||||||
$this.InstallationTemplatesLocation = Join-Path -Path $PSScriptRoot -ChildPath "../installers"
|
$this.Version = $version
|
||||||
|
$this.Architecture = $architecture
|
||||||
|
$this.Platform = $platform
|
||||||
}
|
}
|
||||||
|
|
||||||
[uri] GetBaseUri() {
|
[uri] GetBaseUri() {
|
||||||
@@ -79,11 +79,21 @@ class PythonBuilder {
|
|||||||
return "$pythonToolcacheLocation/$($this.Version)/$($this.Architecture)"
|
return "$pythonToolcacheLocation/$($this.Version)/$($this.Architecture)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[string] GetBaseVersion() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Return Major.Minor.Patch version string.
|
||||||
|
#>
|
||||||
|
|
||||||
|
return "$($this.Version.Major).$($this.Version.Minor).$($this.Version.Patch)"
|
||||||
|
}
|
||||||
|
|
||||||
[void] PreparePythonToolcacheLocation() {
|
[void] PreparePythonToolcacheLocation() {
|
||||||
<#
|
<#
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Prepare system hostedtoolcache folder for new Python version.
|
Prepare system hostedtoolcache folder for new Python version.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
$pythonBinariesLocation = $this.GetFullPythonToolcacheLocation()
|
$pythonBinariesLocation = $this.GetFullPythonToolcacheLocation()
|
||||||
|
|
||||||
if (Test-Path $pythonBinariesLocation) {
|
if (Test-Path $pythonBinariesLocation) {
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
function Convert-Label() {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Convert generic semver label to native Python label.
|
||||||
|
#>
|
||||||
|
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[string] $label
|
||||||
|
)
|
||||||
|
|
||||||
|
switch ($label) {
|
||||||
|
"alpha" { return "a" }
|
||||||
|
"beta" { return "b" }
|
||||||
|
"rc" { return "rc" }
|
||||||
|
default { throw "Invalid version label '$label'" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Convert-Version {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Convert generic semver version to native Python version.
|
||||||
|
#>
|
||||||
|
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[semver] $version,
|
||||||
|
[char] $delimiter = "."
|
||||||
|
)
|
||||||
|
|
||||||
|
$nativeVersion = "{0}.{1}.{2}" -f $version.Major, $version.Minor, $version.Patch
|
||||||
|
|
||||||
|
if ($version.PreReleaseLabel)
|
||||||
|
{
|
||||||
|
$preReleaseLabel = $version.PreReleaseLabel.Split($delimiter)
|
||||||
|
|
||||||
|
$preReleaseLabelName = Convert-Label -Label $preReleaseLabel[0]
|
||||||
|
$preReleaseLabelVersion = $preReleaseLabel[1]
|
||||||
|
|
||||||
|
$nativeVersion += "${preReleaseLabelName}${preReleaseLabelVersion}"
|
||||||
|
}
|
||||||
|
|
||||||
|
return $nativeVersion
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using module "./builders/nix-python-builder.psm1"
|
using module "./nix-python-builder.psm1"
|
||||||
|
|||||||