You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
9.4 KiB

if (env.BRANCH_NAME == "master") {
properties([pipelineTriggers([cron('@daily')])])
}
def configs = [
[
label: 'windows',
toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'],
],
[
label: 'windows64',
toxenvs: ['py27', 'py34', 'py35', 'py36', 'py37'],
],
[
label: 'sierra',
toxenvs: ['py27', 'py36'],
],
[
label: 'yosemite',
toxenvs: ['py27'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-sid',
toxenvs: ['docs'],
artifacts: 'cryptography/docs/_build/html/**',
artifactExcludes: '**/*.doctree',
],
]
def checkout_git(label) {
retry(3) {
def script = ""
if (env.BRANCH_NAME.startsWith('PR-')) {
script = """
git clone --depth=1 https://github.com/pyca/cryptography
cd cryptography
git fetch origin +refs/pull/${env.CHANGE_ID}/merge:
git checkout -qf FETCH_HEAD
"""
if (label.contains("windows")) {
bat script
} else {
sh """#!/bin/sh
set -xe
${script}
"""
}
} else {
checkout([
$class: 'GitSCM',
branches: [[name: "*/${env.BRANCH_NAME}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'cryptography'
]],
submoduleCfg: [],
userRemoteConfigs: [[
'url': 'https://github.com/pyca/cryptography'
]]
])
}
}
if (label.contains("windows")) {
bat """
cd cryptography
git rev-parse HEAD
"""
} else {
sh """
cd cryptography
git rev-parse HEAD
"""
}
}
def build(toxenv, label, imageName, artifacts, artifactExcludes) {
try {
timeout(time: 30, unit: 'MINUTES') {
checkout_git(label)
checkout([
$class: 'GitSCM',
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'wycheproof',
]],
userRemoteConfigs: [[
'url': 'https://github.com/google/wycheproof',
]]
])
withCredentials([string(credentialsId: 'cryptography-codecov-token', variable: 'CODECOV_TOKEN')]) {
withEnv(["LABEL=$label", "TOXENV=$toxenv", "IMAGE_NAME=$imageName"]) {
if (label.contains("windows")) {
def pythonPath = [
py27: "C:\\Python27\\python.exe",
py34: "C:\\Python34\\python.exe",
py35: "C:\\Python35\\python.exe",
py36: "C:\\Python36\\python.exe",
py37: "C:\\Python37\\python.exe"
]
if (toxenv == "py35" || toxenv == "py36" || toxenv == "py37") {
opensslPaths = [
"windows": [
"include": "C:\\OpenSSL-Win32-2015\\include",
"lib": "C:\\OpenSSL-Win32-2015\\lib"
],
"windows64": [
"include": "C:\\OpenSSL-Win64-2015\\include",
"lib": "C:\\OpenSSL-Win64-2015\\lib"
]
]
} else {
opensslPaths = [
"windows": [
"include": "C:\\OpenSSL-Win32-2010\\include",
"lib": "C:\\OpenSSL-Win32-2010\\lib"
],
"windows64": [
"include": "C:\\OpenSSL-Win64-2010\\include",
"lib": "C:\\OpenSSL-Win64-2010\\lib"
]
]
}
bat """
cd cryptography
@set PATH="C:\\Python27";"C:\\Python27\\Scripts";%PATH%
@set PYTHON="${pythonPath[toxenv]}"
@set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE%
@set LIB="${opensslPaths[label]['lib']}";%LIB%
tox -r -- --wycheproof-root=../wycheproof
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
virtualenv .codecov
call .codecov/Scripts/activate
REM this pin must be kept in sync with tox.ini
pip install coverage
pip install codecov
codecov -e JOB_BASE_NAME,LABEL,TOXENV
"""
} else if (label.contains("sierra") || label.contains("yosemite")) {
ansiColor {
sh """#!/usr/bin/env bash
set -xe
# Jenkins logs in as a non-interactive shell, so we don't even have /usr/local/bin in PATH
export PATH="/usr/local/bin:\${PATH}"
export PATH="/Users/jenkins/.pyenv/shims:\${PATH}"
cd cryptography
CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 \
LDFLAGS="/usr/local/opt/openssl\\@1.1/lib/libcrypto.a /usr/local/opt/openssl\\@1.1/lib/libssl.a" \
CFLAGS="-I/usr/local/opt/openssl\\@1.1/include -Werror -Wno-error=deprecated-declarations -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=unused-function -Wno-error=unused-command-line-argument -mmacosx-version-min=10.9" \
tox -r -- --color=yes --wycheproof-root=../wycheproof
virtualenv .venv
source .venv/bin/activate
# This pin must be kept in sync with tox.ini
pip install coverage
bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV
"""
}
} else {
ansiColor {
sh """#!/usr/bin/env bash
set -xe
cd cryptography
tox -r -- --color=yes --wycheproof-root=../wycheproof
virtualenv .venv
source .venv/bin/activate
# This pin must be kept in sync with tox.ini
pip install coverage
bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL,TOXENV,IMAGE_NAME
"""
}
if (artifacts) {
archiveArtifacts artifacts: artifacts, excludes: artifactExcludes
}
}
}
}
}
} finally {
deleteDir()
}
}
def builders = [:]
for (config in configs) {
def label = config["label"]
def toxenvs = config["toxenvs"]
def artifacts = config["artifacts"]
def artifactExcludes = config["artifactExcludes"]
for (_toxenv in toxenvs) {
def toxenv = _toxenv
if (label.contains("docker")) {
def imageName = config["imageName"]
def combinedName = "${imageName}-${toxenv}"
builders[combinedName] = {
node(label) {
stage(combinedName) {
def buildImage = docker.image(imageName)
buildImage.pull()
buildImage.inside {
build(toxenv, label, imageName, artifacts, artifactExcludes)
}
}
}
}
} else {
def combinedName = "${label}-${toxenv}"
builders[combinedName] = {
node(label) {
stage(combinedName) {
build(toxenv, label, '', null, null)
}
}
}
}
}
}
/* Add the python setup.py test builder */
builders["setup.py-test"] = {
node("docker") {
stage("python setup.py test") {
docker.image("pyca/cryptography-runner-ubuntu-rolling").inside {
try {
checkout_git("docker")
sh """#!/usr/bin/env bash
set -xe
cd cryptography
virtualenv .venv
source .venv/bin/activate
python setup.py test
"""
} finally {
deleteDir()
}
}
}
}
}
parallel builders