Compare commits

...

12 Commits

Author SHA1 Message Date
MaksimZhukov
7ef20701e6 Merge pull request #34 from actions/v-mazhuk/validate-version-manifest
Add test workflow to validate versions-manifest.json file
2020-06-17 10:45:17 +03:00
MaksimZhukov
4dee72fe2f Remove checkout and update git submodules 2020-06-16 20:10:32 +03:00
MaksimZhukov
94ccfe8b74 Add test workflow to validate versions-manifest.json file 2020-06-16 18:39:00 +03:00
Alena Sviridenko
6e82fdd5b2 Merge pull request #32 from actions/update-versions-manifest-file
[versions-manifest] Update for release from 06/10/2020
2020-06-10 12:32:33 +03:00
Service account
0baa79c808 Update versions-manifest based on build from 20200610.1 2020-06-10 08:43:43 +00:00
Alena Sviridenko
614a9e29eb Merge pull request #31 from vmapetr/v-mapetr/build-with-loadable-sqlite-extensions
Build Python3 for nix and darwin with enabled loadable sqlite extensions
2020-06-09 15:14:26 +03:00
Maksim Petrov
22860d08aa Build Python3 for nix and darwin with enabled loadable sqlite extensions 2020-06-08 16:00:25 +03:00
MaksimZhukov
d0bb4295e9 Upload Ubuntu 20.04 binaries (#28)
Co-authored-by: Service account <no-reply@microsoft.com>
2020-06-04 08:54:29 +03:00
Maxim Lobanov
2a3a8176d7 Update platform for new version manifest generator (#29)
* Update build-python-packages.yml

* update platforms

* fix platform conditions

* add clean up
2020-06-03 20:38:34 +03:00
Maxim Lobanov
06026eac83 add ubuntu 2004 to definitions (#27) 2020-06-03 09:45:50 +03:00
Dmitry Shibanov
572e346b1c Add helpers' submodule (#26)
* add common helpers
Co-authored-by: Dmitry Shibanov <v-dmshib@microsoft.com>
2020-06-02 18:23:40 +03:00
MaksimZhukov
10f5e8e4f5 Update versions-manifest based on build from 20200514.1 (#25)
Co-authored-by: Service account <no-reply@microsoft.com>
2020-05-14 13:11:17 +03:00
26 changed files with 436 additions and 1182 deletions

View File

@@ -0,0 +1,35 @@
name: Validate 'versions-manifest.json' file
on:
push:
branches:
- master
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))'

4
.gitmodules vendored Normal file
View File

@@ -0,0 +1,4 @@
[submodule "helpers"]
path = helpers
url = https://github.com/actions/versions-package-tools
branch = master

View File

@@ -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,7 @@ 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

View File

@@ -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)

View File

@@ -7,6 +7,13 @@ jobs:
- 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'
@@ -24,7 +31,7 @@ jobs:
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 +47,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 +55,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";

View File

@@ -56,11 +56,11 @@ function Get-PythonBuilder {
) )
$Platform = $Platform.ToLower() $Platform = $Platform.ToLower()
if ($Platform -match 'windows') { if ($Platform -match 'win32') {
$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"

View File

@@ -29,19 +29,31 @@ 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$(brew --prefix openssl)/lib"
$env:CFLAGS="-I$(brew --prefix openssl)/include" $env:CFLAGS = "-I$(brew --prefix openssl)/include"
} else { } else {
$configureString += " --with-openssl=/usr/local/opt/openssl" $configureString += " --with-openssl=/usr/local/opt/openssl"
} }
### 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
} }

View File

@@ -32,13 +32,22 @@ class UbuntuPythonBuilder : NixPythonBuilder {
### To build Python with SO we must pass full path to lib folder to the linker ### To build Python with SO we must pass full path to lib folder to the linker
$env:LDFLAGS="-Wl,--rpath=${pythonBinariesLocation}/lib" $env:LDFLAGS="-Wl,--rpath=${pythonBinariesLocation}/lib"
$configureString = "./configure --prefix=$pythonBinariesLocation --enable-shared --enable-optimizations" $configureString = "./configure"
$configureString += " --prefix=$pythonBinariesLocation"
$configureString += " --enable-shared"
$configureString += " --enable-optimizations"
### Compile with ucs4 for Python 2.x. On 3.x, ucs4 is enabled by default
if ($this.Version -lt "3.0.0") { if ($this.Version -lt "3.0.0") {
### Compile with ucs4 for Python 2.x. On 3.x, ucs4 is enabled by default
$configureString += " --enable-unicode=ucs4" $configureString += " --enable-unicode=ucs4"
} }
### 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"
}
Execute-Command -Command $configureString Execute-Command -Command $configureString
} }
@@ -76,7 +85,7 @@ class UbuntuPythonBuilder : NixPythonBuilder {
Execute-Command -Command "sudo apt install -y $_" Execute-Command -Command "sudo apt install -y $_"
} }
if ($this.Platform -ne "ubuntu-1604") { if ($this.Platform -ne "linux-16.04") {
### On Ubuntu-1804, libgdbm-compat-dev has older modules that are no longer in libgdbm-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" Execute-Command -Command "sudo apt install -y libgdbm-compat-dev"
} }

View File

@@ -0,0 +1,8 @@
{
"regex": "python-\\d+\\.\\d+\\.\\d+-(\\w+)-([\\w\\.]+)?-?(x\\d+)",
"groups": {
"arch": 3,
"platform": 1,
"platform_version": 2
}
}

1
helpers Submodule

Submodule helpers added at 7f5f554579

View File

