Statistics
| Branch: | Tag: | Revision:

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