mongo-python-driver/.evergreen/config.yml
2017-08-31 22:26:39 -07:00

1278 lines
40 KiB
YAML

########################################
# Evergreen Template for MongoDB Drivers
########################################
# When a task that used to pass starts to fail
# Go through all versions that may have been skipped to detect
# when the task started failing
stepback: true
# Mark a failure as a system/bootstrap failure (purple box) rather then a task
# failure by default.
# Actual testing tasks are marked with `type: test`
command_type: system
# Protect ourself against rogue test case, or curl gone wild, that runs forever
# Good rule of thumb: the averageish length a task takes, times 5
# That roughly accounts for variable system performance for various buildvariants
exec_timeout_secs: 1800 # 6 minutes is the longest we'll ever run
# What to do when evergreen hits the timeout (`post:` tasks are run automatically)
timeout:
- command: shell.exec
params:
script: |
ls -la
functions:
"fetch source":
# Executes git clone and applies the submitted patch, if any
- command: git.get_project
params:
directory: "src"
# Applies the subitted patch, if any
# Deprecated. Should be removed. But still needed for certain agents (ZAP)
- command: git.apply_patch
# Make an evergreen exapanstion file with dynamic values
- command: shell.exec
params:
working_dir: "src"
script: |
# Get the current unique version of this checkout
if [ "${is_patch}" = "true" ]; then
CURRENT_VERSION=$(git describe)-patch-${version_id}
else
CURRENT_VERSION=latest
fi
export DRIVERS_TOOLS="$(pwd)/../drivers-tools"
export PROJECT_DIRECTORY="$(pwd)"
# Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory
if [ "Windows_NT" = "$OS" ]; then # Magic variable in cygwin
export DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS)
export PROJECT_DIRECTORY=$(cygpath -m $PROJECT_DIRECTORY)
fi
export MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration"
export MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin"
export UPLOAD_BUCKET="${project}"
cat <<EOT > expansion.yml
CURRENT_VERSION: "$CURRENT_VERSION"
DRIVERS_TOOLS: "$DRIVERS_TOOLS"
MONGO_ORCHESTRATION_HOME: "$MONGO_ORCHESTRATION_HOME"
MONGODB_BINARIES: "$MONGODB_BINARIES"
UPLOAD_BUCKET: "$UPLOAD_BUCKET"
PROJECT_DIRECTORY: "$PROJECT_DIRECTORY"
PREPARE_SHELL: |
set -o errexit
set -o xtrace
export DRIVERS_TOOLS="$DRIVERS_TOOLS"
export MONGO_ORCHESTRATION_HOME="$MONGO_ORCHESTRATION_HOME"
export MONGODB_BINARIES="$MONGODB_BINARIES"
export UPLOAD_BUCKET="$UPLOAD_BUCKET"
export PROJECT_DIRECTORY="$PROJECT_DIRECTORY"
export TMPDIR="$MONGO_ORCHESTRATION_HOME/db"
export PATH="$MONGODB_BINARIES:$PATH"
export PROJECT="${project}"
EOT
# See what we've done
cat expansion.yml
# Load the expansion file to make an evergreen variable with the current unique version
- command: expansions.update
params:
file: src/expansion.yml
"prepare resources":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
rm -rf $DRIVERS_TOOLS
if [ "${project}" = "drivers-tools" ]; then
# If this was a patch build, doing a fresh clone would not actually test the patch
cp -R ${PROJECT_DIRECTORY}/ $DRIVERS_TOOLS
else
git clone git://github.com/mongodb-labs/drivers-evergreen-tools.git $DRIVERS_TOOLS
fi
echo "{ \"releases\": { \"default\": \"$MONGODB_BINARIES\" }}" > $MONGO_ORCHESTRATION_HOME/orchestration.config
"upload release":
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${project}.tar.gz
remote_file: ${UPLOAD_BUCKET}/${project}-${CURRENT_VERSION}.tar.gz
bucket: mciuploads
permissions: public-read
content_type: ${content_type|application/x-gzip}
# Upload build artifacts that other tasks may depend on
# Note this URL needs to be totally unique, while predictable for the next task
# so it can automatically download the artifacts
"upload build":
# Compress and upload the entire build directory
- command: archive.targz_pack
params:
# Example: mongo_c_driver_releng_9dfb7d741efbca16faa7859b9349d7a942273e43_16_11_08_19_29_52.tar.gz
target: "${build_id}.tar.gz"
source_dir: ${PROJECT_DIRECTORY}/
include:
- "./**"
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${build_id}.tar.gz
# Example: /mciuploads/${UPLOAD_BUCKET}/gcc49/9dfb7d741efbca16faa7859b9349d7a942273e43/debug-compile-nosasl-nossl/mongo_c_driver_releng_9dfb7d741efbca16faa7859b9349d7a942273e43_16_11_08_19_29_52.tar.gz
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${task_name}/${build_id}.tar.gz
bucket: mciuploads
permissions: public-read
content_type: ${content_type|application/x-gzip}
"fetch build":
- command: shell.exec
params:
continue_on_err: true
script: "set -o xtrace && rm -rf ${PROJECT_DIRECTORY}"
- command: s3.get
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${BUILD_NAME}/${build_id}.tar.gz
bucket: mciuploads
local_file: build.tar.gz
- command: shell.exec
params:
continue_on_err: true
# EVG-1105: Use s3.get extract_to: ./
script: "set -o xtrace && cd .. && rm -rf ${PROJECT_DIRECTORY} && mkdir ${PROJECT_DIRECTORY}/ && tar xf build.tar.gz -C ${PROJECT_DIRECTORY}/"
"exec compile script" :
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
[ -f ${PROJECT_DIRECTORY}/${file} ] && BUILDTOOL="${buildtool}" sh ${PROJECT_DIRECTORY}/${file} || echo "${PROJECT_DIRECTORY}/${file} not available, skipping"
"exec script" :
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
[ -f ${PROJECT_DIRECTORY}/${file} ] && sh ${PROJECT_DIRECTORY}/${file} || echo "${PROJECT_DIRECTORY}/${file} not available, skipping"
"upload docs" :
- command: shell.exec
params:
silent: true
script: |
export AWS_ACCESS_KEY_ID=${aws_key}
export AWS_SECRET_ACCESS_KEY=${aws_secret}
aws s3 cp ${PROJECT_DIRECTORY}/doc/html s3://mciuploads/${UPLOAD_BUCKET}/docs/${CURRENT_VERSION} --recursive --acl public-read --region us-east-1
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${PROJECT_DIRECTORY}/doc/html/index.html
remote_file: ${UPLOAD_BUCKET}/docs/${CURRENT_VERSION}/index.html
bucket: mciuploads
permissions: public-read
content_type: text/html
display_name: "Rendered docs"
"upload coverage" :
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${PROJECT_DIRECTORY}/.coverage
optional: true
# Upload the coverage report for all tasks in a single build to the same directory.
remote_file: ${UPLOAD_BUCKET}/coverage/${revision}/${version_id}/coverage/coverage.${build_variant}.${task_name}
bucket: mciuploads
permissions: public-read
content_type: text/html
display_name: "Raw Coverage Report"
"download and merge coverage" :
- command: shell.exec
params:
silent: true
working_dir: "src"
script: |
export AWS_ACCESS_KEY_ID=${aws_key}
export AWS_SECRET_ACCESS_KEY=${aws_secret}
# Download all the task coverage files.
aws s3 cp --recursive s3://mciuploads/${UPLOAD_BUCKET}/coverage/${revision}/${version_id}/coverage/ coverage/
- command: shell.exec
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
# Coverage combine merges (and removes) all the coverage files and
# generates a new .coverage file in the current directory.
ls -la coverage/
/opt/python/3.6/bin/python3 -m coverage combine coverage/coverage.*
/opt/python/3.6/bin/python3 -m coverage html -d htmlcov
# Upload the resulting html coverage report.
- command: shell.exec
params:
silent: true
working_dir: "src"
script: |
export AWS_ACCESS_KEY_ID=${aws_key}
export AWS_SECRET_ACCESS_KEY=${aws_secret}
aws s3 cp htmlcov/ s3://mciuploads/${UPLOAD_BUCKET}/coverage/${revision}/${version_id}/htmlcov/ --recursive --acl public-read --region us-east-1
# Attach the index.html with s3.put so it shows up in the Evergreen UI.
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${PROJECT_DIRECTORY}/htmlcov/index.html
remote_file: ${UPLOAD_BUCKET}/coverage/${revision}/${version_id}/htmlcov/index.html
bucket: mciuploads
permissions: public-read
content_type: text/html
display_name: "Coverage Report HTML"
"upload scan artifacts" :
- command: shell.exec
type: test
params:
script: |
cd
if find ${PROJECT_DIRECTORY}/scan -name \*.html | grep -q html; then
(cd ${PROJECT_DIRECTORY}/scan && find . -name index.html -exec echo "<li><a href='{}'>{}</a></li>" \;) >> scan.html
else
echo "No issues found" > scan.html
fi
- command: shell.exec
params:
silent: true
script: |
export AWS_ACCESS_KEY_ID=${aws_key}
export AWS_SECRET_ACCESS_KEY=${aws_secret}
aws s3 cp ${PROJECT_DIRECTORY}/scan s3://mciuploads/${UPLOAD_BUCKET}/${build_variant}/${revision}/${version_id}/${build_id}/scan/ --recursive --acl public-read --region us-east-1
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${PROJECT_DIRECTORY}/scan.html
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${version_id}/${build_id}/scan/index.html
bucket: mciuploads
permissions: public-read
content_type: text/html
display_name: "Scan Build Report"
"upload mo artifacts":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
find $MONGO_ORCHESTRATION_HOME -name \*.log | xargs tar czf mongodb-logs.tar.gz
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: mongodb-logs.tar.gz
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${version_id}/${build_id}/logs/${task_id}-${execution}-mongodb-logs.tar.gz
bucket: mciuploads
permissions: public-read
content_type: ${content_type|application/x-gzip}
display_name: "mongodb-logs.tar.gz"
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: ${DRIVERS_TOOLS}/.evergreen/orchestration/server.log
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${version_id}/${build_id}/logs/${task_id}-${execution}-orchestration.log
bucket: mciuploads
permissions: public-read
content_type: ${content_type|text/plain}
display_name: "orchestration.log"
"upload working dir":
- command: archive.targz_pack
params:
target: "working-dir.tar.gz"
source_dir: ${PROJECT_DIRECTORY}/
include:
- "./**"
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: working-dir.tar.gz
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${version_id}/${build_id}/artifacts/${task_id}-${execution}-working-dir.tar.gz
bucket: mciuploads
permissions: public-read
content_type: ${content_type|application/x-gzip}
display_name: "working-dir.tar.gz"
- command: archive.targz_pack
params:
target: "drivers-dir.tar.gz"
source_dir: ${DRIVERS_TOOLS}
include:
- "./**"
exclude_files:
# Windows cannot read the mongod *.lock files because they are locked.
- "*.lock"
- command: s3.put
params:
aws_key: ${aws_key}
aws_secret: ${aws_secret}
local_file: drivers-dir.tar.gz
remote_file: ${UPLOAD_BUCKET}/${build_variant}/${revision}/${version_id}/${build_id}/artifacts/${task_id}-${execution}-drivers-dir.tar.gz
bucket: mciuploads
permissions: public-read
content_type: ${content_type|application/x-gzip}
display_name: "drivers-dir.tar.gz"
"upload test results":
- command: attach.results
params:
file_location: "${DRIVERS_TOOLS}/results.json"
- command: attach.xunit_results
params:
file: "src/xunit-results/TEST-*.xml"
"bootstrap mongo-orchestration":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
MONGODB_VERSION=${VERSION} TOPOLOGY=${TOPOLOGY} AUTH=${AUTH} SSL=${SSL} STORAGE_ENGINE=${STORAGE_ENGINE} sh ${DRIVERS_TOOLS}/.evergreen/run-orchestration.sh
# run-orchestration generates expansion file with the MONGODB_URI for the cluster
- command: expansions.update
params:
file: mo-expansion.yml
"stop mongo-orchestration":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
sh ${DRIVERS_TOOLS}/.evergreen/stop-orchestration.sh
"run mod_wsgi tests":
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
PYTHON_BINARY=${PYTHON_BINARY} MOD_WSGI_VERSION=${MOD_WSGI_VERSION} PROJECT_DIRECTORY=${PROJECT_DIRECTORY} sh ${PROJECT_DIRECTORY}/.evergreen/run-mod-wsgi-tests.sh
"run mockupdb tests":
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
PYTHON_BINARY=${PYTHON_BINARY} PROJECT_DIRECTORY=${PROJECT_DIRECTORY} sh ${PROJECT_DIRECTORY}/.evergreen/run-mockupdb-tests.sh
"run cdecimal tests":
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
PYTHON_BINARY=${PYTHON_BINARY} sh ${PROJECT_DIRECTORY}/.evergreen/run-cdecimal-tests.sh
"run doctests":
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
PYTHON_BINARY=${PYTHON_BINARY} sh ${PROJECT_DIRECTORY}/.evergreen/run-doctests.sh
"run tests":
- command: shell.exec
type: test
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
PYTHON_BINARY=${PYTHON_BINARY} GREEN_FRAMEWORK=${GREEN_FRAMEWORK} C_EXTENSIONS=${C_EXTENSIONS} COVERAGE=${COVERAGE} AUTH=${AUTH} SSL=${SSL} sh ${PROJECT_DIRECTORY}/.evergreen/run-tests.sh
"run enterprise auth tests":
- command: shell.exec
type: test
params:
silent: true
working_dir: "src"
script: |
# DO NOT ECHO WITH XTRACE (which PREPARE_SHELL does)
PYTHON_BINARY=${PYTHON_BINARY} SASL_HOST=${sasl_host} SASL_PORT=${sasl_port} SASL_USER=${sasl_user} SASL_PASS=${sasl_pass} SASL_DB=${sasl_db} PRINCIPAL=${principal} GSSAPI_DB=${gssapi_db} KEYTAB_BASE64=${keytab_base64} PROJECT_DIRECTORY=${PROJECT_DIRECTORY} sh ${PROJECT_DIRECTORY}/.evergreen/run-enterprise-auth-tests.sh
"cleanup":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
rm -rf $DRIVERS_TOOLS || true
"fix absolute paths":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
for filename in $(find ${DRIVERS_TOOLS} -name \*.json); do
perl -p -i -e "s|ABSOLUTE_PATH_REPLACEMENT_TOKEN|${DRIVERS_TOOLS}|g" $filename
done
"windows fix":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
for i in $(find ${DRIVERS_TOOLS}/.evergreen ${PROJECT_DIRECTORY}/.evergreen -name \*.sh); do
cat $i | tr -d '\r' > $i.new
mv $i.new $i
done
# Copy client certificate because symlinks do not work on Windows.
cp ${DRIVERS_TOOLS}/.evergreen/x509gen/client.pem ${MONGO_ORCHESTRATION_HOME}/lib/client.pem
"make files executable":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
for i in $(find ${DRIVERS_TOOLS}/.evergreen ${PROJECT_DIRECTORY}/.evergreen -name \*.sh); do
chmod +x $i
done
"init test-results":
- command: shell.exec
params:
script: |
${PREPARE_SHELL}
echo '{"results": [{ "status": "FAIL", "test_file": "Build", "log_raw": "No test-results.json found was created" } ]}' > ${PROJECT_DIRECTORY}/test-results.json
"install dependencies":
- command: shell.exec
params:
working_dir: "src"
script: |
${PREPARE_SHELL}
file="${PROJECT_DIRECTORY}/.evergreen/install-dependencies.sh"
# Don't use ${file} syntax here because evergreen treats it as an empty expansion.
[ -f "$file" ] && sh $file || echo "$file not available, skipping"
pre:
- func: "fetch source"
- func: "prepare resources"
- func: "windows fix"
- func: "fix absolute paths"
- func: "init test-results"
- func: "make files executable"
- func: "install dependencies"
post:
# Disabled, causing timeouts
# - func: "upload working dir"
- func: "upload coverage"
- func: "upload mo artifacts"
- func: "upload test results"
- func: "stop mongo-orchestration"
- func: "cleanup"
tasks:
# Wildcard task. Do you need to find out what tools are available and where?
# Throw it here, and execute this task on all buildvariants
- name: getdata
commands:
- command: shell.exec
type: test
params:
script: |
set -o xtrace
. ${DRIVERS_TOOLS}/.evergreen/download-mongodb.sh || true
get_distro || true
echo $DISTRO
echo $MARCH
echo $OS
uname -a || true
ls /etc/*release* || true
cc --version || true
gcc --version || true
clang --version || true
gcov --version || true
lcov --version || true
llvm-cov --version || true
echo $PATH
ls -la /usr/local/Cellar/llvm/*/bin/ || true
ls -la /usr/local/Cellar/ || true
scan-build --version || true
genhtml --version || true
valgrind --version || true
# Standard test tasks {{{
- name: "mockupdb"
tags: ["mockupdb"]
commands:
- func: "run mockupdb tests"
- name: "doctests"
tags: ["doctests"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "replica_set"
- func: "run doctests"
- name: "test-2.6-standalone"
tags: ["2.6", "standalone"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "2.6"
TOPOLOGY: "server"
- func: "run tests"
- name: "test-2.6-replica_set"
tags: ["2.6", "replica_set"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "2.6"
TOPOLOGY: "replica_set"
- func: "run tests"
- name: "test-2.6-sharded_cluster"
tags: ["2.6", "sharded_cluster"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "2.6"
TOPOLOGY: "sharded_cluster"
- func: "run tests"
- name: "test-3.0-standalone"
tags: ["3.0", "standalone"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.0"
TOPOLOGY: "server"
- func: "run tests"
- name: "test-3.0-replica_set"
tags: ["3.0", "replica_set"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.0"
TOPOLOGY: "replica_set"
- func: "run tests"
- name: "test-3.0-sharded_cluster"
tags: ["3.0", "sharded_cluster"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.0"
TOPOLOGY: "sharded_cluster"
- func: "run tests"
- name: "test-3.2-standalone"
tags: ["3.2", "standalone"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.2"
TOPOLOGY: "server"
- func: "run tests"
- name: "test-3.2-replica_set"
tags: ["3.2", "replica_set"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.2"
TOPOLOGY: "replica_set"
- func: "run tests"
- name: "test-3.2-sharded_cluster"
tags: ["3.2", "sharded_cluster"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.2"
TOPOLOGY: "sharded_cluster"
- func: "run tests"
- name: "test-3.4-standalone"
tags: ["3.4", "standalone"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.4"
TOPOLOGY: "server"
- func: "run tests"
- name: "test-3.4-replica_set"
tags: ["3.4", "replica_set"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.4"
TOPOLOGY: "replica_set"
- func: "run tests"
- name: "test-3.4-sharded_cluster"
tags: ["3.4", "sharded_cluster"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "3.4"
TOPOLOGY: "sharded_cluster"
- func: "run tests"
- name: "test-latest-standalone"
tags: ["latest", "standalone"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "server"
- func: "run tests"
- name: "test-latest-replica_set"
tags: ["latest", "replica_set"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "replica_set"
- func: "run tests"
- name: "test-latest-sharded_cluster"
tags: ["latest", "sharded_cluster"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "sharded_cluster"
- func: "run tests"
- name: "test-enterprise-auth"
tags: ["enterprise-auth"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "server"
- func: "run enterprise auth tests"
- name: "mod-wsgi-standalone"
tags: ["mod_wsgi"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "server"
- func: "run mod_wsgi tests"
- name: "mod-wsgi-replica-set"
tags: ["mod_wsgi"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "replica_set"
- func: "run mod_wsgi tests"
- name: "cdecimal"
tags: ["cdecimal"]
commands:
- func: "bootstrap mongo-orchestration"
vars:
VERSION: "latest"
TOPOLOGY: "server"
- func: "run cdecimal tests"
- name: "no-server"
tags: ["no-server"]
commands:
- func: "run tests"
vars:
PYTHON_BINARY: /opt/python/2.7/bin/python
# }}}
- name: "coverage-report"
tags: ["coverage"]
depends_on:
# BUILD-3165: We can't use "*" (all tasks) and specify "variant".
# Instead list out all coverage tasks using tags.
- name: ".standalone"
variant: ".coverage_tag"
# Run the coverage task even if some tasks fail.
status: "*"
# Run the coverage task even if some tasks are not scheduled in a patch build.
patch_optional: true
- name: ".replica_set"
variant: ".coverage_tag"
status: "*"
patch_optional: true
- name: ".sharded_cluster"
variant: ".coverage_tag"
status: "*"
patch_optional: true
commands:
- func: "download and merge coverage"
axes:
- id: versions
display_name: MongoDB Version
values:
- id: "latest"
display_name: "latest"
variables:
VERSION: "latest"
- id: "3.4"
display_name: "3.4"
variables:
VERSION: "3.4"
- id: "3.2"
display_name: "3.2"
variables:
VERSION: "3.2"
- id: "3.0"
display_name: "3.0"
variables:
VERSION: "3.0"
- id: "2.6"
display_name: "2.6"
variables:
VERSION: "2.6"
# OSes that support versions of MongoDB>=2.6 with SSL.
- id: os-fully-featured
display_name: OS
values:
- id: suse11-x86-64-test
display_name: "SUSE 11 (x86_64)"
run_on: suse11-test
- id: linux-64-amzn-test
display_name: "Amazon Linux (Enterprise)"
run_on: linux-64-amzn-test
# OSes that support versions of MongoDB without SSL.
- id: os-nossl
display_name: OS
values:
- id: archlinux-test
display_name: "Archlinux"
run_on: archlinux-test
- id: macos-1012
display_name: "macOS 10.12"
run_on: macos-1012
# - id: solaris
# display_name: "Solaris"
# run_on: solaris
# OSes that support versions of MongoDB>=2.6 with SSL.
- id: os-requires-26
display_name: OS
values:
- id: ubuntu-14.04
display_name: "Ubuntu 14.04"
run_on: ubuntu1404-test
- id: rhel70
display_name: "RHEL 7.0"
run_on: rhel70-small
- id: debian71-test
display_name: "Debian 7.1"
run_on: debian71-test
# OSes that support versions of MongoDB>=3.2 with SSL.
- id: os-requires-32
display_name: OS
values:
- id: ubuntu-16.04
display_name: "Ubuntu 16.04"
run_on: ubuntu1604-test
- id: suse12-x86-64-test
display_name: "SUSE 12 (x86_64)"
run_on: suse12-test
- id: rhel71-power8-test
display_name: "RHEL 7.1 (POWER8)"
run_on: rhel71-power8-test
batchtime: 10080 # 7 days
# OSes that introduced support for SSL with MongoDB>=3.2.
- id: os-ssl-requires-32
display_name: OS
values:
- id: macos-1012
display_name: "macOS 10.12"
run_on: macos-1012
# OSes that support versions of MongoDB>=3.4 with SSL.
- id: os-requires-34
display_name: OS
values:
- id: debian81-test
display_name: "Debian 8.1"
run_on: debian81-test
- id: rhel72-zseries-test
display_name: "RHEL 7.2 (zSeries)"
run_on: rhel72-zseries-test
batchtime: 10080 # 7 days
- id: suse12-zseries-test
display_name: "SUSE 12 (zSeries)"
run_on: suse12-zseries-test
batchtime: 10080 # 7 days
- id: ubuntu1604-arm64-small
display_name: "Ubuntu 16.04 (ARM64)"
run_on: ubuntu1604-arm64-small
batchtime: 10080 # 7 days
- id: ubuntu1604-power8-test
display_name: "Ubuntu 16.04 (POWER8)"
run_on: ubuntu1604-power8-test
batchtime: 10080 # 7 days
- id: ubuntu1604-zseries-small
display_name: "Ubuntu 16.04 (zSeries)"
run_on: ubuntu1604-zseries-small
batchtime: 10080 # 7 days
- id: topology
display_name: Topology
values:
- id: standalone
display_name: Standalone
variables:
TOPOLOGY: "server"
- id: replicaset
display_name: Replica Set
variables:
TOPOLOGY: "replica_set"
- id: sharded-cluster
display_name: Sharded Cluster
variables:
TOPOLOGY: "sharded_cluster"
- id: auth
display_name: Authentication
values:
- id: auth
display_name: Auth
variables:
AUTH: "auth"
- id: noauth
display_name: NoAuth
variables:
AUTH: "noauth"
- id: ssl
display_name: SSL
values:
- id: ssl
display_name: SSL
variables:
SSL: "ssl"
- id: nossl
display_name: NoSSL
variables:
SSL: "nossl"
- id: python-version
display_name: "Python"
values:
- id: "2.6"
display_name: "Python 2.6"
variables:
PYTHON_BINARY: "/opt/python/2.6/bin/python"
- id: "2.7"
display_name: "Python 2.7"
variables:
PYTHON_BINARY: "/opt/python/2.7/bin/python"
- id: "3.3"
display_name: "Python 3.3"
variables:
PYTHON_BINARY: "/opt/python/3.3/bin/python3"
- id: "3.4"
display_name: "Python 3.4"
variables:
PYTHON_BINARY: "/opt/python/3.4/bin/python3"
- id: "3.5"
display_name: "Python 3.5"
variables:
PYTHON_BINARY: "/opt/python/3.5/bin/python3"
- id: "3.6"
display_name: "Python 3.6"
variables:
PYTHON_BINARY: "/opt/python/3.6/bin/python3"
- id: "pypy"
display_name: "PyPy"
variables:
PYTHON_BINARY: "/opt/python/pypy/bin/pypy"
- id: "pypy3"
display_name: "PyPy 3"
variables:
PYTHON_BINARY: "/opt/python/pypy3/bin/pypy3"
- id: "jython2.7"
display_name: "Jython 2.7"
variables:
PYTHON_BINARY: "/opt/python/jython2.7/bin/jython"
- id: mod-wsgi-version
display_name: "mod_wsgi version"
values:
- id: "2.8"
display_name: "mod_wsgi 2.8"
variables:
MOD_WSGI_VERSION: "2.8"
- id: "3.5"
display_name: "mod_wsgi 3.5"
variables:
MOD_WSGI_VERSION: "3.5"
- id: "4.5.15"
display_name: "mod_wsgi 4.5.15"
variables:
MOD_WSGI_VERSION: "4.5.15"
- id: green-framework
display_name: "Green Framework"
values:
- id: "eventlet"
display_name: "Eventlet"
variables:
GREEN_FRAMEWORK: "eventlet"
- id: "gevent"
display_name: "Gevent"
variables:
GREEN_FRAMEWORK: "gevent"
- id: c-extensions
display_name: "C Extensions"
values:
- id: "without-c-extensions"
display_name: "Without C Extensions"
variables:
C_EXTENSIONS: "--no_ext"
- id: storage-engine
display_name: Storage
values:
- id: mmapv1
display_name: MMAPv1
variables:
STORAGE_ENGINE: "mmapv1"
- id: wiredtiger
display_name: WiredTiger
variables:
STORAGE_ENGINE: "wiredtiger"
- id: inmemory
display_name: InMemory
variables:
STORAGE_ENGINE: "inmemory"
- id: windows-vs2010-python-version
display_name: "Windows Visual Studio 2010 Python"
values:
- id: "3.3"
display_name: "Python 3.3"
variables:
PYTHON_BINARY: "/cygdrive/c/python/Python33/python.exe"
- id: "3.4"
display_name: "Python 3.4"
variables:
PYTHON_BINARY: "/cygdrive/c/python/Python34/python.exe"
- id: windows-vs2015-python-version
display_name: "Windows Visual Studio 2015 Python"
values:
# There is (currently) no vs2008 distro. The Microsoft Visual
# C++ Compiler for Python 2.7 has been installed, with CPython
# 2.6 and 2.7, on the vs2015 distro.
- id: "2.6"
display_name: "Python 2.6"
variables:
PYTHON_BINARY: "/cygdrive/c/python/Python26/python.exe"
- id: "2.7"
display_name: "Python 2.7"
variables:
PYTHON_BINARY: "/cygdrive/c/python/Python27/python.exe"
- id: "3.5"
display_name: "Python 3.5"
variables:
PYTHON_BINARY: "/cygdrive/c/python/Python35/python.exe"
- id: "3.6"
display_name: "Python 3.6"
variables:
PYTHON_BINARY: "/cygdrive/c/python/Python36/python.exe"
- id: coverage
display_name: "Coverage"
values:
- id: "coverage"
display_name: "Coverage"
tags: ["coverage_tag"]
variables:
COVERAGE: "coverage"
buildvariants:
- matrix_name: "tests-all"
matrix_spec: {"os-fully-featured": "*", auth: "*", ssl: "*"}
display_name: "${os-fully-featured} ${auth} ${ssl}"
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
- matrix_name: "tests-nossl"
matrix_spec: {"os-nossl": "*", auth: "*", ssl: "nossl"}
display_name: "${os-nossl} ${auth} ${ssl}"
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
- matrix_name: "tests-os-requires-26"
matrix_spec: {"os-requires-26": "*", auth: "*", ssl: "*"}
display_name: "${os-requires-26} ${auth} ${ssl}"
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
- matrix_name: "tests-os-requires-32"
matrix_spec: {"os-requires-32": "*", auth: "*", ssl: "*"}
display_name: "${os-requires-32} ${auth} ${ssl}"
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- matrix_name: "tests-ssl-requires-32"
matrix_spec: {"os-ssl-requires-32": "*", auth: "*", ssl: "ssl"}
display_name: "${os-ssl-requires-32} ${auth} ${ssl}"
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- matrix_name: "tests-os-requires-34"
matrix_spec: {"os-requires-34": "*", auth: "*", ssl: "*"}
display_name: "${os-requires-34} ${auth} ${ssl}"
tasks:
- ".latest"
- ".3.4"
- matrix_name: "tests-python-version-ubuntu1204-test-ssl"
matrix_spec: {"python-version": "*", auth: "*", ssl: "*", coverage: "*"}
exclude_spec:
# PYTHON-498: disable Jython SSL tests
python-version: "jython2.7"
# EVG-1410: exlcude_spec must specifiy values for all axes
auth: "*"
ssl: "ssl"
coverage: "*"
display_name: "${python-version} Ubuntu 12.04 (x86_64) ${auth} ${ssl} ${coverage}"
run_on: ubuntu1204-test
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
- matrix_name: "tests-python-version-ubuntu1204-without-c-extensions"
matrix_spec: {"python-version": "*", "c-extensions": "without-c-extensions", auth: "noauth", ssl: "nossl", coverage: "*"}
exclude_spec:
# These interpreters are always tested without extensions.
- python-version: ["pypy", "pypy3", "jython2.7"]
c-extensions: "*"
auth: "*"
ssl: "*"
coverage: "*"
display_name: "${c-extensions} ${python-version} Ubuntu 12.04 (x86_64) ${auth} ${ssl} ${coverage}"
run_on: ubuntu1204-test
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
- matrix_name: "tests-python-version-green-framework-ubuntu1204"
matrix_spec: {"python-version": "*", "green-framework": "*", auth: "*", ssl: "*"}
exclude_spec:
# Don't test green frameworks on these Python versions.
- python-version: ["pypy", "pypy3", "jython2.7"]
green-framework: "*"
auth: "*"
ssl: "*"
display_name: "${green-framework} ${python-version} Ubuntu 12.04 (x86_64) ${auth} ${ssl}"
run_on: ubuntu1204-test
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
# Test CPython 3.3 and 3.4 against all versions on MongoDB >= 2.6
# on Windows with Visual Studio 2010.
- matrix_name: "tests-windows-vs2010-python-version-nossl"
matrix_spec: {windows-vs2010-python-version: "*", auth: "*", ssl: "*"}
display_name: "Windows 64 Visual Studio 2010 ${windows-vs2010-python-version} ${auth} ${ssl}"
run_on: windows-64-vs2010-test
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
# Test CPython 2.6, 2.7, 3.5 and 3.6 against all versions on MongoDB >= 2.6
# on Windows with the Microsoft Visual C++ Compiler for Python 2.7 or Visual Studio 2015.
- matrix_name: "tests-windows-vs2015-python-version-nossl"
matrix_spec: {windows-vs2015-python-version: "*", auth: "*", ssl: "*"}
display_name: "Windows 64 Visual Studio 2015 ${windows-vs2015-python-version} ${auth} ${ssl}"
run_on: windows-64-vs2015-test
tasks:
- ".latest"
- ".3.4"
- ".3.2"
- ".3.0"
- ".2.6"
# Storage engine tests on Ubuntu 12.04 (x86_64) with Python 2.7.
- matrix_name: "tests-storage-engines"
matrix_spec: {storage-engine: "*", python-version: "2.7"}
display_name: "Storage ${storage-engine} ${python-version} Ubuntu 12.04 (x86_64)"
run_on: ubuntu1204-test
rules:
- if:
storage-engine: ["mmapv1", "inmemory"]
python-version: "*"
then:
add_tasks:
- "test-latest-standalone"
- "test-3.4-standalone"
- "test-3.2-standalone"
- if:
storage-engine: "wiredtiger"
python-version: "*"
then:
add_tasks:
- "test-3.0-standalone"
- matrix_name: "test-linux-enterprise-auth"
matrix_spec: {"python-version": "*", auth: "auth"}
display_name: "Enterprise Auth Linux ${python-version}"
run_on: ubuntu1204-test
tasks:
- name: "test-enterprise-auth"
- matrix_name: "tests-windows-vs2010-enterprise-auth"
matrix_spec: {"windows-vs2010-python-version": "*", auth: "auth"}
display_name: "Enterprise Auth Windows ${windows-vs2010-python-version}"
run_on: windows-64-vs2010-test
tasks:
- name: "test-enterprise-auth"
- matrix_name: "tests-windows-vs2015-enterprise-auth"
matrix_spec: {"windows-vs2015-python-version": "*", auth: "auth"}
display_name: "Enterprise Auth Windows ${windows-vs2015-python-version}"
run_on: windows-64-vs2015-test
tasks:
- name: "test-enterprise-auth"
- matrix_name: "tests-mod-wsgi"
matrix_spec: {"python-version": ["2.6", "2.7", "3.3", "3.6"], "mod-wsgi-version": "*"}
exclude_spec:
python-version: ["3.3", "3.6"]
mod-wsgi-version: ["2.8"]
display_name: "${mod-wsgi-version} ${python-version}"
run_on: ubuntu1204-test
tasks:
- name: "mod-wsgi-standalone"
- name: "mod-wsgi-replica-set"
- matrix_name: "mockupdb-tests"
matrix_spec: {python-version: "2.7"}
display_name: "MockupDB Tests"
run_on: ubuntu1204-test
tasks:
- name: "mockupdb"
- matrix_name: "tests-doctests"
matrix_spec: {python-version: ["2.7", "3.4"]}
display_name: "Doctests ${python-version}"
run_on: ubuntu1204-test
tasks:
- name: "doctests"
- matrix_name: "cdecimal"
matrix_spec: {python-version: ["2.6", "2.7"]}
display_name: "cdecimal ${python-version}"
batchtime: 10080 # 7 days
run_on:
- ubuntu1204-test
tasks:
- name: "cdecimal"
- name: "no-server"
display_name: "No server test"
run_on:
- ubuntu1204-test
tasks:
- name: "no-server"
- name: "Coverage Report"
display_name: "Coverage Report"
run_on: ubuntu1604-test
tasks:
- name: "coverage-report"
# Platform notes
# i386 builds of OpenSSL or Cyrus SASL are not available
# Ubuntu14.04 only supports 2.6+ with SSL
# Ubuntu16.04 ppc64le is only supported by MongoDB 3.4+
# Ubuntu16.04 aarch64 is only supported by MongoDB 3.4+
# Ubuntu16.04 s390x is only supported by MongoDB 3.4+
# Ubuntu16.04 (x86) only supports MongoDB 3.2+
# Debian 8.1 only supports MongoDB 3.4+
# SUSE12 s390x is only supported by MongoDB 3.4+
# No enterprise build for Archlinux, SSL not available
# RHEL 7 only supports 2.6+
# RHEL 7.1 ppc64le is only supported by MongoDB 3.2+
# RHEL 7.2 s390x is only supported by MongoDB 3.4+
# Solaris MongoDB SSL builds are not available
# Darwin MongoDB SSL builds are not available for 2.6
# SUSE12 x86_64 is only supported by MongoDB 3.2+
# vim: set et sw=2 ts=2 :