Fix: sourced files w/o arg bashisms
[releng/builder.git] / jjb / autorelease / branch-cut.sh
1 #!/bin/bash -l
2 # @License EPL-1.0 <http://spdx.org/licenses/EPL-1.0>
3 ##############################################################################
4 # Copyright (c) 2017 The Linux Foundation and others.
5 #
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Eclipse Public License v1.0
8 # which accompanies this distribution, and is available at
9 # http://www.eclipse.org/legal/epl-v10.html
10 ##############################################################################
11
12 # This script requires the user running the script to have "Create References"
13 # permission in Gerrit for the "stable/RELEASE" branch. Where RELEASE is an
14 # official OpenDaylight release. Eg. Oxygen, Nitrogen, Carbon, etc...
15 #
16 # Performs 2 actions:
17 #
18 #     1) Creates a new branch stable/RELEASE (where release is a ODL release,
19 #        eg Oxygen, Nitrogen, Carbon, etc...)
20 #     2) Updates .gitreview in the new stable/RELEASE branch to set the
21 #        defaultbranch to the new branch.
22 #
23 # Required Parameters:
24 #     RELEASE: The name of the release to create a branch for.
25
26 mkdir -p "$WORKSPACE/archives"
27 LOG_FILE="$WORKSPACE/archives/branch-cut.log"
28
29 set -eu -o pipefail
30
31 # shellcheck disable=SC1090
32 . ~/lf-env.sh
33
34 lf-activate-venv "git-review==1.28"
35
36 # Validate inputs
37 if [ -z "$RELEASE" ]; then
38     echo "ERROR: RELEASE variable must be set to a release name. Eg Carbon"
39     exit 1
40 fi
41
42 # Setup Gerrit remote to ensure Change-Id gets set on commit.
43 git config --global --add gitreview.username "jenkins-$SILO"
44 git remote -v
45 git submodule foreach git review -s
46 git review -s
47
48 # --- Start create new maintenance branch
49 echo "---> Creating new mainenance branch"
50 git submodule foreach git fetch origin
51 git fetch origin
52 git submodule foreach git checkout -b "stable/${RELEASE,,}" origin/master
53 git checkout -b "stable/${RELEASE,,}" origin/master
54
55 ##########
56 # Verify #
57 ##########
58
59 {
60     echo "---> Verify maintenance branch"
61     git submodule foreach git branch
62     git branch
63 } | tee -a "$LOG_FILE"
64
65 ########
66 # Push #
67 ########
68
69 if [ "$DRY_RUN" = false ]
70 then
71     echo "Pushing stable/${RELEASE,,} branches to Gerrit"
72     git submodule foreach git push gerrit "stable/${RELEASE,,}"
73     git push gerrit "stable/${RELEASE,,}"
74 fi
75 # --- End create new maintenance branch
76
77 # --- Start update .gitreview
78 echo "---> Update .gitreview"
79 git submodule foreach sed -i -e "s#defaultbranch=master#defaultbranch=stable/${RELEASE,,}#" .gitreview
80 git submodule foreach git add .gitreview
81 git submodule foreach "git commit -sm 'Update .gitreview to stable/${RELEASE,,}'"
82 sed -i -e "s#defaultbranch=master#defaultbranch=stable/${RELEASE,,}#" .gitreview
83 git add .gitreview
84 git commit -sm "Update .gitreview to stable/${RELEASE,,}"
85
86 # Generate git patches
87 patch_dir="$WORKSPACE/archives/patches/git-review"
88 mkdir -p "$patch_dir"
89 for module in $(git submodule | awk '{ print $2 }')
90 do
91     pushd "$module"
92     git format-patch --stdout "origin/master" > "$patch_dir/${module//\//-}.patch"
93     git bundle create "$patch_dir/${module//\//-}.bundle" "origin/master..HEAD"
94     popd
95 done
96
97 ##########
98 # Verify #
99 ##########
100
101 {
102     echo "---> Verify .gitreview"
103     git submodule foreach git show HEAD
104     git show HEAD
105     git submodule foreach git log --oneline -2 --graph --decorate
106     git log --oneline -2 --graph --decorate
107 } | tee -a "$LOG_FILE"
108
109 ########
110 # Push #
111 ########
112
113 if [ "$DRY_RUN" = false ]
114 then
115     echo "Pushing .gitreview patches to Gerrit"
116     git submodule foreach git review -t "branch-cut-${RELEASE,,}"
117     git review -t "branch-cut-${RELEASE,,}"
118 fi
119 # --- Stop update .gitreview