root / devtools / autopkg.sh @ 4319c408
History | View | Annotate | Download (4.5 kB)
1 | d26d8b71 | Dimitris Aragiorgis | #!/bin/bash |
---|---|---|---|
2 | d26d8b71 | Dimitris Aragiorgis | |
3 | 22ab4278 | Vangelis Koukis | parse_git_branch() |
4 | 22ab4278 | Vangelis Koukis | { |
5 | 22ab4278 | Vangelis Koukis | git branch 2> /dev/null | grep '^*' | sed 's/^*\ //g' |
6 | 22ab4278 | Vangelis Koukis | } |
7 | d26d8b71 | Dimitris Aragiorgis | |
8 | 22ab4278 | Vangelis Koukis | die() |
9 | 22ab4278 | Vangelis Koukis | { |
10 | 22ab4278 | Vangelis Koukis | echo $* 1>&2 |
11 | 22ab4278 | Vangelis Koukis | exit 1 |
12 | 22ab4278 | Vangelis Koukis | } |
13 | 22ab4278 | Vangelis Koukis | |
14 | 67543a93 | Dimitris Aragiorgis | cleanup() |
15 | 67543a93 | Dimitris Aragiorgis | { |
16 | 67543a93 | Dimitris Aragiorgis | trap - EXIT |
17 | 67543a93 | Dimitris Aragiorgis | |
18 | 67543a93 | Dimitris Aragiorgis | if [ ${#CLEANUP[*]} -gt 0 ]; then |
19 | 67543a93 | Dimitris Aragiorgis | LAST_ELEMENT=$((${#CLEANUP[*]}-1)) |
20 | 67543a93 | Dimitris Aragiorgis | REVERSE_INDEXES=$(seq ${LAST_ELEMENT} -1 0) |
21 | 67543a93 | Dimitris Aragiorgis | for i in $REVERSE_INDEXES; do |
22 | 67543a93 | Dimitris Aragiorgis | local cmd=${CLEANUP[$i]} |
23 | 67543a93 | Dimitris Aragiorgis | $cmd |
24 | 67543a93 | Dimitris Aragiorgis | done |
25 | 67543a93 | Dimitris Aragiorgis | fi |
26 | 67543a93 | Dimitris Aragiorgis | } |
27 | 67543a93 | Dimitris Aragiorgis | |
28 | 67543a93 | Dimitris Aragiorgis | add_cleanup() { |
29 | 67543a93 | Dimitris Aragiorgis | local cmd="" |
30 | 67543a93 | Dimitris Aragiorgis | for arg; do cmd+=$(printf "%q " "$arg"); done |
31 | 67543a93 | Dimitris Aragiorgis | CLEANUP+=("$cmd") |
32 | 67543a93 | Dimitris Aragiorgis | } |
33 | 67543a93 | Dimitris Aragiorgis | |
34 | 67543a93 | Dimitris Aragiorgis | |
35 | 67543a93 | Dimitris Aragiorgis | add_checkpoint() |
36 | 67543a93 | Dimitris Aragiorgis | { |
37 | 67543a93 | Dimitris Aragiorgis | commit=$(git reflog | head -n1 | cut -f 1 -d " ") |
38 | 67543a93 | Dimitris Aragiorgis | add_cleanup git reset --hard $commit |
39 | 67543a93 | Dimitris Aragiorgis | LASTCHECKPOINT=$commit |
40 | 67543a93 | Dimitris Aragiorgis | } |
41 | 67543a93 | Dimitris Aragiorgis | |
42 | 67543a93 | Dimitris Aragiorgis | CLEANUP=( ) |
43 | 67543a93 | Dimitris Aragiorgis | |
44 | 68fde58b | Dimitris Aragiorgis | source devtools/autopkg.conf |
45 | 68fde58b | Dimitris Aragiorgis | |
46 | 22ab4278 | Vangelis Koukis | # The root of the git repository, no matter where we're called from |
47 | 22ab4278 | Vangelis Koukis | TOPLEVEL="$(git rev-parse --show-toplevel)" |
48 | 22ab4278 | Vangelis Koukis | CURRENT_BRANCH=$(parse_git_branch) |
49 | 22ab4278 | Vangelis Koukis | |
50 | 22ab4278 | Vangelis Koukis | LOCALBRANCH="$CURRENT_BRANCH" |
51 | 68fde58b | Dimitris Aragiorgis | LOCALDEBIAN=$1 |
52 | 68fde58b | Dimitris Aragiorgis | DEBIANBRANCH=${LOCALDEBIAN:- origin/$REMOTEDEBIAN} |
53 | 68fde58b | Dimitris Aragiorgis | |
54 | d26d8b71 | Dimitris Aragiorgis | |
55 | d26d8b71 | Dimitris Aragiorgis | |
56 | d26d8b71 | Dimitris Aragiorgis | set -e |
57 | 67543a93 | Dimitris Aragiorgis | trap cleanup EXIT |
58 | 67543a93 | Dimitris Aragiorgis | |
59 | 67543a93 | Dimitris Aragiorgis | cd "$TOPLEVEL" |
60 | d26d8b71 | Dimitris Aragiorgis | |
61 | 22ab4278 | Vangelis Koukis | # Prerequisites: Test all important directories exist |
62 | 22ab4278 | Vangelis Koukis | test -d "$PKGAREA" || die "Package area directory $PKGAREA missing" |
63 | 22ab4278 | Vangelis Koukis | test -d "$BACKUPAREA" || die "Backup area directory $BACKUPAREA missing" |
64 | d26d8b71 | Dimitris Aragiorgis | |
65 | 22ab4278 | Vangelis Koukis | # Prerequisite: Test the dialog utility is available |
66 | 22ab4278 | Vangelis Koukis | dialog --help &>/dev/null || die "Could not run the 'dialog' utility" |
67 | d26d8b71 | Dimitris Aragiorgis | |
68 | 67543a93 | Dimitris Aragiorgis | |
69 | 67543a93 | Dimitris Aragiorgis | echo "##########################################################" |
70 | 67543a93 | Dimitris Aragiorgis | echo "Will build packages" |
71 | 67543a93 | Dimitris Aragiorgis | echo "under '$BUILDAREA'," |
72 | 81a53400 | Dimitris Aragiorgis | echo "from local branch '$LOCALBRANCH'" |
73 | 68fde58b | Dimitris Aragiorgis | echo "and debian branch '$DEBIANBRANCH'" |
74 | 67543a93 | Dimitris Aragiorgis | echo "##########################################################" |
75 | 22ab4278 | Vangelis Koukis | echo "Press Enter to continue..." |
76 | 22ab4278 | Vangelis Koukis | read |
77 | 22ab4278 | Vangelis Koukis | |
78 | 67543a93 | Dimitris Aragiorgis | add_checkpoint |
79 | 67543a93 | Dimitris Aragiorgis | |
80 | 22ab4278 | Vangelis Koukis | # Create a temporary debian branch to do everything |
81 | d26d8b71 | Dimitris Aragiorgis | TMPDEBIAN=$(mktemp -u debian.XXX) |
82 | 68fde58b | Dimitris Aragiorgis | |
83 | 68fde58b | Dimitris Aragiorgis | git branch --track $TMPDEBIAN $DEBIANBRANCH |
84 | 67543a93 | Dimitris Aragiorgis | #add_cleanup git branch -D $TMPDEBIAN |
85 | 67543a93 | Dimitris Aragiorgis | |
86 | 67543a93 | Dimitris Aragiorgis | git checkout $TMPDEBIAN |
87 | 67543a93 | Dimitris Aragiorgis | add_cleanup git checkout $LOCALBRANCH |
88 | 67543a93 | Dimitris Aragiorgis | |
89 | 67543a93 | Dimitris Aragiorgis | add_checkpoint |
90 | d26d8b71 | Dimitris Aragiorgis | |
91 | 22ab4278 | Vangelis Koukis | # Whether we are in snapshot or release mode |
92 | 22ab4278 | Vangelis Koukis | snap=false |
93 | d26d8b71 | Dimitris Aragiorgis | mrgextra=-m |
94 | d26d8b71 | Dimitris Aragiorgis | dchextra=-R |
95 | 22ab4278 | Vangelis Koukis | mrgmsg="Merge branch '$REMOTEUPSTREAM' into $REMOTEDEBIAN" |
96 | 81a53400 | Dimitris Aragiorgis | dialog --yesno "Create Snapshot?" 5 20 && snap=true && dchextra=-S && mrgextra= && mrgmsg= |
97 | d26d8b71 | Dimitris Aragiorgis | |
98 | 22ab4278 | Vangelis Koukis | # merge local branch into tmp branch with a nice commit message, |
99 | 22ab4278 | Vangelis Koukis | # so it can be pushed as is to upstream debian |
100 | d26d8b71 | Dimitris Aragiorgis | git merge --no-edit $mrgextra ${mrgextra:+"$mrgmsg"} $LOCALBRANCH |
101 | d26d8b71 | Dimitris Aragiorgis | |
102 | 22ab4278 | Vangelis Koukis | # auto edit Debian changelog depending on Snapshot or Release mode |
103 | d26d8b71 | Dimitris Aragiorgis | export EDITOR=/usr/bin/vim |
104 | d26d8b71 | Dimitris Aragiorgis | git-dch --debian-branch=$TMPDEBIAN --git-author --ignore-regex=".*" --multimaint-merge --since=HEAD $dchextra |
105 | d26d8b71 | Dimitris Aragiorgis | git add debian/changelog |
106 | d26d8b71 | Dimitris Aragiorgis | |
107 | d26d8b71 | Dimitris Aragiorgis | # get version from the changelog |
108 | 22ab4278 | Vangelis Koukis | # we add a git tag here, so setup.py sdist works as expected |
109 | 22ab4278 | Vangelis Koukis | # FIXME: This is a workaround for the way Synnefo packages determine |
110 | 22ab4278 | Vangelis Koukis | # the versions for their Python packages |
111 | d26d8b71 | Dimitris Aragiorgis | version=$(IFS="()" ; read x v x < debian/changelog ; echo $v) |
112 | d26d8b71 | Dimitris Aragiorgis | if ! $snap; then |
113 | d26d8b71 | Dimitris Aragiorgis | git commit -s -a -m "Bump new upstream version" |
114 | d26d8b71 | Dimitris Aragiorgis | TAGFILE=$(mktemp -t tag.XXX) |
115 | 67543a93 | Dimitris Aragiorgis | add_cleanup rm $TAGFILE |
116 | 22ab4278 | Vangelis Koukis | dialog --inputbox "New Debian Tag: " 5 30 "debian/$version" 2>$TAGFILE |
117 | d26d8b71 | Dimitris Aragiorgis | git tag $(<$TAGFILE) |
118 | 67543a93 | Dimitris Aragiorgis | add_cleanup git tag -d $(<$TAGFILE) |
119 | d26d8b71 | Dimitris Aragiorgis | fi |
120 | d26d8b71 | Dimitris Aragiorgis | |
121 | d26d8b71 | Dimitris Aragiorgis | |
122 | d26d8b71 | Dimitris Aragiorgis | for p in $PACKAGES; do |
123 | d26d8b71 | Dimitris Aragiorgis | |
124 | d26d8b71 | Dimitris Aragiorgis | cd $p |
125 | d26d8b71 | Dimitris Aragiorgis | python setup.py sdist |
126 | d26d8b71 | Dimitris Aragiorgis | grep "__version_vcs" -r . -l -I | xargs git add -f |
127 | d26d8b71 | Dimitris Aragiorgis | cd - |
128 | d26d8b71 | Dimitris Aragiorgis | |
129 | d26d8b71 | Dimitris Aragiorgis | done |
130 | d26d8b71 | Dimitris Aragiorgis | |
131 | 22ab4278 | Vangelis Koukis | # Build all packages |
132 | 22ab4278 | Vangelis Koukis | git-buildpackage --git-export-dir="$BUILDAREA" \ |
133 | 68fde58b | Dimitris Aragiorgis | --git-upstream-branch=$LOCALBRANCH \ |
134 | d26d8b71 | Dimitris Aragiorgis | --git-debian-branch=$TMPDEBIAN \ |
135 | d26d8b71 | Dimitris Aragiorgis | --git-export=INDEX \ |
136 | d26d8b71 | Dimitris Aragiorgis | --git-ignore-new -sa |
137 | d26d8b71 | Dimitris Aragiorgis | |
138 | d26d8b71 | Dimitris Aragiorgis | # do some dirty backup |
139 | d26d8b71 | Dimitris Aragiorgis | # pkgarea might be needed by auto-deploy tool |
140 | 22ab4278 | Vangelis Koukis | rm -f "$PKGAREA"/* || true |
141 | 67543a93 | Dimitris Aragiorgis | cp -v "$BUILDAREA"/* "$PKGAREA"/ || true |
142 | 22ab4278 | Vangelis Koukis | cp -v "$BUILDAREA"/* "$BACKUPAREA"/ || true |
143 | d26d8b71 | Dimitris Aragiorgis | |
144 | 81a53400 | Dimitris Aragiorgis | echo "###############################################" |
145 | 81a53400 | Dimitris Aragiorgis | echo "#### SUCCESS ####" |
146 | 81a53400 | Dimitris Aragiorgis | echo "###############################################" |
147 | 81a53400 | Dimitris Aragiorgis | |
148 | 68fde58b | Dimitris Aragiorgis | git fetch origin |
149 | 81a53400 | Dimitris Aragiorgis | #check if your local branch is up-to-date |
150 | 81a53400 | Dimitris Aragiorgis | commits_behind=$(git rev-list $LOCALBRANCH..origin/$REMOTEUPSTREAM | wc -l) |
151 | 81a53400 | Dimitris Aragiorgis | if [ $commits_behind -ne 0 ]; then |
152 | 68fde58b | Dimitris Aragiorgis | die "Your local branch is outdated!! Please run: git pull --rebase origin/$REMOTEUPSTREAM" |
153 | 68fde58b | Dimitris Aragiorgis | fi |
154 | 68fde58b | Dimitris Aragiorgis | commits_behind=$(git rev-list $DEBIANBRANCH..origin/$REMOTEDEBIAN | wc -l) |
155 | 68fde58b | Dimitris Aragiorgis | if [ $commits_behind -ne 0 ]; then |
156 | 68fde58b | Dimitris Aragiorgis | die "Your debian branch is outdated!! Please run: git pull --rebase origin/$REMOTEDEBIAN" |
157 | 81a53400 | Dimitris Aragiorgis | fi |
158 | 81a53400 | Dimitris Aragiorgis | |
159 | 81a53400 | Dimitris Aragiorgis | trap - EXIT |
160 | 81a53400 | Dimitris Aragiorgis | |
161 | 81a53400 | Dimitris Aragiorgis | # Remove the added versions.py files |
162 | 81a53400 | Dimitris Aragiorgis | git reset --hard HEAD |
163 | 81a53400 | Dimitris Aragiorgis | # here we can push the commits to the remote debian branch as they are |
164 | 81a53400 | Dimitris Aragiorgis | |
165 | 67543a93 | Dimitris Aragiorgis | if ! $snap; then |
166 | 81a53400 | Dimitris Aragiorgis | TAGS="--tags" |
167 | d26d8b71 | Dimitris Aragiorgis | fi |
168 | 81a53400 | Dimitris Aragiorgis | echo "git push $TAGS origin $TMPDEBIAN:$REMOTEDEBIAN" |
169 | 81a53400 | Dimitris Aragiorgis | echo "git checkout $LOCALBRANCH" |
170 | 81a53400 | Dimitris Aragiorgis | echo "git push $TAGS origin $LOCALBRANCH:$REMOTEUPSTREAM" |
171 | 81a53400 | Dimitris Aragiorgis | echo |
172 | 67543a93 | Dimitris Aragiorgis | |
173 | 67543a93 | Dimitris Aragiorgis | exit 0 |