Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to jenkinsfile #3525

Merged
merged 58 commits into from May 23, 2017
Merged
Changes from 50 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
aebf739
[WIP] add a jenkinsfile
reaperhulk Apr 29, 2017
1c30eb9
various jenkinsfile fixes [ci skip]
reaperhulk Apr 29, 2017
bf7a86a
experiments
reaperhulk Apr 29, 2017
4e28420
escape the escaping
reaperhulk Apr 29, 2017
2e6eae5
can't do that with /usr/bin/env bash
reaperhulk Apr 29, 2017
f82e6df
continue isolation
reaperhulk Apr 29, 2017
f7acffc
bleh
reaperhulk Apr 29, 2017
f445b3c
optimistically enable everything
reaperhulk May 10, 2017
ec9c205
things
reaperhulk May 10, 2017
14b30f9
add timeout, codecov
reaperhulk May 11, 2017
10336db
derp
reaperhulk May 11, 2017
abae2ae
sigh
reaperhulk May 11, 2017
abdbb92
add credentials for codecov upload
reaperhulk May 15, 2017
7b782f7
print the env
reaperhulk May 21, 2017
ea68f04
nonsense
reaperhulk May 21, 2017
4209579
checkout without jenkins because jenkins sucks
reaperhulk May 21, 2017
bf5c60b
maybe we're not allowed to shadow
reaperhulk May 21, 2017
2404131
maybe if we actually pass the variable
reaperhulk May 21, 2017
988df78
scope
reaperhulk May 21, 2017
c209b0a
cd into a thing
reaperhulk May 21, 2017
cb28846
also here
reaperhulk May 21, 2017
bd013e1
print the commit and run all the jobs again
reaperhulk May 21, 2017
e0f64f9
son of a
reaperhulk May 21, 2017
8fe644b
add labels
reaperhulk May 21, 2017
a745baa
ch-ch-ch-changes
reaperhulk May 21, 2017
5c19628
damn it
reaperhulk May 21, 2017
97de81f
add docs, pep8, py3pep8
reaperhulk May 21, 2017
0f1aa88
try some downstreams
reaperhulk May 21, 2017
bee32ab
make this maybe work
reaperhulk May 21, 2017
356cc79
this is probably what we need
reaperhulk May 21, 2017
73a5543
faster testing
reaperhulk May 21, 2017
febe398
run this in docker duh
reaperhulk May 21, 2017
c24f496
delete me some dirs
reaperhulk May 21, 2017
d39f844
wtf
reaperhulk May 21, 2017
aca17e8
god
reaperhulk May 21, 2017
54e60f8
more things
reaperhulk May 21, 2017
cb0e65a
oh boy locales
reaperhulk May 21, 2017
baa8a68
re-enable everything, remove the locales now that they're embedded
reaperhulk May 21, 2017
05fcf20
refactor, this will probably break everything
reaperhulk May 21, 2017
1212936
small test
reaperhulk May 21, 2017
ace1afd
sigh
reaperhulk May 21, 2017
85189ff
actually bind some variables. also rename things to be camelCase
reaperhulk May 21, 2017
715c63a
oookay
reaperhulk May 21, 2017
004bec5
this is not gonna work
reaperhulk May 22, 2017
42d8f1b
test all the things
reaperhulk May 22, 2017
1825d27
add docs-linkcheck, remove libre 2.5.3 because it is bad
reaperhulk May 22, 2017
efbf265
syntax is for losers
reaperhulk May 22, 2017
d1fbbc3
append a thing
reaperhulk May 22, 2017
dd08e82
add yosemite, run this thing daily
reaperhulk May 22, 2017
775606f
oops
reaperhulk May 22, 2017
e1ba67b
some finally cleanup
reaperhulk May 22, 2017
bf94056
twisted is dead to us for a brief moment
reaperhulk May 22, 2017
813c8b6
add randomorder and setup.py test
reaperhulk May 22, 2017
de83db1
whatever
reaperhulk May 22, 2017
1f494e2
re-enable twisted
reaperhulk May 22, 2017
4259be9
delete everything. eat arby's
reaperhulk May 22, 2017
d64167b
delete everything this time
reaperhulk May 23, 2017
46eb081
all is emptiness
reaperhulk May 23, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
328 changes: 328 additions & 0 deletions Jenkinsfile
@@ -0,0 +1,328 @@
/* known issues */
/* Parallel tasks, when executed, show up as "part of <job name>" rather than a more descriptive name. See http://stackoverflow.com/questions/37812588/how-can-i-override-the-part-of-app-pipeline-buildname */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this and turn it into a follow up issue, or linewrap it with a link to a jenkins upstream issue.