@@ -1,89 +0,0 @@
class AzureDevOpsApi
{
[string] $BaseUrl
[string] $RepoOwner
[object] $AuthHeader
AzureDevOpsApi(
[string] $TeamFoundationCollectionUri,
[string] $ProjectName,
[string] $AccessToken
) {
$this.BaseUrl = $this.BuildBaseUrl($TeamFoundationCollectionUri, $ProjectName)
$this.AuthHeader = $this.BuildAuth($AccessToken)
}
[object] hidden BuildAuth([string]$AccessToken) {
if ([string]::IsNullOrEmpty($AccessToken)) {
return $null
}
return @{
Authorization = "Bearer $AccessToken"
}
}
[string] hidden BuildBaseUrl([string]$TeamFoundationCollectionUri, [string]$ProjectName) {
return "${TeamFoundationCollectionUri}/${ProjectName}/_apis"
}
[object] QueueBuild([string]$ToolVersion, [string]$SourceBranch, [string]$SourceVersion, [UInt32]$DefinitionId){
$url = "build/builds"
# The content of parameters field should be a json string
$buildParameters = @{ VERSION = $ToolVersion } | ConvertTo-Json
$body = @{
definition = @{
id = $DefinitionId
}
sourceBranch = $SourceBranch
sourceVersion = $SourceVersion
parameters = $buildParameters
} | ConvertTo-Json
return $this.InvokeRestMethod($url, 'POST', $body)
}
[object] GetBuildInfo([UInt32]$BuildId){
$url = "build/builds/$BuildId"
return $this.InvokeRestMethod($url, 'GET', $null)
}
[string] hidden BuildUrl([string]$Url) {
return "$($this.BaseUrl)/${Url}/?api-version=5.1"
}
[object] hidden InvokeRestMethod(
[string] $Url,
[string] $Method,
[string] $Body
) {
$requestUrl = $this.BuildUrl($Url)
$params = @{
Method = $Method
ContentType = "application/json"
Uri = $requestUrl
Headers = @{}
}
if ($this.AuthHeader) {
$params.Headers += $this.AuthHeader
}
if (![string]::IsNullOrEmpty($body)) {
$params.Body = $Body
}
return Invoke-RestMethod @params
}
}
function Get-AzureDevOpsApi {
param (
[string] $TeamFoundationCollectionUri,
[string] $ProjectName,
[string] $AccessToken
)
return [AzureDevOpsApi]::New($TeamFoundationCollectionUri, $ProjectName, $AccessToken)
}

View File

@@ -1,44 +0,0 @@
Import-Module (Join-Path $PSScriptRoot "azure-devops-api.ps1")
class BuildInfo
{
[AzureDevOpsApi] $AzureDevOpsApi
[String] $Name
[UInt32] $Id
[String] $Status
[String] $Result
[String] $Link
BuildInfo([AzureDevOpsApi] $AzureDevOpsApi, [object] $Build)
{
$this.AzureDevOpsApi = $AzureDevOpsApi
$this.Id = $Build.id
$this.Name = $Build.buildNumber
$this.Link = $Build._links.web.href
$this.Status = $Build.status
$this.Result = $Build.result
}
[boolean] IsFinished() {
return ($this.Status -eq "completed") -or ($this.Status -eq "cancelling")
}
[boolean] IsSuccess() {
return $this.Result -eq "succeeded"
}
[void] UpdateBuildInfo() {
$buildInfo = $this.AzureDevOpsApi.GetBuildInfo($this.Id)
$this.Status = $buildInfo.status
$this.Result = $buildInfo.result
}
}
function Get-BuildInfo {
param (
[AzureDevOpsApi] $AzureDevOpsApi,
[object] $Build
)
return [BuildInfo]::New($AzureDevOpsApi, $Build)
}

View File

@@ -1,94 +0,0 @@
param (
[Parameter(Mandatory)] [string] $TeamFoundationCollectionUri,
[Parameter(Mandatory)] [string] $AzureDevOpsProjectName,
[Parameter(Mandatory)] [string] $AzureDevOpsAccessToken,
[Parameter(Mandatory)] [string] $SourceBranch,
[Parameter(Mandatory)] [string] $ToolVersions,
[Parameter(Mandatory)] [UInt32] $DefinitionId,
[string] $SourceVersion
)
Import-Module (Join-Path $PSScriptRoot "azure-devops-api.ps1")
Import-Module (Join-Path $PSScriptRoot "build-info.ps1")
function Queue-Builds {
param (
[Parameter(Mandatory)] [AzureDevOpsApi] $AzureDevOpsApi,
[Parameter(Mandatory)] [string] $ToolVersions,
[Parameter(Mandatory)] [string] $SourceBranch,
[Parameter(Mandatory)] [string] $SourceVersion,
[Parameter(Mandatory)] [string] $DefinitionId
)
[BuildInfo[]]$queuedBuilds = @()
$ToolVersions.Split(',') | ForEach-Object {
$version = $_.Trim()
Write-Host "Queue build for $version..."
$queuedBuild = $AzureDevOpsApi.QueueBuild($version, $SourceBranch, $SourceVersion, $DefinitionId)
$buildInfo = Get-BuildInfo -AzureDevOpsApi $AzureDevOpsApi -Build $queuedBuild
Write-Host "Queued build: $($buildInfo.Link)"
$queuedBuilds += $buildInfo
}
return $queuedBuilds
}
function Wait-Builds {
param (
[Parameter(Mandatory)] [BuildInfo[]] $Builds
)
$timeoutBetweenRefreshSec = 30
do {
# If build is still running - refresh its status
foreach($build in $builds) {
if (!$build.IsFinished()) {
$build.UpdateBuildInfo()
if ($build.IsFinished()) {
Write-Host "The $($build.Name) build was completed: $($build.Link)"
}
}
}
$runningBuildsCount = ($builds | Where-Object { !$_.IsFinished() }).Length
Start-Sleep -Seconds $timeoutBetweenRefreshSec
} while($runningBuildsCount -gt 0)
}
function Make-BuildsOutput {
param (
[Parameter(Mandatory)] [BuildInfo[]] $Builds
)
Write-Host "Builds info:"
$builds | Format-Table -AutoSize -Property Name,Id,Status,Result,Link | Out-String -Width 10000
# Return exit code based on status of builds
$failedBuilds = ($builds | Where-Object { !$_.IsSuccess() })
if ($failedBuilds.Length -ne 0) {
Write-Host "##vso[task.logissue type=error;]Builds failed"
$failedBuilds | ForEach-Object -Process { Write-Host "##vso[task.logissue type=error;]Name: $($_.Name); Link: $($_.Link)" }
Write-Host "##vso[task.complete result=Failed]"
} else {
Write-host "##[section] All builds have been passed successfully"
}
}
$azureDevOpsApi = Get-AzureDevOpsApi -TeamFoundationCollectionUri $TeamFoundationCollectionUri `
-ProjectName $AzureDevOpsProjectName `
-AccessToken $AzureDevOpsAccessToken
$queuedBuilds = Queue-Builds -AzureDevOpsApi $azureDevOpsApi `
-ToolVersions $ToolVersions `
-SourceBranch $SourceBranch `
-SourceVersion $SourceVersion `
-DefinitionId $DefinitionId
Write-Host "Waiting results of builds ..."
Wait-Builds -Builds $queuedBuilds
Make-BuildsOutput -Builds $queuedBuilds

View File

