Determine the package name when uploading to PyPI
* modules/jenkins/files/slave_scripts/pypi-extract-name.py: Short new script to safely parse the sdist package name out of a setup.cfg file. * modules/jenkins/files/slave_scripts/pypi-upload.sh: Subsume the guts of the first shell builder from the pypi-upload job, extended to call pypi-extract-name.py and fall back to the name of the Git project if it fails--this is needed for cases where those names differ, for example in capitalization. * .../jenkins_job_builder/config/pypi-jobs.yaml: Clone and checkout the Git tag which triggered this upload to PyPI, and then only call the modified pypi-upload.sh script since it should now analyze the state of the setup.cfg to determine how to retrieve the corresponding tarball. Change-Id: I43843e6e74b918e9c68f4b27958ec605774668ff
This commit is contained in:
parent
fa6b9be9ec
commit
7a9fe8a9d0
23
modules/jenkins/files/slave_scripts/pypi-extract-name.py
Normal file
23
modules/jenkins/files/slave_scripts/pypi-extract-name.py
Normal file
@ -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)
|
@ -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
|
# 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
|
# 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
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
# Upload python sdist to pypi with Curl.
|
# Retrieve a python sdist and upload it to pypi with Curl.
|
||||||
|
|
||||||
PROJECT=$1
|
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`
|
MD5_DIGEST=`md5sum ${FILENAME} | cut -d' ' -f1`
|
||||||
|
|
||||||
/usr/local/jenkins/slave_scripts/pypi-extract-metadata.py $FILENAME metadata.curl
|
/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 \
|
curl --config /home/jenkins/.pypicurl \
|
||||||
--config metadata.curl \
|
--config metadata.curl \
|
||||||
-F "filetype=sdist" \
|
-F "filetype=sdist" \
|
||||||
-F "content=@${FILENAME};filename=${FILENAME}" \
|
-F "content=@${FILENAME};filename=${FILENAME}" \
|
||||||
-F ":action=file_upload" \
|
-F ":action=file_upload" \
|
||||||
-F "protocol_version=1" \
|
-F "protocol_version=1" \
|
||||||
-F "name=${PROJECT}" \
|
-F "name=${DISTNAME}" \
|
||||||
-F "version=${VERSION}" \
|
-F "version=${TAG}" \
|
||||||
-F "md5_digest=${MD5_DIGEST}" \
|
-F "md5_digest=${MD5_DIGEST}" \
|
||||||
https://pypi.python.org/pypi > /dev/null 2>&1
|
https://pypi.python.org/pypi > /dev/null 2>&1
|
||||||
|
|
||||||
exit $?
|
|
||||||
|
@ -3,18 +3,9 @@
|
|||||||
node: pypi
|
node: pypi
|
||||||
|
|
||||||
builders:
|
builders:
|
||||||
|
- gerrit-git-prep
|
||||||
- shell: |
|
- shell: |
|
||||||
#!/bin/bash -xe
|
/usr/local/jenkins/slave_scripts/pypi-upload.sh {name} {tarball-site}
|
||||||
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}
|
|
||||||
|
|
||||||
publishers:
|
publishers:
|
||||||
- console-log
|
- console-log
|
||||||
|
Loading…
x
Reference in New Issue
Block a user