Create and upload wheels

We want to make wheels for pre-release and release events. We will only
build wheels on python 2.7. If the project supports python 3 as well, the
project will have marked itself as supporting universal wheels. If it does
that, python 2.7 will build a wheel that can be used in both places. If it
does not support python 3, then we don't have to build on on python 3.

Change-Id: I060b59d8adc586ff37065fa4f6172a592ee3f903
This commit is contained in:
Monty Taylor 2013-11-16 06:16:23 -05:00 committed by Doug Hellmann
parent 54007bcad2
commit a207facd23
8 changed files with 292 additions and 628 deletions

View File

@ -0,0 +1,28 @@
#!/usr/bin/python
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# Extract Python package name from setup.cfg
import ConfigParser
universal = False
setup_cfg = ConfigParser.SafeConfigParser()
setup_cfg.read("setup.cfg")
if setup_cfg.has_section("wheel"):
universal = setup_cfg.getboolean("wheel", "universal")
if universal:
print("py2.py3")
else:
print("py27")

View File

@ -0,0 +1,38 @@
#!/bin/bash -xe
#
# Copyright 2012 Hewlett-Packard Development Company, L.P.
# Copyright 2013 OpenStack Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# Retrieve supported python wheels and upload them to pypi with Curl.
PROJECT=$1
TARBALL_SITE=$2
TAG=`echo $ZUUL_REF | sed 's/^refs.tags.//'`
# Look in the setup.cfg to determine if a package name is specified, but
# fall back on the project name if necessary
DISTNAME=`/usr/local/jenkins/slave_scripts/pypi-extract-name.py \
|| echo $PROJECT`
# Look in the setup.cfg to see if this is a universal wheel or not
WHEELTYPE=`/usr/local/jenkins/slave_scripts/pypi-extract-universal.py`
FILENAME="$DISTNAME-$TAG.$WHEELTYPE-none-any.whl"
rm -rf *.whl
curl --fail -o $FILENAME http://$TARBALL_SITE/$PROJECT/$FILENAME
# Make sure we actually got a wheel
file -b $FILENAME | grep -i zip
twine upload -r pypi $FILENAME

View File

@ -0,0 +1,38 @@
#!/bin/bash -xe
# Copyright 2013 OpenStack Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
org=$1
project=$2
if [[ -z "$org" || -z "$project" ]]
then
echo "Usage: $0 ORG PROJECT"
echo
echo "ORG: The project organization (eg 'openstack')"
echo "PROJECT: The project name (eg 'nova')"
exit 1
fi
source /usr/local/jenkins/slave_scripts/select-mirror.sh $org $project
rm -f dist/*.tar.gz
tox -evenv pip install wheel
tox -evenv python setup.py bdist_wheel
echo "SHA1sum: "
sha1sum dist/*
echo "MD5sum: "
md5sum dist/*

View File

@ -209,7 +209,10 @@
- builder: - builder:
name: tarball name: tarball
builders: builders:
- shell: "/usr/local/jenkins/slave_scripts/run-tarball.sh {github-org} {project}" - shell: |
#!/bin/bash -xe
/usr/local/jenkins/slave_scripts/run-tarball.sh {github-org} {project}
/usr/local/jenkins/slave_scripts/run-wheel.sh {github-org} {project}
- builder: - builder:
name: devstack-checkout name: devstack-checkout
@ -306,6 +309,17 @@
- target: 'tarballs/{project}/' - target: 'tarballs/{project}/'
source: 'dist/*.tar.gz' source: 'dist/*.tar.gz'
- publisher:
name: wheel
publishers:
- archive:
artifacts: 'dist/*.whl'
- scp:
site: '{site}'
files:
- target: 'tarballs/{project}/'
source: 'dist/*.whl'
- publisher: - publisher:
name: war name: war
publishers: publishers:

View File

@ -1,12 +1,27 @@
- job-template: - job-template:
name: '{name}-pypi-upload' name: '{name}-pypi-both-upload'
node: pypi node: pypi
builders: builders:
- revoke-sudo - revoke-sudo
- gerrit-git-prep - gerrit-git-prep
- shell: | - shell: |
/usr/local/jenkins/slave_scripts/pypi-upload.sh {name} {tarball-site} /usr/local/jenkins/slave_scripts/pypi-tarball-upload.sh {name} {tarball-site}
/usr/local/jenkins/slave_scripts/pypi-wheel-upload.sh {name} {tarball-site}
publishers:
- console-log
- job-template:
name: '{name}-pypi-wheel-upload'
node: pypi
builders:
- revoke-sudo
- gerrit-git-prep
- shell: |
/usr/local/jenkins/slave_scripts/pypi-wheel-upload.sh {name} {tarball-site}
publishers: publishers:
- console-log - console-log
@ -15,4 +30,5 @@
- job-group: - job-group:
name: pypi-jobs name: pypi-jobs
jobs: jobs:
- '{name}-pypi-upload' - '{name}-pypi-both-upload'
- '{name}-pypi-wheel-upload'

View File

@ -200,6 +200,9 @@
- tarball: - tarball:
project: '{name}' project: '{name}'
site: '{tarball-site}' site: '{tarball-site}'
- wheel:
project: '{name}'
site: '{tarball-site}'
- console-log - console-log

File diff suppressed because it is too large Load Diff