Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Reduce the number of build agents used by CI. (#10221)
* Drop extra jobs from the PR-validation pipeline.

This reduces the number of build agents we are using most frequently,
without sacrificing much coverage.  Note that this relies on 2 things:

* sufficient unit test coverage
* manual "full CI" runs when there may be OS-specific concerns

With this change:

* all tests get run on 3.x on linux (including smoke)
* for 2.7 only the unit and functional tests are run (and only on linux)
* on Windows and OSX, only functional and "single workspace" tests are run

The total number of test jobs (and hence agents) drops from 13 to 8.

* Drop extra jobs from the PR-merge pipeline.

This change relies on the nightly CI run covering the full matrix.

The total number of test jobs (and hence agents) drops from 39 to 24.

* Limit # of parallel jobs in each job matrix in the PR-merge and nightly pipelines.

This reduces the max number of agents used by the PR-merge pipeline to 8
(from 24).  For the nightly pipeline it goes down from 84 to 12.  Both
will take longer to complete, but that shouldn't be a major problem.

* Add a "manual build" CI pipeline for faster turnaround.

* Do not test internal tools on lower than Python 3.7.

* Drop the temporary workaround jobs.

* (again) Do not test internal tools on lower than Python 3.7.
  • Loading branch information
Eric Snow
Eric Snow authored Feb 21, 2020
commit 71ba3bb609d64b4933ea33c46d8cf5a9a2b0cbd8
296 changes: 296 additions & 0 deletions build/ci/vscode-python-ci-manual.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,296 @@
# manual CI build

name: '$(Year:yyyy).$(Month).0.$(BuildID)-manual'

trigger: none
pr: none

# Variables that are available for the entire pipeline.
variables:
- template: templates/globals.yml

stages:
- stage: Build
jobs:
- template: templates/jobs/build_compile.yml

# Each item in each matrix has a number of possible values it may
# define. They are detailed in templates/test_phases.yml. The only
# required value is "TestsToRun".

- stage: Linux
dependsOn: []
jobs:
- job: 'Py3x'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
# with mocks
# focused on small units (i.e. functions)
# and tightly controlled dependencies
TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
# no mocks, no vscode
# focused on integration
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
# no mocks, with vscode
# focused on integration
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
'Multi Workspace':
# no mocks, with vscode
# focused on integration
TestsToRun: 'testMultiWorkspace'
NeedsPythonTestReqs: true
'Venv':
TestsToRun: 'venvTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
# This is for the venvTests to use, not needed if you don't run venv tests...
PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json'
'Debugger':
TestsToRun: 'testDebugger'
NeedsPythonTestReqs: true
'Smoke':
TestsToRun: 'testSmoke'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
#maxParallel: 3
pool:
vmImage: 'ubuntu-16.04'
steps:
- template: templates/test_phases.yml

# This is the oldest Python 3 version we support.
- job: 'Py36'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
PythonVersion: '3.6'
# Note: "pythonInternalTools" tests are 3.7+.
TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
PythonVersion: '3.6'
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
PythonVersion: '3.6'
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
#maxParallel: 3
pool:
vmImage: 'ubuntu-16.04'
steps:
- template: templates/test_phases.yml

# This is the oldest Python 3 version we support.
- job: 'Py35'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
PythonVersion: '3.5'
# Note: "pythonInternalTools" tests are 3.7+.
TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
PythonVersion: '3.5'
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
PythonVersion: '3.5'
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
'Venv':
PythonVersion: '3.5'
TestsToRun: 'venvTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json'
'Debugger':
PythonVersion: '3.5'
TestsToRun: 'testDebugger'
NeedsPythonTestReqs: true
#maxParallel: 3
pool:
vmImage: 'ubuntu-16.04'
steps:
- template: templates/test_phases.yml

- stage: Mac
dependsOn: []
jobs:
- job: 'Py3x'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
'Multi Workspace':
TestsToRun: 'testMultiWorkspace'
NeedsPythonTestReqs: true
'Venv':
TestsToRun: 'venvTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json'
'Debugger':
TestsToRun: 'testDebugger'
NeedsPythonTestReqs: true
'Smoke':
TestsToRun: 'testSmoke'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
#maxParallel: 3
pool:
vmImage: 'macos-10.13'
steps:
- template: templates/test_phases.yml

# This is the oldest Python 3 version we support.
- job: 'Py35'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
PythonVersion: '3.5'
# Note: "pythonInternalTools" tests are 3.7+.
TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
PythonVersion: '3.5'
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
PythonVersion: '3.5'
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
'Venv':
PythonVersion: '3.5'
TestsToRun: 'venvTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json'
'Debugger':
PythonVersion: '3.5'
TestsToRun: 'testDebugger'
NeedsPythonTestReqs: true
#maxParallel: 3
pool:
vmImage: 'macos-10.13'
steps:
- template: templates/test_phases.yml

- stage: Windows
dependsOn: []
jobs:
- job: 'Py3x'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
'Multi Workspace':
TestsToRun: 'testMultiWorkspace'
NeedsPythonTestReqs: true
'Venv':
TestsToRun: 'venvTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json'
'Debugger':
TestsToRun: 'testDebugger'
NeedsPythonTestReqs: true
'Smoke':
TestsToRun: 'testSmoke'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
#maxParallel: 3
pool:
vmImage: 'vs2017-win2016'
steps:
- template: templates/test_phases.yml

# This is the oldest Python 3 version we support.
- job: 'Py35'
dependsOn: []
timeoutInMinutes: 120
strategy:
matrix:
'Unit':
PythonVersion: '3.5'
# Note: "pythonInternalTools" tests are 3.7+.
TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
'Functional':
PythonVersion: '3.5'
TestsToRun: 'testfunctional'
NeedsPythonTestReqs: true
NeedsPythonFunctionalReqs: true
'Single Workspace':
PythonVersion: '3.5'
TestsToRun: 'testSingleWorkspace'
NeedsPythonTestReqs: true
'Venv':
PythonVersion: '3.5'
TestsToRun: 'venvTests'
NeedsPythonTestReqs: true
NeedsIPythonReqs: true
PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json'
'Debugger':
PythonVersion: '3.5'
TestsToRun: 'testDebugger'
NeedsPythonTestReqs: true
#maxParallel: 3
pool:
vmImage: 'vs2017-win2016'
steps:
- template: templates/test_phases.yml

- stage: Reports
dependsOn:
- Linux
- Mac
- Windows
condition: always()
jobs:
- template: templates/jobs/coverage.yml
Loading