From: Tuukka Lehtonen Date: Thu, 2 Aug 2018 20:55:38 +0000 (+0300) Subject: Simplify release branching as much as possible X-Git-Tag: v1.43.0~136^2~421 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=0cfc43f29902e31f38ec832984c5a9f32e900acf Simplify release branching as much as possible Now the release-helper.sh script has a single action branch-release that can be used to do everything related to normal release branching except pushing the changes to origin. Also the action bump-master-version simplifies the version bumping done for platform and simupedia master branches after a release is branched. gitlab #71 Change-Id: I71d7936a610b2f3a5228405680779bb3ae2e2ed7 --- diff --git a/releng/doc/release-helper.sh b/releng/doc/release-helper.sh index cbd4f6206..6e56cb55e 100755 --- a/releng/doc/release-helper.sh +++ b/releng/doc/release-helper.sh @@ -1,11 +1,18 @@ #!/bin/bash +selfdir=$(dirname $(readlink -f $0)) self=`basename $0` +selfpath=$selfdir/$self version=$1 +version_xyz=`echo $version | awk 'BEGIN { FS="." } { printf("%d.%d.%d", $1, $2, $3); }'` branch=$2 user=$3 action=$4 tagForVersion=v${version} +shift 4 + +rundir=`pwd` +versiondir=$rundir/$version ############################################################################### @@ -35,6 +42,10 @@ function localPath { eval $1=\${repositories[$(($2 * 2 + 1))]} } +function version_xyz { + echo $version +} + ############################################################################### function msg { @@ -46,11 +57,21 @@ function clone { git clone ssh://${user}@www.simantics.org:29418/$1 } +function add { + echo "git add $@" + git add $@ +} + function branch { echo "git branch $1" git branch $1 } +function commit { + echo "git commit $@" + git commit $@ +} + function fetch { echo "git fetch --all" git fetch --all @@ -87,7 +108,15 @@ function pushTags { } function status { - git status + git status $@ +} + +function diff { + git diff --stat --patch $@ +} + +function log { + git log --pretty --oneline --graph --decorate=full $@ } function listTags { @@ -98,6 +127,39 @@ function listBranches { git branch -a } +function repl { + local from=$1 + local to=$2 + shift 2 + for i in $@; do + echo "Replacing $from' with '$to' in file $i" + cat $i | awk "{ gsub(\"$from\", \"$to\"); print }" > $i.tmp + mv $i.tmp $i + done +} + +function bumpSequenceNumber { + echo "bumpSequenceNumber '$1'" + cat $i | awk ' +BEGIN { + regex="sequenceNumber=\"[0-9]+\""; + cmd = "date +%s" + cmd | getline epoch + close(cmd) +} +{ + if (match($0, regex)) { + before = substr($0,1,RSTART-1); + after = substr($0,RSTART+RLENGTH); + printf("%ssequenceNumber=\"%s\"%s\n", before, epoch, after); + } else { + print; + } +} +' > $i.tmp + mv $i.tmp $i +} + ############################################################################### case "$action" in @@ -115,10 +177,22 @@ case "$action" in esac if [ -n "$version" ] && [ -d $version ]; then - pushd $version > /dev/null + pushd $version >/dev/null || action="*" +elif [ -n "$version" ]; then + # The directory does not exist yet so don't do anything + action="*" fi case "$action" in + add) + for (( i=0; i<${repositoryCount}; i++ )); do + localPath lp $i + msg $i "Stage changes in $lp" + pushd $lp > /dev/null + add $@ + popd > /dev/null + done + ;; branch) for (( i=0; i<${repositoryCount}; i++ )); do localPath lp $i @@ -137,6 +211,15 @@ case "$action" in popd > /dev/null done ;; + commit) + for (( i=0; i<${repositoryCount}; i++ )); do + localPath lp $i + msg $i "Checkout $branch branch in $lp" + pushd $lp > /dev/null + commit $@ + popd > /dev/null + done + ;; tag) for (( i=0; i<${repositoryCount}; i++ )); do localPath lp $i @@ -215,15 +298,149 @@ case "$action" in localPath lp $i msg $i "Status of $lp" pushd $lp > /dev/null - status + status $@ popd > /dev/null done ;; - *) - echo "Usage: ${self} clone|branch|checkout|fetch|list-tags|pull|push|push-tags|remove-tag|status|tag" - if [ -d $version ]; then - echo "Version directory ('$version') does not exist yet. Please run the 'clone' action first." - fi + diff) + for (( i=0; i<${repositoryCount}; i++ )); do + localPath lp $i + msg $i "Diff $branch branch in $lp" + pushd $lp > /dev/null + diff $@ + popd > /dev/null + done + ;; + log) + for (( i=0; i<${repositoryCount}; i++ )); do + localPath lp $i + msg $i "Log of $lp" + pushd $lp > /dev/null + log $@ + popd > /dev/null + done + ;; + reset) + for (( i=0; i<${repositoryCount}; i++ )); do + localPath lp $i + msg $i "'git reset $@' in $lp" + pushd $lp > /dev/null + git reset $@ + popd > /dev/null + done + ;; + + prepare-release-branch) + fromBranch=$1 + + # Fix branch name from P2 repository locations + for i in platform/releng/org.simantics.sdk.build.targetdefinition/*.{tpd,target} \ + simupedia/fi.semantum.simupedia.build.targetdefinition/*.{tpd,target} + do + repl "/$fromBranch/" "/$branch/" $i + done + + # Bump .target file sequenceNumbers + for i in platform/releng/org.simantics.sdk.build.targetdefinition/*.target \ + simupedia/fi.semantum.simupedia.build.targetdefinition/*.{tpd,target} + do + bumpSequenceNumber $i + done + + pushd platform + git commit -a -m "Configured $branch branch for SDK builds" + git commit --amend + popd + pushd simupedia + git commit -a -m "Configured $branch branch for SDK builds" + git commit --amend + popd ;; + + bump-master-version) + fromVersion=$1 + toVersion=$2 + + bash $selfpath $version master $user checkout + + repl "$fromVersion" "$toVersion" platform/bundles/org.simantics.desktop.product/splash.svg + repl "$fromVersion" "$toVersion" platform/features/org.simantics.sdk.feature/feature.xml + repl "$fromVersion" "$toVersion" platform/releng/org.simantics.sdk.repository/pom.xml + repl "Simantics $fromVersion" "Simantics $toVersion" platform/releng/org.simantics.sdk.build.targetdefinition/simantics.{tpd,target} + repl "Simupedia $fromVersion" "Simupedia $toVersion" simupedia/fi.semantum.simupedia.build.targetdefinition/*.{tpd,target} + repl "Simupedia SDK $fromVersion" "Simupedia SDK $toVersion" simupedia/fi.semantum.simupedia.build.targetdefinition/*.{tpd,target} + + pushd platform + git commit -a -m "Bumped master version to $toVersion" + git commit --amend + popd + + pushd simupedia + git commit -a -m "Bumped master version to $toVersion" + git commit --amend + popd + ;; + + branch-release) + fromBranch=$1 + popd > /dev/null + bash $selfpath $version $fromBranch $user checkout + bash $selfpath $version $branch $user branch + bash $selfpath $version $branch $user checkout + bash $selfpath $version $branch $user prepare-release-branch $fromBranch + #$selfpath $version $branch $user push + ;; + + *) + if [ "$version" ] && [ ! -d $versiondir ]; then + echo -e "Version directory ('$versiondir') does not exist yet. Run 'clone' action first.\n" + fi + echo "Usage: ${self} []" + echo "" + echo "Commands:" + echo " clone The first thing that needs to be done before anything else" + echo " Clones all platform repositories under directory " + echo "" + echo "Inspection commands:" + echo " diff [args] Run git diff [args] for each platform repository" + echo " log [args] Run git log [args] for each platform repository" + echo " status [args] Run git status [args] for each platform repository" + echo " list-tags Run git tag -l for each repository" + echo "" + echo "Action:" + echo " add " + echo " branch Run git branch for each platform repository" + echo " checkout Run git checkout for each repository" + echo " commit " + echo " fetch Run git fetch --all for each repository" + echo " pull Run git pull --all for each repository" + echo " push Run git push origin for each repository" + echo " push-tags Run git push --tags for each repository" + echo " remove-tag Run git tag -d v for each repository" + echo " reset [args] Run git reset [args] for each repository" + echo " tag Run git checkout and" + echo " git tag -a v -m \"Simantics simultaneous release\"" + echo " for each repository" + echo "" + echo "Compound release commands:" + echo " prepare-release-branch " + echo " the name of the branch that the codebase is currently on" + echo "" + echo "Top-level release commands:" + echo " bump-master-version " + echo " the version string to replace" + echo " the replacing new version string" + echo "" + echo " branch-release " + echo " the branch to create the service branch from" + echo " e.g. master or release/x.y.z" + echo "" + echo "Processed repositories:" + for (( i=0; i<${repositoryCount}; i++ )); do + repo p $i + msg $i "$p" + done + +;; esac