diff --git a/modules/jenkins/files/slave_scripts/pypi-extract-name.py b/modules/jenkins/files/slave_scripts/pypi-extract-name.py new file mode 100644 index 0000000000..864e625832 --- /dev/null +++ b/modules/jenkins/files/slave_scripts/pypi-extract-name.py @@ -0,0 +1,23 @@ +#!/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 + +setup_cfg = ConfigParser.SafeConfigParser() +setup_cfg.read("setup.cfg") +distname = setup_cfg.get("metadata", "name") +assert distname +print(distname) diff --git a/modules/jenkins/files/slave_scripts/pypi-upload.sh b/modules/jenkins/files/slave_scripts/pypi-upload.sh index 25aecc7985..66d4ed5342 100755 --- a/modules/jenkins/files/slave_scripts/pypi-upload.sh +++ b/modules/jenkins/files/slave_scripts/pypi-upload.sh @@ -1,6 +1,7 @@ -#!/bin/bash +#!/bin/bash -xe # -# Copyright 2012 Hewlett-Packard Development Company, L.P. +# 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 @@ -14,26 +15,38 @@ # License for the specific language governing permissions and limitations # under the License. # -# Upload python sdist to pypi with Curl. +# Retrieve a python sdist and upload it 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` +FILENAME="$DISTNAME-$TAG.tar.gz" + +rm -rf *tar.gz +curl --fail -o $FILENAME http://$TARBALL_SITE/$PROJECT/$FILENAME + +# Make sure we actually got a gzipped file +file -b $FILENAME | grep gzip -FILENAME=`ls ${PROJECT}*.tar.gz` -# Strip project name and extension leaving only the version. -VERSION=`echo ${FILENAME} | sed -n "s/${PROJECT}-\(.*\).tar.gz/\1/p"` MD5_DIGEST=`md5sum ${FILENAME} | cut -d' ' -f1` /usr/local/jenkins/slave_scripts/pypi-extract-metadata.py $FILENAME metadata.curl +# Turn off xtrace and mute curl, since under some circumstances API +# errors may leak authentication credentials +set +x curl --config /home/jenkins/.pypicurl \ --config metadata.curl \ -F "filetype=sdist" \ -F "content=@${FILENAME};filename=${FILENAME}" \ -F ":action=file_upload" \ -F "protocol_version=1" \ - -F "name=${PROJECT}" \ - -F "version=${VERSION}" \ + -F "name=${DISTNAME}" \ + -F "version=${TAG}" \ -F "md5_digest=${MD5_DIGEST}" \ https://pypi.python.org/pypi > /dev/null 2>&1 - -exit $? diff --git a/modules/openstack_project/files/jenkins_job_builder/config/pypi-jobs.yaml b/modules/openstack_project/files/jenkins_job_builder/config/pypi-jobs.yaml index b324c9c5f3..7639d1d5cc 100644 --- a/modules/openstack_project/files/jenkins_job_builder/config/pypi-jobs.yaml +++ b/modules/openstack_project/files/jenkins_job_builder/config/pypi-jobs.yaml @@ -3,18 +3,9 @@ node: pypi builders: + - gerrit-git-prep - shell: | - #!/bin/bash -xe - TAG=`echo $ZUUL_REF | sed 's/^refs.tags.//'` - FILENAME="{name}-$TAG.tar.gz" - - rm -rf *tar.gz - curl --fail -o $FILENAME http://{tarball-site}/{name}/$FILENAME - # Make sure we actually got a gzipped file - file -b $FILENAME | grep gzip - - - shell: | - /usr/local/jenkins/slave_scripts/pypi-upload.sh {name} + /usr/local/jenkins/slave_scripts/pypi-upload.sh {name} {tarball-site} publishers: - console-log