From 3b0f2b06ff086e5ce77cb7ce1f533d9a9424e0c8 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Mon, 28 Dec 2015 10:39:41 +0100 Subject: [PATCH] Small improvements to the release script Signed-off-by: David Gageot --- script/release.sh | 117 ++++++++++------------ script/release/github-release-template.md | 7 +- 2 files changed, 58 insertions(+), 66 deletions(-) diff --git a/script/release.sh b/script/release.sh index c5e9b53225..88dbe57c28 100755 --- a/script/release.sh +++ b/script/release.sh @@ -1,26 +1,22 @@ #!/bin/bash -#Put your github username here, while testing performing new releases -#GITHUB_USER=jeanlaurent GITHUB_USER=docker GITHUB_REPO=machine +PROJECT_URL="git@github.com:${GITHUB_USER}/${GITHUB_REPO}" function usage { echo "Usage: " - echo " GITHUB_TOKEN=XXXXX release/release.sh 0.5.x" + echo " GITHUB_TOKEN=XXXXX ${0} 0.5.x" } function display { echo "🐳 $1" - echo "" + echo } function checkError { if [[ "$?" -ne 0 ]]; then echo "😡 $1" - if [[ "$2" == "showUsage" ]]; then - usage - fi exit 1 fi } @@ -30,41 +26,43 @@ function createMachine { docker-machine create -d virtualbox --virtualbox-cpu-count=2 --virtualbox-memory=2048 release } -VERSION=$1 -GITHUB_VERSION="v${VERSION}" -PROJECT_URL="git@github.com:${GITHUB_USER}/${GITHUB_REPO}" - -RELEASE_DIR="$(git rev-parse --show-toplevel)/../release-${VERSION}" -GITHUB_RELEASE_FILE="github-release-${VERSION}.md" - -if [[ -z "${VERSION}" ]]; then - #TODO: Check version is well formed - echo "Missing version argument" - usage - exit 1 -fi - if [[ -z "${GITHUB_TOKEN}" ]]; then echo "GITHUB_TOKEN missing" usage exit 1 fi +VERSION=$1 + +if [[ -z "${VERSION}" ]]; then + echo "Missing version argument" + usage + exit 1 +fi + +if [[ ! "${VERSION}" =~ ^[0-9]\.[0-9](\.[0-9])?(-rc[1-9][0-9]*)?$ ]]; then + echo "Invalid version. It should look like 0.5.1, 0.6 or 0.5.1-rc2" + exit 1 +fi + command -v git > /dev/null 2>&1 -checkError "You obviously need git, please consider installing it..." "showUsage" +checkError "You obviously need git, please consider installing it..." command -v github-release > /dev/null 2>&1 -checkError "github-release is not installed, go get -u github.com/aktau/github-release or check https://github.com/aktau/github-release, aborting." "showUsage" +checkError "github-release is not installed, go get -u github.com/aktau/github-release or check https://github.com/aktau/github-release, aborting." command -v openssl > /dev/null 2>&1 -checkError "You need openssl to generate binaries signature, brew install it, aborting." "showUsage" +checkError "You need openssl to generate binaries signature, brew install it, aborting." command -v docker-machine > /dev/null 2>&1 -checkError "You must have a docker-machine in your path" "showUsage" +checkError "You must have a docker-machine in your path" + +GITHUB_VERSION="v${VERSION}" +RELEASE_DIR="$(dirname "$(git rev-parse --show-toplevel)")/release-${VERSION}" +GITHUB_RELEASE_FILE="github-release-${VERSION}.md" LAST_RELEASE_VERSION=$(git describe --abbrev=0 --tags) -#TODO: ABORT if not found (very unlikely but could happen if two tags are on the same commits ) -# this tag search is done on master not on the clone... +checkError "Unable to find current version tag" display "Starting release from ${LAST_RELEASE_VERSION} to ${GITHUB_VERSION} on ${PROJECT_URL} with token ${GITHUB_TOKEN}" while true; do @@ -84,48 +82,47 @@ if [[ "$?" -ne 0 ]]; then createMachine else if [[ "${MACHINE_STATUS}" != "Running" ]]; then - display "Machine 'release' is not running, trying to start it." + display "Machine 'release' is not running, trying to start it" docker-machine start release + docker-machine env release if [[ "$?" -ne 0 ]]; then - display "Machine 'release' could not be started, removing and creating a fresh new one." + display "Machine 'release' could not be started, removing and creating a fresh new one" createMachine fi - display "Loosing 5 seconds to the virtualbox gods." + display "Loosing 5 seconds to the VirtualBox gods" sleep 5 fi fi eval $(docker-machine env release) -checkError "Machine 'release' is in a weird state, aborting." +checkError "Machine 'release' is in a weird state, aborting" if [[ -d "${RELEASE_DIR}" ]]; then display "Cleaning up ${RELEASE_DIR}" rm -rdf "${RELEASE_DIR}" - checkError "Can't clean up ${RELEASE_DIR}. You should do it manually and retry." + checkError "Can't clean up ${RELEASE_DIR}. You should do it manually and retry" fi display "Cloning into ${RELEASE_DIR} from ${PROJECT_URL}" mkdir -p "${RELEASE_DIR}" -checkError "Can't create ${RELEASE_DIR}, aborting." +checkError "Can't create ${RELEASE_DIR}, aborting" git clone -q "${PROJECT_URL}" "${RELEASE_DIR}" -checkError "Can't clone into ${RELEASE_DIR}, aborting." +checkError "Can't clone into ${RELEASE_DIR}, aborting" cd "${RELEASE_DIR}" display "Bump version number to ${VERSION}" -#TODO: This only works with the version written in the version.go file -sed -i.bak s/"${VERSION}-dev"/"${VERSION}"/g version/version.go -checkError "Sed borkage..., aborting." +sed -i "" "s/Version = \".*-dev\"/Version = \"${VERSION}\"/g" version/version.go +checkError "Unable to change version in version/version.go" git add version/version.go git commit -q -m"Bump version to ${VERSION}" -s -checkError "Can't git commit the version upgrade, aborting." -rm version/version.go.bak +checkError "Can't git commit the version upgrade, aborting" display "Building in-container style" USE_CONTAINER=true make clean validate build-x -checkError "Build error, aborting." +checkError "Build error, aborting" display "Generating github release" cp -f script/release/github-release-template.md "${GITHUB_RELEASE_FILE}" @@ -134,14 +131,12 @@ CONTRIBUTORS=$(git log "${LAST_RELEASE_VERSION}".. --format="%aN" --reverse | so CHANGELOG=$(git log "${LAST_RELEASE_VERSION}".. --oneline) CHECKSUM="" -cd bin/ -for file in $(ls docker-machine*); do +for file in $(ls bin/docker-machine*); do SHA256=$(openssl dgst -sha256 < "${file}") MD5=$(openssl dgst -md5 < "${file}") - LINE=$(printf "\n * **%s**\n * sha256 \`%s\`\n * md5 \`%s\`\n\n" "${file}" "${SHA256}" "${MD5}") + LINE=$(printf "\n * **%s**\n * sha256 \`%s\`\n * md5 \`%s\`\n\n" "$(basename ${file})" "${SHA256}" "${MD5}") CHECKSUM="${CHECKSUM}${LINE}" done -cd .. TEMPLATE=$(cat "${GITHUB_RELEASE_FILE}") echo "${TEMPLATE//\{\{VERSION\}\}/$GITHUB_VERSION}" > "${GITHUB_RELEASE_FILE}" @@ -168,7 +163,7 @@ if [[ "$?" -ne 0 ]]; then git remote add remote.prod.url "${PROJECT_URL}" fi -display "Checking if remote tag ${GITHUB_VERSION} already exists." +display "Checking if remote tag ${GITHUB_VERSION} already exists" git ls-remote --tags 2> /dev/null | grep -q "${GITHUB_VERSION}" # returns 0 if found, 1 if not if [[ "$?" -ne 1 ]]; then display "Deleting previous tag ${GITHUB_VERSION}" @@ -191,13 +186,13 @@ github-release info \ --tag "${GITHUB_VERSION}" > /dev/null 2>&1 if [[ "$?" -ne 1 ]]; then - display "Release already exists, cleaning it up." + display "Release already exists, cleaning it up" github-release delete \ --security-token "${GITHUB_TOKEN}" \ --user "${GITHUB_USER}" \ --repo "${GITHUB_REPO}" \ --tag "${GITHUB_VERSION}" - checkError "Could not delete release, aborting." + checkError "Could not delete release, aborting" fi display "Creating release on github" @@ -209,35 +204,33 @@ github-release release \ --name "${GITHUB_VERSION}" \ --description "${RELEASE_DOCUMENTATION}" \ --pre-release -checkError "Could not create release, aborting." - +checkError "Could not create release, aborting" display "Uploading binaries" -cd bin/ -for file in $(ls docker-machine*); do +for file in $(ls bin/docker-machine*); do display "Uploading ${file}..." github-release upload \ --security-token "${GITHUB_TOKEN}" \ --user "${GITHUB_USER}" \ --repo "${GITHUB_REPO}" \ --tag "${GITHUB_VERSION}" \ - --name "${file}" \ + --name "$(basename "${file}")" \ --file "${file}" if [[ "$?" -ne 0 ]]; then - display "Could not upload ${file}, continuing with others." + display "Could not upload ${file}, continuing with others" fi done -cd .. git remote rm remote.prod.url rm ${GITHUB_RELEASE_FILE} -echo "There is a couple of tasks your still need to do manually." -echo " 1 Open the release notes created for you on github https://github.com/docker/machine/releases/tag/${GITHUB_VERSION}, you'll have a chance to enhance commit details a bit." -echo " 2 Once you're happy with your release notes on github, copy the list of changes to the CHANGELOG.md" -echo " 3 Update the documentation branch" -echo " 4 Test the binaries linked from the github release page" -echo " 6 Change version/version.go to the next version" -echo " 7 Party !!" -echo " The full details of these tasks are described in the RELEASE.md document, available at https://github.com/docker/machine/blob/master/docs/RELEASE.md" +echo "There is a couple of tasks your still need to do manually:" +echo " 1. Open the release notes created for you on github https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/tag/${GITHUB_VERSION}, you'll have a chance to enhance commit details a bit" +echo " 2. Once you're happy with your release notes on github, copy the list of changes to the CHANGELOG.md" +echo " 3. Update the documentation branch" +echo " 4. Test the binaries linked from the github release page" +echo " 5. Change version/version.go to the next dev version" +echo " 6. Party !!" +echo +echo "The full details of these tasks are described in the RELEASE.md document, available at https://github.com/${GITHUB_USER}/${GITHUB_REPO}/blob/master/docs/RELEASE.md" diff --git a/script/release/github-release-template.md b/script/release/github-release-template.md index f4930eb6b4..9dc6c411b0 100644 --- a/script/release/github-release-template.md +++ b/script/release/github-release-template.md @@ -27,21 +27,20 @@ $ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \ ## Changelog - *Edit the changelog below by hand* {{CHANGELOG}} ## Thank You -Thank you very much to our active users and contributors. If you have filed detailed bug reports, THANK YOU! Please continue to do so if you encounter any issues. It's your hard work that makes Machine better. +Thank you very much to our active users and contributors. If you have filed detailed bug reports, THANK YOU! +Please continue to do so if you encounter any issues. It's your hard work that makes Docker Machine better. The following authors contributed changes to this release: {{CONTRIBUTORS}} -Great thanks to all of the above! We appreciate it. Keep up the great work! - +Great thanks to all of the above! We appreciate it. Keep up the great work! ## Checksums