From c39328ed18332626c43c8fcf45852d225cae4995 Mon Sep 17 00:00:00 2001 From: Peter Vlugter Date: Fri, 21 Jan 2011 16:36:44 +1300 Subject: [PATCH] Add release scripts --- project/scripts/find-replace.sh | 76 +++++++++++++++++++++++++++++++++ project/scripts/push-release.sh | 35 +++++++++++++++ project/scripts/release | 10 +++++ project/scripts/test-release | 11 +++++ 4 files changed, 132 insertions(+) create mode 100644 project/scripts/find-replace.sh create mode 100644 project/scripts/push-release.sh create mode 100644 project/scripts/release create mode 100644 project/scripts/test-release diff --git a/project/scripts/find-replace.sh b/project/scripts/find-replace.sh new file mode 100644 index 0000000000..e399ce3116 --- /dev/null +++ b/project/scripts/find-replace.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# Find and replace across all source files. +# +# Example usage: +# +# sh project/scripts/find-replace.sh 1.1-SNAPSHOT 1.1-RC1 +# +# This script will be called as part of the sbt release script. + +FIND=$1 +REPLACE=$2 + +if [ -z "$FIND" ]; then + echo "Usage: find-replace.sh FIND REPLACE" + exit 1 +fi + +echo +echo "Find and replace: $FIND --> $REPLACE" + + +# Exclude directories from search + +excludedirs=".git dist deploy embedded-repo lib_managed project/boot project/scripts src_managed target" + +echo "Excluding directories: $excludedirs" + +excludeopts="\(" +op="-path" +for dir in $excludedirs; do + excludeopts="${excludeopts} ${op} '*/${dir}/*'" + op="-or -path" +done +excludeopts="${excludeopts} \) -prune -o" + + +# Replace in files + +search="find . -type f ${excludeopts} -print0 | xargs -0 grep -Il \"${FIND}\"" + +files=$(eval "$search") + +simplediff="diff --old-line-format='- %l +' --new-line-format='+ %l +' --changed-group-format='%<%>' --unchanged-group-format=''" + +for file in $files; do + echo + echo $file + # escape / for sed + sedfind=$(echo $FIND | sed 's/\//\\\//g') + sedreplace=$(echo $REPLACE | sed 's/\//\\\//g') + sed -i '.sed' "s/${sedfind}/${sedreplace}/g" $file + eval "$simplediff $file.sed $file" + rm -f $file.sed +done + +echo + + +# Replace in file names + +search="find . -type f ${excludeopts} -name \"*${FIND}*\" -print0" + +files=$(eval "$search") + +for file in $files; do + dir=$(dirname $file) + name=$(basename $file) + newname=$(echo $name | sed "s/${FIND}/${REPLACE}/g") + echo "$file --> $newname" + mv $file $dir/$newname +done + +echo diff --git a/project/scripts/push-release.sh b/project/scripts/push-release.sh new file mode 100644 index 0000000000..c58282144f --- /dev/null +++ b/project/scripts/push-release.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +VERSION=$1 + +if [ -z "$VERSION" ]; then + echo "Usage: push-release.sh VERSION" + exit 1 +fi + +source ~/.akka-release + +if [ -z "$AKKA_RELEASE_SERVER" ]; then + echo "Need AKKA_RELEASE_SERVER to be specified" + exit 1 +fi + +if [ -z "$AKKA_RELEASE_PATH" ]; then + echo "Need AKKA_RELEASE_PATH to be specified" + exit 1 +fi + +ref=$(git symbolic-ref HEAD 2> /dev/null) +branch=${ref#refs/heads/} + +git push origin $branch +git push origin --tags + +release="target/release/${VERSION}" +tmp="/tmp/akka-release-${VERSION}" + +rsync -avz ${release}/ ${AKKA_RELEASE_SERVER}:${tmp}/ +echo "Verify sudo on $AKKA_RELEASE_SERVER" +ssh -t ${AKKA_RELEASE_SERVER} sudo -v +ssh -t ${AKKA_RELEASE_SERVER} sudo rsync -rpt ${tmp}/ ${AKKA_RELEASE_PATH} +ssh -t ${AKKA_RELEASE_SERVER} rm -rf ${tmp} diff --git a/project/scripts/release b/project/scripts/release new file mode 100644 index 0000000000..5117a9647a --- /dev/null +++ b/project/scripts/release @@ -0,0 +1,10 @@ +clean +script find-replace.sh {{project.version}} {{release.arg1}} +script find-replace.sh //[[:space:]]*release:[[:space:]]* +reload +build-release +sh git commit -am 'Update version for release {{project.version}}' +sh git tag -m 'Version {{project.version}}' v{{project.version}} +sh git revert -n HEAD +sh git commit -am 'Restoring SNAPSHOT version' +reload diff --git a/project/scripts/test-release b/project/scripts/test-release new file mode 100644 index 0000000000..4e821f15f5 --- /dev/null +++ b/project/scripts/test-release @@ -0,0 +1,11 @@ +clean +clean-lib +script find-replace.sh {{project.version}} {{test-release.arg1}} +script find-replace.sh //[[:space:]]*release:[[:space:]]* +reload +update +test-compile +test +build-release +sh git reset --hard +reload