/* notes */
/* You must escape backslashes and $ because groovy. */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can probably removed, it's just a fact of groovy.


if (env.BRANCH_NAME == "master") {
properties([pipelineTriggers([cron('@daily')])])
}

def configs = [
[
label: 'windows',
toxenvs: ['py26', 'py27', 'py33', 'py34', 'py35', 'py36'],
],
[
label: 'windows64',
toxenvs: ['py26', 'py27', 'py33', 'py34', 'py35', 'py36'],
],
[
label: 'freebsd11',
toxenvs: ['py27'],
],
[
label: 'sierra',
toxenvs: ['py27'],
],
[
label: 'yosemite',
toxenvs: ['py27'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-centos7',
toxenvs: ['py27'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-wheezy',
toxenvs: ['py27'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-jessie',
toxenvs: ['py27', 'py34'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-sid',
toxenvs: ['py27', 'py35'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-stretch',
toxenvs: ['py27', 'py35'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-jessie-libressl:2.4.5',
toxenvs: ['py27'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-ubuntu-xenial',
toxenvs: ['py27', 'py35'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-ubuntu-rolling',
toxenvs: ['py27', 'py35', 'docs', 'pep8', 'py3pep8'],
],
[
label: 'docker',
imageName: 'pyca/cryptography-runner-fedora',
toxenvs: ['py27', 'py35'],
],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need the docs-linkcheck buidl somewhere, somehow.

]

/* Add the linkcheck job to our config list if we're on master */
if (env.BRANCH_NAME == "master") {
configs.add(
[
label: 'docker',
imageName: 'pyca/cryptography-runner-ubuntu-rolling',
toxenvs: ['docs-linkcheck'],
]
)
}

def downstreams = [
[
downstreamName: 'pyOpenSSL',
label: 'docker',
imageName: 'pyca/cryptography-runner-ubuntu-rolling',
script: """#!/bin/bash -xe
git clone --depth=1 https://github.com/pyca/pyopenssl.git pyopenssl
cd pyopenssl
virtualenv .venv
source .venv/bin/activate
pip install ../cryptography
pip install -e .
pip install pytest
pytest tests
"""
],
[
downstreamName: 'Twisted',
label: 'docker',
imageName: 'pyca/cryptography-runner-ubuntu-rolling',
script: """#!/bin/bash -xe
git clone --depth=1 https://github.com/twisted/twisted.git twisted
cd twisted
virtualenv .venv
source .venv/bin/activate
pip install ../cryptography
pip install pyopenssl service_identity pycrypto
pip install -e .
python -m twisted.trial src/twisted
"""
],
[
downstreamName: 'paramiko',
label: 'docker',
imageName: 'pyca/cryptography-runner-ubuntu-rolling',
script: """#!/bin/bash -xe
git clone --depth=1 https://github.com/paramiko/paramiko.git paramiko
cd paramiko
virtualenv .venv
source .venv/bin/activate
pip install ../cryptography
pip install -e .
pip install -r dev-requirements.txt
inv test
"""
],
]

def checkout_git(label) {
def script = ""
if (env.BRANCH_NAME.startsWith('PR-')) {
script = """
git clone --depth=1 https://github.com/pyca/cryptography.git cryptography
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it pratical to factor these first two lines of the script that are the same in both things out?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these need -xe? Or the #!?

cd cryptography
git fetch origin +refs/pull/${env.CHANGE_ID}/merge:
git checkout -qf FETCH_HEAD
git rev-parse HEAD
"""
} else {
script = """
git clone --depth=1 https://github.com/pyca/cryptography.git cryptography
cd cryptography
git checkout ${env.BRANCH_NAME}
git rev-parse HEAD
"""
}
if (label.contains("windows")) {
bat script
} else {
sh """#!/bin/sh
set -xe
${script}
"""
}
}
def build(toxenv, label, imageName) {

try {
timeout(time: 30, unit: 'MINUTES') {

checkout_git(label)

withCredentials([string(credentialsId: 'cryptography-codecov-token', variable: 'CODECOV_TOKEN')]) {
withEnv(["LABEL=$label", "TOXENV=$toxenv", "IMAGE_NAME=$imageName"]) {
if (label.contains("windows")) {
def pythonPath = [
py26: "C:\\Python26\\python.exe",
py27: "C:\\Python27\\python.exe",
py33: "C:\\Python33\\python.exe",
py34: "C:\\Python34\\python.exe",
py35: "C:\\Python35\\python.exe",
py36: "C:\\Python36\\python.exe"
]
if (toxenv == "py35" || toxenv == "py36") {
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 CRYPTOGRAPHY_WINDOWS_LINK_OPENSSL110=1
@set PYTHON="${pythonPath[toxenv]}"

@set INCLUDE="${opensslPaths[label]['include']}";%INCLUDE%
@set LIB="${opensslPaths[label]['lib']}";%LIB%
tox -r
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
virtualenv .codecov
call .codecov/Scripts/activate
pip install codecov
codecov -e JOB_BASE_NAME,LABEL
"""
} 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}"
export PYENV_SHELL=bash
cd cryptography
CRYPTOGRAPHY_OSX_NO_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 -Wno-error=unused-function -Wno-error=unused-command-line-argument" \
tox -r -- --color=yes
virtualenv .venv
source .venv/bin/activate
pip install coverage
bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL
"""
}
} else {
ansiColor {
sh """#!/usr/bin/env bash
set -xe
cd cryptography
if [[ "\${IMAGE_NAME}" == *"libressl"* ]]; then
LD_LIBRARY_PATH="/usr/local/libressl/lib:\$LD_LIBRARY_PATH" \
LDFLAGS="-L/usr/local/libressl/lib" \
CFLAGS="-I/usr/local/libressl/include" \
tox -r -- --color=yes
else
tox -r -- --color=yes
fi
virtualenv .venv
source .venv/bin/activate
pip install coverage
bash <(curl -s https://codecov.io/bash) -e JOB_BASE_NAME,LABEL
"""
}
}
}
}
}
} finally {
deleteDir()
}

}

def builders = [:]
for (config in configs) {
def label = config["label"]
def toxenvs = config["toxenvs"]

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) {
docker.image(imageName).inside {
build(toxenv, label, imageName)
}
}
}
}
} else {
def combinedName = "${label}-${toxenv}"
builders[combinedName] = {
node(label) {
stage(combinedName) {
build(toxenv, label, '')
}
}
}
}
}
}

parallel builders

def downstreamBuilders = [:]
for (downstream in downstreams) {
def downstreamName = downstream["downstreamName"]
def imageName = downstream["imageName"]
def label = downstream["label"]
def script = downstream["script"]
downstreamBuilders[downstreamName] = {
node(label) {
docker.image(imageName).inside {
try {
timeout(time: 30, unit: 'MINUTES') {
checkout_git(label)
sh script
}
} finally {
deleteDir()
}
}
}
}
}

stage("Downstreams") {
parallel downstreamBuilders
}