You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ariatosca.apache.org by mx...@apache.org on 2017/10/22 07:51:23 UTC

[13/30] incubator-ariatosca git commit: ARIA-307 Automate release process

ARIA-307 Automate release process

Created a bash script to help with the releaes process


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/4c789f9b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/4c789f9b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/4c789f9b

Branch: refs/heads/new_wagon_setuptools
Commit: 4c789f9b166ba1dcf1f19adb4940040a6d985e55
Parents: 6c2f35e
Author: Ran Ziv <ra...@gigaspaces.com>
Authored: Mon Jul 10 16:29:22 2017 +0300
Committer: Ran Ziv <ra...@gigaspaces.com>
Committed: Tue Jul 11 17:28:02 2017 +0300

----------------------------------------------------------------------
 Makefile               |   5 -
 release/asf-release.sh | 283 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 283 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/4c789f9b/Makefile
----------------------------------------------------------------------
diff --git a/Makefile b/Makefile
index a894747..9fef3ab 100644
--- a/Makefile
+++ b/Makefile
@@ -58,11 +58,6 @@ test:
 	    -e py$(PYTHON_VERSION)ssh \
 	    -e docs
 
-dist: docs
-	python ./setup.py sdist bdist_wheel
-	# pushing LICENSE and additional files into the binary distribution archive
-	-find "$(DIST)" -type f -name '*.whl' -exec zip -u {} LICENSE NOTICE DISCLAIMER \;
-
 ./requirements.txt: ./requirements.in
 	pip install --upgrade "pip-tools>=1.9.0"
 	pip-compile --output-file ./requirements.txt ./requirements.in

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/4c789f9b/release/asf-release.sh
----------------------------------------------------------------------
diff --git a/release/asf-release.sh b/release/asf-release.sh
new file mode 100755
index 0000000..18f5b38
--- /dev/null
+++ b/release/asf-release.sh
@@ -0,0 +1,283 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+
+# This script is meant to help with the creation of Apache-compliant
+# release candidates, as well as finalizing releases by using said candidates.
+#
+# Creation of a release candidate includes:
+# 1) Creating a source package (a snapshot of the repository)
+# 2) Creating a Pythonic sdist (generated docs, examples, etc., but no tests etc.)
+# 3) Creating a Pythonic bdist (Wheel; binary distribution)
+# 4) Publishing these packages on to https://dist.apache.org/repos/dist/dev/incubator/ariatosca/
+# 5) Publishing the sdist and bdist packages on test-PyPI (https://test.pypi.org/)
+#
+# Finalization of a release includes:
+# 1) Copying of the source, sdist and bdist packages from /dist/dev to /dist/release
+#    (i.e. from https://dist.apache.org/repos/dist/dev/incubator/ariatosca/
+#     to https://dist.apache.org/repos/dist/release/incubator/ariatosca/)
+# 2) Publishing the sdist and bdist packages on PyPI (https://pypi.org)
+# 3) Tagging the git repository for the release version
+#
+# Read more about Apache release rules and regulations at:
+# 1) https://www.apache.org/dev/#releases
+# 2) https://www.apache.org/legal/release-policy.html
+# 3) https://www.apache.org/dev/release-distribution.html
+# 4) https://www.apache.org/dev/release-publishing.html
+# 5) https://www.apache.org/dev/release-signing.html
+# 6) http://incubator.apache.org/incubation/Incubation_Policy.html#Releases
+# 7) http://incubator.apache.org/guides/releasemanagement.html
+
+
+set -e
+
+
+function create_apache_release_candidate {
+    if [ "$#" -lt 1 ]; then
+        echo "Must provide git branch for release candidate" >&2
+        return 1
+    fi
+
+    local GIT_BRANCH=$1
+    local OPTIONAL_ARIATOSCA_DIST_DEV_PATH=$2
+
+    ARIA_DIR=$(_get_aria_dir)
+    pushd ${ARIA_DIR}
+
+    git checkout ${GIT_BRANCH}
+    local VERSION=$(cat VERSION)
+
+    echo "Creating Apache release candidate for version ${VERSION}..."
+
+    make clean
+    _create_source_package ${GIT_BRANCH} ${VERSION}
+    _create_sdist_and_bdist_packages
+    _publish_to_apache_dev ${VERSION} ${OPTIONAL_ARIATOSCA_DIST_DEV_PATH}
+    _publish_to_test_pypi
+    git checkout -
+    popd
+}
+
+
+function finalize_apache_release {
+    if [ "$#" -ne 1 ]; then
+        echo "Must provide git branch for release tagging" >&2
+        return 1
+    fi
+
+    local GIT_BRANCH=$1
+
+    ARIA_DIR=$(_get_aria_dir)
+    pushd ${ARIA_DIR}
+
+    git checkout ${GIT_BRANCH}
+    local VERSION=$(cat VERSION)
+
+    read -p "Enter 'Yes' to confirm release finalization for version ${VERSION}: " yn
+    case $yn in
+        Yes ) echo "Finalizing Apache release...";;
+        * ) git checkout -; return;;
+    esac
+
+    _publish_to_apache_release ${VERSION}
+    _publish_to_real_pypi
+    _create_git_tag ${VERSION}
+    git checkout -
+    popd
+}
+
+
+function _get_aria_dir {
+    SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+    ARIA_DIR="$(dirname "${SCRIPT_DIR}")"
+    echo ${ARIA_DIR}
+}
+
+
+function _create_source_package {
+    local GIT_BRANCH=$1
+    local VERSION=$2
+    local INCUBATING_ARCHIVE_CONTENT_DIR=apache-ariatosca-${VERSION}-incubating  # e.g. apache-ariatosca-0.1.0-incubating
+    local INCUBATING_ARCHIVE=${INCUBATING_ARCHIVE_CONTENT_DIR}.tar.gz  # e.g. apache-ariatosca-0.1.0-incubating.tar.gz
+    local SOURCE_PACKAGE_DIR="source"
+
+    echo "Creating source package..."
+    mkdir -p dist/${SOURCE_PACKAGE_DIR}
+    pushd dist/${SOURCE_PACKAGE_DIR}
+    # re-cloning repository, to ensure repo snapshot is clean and not environment-dependent
+    wget https://github.com/apache/incubator-ariatosca/archive/${GIT_BRANCH}.zip
+    unzip ${GIT_BRANCH}.zip > /dev/null
+    mv incubator-ariatosca-${GIT_BRANCH} ${INCUBATING_ARCHIVE_CONTENT_DIR}
+    tar -czvf ${INCUBATING_ARCHIVE} ${INCUBATING_ARCHIVE_CONTENT_DIR} > /dev/null
+    rm -rf ${INCUBATING_ARCHIVE_CONTENT_DIR}
+    rm ${GIT_BRANCH}.zip
+
+    _sign_package ${INCUBATING_ARCHIVE}
+    popd
+}
+
+function _sign_package {
+    local ARCHIVE_NAME=$1
+
+    echo "Signing archive ${ARCHIVE_NAME}..."
+    gpg --armor --output ${ARCHIVE_NAME}.asc --detach-sig ${ARCHIVE_NAME}
+    gpg --print-md MD5 ${ARCHIVE_NAME} > ${ARCHIVE_NAME}.md5
+    gpg --print-md SHA512 ${ARCHIVE_NAME} > ${ARCHIVE_NAME}.sha
+}
+
+
+function _create_sdist_and_bdist_packages {
+    local SDIST_PACKAGE_DIR="sdist"
+    local BDIST_PACKAGE_DIR="bdist"
+
+    echo "Creating sdist and bdist packages..."
+    make docs
+    python setup.py sdist -d dist/${SDIST_PACKAGE_DIR} bdist_wheel -d dist/${BDIST_PACKAGE_DIR}
+
+    # pushing LICENSE and additional files into the binary distribution archive
+    find dist/${BDIST_PACKAGE_DIR} -type f -name '*.whl' -exec zip -u {} LICENSE NOTICE DISCLAIMER \;
+
+    pushd dist/${SDIST_PACKAGE_DIR}
+    local SDIST_ARCHIVE=$(find . -type f -name "*.tar.gz" -printf '%P\n')
+    _sign_package ${SDIST_ARCHIVE}
+    popd
+
+    pushd dist/${BDIST_PACKAGE_DIR}
+    local BDIST_ARCHIVE=$(find . -type f -name "*.whl" -printf '%P\n')
+    _sign_package ${BDIST_ARCHIVE}
+    popd
+}
+
+
+function _publish_to_test_pypi {
+    echo "Publishing to test PyPI..."
+    _publish_to_pypi https://test.pypi.org/legacy/
+}
+
+
+function _publish_to_apache_dev {
+    local VERSION=$1
+    local ARIATOSCA_DIST_DEV_PATH=$2
+
+    local DIST_DIR=$(pwd)/dist
+    local RELEASE_DIR=${VERSION}-incubating  # e.g. 0.1.0-incubating
+
+    echo "Publishing to Apache dist dev..."
+    if [ -z "${ARIATOSCA_DIST_DEV_PATH}" ]; then
+        local TMP_DIR=$(mktemp -d)
+        echo "Checking out ARIA dist dev to ${TMP_DIR}"
+        pushd ${TMP_DIR}
+        svn co https://dist.apache.org/repos/dist/dev/incubator/ariatosca/
+        popd
+        pushd ${TMP_DIR}/ariatosca
+    else
+        pushd ${ARIATOSCA_DIST_DEV_PATH}
+    fi
+
+    svn up
+    cp -r ${DIST_DIR} .
+    mv dist/ ${RELEASE_DIR}/
+    svn add ${RELEASE_DIR}
+    svn commit -m "ARIA ${VERSION} release candidate"
+    popd
+}
+
+
+function _publish_to_real_pypi {
+    echo "Publishing to PyPI..."
+    _publish_to_pypi https://upload.pypi.org/legacy/
+}
+
+
+function _publish_to_pypi {
+    local REPOSITORY_URL=$1
+
+    pushd dist
+
+    pushd sdist
+    local SDIST_ARCHIVE=$(find . -type f -name "*.tar.gz" -printf '%P\n')
+    twine upload --repository-url ${REPOSITORY_URL} ${SDIST_ARCHIVE} ${SDIST_ARCHIVE}.asc
+    popd
+
+    pushd bdist
+    local BDIST_ARCHIVE=$(find . -type f -name "*.whl" -printf '%P\n')
+    twine upload --repository-url ${REPOSITORY_URL} ${BDIST_ARCHIVE} ${BDIST_ARCHIVE}.asc
+    popd
+
+    popd
+}
+
+
+function _publish_to_apache_release {
+    local VERSION=$1
+    local RELEASE_DIR=${VERSION}-incubating  # e.g. 0.1.0-incubating
+
+    echo "Publishing to Apache dist..."
+
+    local TMP_DIR=$(mktemp -d)
+    echo "Checking out ARIA dist dev to ${TMP_DIR}"
+    pushd ${TMP_DIR}
+
+    svn co https://dist.apache.org/repos/dist/dev/incubator/ariatosca/ ariatosca-dev
+    svn co https://dist.apache.org/repos/dist/release/incubator/ariatosca/ ariatosca-release
+    cp -r ariatosca-dev/${RELEASE_DIR} ariatosca-release
+
+    pushd ariatosca-release
+    svn add ${RELEASE_DIR}
+    # TODO: remove older releases?
+    svn commit -m "ARIA ${VERSION} release"
+    popd
+    popd
+}
+
+
+function _create_git_tag {
+    local VERSION=$1
+
+    echo "Creating git tag ${VERSION}"
+    git tag -a ${VERSION} -m "ARIA ${VERSION}"
+    git push --tags origin
+}
+
+
+function pushd {
+    command pushd "$@" > /dev/null
+}
+
+
+
+function popd {
+    command popd "$@" > /dev/null
+}
+
+
+
+if [ "$#" -ne 2 ]; then
+    echo "Usage: $0 {candidate,package} <git-branch>" >&2
+    exit 1
+fi
+
+OPERATION=$1
+GIT_BRANCH=$2
+
+if [ "${OPERATION}" == "candidate" ]; then
+    create_apache_release_candidate ${GIT_BRANCH}
+elif [ "${OPERATION}" == "package" ]; then
+    finalize_apache_release ${GIT_BRANCH}
+else
+    echo "First parameter must be either 'candidate' or 'package'" >&2
+    exit 1
+fi