tools/release/branch-stx.sh
Dean Troyer 8966e88851 Correctly push tags to Gerrit
The tags were missing from the branch push to Gerrit.  Also, tags
pushed to Gerrit must be signed, so gpg and git must both be
properly configured for this to run now.

Change-Id: I97f3a4364f090e1b42ac0fc2ba7554c164013345
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
2018-08-10 15:53:00 -05:00

132 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# branch-stx.sh - create STX branches based on today
#
# branch-stx.sh [--dry-run] [<manifest>]
#
# * get the repo list from stx-manifest in both starlingx and stx-staging remotes
# * create a new branch
# * tag the new branch with an initial release identifier
#
# Some environment variables are available for modifying this script's behaviour:
#
# SERIES is the base of the branch and tag names, similar to how it is used
# in OpenStack branch names. StarlingX formats SERIES based on year and month
# as YYYY.MM although that is only a convention, no tooling assumes that format.
#
# BRANCH is the actual branch name, derived by adding 'm/' (for milestones) or
# 'r/' (for periodic releases) to SERIES.
#
# TAG is the release tag that represents the actual release, derived by adding
# a 'patch' version to SERIES, initially '0'.
set -e
# Grab options
if [[ "$1" == "--dry-run" ]]; then
DRY_RUN=1
shift;
fi
# Where to get the repo list
MANIFEST=${1:-default.xml}
# SERIES is the base of the branch and release tag names: year.month (YYYY.MM)
SERIES=${SERIES:-$(date '+%Y.%m')}
# branch: m/YYYY.MM
BRANCH=${BRANCH:-m/$SERIES}
# tag: YYYY.MM.0
TAG=${TAG:-$SERIES.0}
# The list of remotes to extract from MANIFEST
REMOTES="starlingx stx-staging"
# This is where other scripts live that we need
script_dir=$(realpath $(dirname $0))
# update_gitreview <branch>
# Based on update_gitreview() from https://github.com/openstack/releases/blob/a7db6cf156ba66d50e1955db2163506365182ee8/tools/functions#L67
function update_gitreview {
typeset branch="$1"
git checkout $branch
# Remove a trailing newline, if present, to ensure consistent
# formatting when we add the defaultbranch line next.
typeset grcontents="$(echo -n "$(cat .gitreview | grep -v defaultbranch)")
defaultbranch=$branch"
echo "$grcontents" > .gitreview
git add .gitreview
if ! git commit -s -m "Update .gitreview for $branch"; then
if [[ -z $DRY_RUN ]]; then
git review -t "create-${branch}"
else
echo "### skipping .gitreview submission to $branch"
fi
else
echo "### no changes required for .gitreview"
fi
}
# branch_repo <remote> <repo-uri> <sha> <branch-base>
function branch_repo {
local remote=$1
local repo=$2
local sha=$3
local branch=$4
local tag=$5
local repo_dir=${repo##*/}
if [[ ! -d $repo_dir ]]; then
git clone $i $repo_dir || true
fi
cd $repo_dir
git checkout master
if ! git branch | grep $BRANCH; then
# create branch
git branch $branch $sha
fi
# tag branch point at $sha
git tag -s -m "Branch $branch" -f $tag $sha
# Push the new goodness back up
if [[ "$r" == "starlingx" ]]; then
# Do the Gerrit way
# set up gerrit remote
git review -s
# push
if [[ -z $DRY_RUN ]]; then
git push --tags gerrit $branch
else
echo "### skipping push to $branch"
fi
update_gitreview $branch
else
# Do the Github way
# push
if [[ -z $DRY_RUN ]]; then
git push --tags -u origin $branch
else
echo "### skipping push to $branch"
fi
fi
cd -
}
for r in $REMOTES; do
repos=$($script_dir/getrepo.sh $MANIFEST $r)
# crap, convert github URLs to git:
repos=$(sed -e 's|https://github.com/starlingx-staging|git@github.com:starlingx-staging|g' <<<$repos)
for i in $repos; do
branch_repo $r $i HEAD $BRANCH $TAG
done
done