source: scripts/autobuild.bash @ 2271

Revision 2271, 7.1 KB checked in by alanbach-guest, 6 years ago (diff)

Fixed problem with 1:2.12.1 like versioning

  • Property svn:executable set to *
Line 
1#!/bin/bash
2# Helper bash script to build debian biarch i386 and amd64 packages from SVN
3# Requires: svn-buildpackage, pbuilder, awk, reprepro, sed
4# Coyright 2007 Alan Baghumian / GNU/GPL
5#
6# Created: 2007-10-20 15:10 +330 GMT
7# Updated: 2007-10-21 14:39 +330 GMT
8#
9# TODO:
10# 1) Queue support to automate build process
11# 2) bz2 packages?
12
13SVN_REPO_PATH="/svn/pkg-parsix/pkg/"
14LOCAL_REPO_PATH="/home/parsix/public_html/packages/pool"
15LOCAL_REPO_ROOT="/home/parsix/public_html/packages/"
16SRC_PKG_NAME="$1"
17DIST_NAME="$2"
18UNDERLINE=$'\137' # 137 is octal ASCII code for '_'
19
20# Define some colors first:
21GREEN="[1;32m"
22YELLOW="[1;33m"
23BLUE="[1;34m"
24MAGENTA="[1;35m"
25CYAN="[1;36m"
26WHITE="[1;37m"
27RED="[1;31m"
28NORMAL="[0;39m"
29
30# Checking required inputs
31if [ -z "$1" ]; then
32    echo "${GREEN}Couldn't detect source package name, exiting...${NORMAL}"
33    exit
34fi
35
36if [ -z "$2" ]; then
37    echo "${GREEN}Couldn't detect distro name, exiting...${NORMAL}"
38    exit
39fi
40
41cd $LOCAL_REPO_PATH
42POOL=`find ./ -type d | grep $SRC_PKG_NAME | awk 'BEGIN{FS="/"}{print $3}'`
43
44cd $SVN_REPO_PATH
45COMPONENT=`find ./ -maxdepth 2 -type d | grep /$SRC_PKG_NAME | awk 'BEGIN{FS="/"}{print $2}'`
46
47if [ ! -z "$COMPONENT" ]; then
48    echo "${GREEN}Detected component: ${YELLOW}$COMPONENT${NORMAL}"
49else
50    echo "${GREEN}Couldn't detect component, exiting...${NORMAL}"
51    exit
52fi
53
54if [ -d $SVN_REPO_PATH/$COMPONENT/$SRC_PKG_NAME ]; then
55    cd $SVN_REPO_PATH/$COMPONENT/$SRC_PKG_NAME
56else
57    echo "${GREEN}SVN directory does not exists, exiting...${NORMAL}"
58    exit
59fi
60
61if [ ! -f trunk/debian/watch ]; then
62    echo "${GREEN}Can't find watch file, exiting...${NORMAL}"
63    exit
64fi
65
66# FIXME
67chmod +x trunk/debian/rules
68rm trunk/debian/control* &> /dev/null
69
70# Update SVN to the latest version
71svn up &> /dev/null
72
73echo "${GREEN}Parsing changelog to get the latest prepared version...${NORMAL} "
74PKG_VERSION=`dpkg-parsechangelog -ltrunk/debian/changelog  | grep Version | awk 'BEGIN{FS=": "}{print $2}' | awk 'BEGIN{FS="-"}{print $1}' | awk 'BEGIN{FS=" "}{print $1}'`
75PKG_REVISION=`dpkg-parsechangelog -ltrunk/debian/changelog  | grep Version | awk 'BEGIN{FS=": "}{print $2}' | awk 'BEGIN{FS="-"}{print $2}'`
76echo "${YELLOW}$PKG_VERSION-$PKG_REVISION${NORMAL}"
77
78echo "${GREEN}Getting the latest upstream...${NORMAL}"
79UPSTREAM_VERSION=`uscan --report --dehs --check-dirname-level 0 trunk/ | grep upstream-version | awk 'BEGIN{FS=">"}{print $2}' | awk 'BEGIN{FS="<"}{print $1}'`
80UPSTREAM_TARBALL_URL=`uscan --report --dehs --check-dirname-level 0 trunk/ | grep upstream-url | awk 'BEGIN{FS=">"}{print $2}' | awk 'BEGIN{FS="<"}{print $1}'`
81echo "${YELLOW}$UPSTREAM_VERSION${NORMAL}"
82
83# Log filename
84LOG_FILE="$LOCAL_REPO_ROOT../buildlogs/$SRC_PKG_NAME$UNDERLINE$UPSTREAM_VERSION-$PKG_REVISION.log"
85
86# Clean up log
87rm $LOG_FILE &> /dev/null
88
89# clean up untarred packages
90rm -r $SRC_PKG_NAME-* &> /dev/null
91rm -r build-area/* &> /dev/null
92rm *.tar.gz &> /dev/null
93
94# try to get upstream tarball using uscan
95uscan --rename --no-dehs --check-dirname-level 0 trunk/ >> $LOG_FILE
96
97# if fails, try classic manual way
98if [ ! -f $SRC_PKG_NAME$UNDERLINE$UPSTREAM_VERSION.orig.tar.gz ]; then
99       wget -c $UPSTREAM_TARBALL_URL &> /dev/null || exit 1
100       mv `ls | grep tar.gz` $SRC_PKG_NAME$UNDERLINE$UPSTREAM_VERSION.orig.tar.gz -v >> $LOG_FILE
101fi
102
103echo "${GREEN}Copying orig tarball to the local apt repo...${NORMAL}"
104cp *.orig.tar.gz $LOCAL_REPO_PATH/$COMPONENT/$POOL/$SRC_PKG_NAME/ -v >> $LOG_FILE
105
106# Make tarballs
107mkdir -p tarballs &> /dev/null
108mkdir -p build-area &> /dev/null
109
110# Copy tarball
111cp *.orig.tar.gz tarballs/ -v >> $LOG_FILE
112
113# Clean up untarred packages
114rm -r $SRC_PKG_NAME-* &> /dev/null
115
116# Check if both tarballs exist
117if [ ! -f tarballs/$SRC_PKG_NAME$UNDERLINE$UPSTREAM_VERSION.orig.tar.gz ]; then
118     echo "${RED}Source tarball not found${NORMAL}" && exit 3
119fi
120
121if [ ! -f $LOCAL_REPO_PATH/$COMPONENT/$POOL/$SRC_PKG_NAME/$SRC_PKG_NAME$UNDERLINE$UPSTREAM_VERSION.orig.tar.gz ]; then
122     echo "${RED}Source tarball not found on repo${NORMAL}" && exit 4
123fi
124
125# Goto trunk to start build
126cd trunk/
127
128# Fixing /etc/pbuilderrc
129PXBUILDARCH="amd64"
130sed -i s/base.tgz/base-$PXBUILDARCH.tgz/g /etc/pbuilderrc
131
132# Build amd64 chroot if needed
133if [ ! -f /var/cache/pbuilder/base-$PXBUILDARCH.tgz ]; then
134    echo "${GREEN}Creating ${YELLOW}amd64${NORMAL} ${GREEN}chroot...${NORMAL}"
135    pbuilder --create --distribution lenny --override-config --debootstrap debootstrap --debootstrapopts --arch --debootstrapopts amd64 --logfile $LOG_FILE --mirror ftp://ftp.de.debian.org/debian --othermirror "deb http://parsix.org/packages ramon main contrib non-free" &> /dev/null || exit 5
136else
137    echo "${GREEN}Updating ${YELLOW}amd64${NORMAL} ${GREEN}chroot...${NORMAL}"
138    pbuilder --update --distribution lenny --override-config --debootstrap debootstrap --debootstrapopts --arch --debootstrapopts amd64 --logfile $LOG_FILE --mirror ftp://ftp.de.debian.org/debian --othermirror "deb http://parsix.org/packages ramon main contrib non-free" &> /dev/null || exit 5
139fi
140
141# Build amd64 packages
142echo "${GREEN}Building ${YELLOW}amd64${NORMAL} ${GREEN}specific packages...${NORMAL}"
143svn-buildpackage --svn-builder="pdebuild --use-pdebuild-internal -- --logfile $LOG_FILE" || exit 6
144
145# Revert /etc/pbuilderrc changes
146sed -i s/base-$PXBUILDARCH.tgz/base.tgz/g /etc/pbuilderrc
147
148# Fixing /etc/pbuilderrc
149PXBUILDARCH="i386"
150sed -i s/base.tgz/base-$PXBUILDARCH.tgz/g /etc/pbuilderrc
151
152# Build i386 chroot if needed
153if [ ! -f /var/cache/pbuilder/base-$PXBUILDARCH.tgz ]; then
154    echo "${GREEN}Creating ${YELLOW}i386${NORMAL} ${GREEN}chroot...${NORMAL}"
155    pbuilder --create --distribution lenny --override-config --debootstrap debootstrap --debootstrapopts --arch --debootstrapopts i386 --logfile $LOG_FILE --mirror ftp://ftp.de.debian.org/debian --othermirror "deb http://parsix.org/packages ramon main contrib non-free" &> /dev/null || exit 7
156else
157    echo "${GREEN}Updating ${YELLOW}i386${NORMAL} ${GREEN}chroot...${NORMAL}"
158    pbuilder --update --distribution lenny --override-config --debootstrap debootstrap --debootstrapopts --arch --debootstrapopts i386 --logfile $LOG_FILE --mirror ftp://ftp.de.debian.org/debian --othermirror "deb http://parsix.org/packages ramon main contrib non-free" &> /dev/null || exit 7
159fi
160
161# Restore default controls
162rm debian/control* &> /dev/null
163svn up &> /dev/null
164
165# Build i386 packages
166echo "${GREEN}Building ${YELLOW}i386${NORMAL} ${GREEN}specific packages...${NORMAL}"
167svn-buildpackage --svn-builder="pdebuild --use-pdebuild-internal --debbuildopts -B -- --logfile $LOG_FILE" || exit 7
168
169# Revert /etc/pbuilderrc changes
170sed -i s/base-$PXBUILDARCH.tgz/base.tgz/g /etc/pbuilderrc
171
172cd ../build-area/
173
174echo "${GREEN}Generating ${YELLOW}multi_arch${NORMAL} ${GREEN}changes file and centralizing packages...${NORMAL}"
175
176# Merging changes file for multiarch upload
177AMD64_CHANGES=`ls | grep _amd64.changes`
178I386_CHANGES=`ls | grep _i386.changes`
179mergechanges -f $AMD64_CHANGES $I386_CHANGES >> $LOG_FILE
180
181# Add package to the repo
182cd $LOCAL_REPO_ROOT
183reprepro -Vb . include $DIST_NAME $SVN_REPO_PATH/$COMPONENT/$SRC_PKG_NAME/build-area/`ls $SVN_REPO_PATH/$COMPONENT/$SRC_PKG_NAME/build-area/ | grep _multi.changes` >> $LOG_FILE
184sh ../../sign >> $LOG_FILE && cd
185
186echo "${GREEN}Finished.${NORMAL}"
187
Note: See TracBrowser for help on using the repository browser.