@@ -1,80 +0,0 @@
<#
.SYNOPSIS
The execute command and print all output to the logs
#>
function Execute-Command {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][string] $Command
)
Write-Debug "Execute $Command"
try {
Invoke-Expression $Command | ForEach-Object { Write-Host $_ }
}
catch {
Write-Host "Error happened during command execution: $Command"
Write-Host "##vso[task.logissue type=error;] $_"
}
}
<#
.SYNOPSIS
Download file from url and return local path to file
#>
function Download-File {
param(
[Parameter(Mandatory=$true)]
[Uri]$Uri,
[Parameter(Mandatory=$true)]
[String]$OutputFolder
)
$targetFilename = [IO.Path]::GetFileName($Uri)
$targetFilepath = Join-Path $OutputFolder $targetFilename
Write-Debug "Download source from $Uri to $OutFile"
try {
(New-Object System.Net.WebClient).DownloadFile($Uri, $targetFilepath)
return $targetFilepath
} catch {
Write-Host "Error during downloading file from '$Uri'"
"$_"
exit 1
}
}
<#
.SYNOPSIS
Generate file that contains the list of all files in particular directory
#>
function New-ToolStructureDump {
param(
[Parameter(Mandatory=$true)]
[String]$ToolPath,
[Parameter(Mandatory=$true)]
[String]$OutputFolder
)
$outputFile = Join-Path $OutputFolder "tools_structure.txt"
$folderContent = Get-ChildItem -Path $ToolPath -Recurse | Sort-Object | Select-Object -Property FullName, Length
$folderContent | ForEach-Object {
$relativePath = $_.FullName.Replace($ToolPath, "");
return "${relativePath}"
} | Out-File -FilePath $outputFile
}
<#
.SYNOPSIS
Check if it is macOS / Ubuntu platform
#>
function IsNixPlatform {
param(
[Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()]
[String]$Platform
)
return ($Platform -match "macos") -or ($Platform -match "ubuntu")
}

View File

@@ -1,158 +0,0 @@
<#
.SYNOPSIS
Generate versions manifest based on repository releases
.DESCRIPTION
Versions manifest is needed to find the latest assets for particular version of tool
.PARAMETER GitHubRepositoryOwner
Required parameter. The organization which tool repository belongs
.PARAMETER GitHubRepositoryName
Optional parameter. The name of tool repository
.PARAMETER GitHubAccessToken
Required parameter. PAT Token to overcome GitHub API Rate limit
.PARAMETER OutputFile
Required parameter. File "*.json" where generated results will be saved
.PARAMETER PlatformMapFile
Optional parameter. Path to the json file with platform map
Structure example:
{
"macos-1014": [
{
"platform": "darwin",
"platform_version": "10.14"
}, ...
], ...
}
#>
param (
[Parameter(Mandatory)] [string] $GitHubRepositoryOwner,
[Parameter(Mandatory)] [string] $GitHubRepositoryName,
[Parameter(Mandatory)] [string] $GitHubAccessToken,
[Parameter(Mandatory)] [string] $OutputFile,
[string] $PlatformMapFile
)
Import-Module (Join-Path $PSScriptRoot "github/github-api.psm1")
if ($PlatformMapFile -and (Test-Path $PlatformMapFile)) {
$PlatformMap = Get-Content $PlatformMapFile -Raw | ConvertFrom-Json -AsHashtable
} else {
$PlatformMap = @{}
}
function Get-FileNameWithoutExtension {
param (
[Parameter(Mandatory)][string]$Filename
)
if ($Filename.EndsWith(".tar.gz")) {
$Filename = [IO.path]::GetFileNameWithoutExtension($Filename)
}
return [IO.path]::GetFileNameWithoutExtension($Filename)
}
function New-AssetItem {
param (
[Parameter(Mandatory)][string]$Filename,
[Parameter(Mandatory)][string]$DownloadUrl,
[Parameter(Mandatory)][string]$Arch,
[Parameter(Mandatory)][string]$Platform,
[string]$PlatformVersion
)
$asset = New-Object PSObject
$asset | Add-Member -Name "filename" -Value $Filename -MemberType NoteProperty
$asset | Add-Member -Name "arch" -Value $Arch -MemberType NoteProperty
$asset | Add-Member -Name "platform" -Value $Platform -MemberType NoteProperty
if ($PlatformVersion) { $asset | Add-Member -Name "platform_version" -Value $PlatformVersion -MemberType NoteProperty }
$asset | Add-Member -Name "download_url" -Value $DownloadUrl -MemberType NoteProperty
return $asset
}
function Build-AssetsList {
param (
[AllowEmptyCollection()]
[Parameter(Mandatory)][array]$ReleaseAssets
)
$assets = @()
foreach($releaseAsset in $ReleaseAssets) {
$filename = Get-FileNameWithoutExtension -Filename $releaseAsset.name
$parts = $filename.Split("-")
$arch = $parts[-1]
$buildPlatform = [string]::Join("-", $parts[2..($parts.Length-2)])
if ($PlatformMap[$buildPlatform]) {
$PlatformMap[$buildPlatform] | ForEach-Object {
$assets += New-AssetItem -Filename $releaseAsset.name `
-DownloadUrl $releaseAsset.browser_download_url `
-Arch $arch `
-Platform $_.platform `
-PlatformVersion $_.platform_version
}
} else {
$assets += New-AssetItem -Filename $releaseAsset.name `
-DownloadUrl $releaseAsset.browser_download_url `
-Arch $arch `
-Platform $buildPlatform
}
}
return $assets
}
function Get-VersionFromRelease {
param (
[Parameter(Mandatory)][object]$Release
)
# Release name can contain additional information after ':' so filter it
[string]$releaseName = $Release.name.Split(':')[0]
[Version]$version = $null
if (![Version]::TryParse($releaseName, [ref]$version)) {
throw "Release '$($Release.id)' has invalid title '$($Release.name)'. It can't be parsed as version. ( $($Release.html_url) )"
}
return $version
}
function Build-VersionsManifest {
param (
[Parameter(Mandatory)][array]$Releases
)
$Releases = $Releases | Sort-Object -Property "published_at" -Descending
$versionsHash = @{}
foreach ($release in $Releases) {
if (($release.draft -eq $true) -or ($release.prerelease -eq $true)) {
continue
}
[Version]$version = Get-VersionFromRelease $release
$versionKey = $version.ToString()
if ($versionsHash.ContainsKey($versionKey)) {
continue
}
$versionsHash.Add($versionKey, [PSCustomObject]@{
version = $versionKey
stable = $true
release_url = $release.html_url
files = Build-AssetsList $release.assets
})
}
# Sort versions by descending
return $versionsHash.Values | Sort-Object -Property @{ Expression = { [Version]$_.version }; Descending = $true }
}
$gitHubApi = Get-GitHubApi -AccountName $GitHubRepositoryOwner -ProjectName $GitHubRepositoryName -AccessToken $GitHubAccessToken
$releases = $gitHubApi.GetGitHubReleases()
$versionIndex = Build-VersionsManifest $releases
$versionIndex | ConvertTo-Json -Depth 5 | Out-File $OutputFile -Encoding UTF8NoBOM -Force

View File

@@ -1,106 +0,0 @@
<#
.SYNOPSIS
Create commit with all unstaged changes in repository and create pull-request
.PARAMETER RepositoryOwner
Required parameter. The organization which tool repository belongs
.PARAMETER RepositoryName
Optional parameter. The name of tool repository
.PARAMETER AccessToken
Required parameter. PAT Token to authorize
.PARAMETER BranchName
Required parameter. The name of branch where changes will be pushed
.PARAMETER CommitMessage
Required parameter. The commit message to push changes
.PARAMETER PullRequestTitle
Required parameter. The title of pull-request
.PARAMETER PullRequestBody
Required parameter. The description of pull-request
#>
param (
[Parameter(Mandatory)] [string] $RepositoryOwner,
[Parameter(Mandatory)] [string] $RepositoryName,
[Parameter(Mandatory)] [string] $AccessToken,
[Parameter(Mandatory)] [string] $BranchName,
[Parameter(Mandatory)] [string] $CommitMessage,
[Parameter(Mandatory)] [string] $PullRequestTitle,
[Parameter(Mandatory)] [string] $PullRequestBody
)
Import-Module (Join-Path $PSScriptRoot "github-api.psm1")
Import-Module (Join-Path $PSScriptRoot "git.psm1")
function Update-PullRequest {
Param (
[Parameter(Mandatory=$true)]
[object] $GitHubApi,
[Parameter(Mandatory=$true)]
[string] $Title,
[Parameter(Mandatory=$true)]
[string] $Body,
[Parameter(Mandatory=$true)]
[string] $BranchName,
[Parameter(Mandatory=$true)]
[object] $PullRequest
)
$updatedPullRequest = $GitHubApi.UpdatePullRequest($Title, $Body, $BranchName, $PullRequest.number)
if (($updatedPullRequest -eq $null) -or ($updatedPullRequest.html_url -eq $null)) {
Write-Host "##vso[task.logissue type=error;] Unexpected error occurs while updating pull request."
exit 1
}
Write-host "##[section] Pull request updated: $($updatedPullRequest.html_url)"
}
function Create-PullRequest {
Param (
[Parameter(Mandatory=$true)]
[object] $GitHubApi,
[Parameter(Mandatory=$true)]
[string] $Title,
[Parameter(Mandatory=$true)]
[string] $Body,
[Parameter(Mandatory=$true)]
[string] $BranchName
)
$createdPullRequest = $GitHubApi.CreateNewPullRequest($Title, $Body, $BranchName)
if (($createdPullRequest -eq $null) -or ($createdPullRequest.html_url -eq $null)) {
Write-Host "##vso[task.logissue type=error;] Unexpected error occurs while creating pull request."
exit 1
}
Write-host "##[section] Pull request created: $($createdPullRequest.html_url)"
}
Write-Host "Configure local git preferences"
Git-ConfigureUser -Name "Service account" -Email "no-reply@microsoft.com"
Write-Host "Create branch: $BranchName"
Git-CreateBranch -Name $BranchName
Write-Host "Create commit"
Git-CommitAllChanges -Message $CommitMessage
Write-Host "Push branch: $BranchName"
Git-PushBranch -Name $BranchName -Force $true
$gitHubApi = Get-GitHubApi -AccountName $RepositoryOwner -ProjectName $RepositoryName -AccessToken $AccessToken
$pullRequest = $gitHubApi.GetPullRequest($BranchName, $RepositoryOwner)
if ($pullRequest.Count -gt 0) {
Write-Host "Update pull request"
Update-PullRequest -GitHubApi $gitHubApi `
-Title $PullRequestTitle `
-Body $PullRequestBody `
-BranchName $BranchName `
-PullRequest $pullRequest[0]
} else {
Write-Host "Create pull request"
Create-PullRequest -GitHubApi $gitHubApi `
-Title $PullRequestTitle `
-Body $PullRequestBody `
-BranchName $BranchName
}

View File

@@ -1,81 +0,0 @@
<#
.SYNOPSIS
Configure git credentials to use with commits
#>
function Git-ConfigureUser {
Param (
[Parameter(Mandatory=$true)]
[string] $Name,
[Parameter(Mandatory=$true)]
[string] $Email
)
git config --global user.name $Name | Out-Host
git config --global user.email $Email | Out-Host
if ($LASTEXITCODE -ne 0) {
Write-Host "##vso[task.logissue type=error;] Unexpected failure occurs while configuring git preferences."
exit 1
}
}
<#
.SYNOPSIS
Create new branch
#>
function Git-CreateBranch {
Param (
[Parameter(Mandatory=$true)]
[string] $Name
)
git checkout -b $Name | Out-Host
if ($LASTEXITCODE -ne 0) {
Write-Host "##vso[task.logissue type=error;] Unexpected failure occurs while creating new branch: $Name."
exit 1
}
}
<#
.SYNOPSIS
Commit all staged and unstaged changes
#>
function Git-CommitAllChanges {
Param (
[Parameter(Mandatory=$true)]
[string] $Message
)
git add -A | Out-Host
git commit -m "$Message" | Out-Host
if ($LASTEXITCODE -ne 0) {
Write-Host "##vso[task.logissue type=error;] Unexpected failure occurs while commiting changes."
exit 1
}
}
<#
.SYNOPSIS
Push branch to remote repository
#>
function Git-PushBranch {
Param (
[Parameter(Mandatory=$true)]
[string] $Name,
[Parameter(Mandatory=$true)]
[boolean] $Force
)
if ($Force) {
git push --set-upstream origin $Name --force | Out-Host
} else {
git push --set-upstream origin $Name | Out-Host
}
if ($LASTEXITCODE -ne 0) {
Write-Host "##vso[task.logissue type=error;] Unexpected failure occurs while pushing changes."
exit 1
}
}

View File

@@ -1,109 +0,0 @@
<#
.SYNOPSIS
The module that contains a bunch of methods to interact with GitHub API V3
#>
class GitHubApi
{
[string] $BaseUrl
[string] $RepoOwner
[object] $AuthHeader
GitHubApi(
[string] $AccountName,
[string] $ProjectName,
[string] $AccessToken
) {
$this.BaseUrl = $this.BuildBaseUrl($AccountName, $ProjectName)
$this.AuthHeader = $this.BuildAuth($AccessToken)
}
[object] hidden BuildAuth([string]$AccessToken) {
if ([string]::IsNullOrEmpty($AccessToken)) {
return $null
}
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("'':${AccessToken}"))
return @{
Authorization = "Basic ${base64AuthInfo}"
}
}
[string] hidden BuildBaseUrl([string]$RepositoryOwner, [string]$RepositoryName) {
return "https://api.github.com/repos/$RepositoryOwner/$RepositoryName"
}
[object] CreateNewPullRequest([string]$Title, [string]$Body, [string]$BranchName){
$requestBody = @{
title = $Title
body = $Body
head = $BranchName
base = "master"
} | ConvertTo-Json
$url = "pulls"
return $this.InvokeRestMethod($url, 'Post', $null, $requestBody)
}
[object] GetPullRequest([string]$BranchName, [string]$RepositoryOwner){
$url = "pulls"
return $this.InvokeRestMethod($url, 'GET', "head=${RepositoryOwner}:$BranchName&base=master", $null)
}
[object] UpdatePullRequest([string]$Title, [string]$Body, [string]$BranchName, [string]$PullRequestNumber){
$requestBody = @{
title = $Title
body = $Body
head = $BranchName
base = "master"
} | ConvertTo-Json
$url = "pulls/$PullRequestNumber"
return $this.InvokeRestMethod($url, 'Post', $null, $requestBody)
}
[object] GetGitHubReleases(){
$url = "releases"
return $this.InvokeRestMethod($url, 'GET', $null, $null)
}
[string] hidden BuildUrl([string]$Url, [string]$RequestParams) {
if ([string]::IsNullOrEmpty($RequestParams)) {
return "$($this.BaseUrl)/$($Url)"
} else {
return "$($this.BaseUrl)/$($Url)?$($RequestParams)"
}
}
[object] hidden InvokeRestMethod(
[string] $Url,
[string] $Method,
[string] $RequestParams,
[string] $Body
) {
$requestUrl = $this.BuildUrl($Url, $RequestParams)
$params = @{
Method = $Method
ContentType = "application/json"
Uri = $requestUrl
Headers = @{}
}
if ($this.AuthHeader) {
$params.Headers += $this.AuthHeader
}
if (![string]::IsNullOrEmpty($Body)) {
$params.Body = $Body
}
return Invoke-RestMethod @params
}
}
function Get-GitHubApi {
param (
[string] $AccountName,
[string] $ProjectName,
[string] $AccessToken
)
return [GitHubApi]::New($AccountName, $ProjectName, $AccessToken)
}

View File

@@ -1,50 +0,0 @@
<#
.SYNOPSIS
Pack folder to *.zip format
#>
function Pack-Zip {
param(
[Parameter(Mandatory=$true)]
[String]$PathToArchive,
[Parameter(Mandatory=$true)]
[String]$ToolZipFile
)
Write-Debug "Pack $PathToArchive to $ToolZipFile"
Push-Location -Path $PathToArchive
zip -q -r $ToolZipFile * | Out-Null
Pop-Location
}
<#
.SYNOPSIS
Unpack *.tar file
#>
function Extract-TarArchive {
param(
[Parameter(Mandatory=$true)]
[String]$ArchivePath,
[Parameter(Mandatory=$true)]
[String]$OutputDirectory
)
Write-Debug "tar -C $OutputDirectory -xzf $ArchivePath --strip 1"
tar -C $OutputDirectory -xzf $ArchivePath --strip 1
}
function Create-TarArchive {
param(
[Parameter(Mandatory=$true)]
[String]$SourceFolder,
[Parameter(Mandatory=$true)]
[String]$ArchivePath,
[string]$CompressionType = "gz"
)
$CompressionTypeArgument = If ([string]::IsNullOrWhiteSpace($CompressionType)) { "" } else { "--${CompressionType}" }
Push-Location $SourceFolder
Write-Debug "tar -c $CompressionTypeArgument -f $ArchivePath ."
tar -c $CompressionTypeArgument -f $ArchivePath .
Pop-Location
}

View File

@@ -1,33 +0,0 @@
<#
.SYNOPSIS
Pester extension that allows to run command and validate exit code
.EXAMPLE
"python file.py" | Should -ReturnZeroExitCode
#>
function ShouldReturnZeroExitCode {
Param(
[Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
[String]$ActualValue,
[switch]$Negate
)
Write-Host "Run command '${ActualValue}'"
Invoke-Expression -Command $ActualValue | ForEach-Object { Write-Host $_ }
$actualExitCode = $LASTEXITCODE
[bool]$succeeded = $actualExitCode -eq 0
if ($Negate) { $succeeded = -not $succeeded }
if (-not $succeeded)
{
$failureMessage = "Command '${ActualValue}' has finished with exit code ${actualExitCode}"
}
return New-Object PSObject -Property @{
Succeeded = $succeeded
FailureMessage = $failureMessage
}
}
Add-AssertionOperator -Name ReturnZeroExitCode `
-Test $function:ShouldReturnZeroExitCode

View File

@@ -1,18 +0,0 @@
function Create-SevenZipArchive {
param(
[Parameter(Mandatory=$true)]
[String]$SourceFolder,
[Parameter(Mandatory=$true)]
[String]$ArchivePath,
[String]$ArchiveType = "zip",
[String]$CompressionLevel = 5
)
$ArchiveTypeArgument = "-t${ArchiveType}"
$CompressionLevelArgument = "-mx=${CompressionLevel}"
Push-Location $SourceFolder
Write-Debug "7z a $ArchiveTypeArgument $CompressionLevelArgument $ArchivePath @$SourceFolder"
7z a $ArchiveTypeArgument $CompressionLevelArgument $ArchivePath $SourceFolder\*
Pop-Location
}

View File

@@ -1,29 +0,0 @@
{
"macos-1014": [
{
"platform": "darwin",
"platform_version": "10.14"
},
{
"platform": "darwin",
"platform_version": "10.15"
}
],
"ubuntu-1604": [
{
"platform": "linux",
"platform_version": "16.04"
}
],
"ubuntu-1804": [
{
"platform": "linux",
"platform_version": "18.04"
}
],
"windows-2016": [
{
"platform": "win32"
}
]
}

View File

@@ -1,11 +0,0 @@
if ($env:PLATFORM -match 'windows') {
$PythonFilter = "Name like '%Python%'"
Get-WmiObject Win32_Product -Filter $PythonFilter | Foreach-Object {
Write-Host "Uninstalling $($_.Name) ..."
$_.Uninstall() | Out-Null
}
}
$PythonToolcachePath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "Python"
Write-Host "Removing Python toolcache directory ..."
Remove-Item -Path $PythonToolcachePath -Recurse -Force

View File

@@ -41,6 +41,12 @@ Describe "Tests" {
"python ./sources/simple-test.py" | Should -ReturnZeroExitCode "python ./sources/simple-test.py" | Should -ReturnZeroExitCode
} }
if ($Version -ge "3.2.0") {
It "Check if sqlite3 module is installed" {
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
}
}
if (IsNixPlatform $Platform) { if (IsNixPlatform $Platform) {
It "Check for failed modules in build_output" { It "Check for failed modules in build_output" {

View File

@@ -0,0 +1,19 @@
import sqlite3
from sqlite3 import Error
def create_connection(db_file):
""" create a database connection to a SQLite database """
conn = None
try:
print('Sqlite3 version: ', sqlite3.version)
conn = sqlite3.connect(db_file)
conn.enable_load_extension(True)
except Error as e:
print(e)
exit(1)
finally:
if conn:
conn.close()
if __name__ == '__main__':
create_connection(r"pythonsqlite.db")

View File

@@ -1,623 +1,655 @@
[ [
{ {
"version": "3.8.2", "version": "3.8.3",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.8.2-20200505.19", "release_url": "https://github.com/actions/python-versions/releases/tag/3.8.3-20200609.5",
"files": [ "files": [
{ {
"filename": "python-3.8.2-macos-1014-x64.tar.gz", "filename": "python-3.8.3-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.8.3-20200609.5/python-3.8.3-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200505.19/python-3.8.2-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.2-macos-1014-x64.tar.gz", "filename": "python-3.8.3-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200505.19/python-3.8.2-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.8.2-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200505.19/python-3.8.2-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.3-20200609.5/python-3.8.3-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.2-ubuntu-1804-x64.tar.gz", "filename": "python-3.8.3-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200505.19/python-3.8.2-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.3-20200609.5/python-3.8.3-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.2-windows-2016-x64.zip", "filename": "python-3.8.3-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.3-20200609.5/python-3.8.3-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.8.3-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200505.19/python-3.8.2-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.3-20200609.5/python-3.8.3-win32-x64.zip"
}, },
{ {
"filename": "python-3.8.2-windows-2016-x86.zip", "filename": "python-3.8.3-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200505.19/python-3.8.2-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.3-20200609.5/python-3.8.3-win32-x86.zip"
}
]
},
{
"version": "3.8.2",
"stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.8.2-20200609.8",
"files": [
{
"filename": "python-3.8.2-darwin-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200609.8/python-3.8.2-darwin-x64.tar.gz"
},
{
"filename": "python-3.8.2-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200609.8/python-3.8.2-linux-16.04-x64.tar.gz"
},
{
"filename": "python-3.8.2-linux-18.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200609.8/python-3.8.2-linux-18.04-x64.tar.gz"
},
{
"filename": "python-3.8.2-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200609.8/python-3.8.2-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.8.2-win32-x64.zip",
"arch": "x64",
"platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200609.8/python-3.8.2-win32-x64.zip"
},
{
"filename": "python-3.8.2-win32-x86.zip",
"arch": "x86",
"platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.2-20200609.8/python-3.8.2-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.8.1", "version": "3.8.1",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.8.1-20200505.18", "release_url": "https://github.com/actions/python-versions/releases/tag/3.8.1-20200609.9",
"files": [ "files": [
{ {
"filename": "python-3.8.1-macos-1014-x64.tar.gz", "filename": "python-3.8.1-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200609.9/python-3.8.1-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200505.18/python-3.8.1-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.1-macos-1014-x64.tar.gz", "filename": "python-3.8.1-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200505.18/python-3.8.1-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.8.1-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200505.18/python-3.8.1-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200609.9/python-3.8.1-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.1-ubuntu-1804-x64.tar.gz", "filename": "python-3.8.1-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200505.18/python-3.8.1-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200609.9/python-3.8.1-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.1-windows-2016-x64.zip", "filename": "python-3.8.1-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200609.9/python-3.8.1-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.8.1-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200505.18/python-3.8.1-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200609.9/python-3.8.1-win32-x64.zip"
}, },
{ {
"filename": "python-3.8.1-windows-2016-x86.zip", "filename": "python-3.8.1-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200505.18/python-3.8.1-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.1-20200609.9/python-3.8.1-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.8.0", "version": "3.8.0",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.8.0-20200505.17", "release_url": "https://github.com/actions/python-versions/releases/tag/3.8.0-20200609.10",
"files": [ "files": [
{ {
"filename": "python-3.8.0-macos-1014-x64.tar.gz", "filename": "python-3.8.0-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200609.10/python-3.8.0-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200505.17/python-3.8.0-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.0-macos-1014-x64.tar.gz", "filename": "python-3.8.0-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200505.17/python-3.8.0-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.8.0-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200505.17/python-3.8.0-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200609.10/python-3.8.0-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.0-ubuntu-1804-x64.tar.gz", "filename": "python-3.8.0-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200505.17/python-3.8.0-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200609.10/python-3.8.0-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.8.0-windows-2016-x64.zip", "filename": "python-3.8.0-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200609.10/python-3.8.0-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.8.0-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200505.17/python-3.8.0-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200609.10/python-3.8.0-win32-x64.zip"
}, },
{ {
"filename": "python-3.8.0-windows-2016-x86.zip", "filename": "python-3.8.0-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200505.17/python-3.8.0-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.8.0-20200609.10/python-3.8.0-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.7.7", "version": "3.7.7",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.7.7-20200505.20", "release_url": "https://github.com/actions/python-versions/releases/tag/3.7.7-20200609.4",
"files": [ "files": [
{ {
"filename": "python-3.7.7-macos-1014-x64.tar.gz", "filename": "python-3.7.7-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200609.4/python-3.7.7-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200505.20/python-3.7.7-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.7-macos-1014-x64.tar.gz", "filename": "python-3.7.7-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200505.20/python-3.7.7-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.7.7-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200505.20/python-3.7.7-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200609.4/python-3.7.7-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.7-ubuntu-1804-x64.tar.gz", "filename": "python-3.7.7-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200505.20/python-3.7.7-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200609.4/python-3.7.7-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.7-windows-2016-x64.zip", "filename": "python-3.7.7-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200609.4/python-3.7.7-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.7.7-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200505.20/python-3.7.7-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200609.4/python-3.7.7-win32-x64.zip"
}, },
{ {
"filename": "python-3.7.7-windows-2016-x86.zip", "filename": "python-3.7.7-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200505.20/python-3.7.7-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.7-20200609.4/python-3.7.7-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.7.6", "version": "3.7.6",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.7.6-20200505.16", "release_url": "https://github.com/actions/python-versions/releases/tag/3.7.6-20200609.11",
"files": [ "files": [
{ {
"filename": "python-3.7.6-macos-1014-x64.tar.gz", "filename": "python-3.7.6-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200609.11/python-3.7.6-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200505.16/python-3.7.6-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.6-macos-1014-x64.tar.gz", "filename": "python-3.7.6-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200505.16/python-3.7.6-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.7.6-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200505.16/python-3.7.6-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200609.11/python-3.7.6-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.6-ubuntu-1804-x64.tar.gz", "filename": "python-3.7.6-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200505.16/python-3.7.6-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200609.11/python-3.7.6-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.6-windows-2016-x64.zip", "filename": "python-3.7.6-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200609.11/python-3.7.6-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.7.6-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200505.16/python-3.7.6-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200609.11/python-3.7.6-win32-x64.zip"
}, },
{ {
"filename": "python-3.7.6-windows-2016-x86.zip", "filename": "python-3.7.6-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200505.16/python-3.7.6-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.6-20200609.11/python-3.7.6-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.7.5", "version": "3.7.5",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.7.5-20200505.15", "release_url": "https://github.com/actions/python-versions/releases/tag/3.7.5-20200609.12",
"files": [ "files": [
{ {
"filename": "python-3.7.5-macos-1014-x64.tar.gz", "filename": "python-3.7.5-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200609.12/python-3.7.5-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200505.15/python-3.7.5-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.5-macos-1014-x64.tar.gz", "filename": "python-3.7.5-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200505.15/python-3.7.5-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.7.5-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200505.15/python-3.7.5-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200609.12/python-3.7.5-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.5-ubuntu-1804-x64.tar.gz", "filename": "python-3.7.5-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200505.15/python-3.7.5-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200609.12/python-3.7.5-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.7.5-windows-2016-x64.zip", "filename": "python-3.7.5-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200609.12/python-3.7.5-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.7.5-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200505.15/python-3.7.5-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200609.12/python-3.7.5-win32-x64.zip"
}, },
{ {
"filename": "python-3.7.5-windows-2016-x86.zip", "filename": "python-3.7.5-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200505.15/python-3.7.5-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.7.5-20200609.12/python-3.7.5-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.6.10", "version": "3.6.10",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.6.10-20200505.23", "release_url": "https://github.com/actions/python-versions/releases/tag/3.6.10-20200609.6",
"files": [ "files": [
{ {
"filename": "python-3.6.10-macos-1014-x64.tar.gz", "filename": "python-3.6.10-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200609.6/python-3.6.10-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200505.23/python-3.6.10-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.10-macos-1014-x64.tar.gz", "filename": "python-3.6.10-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200505.23/python-3.6.10-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.6.10-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200505.23/python-3.6.10-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200609.6/python-3.6.10-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.10-ubuntu-1804-x64.tar.gz", "filename": "python-3.6.10-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200505.23/python-3.6.10-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200609.6/python-3.6.10-linux-18.04-x64.tar.gz"
},
{
"filename": "python-3.6.10-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.10-20200609.6/python-3.6.10-linux-20.04-x64.tar.gz"
} }
] ]
}, },
{ {
"version": "3.6.9", "version": "3.6.9",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.6.9-20200505.22", "release_url": "https://github.com/actions/python-versions/releases/tag/3.6.9-20200610.1",
"files": [ "files": [
{ {
"filename": "python-3.6.9-macos-1014-x64.tar.gz", "filename": "python-3.6.9-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200610.1/python-3.6.9-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200505.22/python-3.6.9-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.9-macos-1014-x64.tar.gz", "filename": "python-3.6.9-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200505.22/python-3.6.9-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.6.9-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200505.22/python-3.6.9-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200610.1/python-3.6.9-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.9-ubuntu-1804-x64.tar.gz", "filename": "python-3.6.9-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200505.22/python-3.6.9-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200610.1/python-3.6.9-linux-18.04-x64.tar.gz"
},
{
"filename": "python-3.6.9-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.9-20200610.1/python-3.6.9-linux-20.04-x64.tar.gz"
} }
] ]
}, },
{ {
"version": "3.6.8", "version": "3.6.8",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.6.8-20200505.21", "release_url": "https://github.com/actions/python-versions/releases/tag/3.6.8-20200609.13",
"files": [ "files": [
{ {
"filename": "python-3.6.8-macos-1014-x64.tar.gz", "filename": "python-3.6.8-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200609.13/python-3.6.8-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200505.21/python-3.6.8-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.8-macos-1014-x64.tar.gz", "filename": "python-3.6.8-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200505.21/python-3.6.8-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.6.8-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200505.21/python-3.6.8-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200609.13/python-3.6.8-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.8-ubuntu-1804-x64.tar.gz", "filename": "python-3.6.8-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200505.21/python-3.6.8-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200609.13/python-3.6.8-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.8-windows-2016-x64.zip", "filename": "python-3.6.8-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200609.13/python-3.6.8-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.6.8-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200505.21/python-3.6.8-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200609.13/python-3.6.8-win32-x64.zip"
}, },
{ {
"filename": "python-3.6.8-windows-2016-x86.zip", "filename": "python-3.6.8-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200505.21/python-3.6.8-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.8-20200609.13/python-3.6.8-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.6.7", "version": "3.6.7",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.6.7-20200505.14", "release_url": "https://github.com/actions/python-versions/releases/tag/3.6.7-20200609.14",
"files": [ "files": [
{ {
"filename": "python-3.6.7-macos-1014-x64.tar.gz", "filename": "python-3.6.7-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200609.14/python-3.6.7-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200505.14/python-3.6.7-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.7-macos-1014-x64.tar.gz", "filename": "python-3.6.7-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200505.14/python-3.6.7-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.6.7-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200505.14/python-3.6.7-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200609.14/python-3.6.7-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.7-ubuntu-1804-x64.tar.gz", "filename": "python-3.6.7-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200505.14/python-3.6.7-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200609.14/python-3.6.7-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.6.7-windows-2016-x64.zip", "filename": "python-3.6.7-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200609.14/python-3.6.7-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.6.7-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200505.14/python-3.6.7-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200609.14/python-3.6.7-win32-x64.zip"
}, },
{ {
"filename": "python-3.6.7-windows-2016-x86.zip", "filename": "python-3.6.7-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200505.14/python-3.6.7-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.6.7-20200609.14/python-3.6.7-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "3.5.9", "version": "3.5.9",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.5.9-20200505.27", "release_url": "https://github.com/actions/python-versions/releases/tag/3.5.9-20200609.7",
"files": [ "files": [
{ {
"filename": "python-3.5.9-macos-1014-x64.tar.gz", "filename": "python-3.5.9-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200609.7/python-3.5.9-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200505.27/python-3.5.9-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.5.9-macos-1014-x64.tar.gz", "filename": "python-3.5.9-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200505.27/python-3.5.9-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.5.9-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200505.27/python-3.5.9-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200609.7/python-3.5.9-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.5.9-ubuntu-1804-x64.tar.gz", "filename": "python-3.5.9-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200505.27/python-3.5.9-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200609.7/python-3.5.9-linux-18.04-x64.tar.gz"
},
{
"filename": "python-3.5.9-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.9-20200609.7/python-3.5.9-linux-20.04-x64.tar.gz"
} }
] ]
}, },
{ {
"version": "3.5.4", "version": "3.5.4",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/3.5.4-20200505.25", "release_url": "https://github.com/actions/python-versions/releases/tag/3.5.4-20200609.15",
"files": [ "files": [
{ {
"filename": "python-3.5.4-macos-1014-x64.tar.gz", "filename": "python-3.5.4-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200609.15/python-3.5.4-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200505.25/python-3.5.4-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-3.5.4-macos-1014-x64.tar.gz", "filename": "python-3.5.4-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200505.25/python-3.5.4-macos-1014-x64.tar.gz"
},
{
"filename": "python-3.5.4-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200505.25/python-3.5.4-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200609.15/python-3.5.4-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.5.4-ubuntu-1804-x64.tar.gz", "filename": "python-3.5.4-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200505.25/python-3.5.4-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200609.15/python-3.5.4-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-3.5.4-windows-2016-x64.zip", "filename": "python-3.5.4-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200609.15/python-3.5.4-linux-20.04-x64.tar.gz"
},
{
"filename": "python-3.5.4-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200505.25/python-3.5.4-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200609.15/python-3.5.4-win32-x64.zip"
}, },
{ {
"filename": "python-3.5.4-windows-2016-x86.zip", "filename": "python-3.5.4-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200505.25/python-3.5.4-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/3.5.4-20200609.15/python-3.5.4-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "2.7.18", "version": "2.7.18",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/2.7.18-20200505.26", "release_url": "https://github.com/actions/python-versions/releases/tag/2.7.18-20200603.25",
"files": [ "files": [
{ {
"filename": "python-2.7.18-macos-1014-x64.tar.gz", "filename": "python-2.7.18-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200603.25/python-2.7.18-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200505.26/python-2.7.18-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-2.7.18-macos-1014-x64.tar.gz", "filename": "python-2.7.18-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200505.26/python-2.7.18-macos-1014-x64.tar.gz"
},
{
"filename": "python-2.7.18-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200505.26/python-2.7.18-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200603.25/python-2.7.18-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-2.7.18-ubuntu-1804-x64.tar.gz", "filename": "python-2.7.18-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200505.26/python-2.7.18-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200603.25/python-2.7.18-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-2.7.18-windows-2016-x64.zip", "filename": "python-2.7.18-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200603.25/python-2.7.18-linux-20.04-x64.tar.gz"
},
{
"filename": "python-2.7.18-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200505.26/python-2.7.18-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200603.25/python-2.7.18-win32-x64.zip"
}, },
{ {
"filename": "python-2.7.18-windows-2016-x86.zip", "filename": "python-2.7.18-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200505.26/python-2.7.18-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.18-20200603.25/python-2.7.18-win32-x86.zip"
} }
] ]
}, },
{ {
"version": "2.7.17", "version": "2.7.17",
"stable": true, "stable": true,
"release_url": "https://github.com/actions/python-versions/releases/tag/2.7.17-20200505.11", "release_url": "https://github.com/actions/python-versions/releases/tag/2.7.17-20200603.24",
"files": [ "files": [
{ {
"filename": "python-2.7.17-macos-1014-x64.tar.gz", "filename": "python-2.7.17-darwin-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "darwin", "platform": "darwin",
"platform_version": "10.14", "download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200603.24/python-2.7.17-darwin-x64.tar.gz"
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200505.11/python-2.7.17-macos-1014-x64.tar.gz"
}, },
{ {
"filename": "python-2.7.17-macos-1014-x64.tar.gz", "filename": "python-2.7.17-linux-16.04-x64.tar.gz",
"arch": "x64",
"platform": "darwin",
"platform_version": "10.15",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200505.11/python-2.7.17-macos-1014-x64.tar.gz"
},
{
"filename": "python-2.7.17-ubuntu-1604-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "16.04", "platform_version": "16.04",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200505.11/python-2.7.17-ubuntu-1604-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200603.24/python-2.7.17-linux-16.04-x64.tar.gz"
}, },
{ {
"filename": "python-2.7.17-ubuntu-1804-x64.tar.gz", "filename": "python-2.7.17-linux-18.04-x64.tar.gz",
"arch": "x64", "arch": "x64",
"platform": "linux", "platform": "linux",
"platform_version": "18.04", "platform_version": "18.04",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200505.11/python-2.7.17-ubuntu-1804-x64.tar.gz" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200603.24/python-2.7.17-linux-18.04-x64.tar.gz"
}, },
{ {
"filename": "python-2.7.17-windows-2016-x64.zip", "filename": "python-2.7.17-linux-20.04-x64.tar.gz",
"arch": "x64",
"platform": "linux",
"platform_version": "20.04",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200603.24/python-2.7.17-linux-20.04-x64.tar.gz"
},
{
"filename": "python-2.7.17-win32-x64.zip",
"arch": "x64", "arch": "x64",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200505.11/python-2.7.17-windows-2016-x64.zip" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200603.24/python-2.7.17-win32-x64.zip"
}, },
{ {
"filename": "python-2.7.17-windows-2016-x86.zip", "filename": "python-2.7.17-win32-x86.zip",
"arch": "x86", "arch": "x86",
"platform": "win32", "platform": "win32",
"download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200505.11/python-2.7.17-windows-2016-x86.zip" "download_url": "https://github.com/actions/python-versions/releases/download/2.7.17-20200603.24/python-2.7.17-win32-x86.zip"
} }
] ]
} }