Skip to content
Snippets Groups Projects
Commit 4a692e37 authored by Julien Bonjean's avatar Julien Bonjean
Browse files

[#1161] Added build system scripts

parent 4efdb3b7
No related branches found
No related tags found
No related merge requests found
# register image
VBoxManage registerimage disk VDI/ubuntu-9.04.vdi -type normal
# check registration
VBoxManage showvdiinfo VDI/ubuntu-9.04.vdi
# create VM
VBoxManage createvm -name "ubuntu-9.04" -register
# check vm creation
VBoxManage list vms
# update configuration
VBoxManage modifyvm "ubuntu-9.04" -hda "VDI/ubuntu-9.04.vdi" -memory "1024MB" -acpi on -nic1 nat
#si 64 bits
# VBoxManage modifyvm ubuntu-9.04-64 --ostype Ubuntu_64
# VBoxManage modifyvm ubuntu-9.04-64 --hwvirtex on
VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP
VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 50001
VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
# start vm
VBoxHeadless -startvm "ubuntu-9.04" -p 50000
# install ssh support
sudo apt-get install openssh-server
# add office-srv-01 sflphone user ssh key in authorized_keys of vm
ssh -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 50001 sflphone@127.0.0.1 "mkdir ~/.ssh/"
scp -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 50001 /home/projects/sflphone/.ssh/id_dsa.pub sflphone@127.0.0.1:~/.ssh/authorized_keys
ssh -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 50001 sflphone@127.0.0.1 "chmod 0600 ~/.ssh/authorized_keys"
# si nécessaire
# scp -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 50001 /home/projects/sflphone/build-system/git-buildpackage_0.4.45_all.deb sflphone@127.0.0.1:
# update /etc/sudoers
sflphone ALL = NOPASSWD: /sbin/shutdown, /usr/bin/apt-get, /usr/bin/dpkg
# stop vm
VBoxManage controlvm "ubuntu-9-04" poweroff
#!/bin/bash
#####################################################
# File Name: send-emails.sh
#
# Purpose :
#
# Author: Julien Bonjean (julien@bonjean.info)
#
# Creation Date: 2009-04-20
# Last Modified:
#####################################################
TAG=`date +%Y-%m-%d`
ROOT_DIR="/home/projects/sflphone"
SCRIPTS_DIR="${ROOT_DIR}/build-system"
cd ${SCRIPTS_DIR}
${SCRIPTS_DIR}/launch-build-machine.sh $*
${SCRIPTS_DIR}/send-emails.sh $?
exit 0
#!/usr/bin/python -u
# vim: set fileencoding=utf-8 :
#
# (C) 2007,2008 Guido Guenther <agx@sigxcpu.org>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""Generate Debian changelog entries from git commit messages"""
import sys
import re
import os.path
import shutil
import subprocess
import gbp.command_wrappers as gbpc
from gbp.git_utils import (GitRepositoryError, GitRepository, build_tag)
from gbp.config import GbpOptionParser, GbpOptionGroup
from gbp.errors import GbpError
from gbp.deb_utils import parse_changelog
from gbp.command_wrappers import (Command, CommandExecFailed)
snapshot_re = re.compile("\s*\*\* SNAPSHOT build @(?P<commit>[a-z0-9]+)\s+\*\*")
author_re = re.compile('Author: (?P<author>.*) <(?P<email>.*)>')
bug_r = r'(?:bug)?\#?\s?\d+'
bug_re = re.compile(bug_r, re.I)
def system(cmd):
try:
Command(cmd, shell=True)()
except CommandExecFailed:
raise GbpError
def escape_commit(msg):
return msg.replace('"','\\\"').replace("$","\$").replace("`","\`")
def spawn_dch(msg='', author=None, email=None, newversion=False, version=None, release=False, distribution=None):
distopt = ""
versionopt = ""
env = ""
if newversion:
if version:
versionopt = '--newversion=%s' % version
else:
versionopt = '-i'
elif release:
versionopt = "--release"
msg = None
if author and email:
env = """DEBFULLNAME="%s" DEBEMAIL="%s" """ % (author, email)
if distribution:
distopt = "--distribution=%s" % distribution
cmd = '%(env)s dch --no-auto-nmu %(distopt)s %(versionopt)s ' % locals()
if type(msg) == type(''):
cmd += '"%s"' % escape_commit(msg)
system(cmd)
def add_changelog_entry(msg, author, email):
"add aa single changelog entry"
spawn_dch(msg=msg, author=author, email=email)
def add_changelog_section(msg, distribution, author=None, email=None, version=None):
"add a new changelog section"
spawn_dch(msg=msg, newversion= True, version=version, author=author, email=email, distribution=distribution)
def fixup_trailer(repo, git_author=False):
"""fixup the changelog trailer's comitter and email address - it might
otherwise point to the last git committer instead of the person creating
the changelog"""
author = email = None
if git_author:
try: author = repo.get_config('user.name')
except KeyError: pass
try: email = repo.get_config('user.email')
except KeyError: pass
spawn_dch(msg='', author=author, email=email)
def head_commit():
"""get the full sha1 of the last commit on HEAD"""
commit = subprocess.Popen([ 'git', 'log', 'HEAD^..' ], stdout=subprocess.PIPE).stdout
sha = commit.readline().split()[-1]
return sha
def snapshot_version(version):
"""
get the current release and snapshot version
Format is <debian-version>~<release>.gbp<short-commit-id>
"""
try:
(release, suffix) = version.rsplit('~', 1)
(snapshot, commit) = suffix.split('.', 1)
if not commit.startswith('gbp'):
raise ValueError
else:
snapshot = int(snapshot)
except ValueError: # not a snapshot release
release = version
snapshot = 0
return release, snapshot
def mangle_changelog(changelog, cp, snapshot=''):
"""
Mangle changelog to either add or remove snapshot markers
@param snapshot: SHA1 if snapshot header should be added/maintained, empty if it should be removed
@type snapshot: str
"""
try:
tmpfile = '%s.%s' % (changelog, snapshot)
cw = file(tmpfile, 'w')
cr = file(changelog, 'r')
cr.readline() # skip version and empty line
cr.readline()
print >>cw, "%(Source)s (%(MangledVersion)s) %(Distribution)s; urgency=%(urgency)s\n" % cp
line = cr.readline()
if snapshot_re.match(line):
cr.readline() # consume the empty line after the snapshot header
line = ''
if snapshot:
print >>cw, " ** SNAPSHOT build @%s **\n" % snapshot
if line:
print >>cw, line.rstrip()
shutil.copyfileobj(cr, cw)
cw.close()
cr.close()
os.unlink(changelog)
os.rename(tmpfile, changelog)
except OSError, e:
raise GbpError, "Error mangling changelog %s" % e
def do_release(changelog, cp):
"remove the snapshot header and set the distribution"
(release, snapshot) = snapshot_version(cp['Version'])
if snapshot:
cp['MangledVersion'] = release
mangle_changelog(changelog, cp)
# <julien.bonjean@savoirfairelinux.com>
# prevent doing a release
# spawn_dch(release=True)
def do_snapshot(changelog, next_snapshot):
"""
Add new snapshot banner to most recent changelog section. The next snapshot
number is calculated by eval()'ing next_snapshot
"""
# commit = head_commit()
cp = parse_changelog(changelog)
# <julien.bonjean@savoirfairelinux.com>
# clean version before generate snapshot
version=cp['Version']
try:
(release, suffix) = version.rsplit('~', 1)
except:
pass
try:
(snapshot, commit) = suffix.split('.', 1)
stripped = str(int(snapshot))
except:
version=release
commit = head_commit()
(release, snapshot) = snapshot_version(version)
snapshot = int(eval(next_snapshot))
suffix = "%d.gbp%s" % (snapshot, "".join(commit[0:6]))
cp['MangledVersion'] = "%s~%s" % (release, suffix)
mangle_changelog(changelog, cp, commit)
return snapshot, commit
def get_author(commit):
"""get the author from a commit message"""
for line in commit:
m = author_re.match(line)
if m:
return m.group('author'), m.group('email')
def parse_commit(repo, commitid, options):
"""parse a commit and return message and author"""
msg = ''
thanks = ''
closes = ''
bugs = {}
bts_closes = re.compile(r'(?P<bts>%s):\s+%s' % (options.meta_closes, bug_r), re.I)
commit = repo.show(commitid)
author, email = get_author(commit)
if not author:
raise GbpError, "can't parse author of commit %s" % commit
for line in commit:
if line.startswith(' '): # commit body
line = line[4:]
m = bts_closes.match(line)
if m:
bug_nums = [ bug.strip() for bug in bug_re.findall(line, re.I) ]
try:
bugs[m.group('bts')] += bug_nums
except KeyError:
bugs[m.group('bts')] = bug_nums
elif line.startswith('Thanks: '):
thanks = line.split(' ', 1)[1].strip()
else: # normal commit message
if options.short and msg:
continue
elif line.strip(): # don't add all whitespace lines
msg += line
# start of diff output:
elif line.startswith('diff '):
break
if options.meta:
for bts in bugs:
closes += '(%s: %s) ' % (bts, ', '.join(bugs[bts]))
if thanks:
thanks = '- thanks to %s' % thanks
msg += closes + thanks
if options.idlen:
msg = "[%s] " % commitid[0:options.idlen] + msg
return msg, (author, email)
def shortlog_to_dch(repo, commits, options):
"""convert the changes in git shortlog format to debian changelog format"""
author = 'Unknown'
for commit in commits:
msg, (author, email) = parse_commit(repo, commit, options)
add_changelog_entry(msg, author, email)
def guess_snapshot_commit(cp):
"""guess the last commit documented in the changelog from the snapshot banner"""
sr = re.search(snapshot_re, cp['Changes'])
if sr:
return sr.group('commit')
def main(argv):
ret = 0
changelog = 'debian/changelog'
until = 'HEAD'
found_snapshot_header = False
first_commit = None
parser = GbpOptionParser(command=os.path.basename(argv[0]), prefix='',
usage='%prog [options] paths')
range_group = GbpOptionGroup(parser, "commit range options", "which commits to add to the changelog")
version_group = GbpOptionGroup(parser, "release & version number options", "what version number and release to use")
commit_group = GbpOptionGroup(parser, "commit message formatting", "howto format the changelog entries")
naming_group = GbpOptionGroup(parser, "branch and tag naming", "branch names and tag formats")
parser.add_option_group(range_group)
parser.add_option_group(version_group)
parser.add_option_group(commit_group)
parser.add_option_group(naming_group)
naming_group.add_config_file_option(option_name="debian-branch", dest="debian_branch")
naming_group.add_config_file_option(option_name="upstream-tag", dest="upstream_tag")
naming_group.add_config_file_option(option_name="debian-tag", dest="debian_tag")
naming_group.add_config_file_option(option_name="snapshot-number", dest="snapshot_number",
help="expression to determine the next snapshot number, default is '%(snapshot-number)s'")
parser.add_config_file_option(option_name="git-log", dest="git_log",
help="options to pass to git-log, default is '%(git-log)s'")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False,
help="verbose command execution")
range_group.add_option("-s", "--since", dest="since", help="commit to start from (e.g. HEAD^^^, debian/0.4.3)")
range_group.add_option("-a", "--auto", action="store_true", dest="auto", default=False,
help="autocomplete changelog from last snapshot or tag")
version_group.add_option("-R", "--release", action="store_true", dest="release", default=False,
help="mark as release")
version_group.add_option("-S", "--snapshot", action="store_true", dest="snapshot", default=False,
help="mark as snapshot build")
version_group.add_option("-N", "--new-version", dest="new_version",
help="use this as base for the new version number")
version_group.add_config_file_option(option_name="git-author", dest="git_author", action="store_true")
version_group.add_config_file_option(option_name="no-git-author", dest="git_author", action="store_false")
commit_group.add_config_file_option(option_name="meta", dest="meta",
help="parse meta tags in commit messages, default is '%(meta)s'", action="store_true")
commit_group.add_config_file_option(option_name="meta-closes", dest="meta_closes",
help="Meta tags for the bts close commands, default is '%(meta-closes)s'")
commit_group.add_option("--full", action="store_false", dest="short", default=True,
help="include the full commit message instead of only the first line")
commit_group.add_config_file_option(option_name="id-length", dest="idlen",
help="include N digits of the commit id in the changelog entry, default is '%(id-length)s'",
type="int", metavar="N")
(options, args) = parser.parse_args(argv[1:])
if options.snapshot and options.release:
parser.error("'--snapshot' and '--release' are incompatible options")
if options.since and options.auto:
parser.error("'--since' and '--auto' are incompatible options")
try:
if options.verbose:
gbpc.Command.verbose = True
try:
repo = GitRepository('.')
except GitRepositoryError:
raise GbpError, "%s is not a git repository" % (os.path.abspath('.'))
branch = repo.get_branch()
if options.debian_branch != branch:
print >>sys.stderr, "You are not on branch '%s' but on '%s'" % (options.debian_branch, branch)
raise GbpError, "Use --debian-branch to set the branch to pick changes from"
cp = parse_changelog(changelog)
if options.since:
since = options.since
else:
since = ''
if options.auto:
since = guess_snapshot_commit(cp)
if since:
print "Continuing from commit '%s'" % since
found_snapshot_header = True
else:
print "Couldn't find snapshot header, using version info"
if not since:
since = build_tag(options.debian_tag, cp['Version'])
if args:
print "Only looking for changes on '%s'" % " ".join(args)
commits = repo.commits(since, until, " ".join(args), options.git_log.split(" "))
# add a new changelog section if:
if cp['Distribution'] != "UNRELEASED" and not found_snapshot_header and commits:
# the last version was a release and we have pending commits
add_section = True
elif options.new_version or not found_snapshot_header:
# the user wants to force a new version or switch to snapshot mode
add_section = True
else:
add_section = False
if add_section:
if commits:
first_commit = commits[0]
commits = commits[1:]
commit_msg, (commit_author, commit_email) = parse_commit(repo, first_commit, options)
else:
commit_msg = "UNRELEASED"
commit_author = None
commit_email = None
add_changelog_section(distribution="UNRELEASED", msg=commit_msg,
version=options.new_version, author=commit_author,
email=commit_email)
if commits:
shortlog_to_dch(repo, commits, options)
fixup_trailer(repo, git_author=options.git_author)
elif not first_commit:
print "No changes detected from %s to %s." % (since, until)
if options.release:
do_release(changelog, cp)
elif options.snapshot:
(snap, version) = do_snapshot(changelog, options.snapshot_number)
print "Changelog has been prepared for snapshot #%d at %s" % (snap, version)
except (GbpError, GitRepositoryError), err:
if len(err.__str__()):
print >>sys.stderr, err
ret = 1
return ret
if __name__ == "__main__":
sys.exit(main(sys.argv))
# vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·:
#!/bin/bash
#####################################################
# File Name: setup-gpg.sh
#
# Purpose :
#
# Author: Julien Bonjean (julien@bonjean.info)
#
# Creation Date: 2009-04-20
# Last Modified:
#####################################################
# pkill gpg-agent
export LANG=en_CA.UTF-8
export LC_ALL=en_CA.UTF-8
echo "Check if GPG key is present"
gpg --list-secret-keys | grep "Savoir-Faire Linux Inc." >/dev/null
if [ "$?" -ne "0" ]; then
echo "!! GPG private key is not present"
exit -1
fi
echo "Check GPG agent"
pgrep -u "sflphone-package-manager" gpg-agent > /dev/null
if [ "$?" -ne "0" ]; then
echo "Not running, launching it"
EVAL=`/usr/bin/gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info --default-cache-ttl 2000000000 --max-cache-ttl 2000000000 --pinentry-program /usr/bin/pinentry`
eval ${EVAL}
fi
if [ "$?" -ne "0" ]; then
echo "!! Error with GPG agent"
exit -1
fi
GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null`
export ${GPG_AGENT_INFO}
if [ "${GPG_AGENT_INFO}" == "" ]; then
echo "!! Cannot get GPG agent info"
exit -1
fi
GPG_TTY=`tty`
export GPG_TTY
touch ./test-gpg
gpg -v --clearsign --use-agent ./test-gpg
rm -f ./test-gpg
rm -f ./test-gpg.asc
exit 0
#!/bin/bash
#####################################################
# File Name: launch-build-machine.sh
#
# Purpose :
#
# Author: Julien Bonjean (julien@bonjean.info)
#
# Creation Date: 2009-04-20
# Last Modified:
#####################################################
TAG=`date +%Y-%m-%d`
# wait delay after startup and shutdown of VMs
STARTUP_WAIT=40
SHUTDOWN_WAIT=30
# ssh stuff
SSH_OPTIONS="-o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
SSH_HOST="sflphone@127.0.0.1"
SSH_REPOSITORY_HOST="sflphone-package-manager@dev.savoirfairelinux.net"
SSH_BASE="ssh ${SSH_OPTIONS} -p 50001 ${SSH_HOST}"
SCP_BASE="scp ${SSH_OPTIONS} -r -P 50001"
# home directory
ROOT_DIR="/home/projects/sflphone"
# vbox config directory
export VBOX_USER_HOME="${ROOT_DIR}/vbox"
# remote home directory
REMOTE_ROOT_DIR="/home/sflphone"
# scripts
SCRIPTS_DIR="${ROOT_DIR}/build-system"
PACKAGING_SCRIPTS_DIR="${SCRIPTS_DIR}/remote"
BIN_DIR="${SCRIPTS_DIR}/bin"
# directory that will be deployed to remote machine
TODEPLOY_DIR="${ROOT_DIR}/sflphone-packaging"
TODEPLOY_BUILD_DIR="${TODEPLOY_DIR}/build"
# remote deployment dir
REMOTE_DEPLOY_DIR="/home/sflphone/sflphone-packaging"
# cloned repository and archive
REPOSITORY_DIR="${TODEPLOY_BUILD_DIR}/sflphone"
REPOSITORY_ARCHIVE="`dirname ${REPOSITORY_DIR}`/sflphone.tar.gz"
REPOSITORY_SFLPHONE_COMMON_DIR="${REPOSITORY_DIR}/sflphone-common"
REPOSITORY_SFLPHONE_CLIENT_KDE_DIR="${REPOSITORY_DIR}/sflphone-client-kde"
REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR="${REPOSITORY_DIR}/sflphone-client-gnome"
# where results go
PACKAGING_RESULT_DIR=${ROOT_DIR}/packages-${TAG}
USER="sflphone"
RELEASE_MODE=
VERSION_APPEND=
DO_PREPARE=1
DO_MAIN_LOOP=1
DO_SIGNATURES=1
DO_UPLOAD=1
DO_LOGGING=1
DO_SEND_EMAIL=1
EDITOR=echo
export EDITOR
MACHINES=( "ubuntu-8.04" "ubuntu-8.04-64" "ubuntu-8.10" "ubuntu-8.10-64" "ubuntu-9.04" "ubuntu-9.04-64" )
#########################
# BEGIN
#########################
echo
echo " /***********************\\"
echo " | SFLPhone build system |"
echo " \\***********************/"
echo
cd ${SCRIPTS_DIR}
if [ "$?" -ne "0" ]; then
echo " !! Cannot cd to working directory"
exit -1
fi
WHO=`whoami`
if [ "${WHO}" != "${USER}" ]; then
echo "!! Please use user ${USER} to run this script"
exit -1;
fi
for PARAMETER in $*
do
case ${PARAMETER} in
--help)
echo
echo "Options :"
echo " --skip-prepare"
echo " --skip-main-loop"
echo " --skip-signatures"
echo " --skip-upload"
echo " --no-logging"
echo " --machine=MACHINE"
echo " --release-mode=[beta|rc|release]"
echo " --list-machines"
echo
exit 0;;
--skip-prepare)
unset DO_PREPARE;;
--skip-main-loop)
unset DO_MAIN_LOOP;;
--skip-signatures)
unset DO_SIGNATURES;;
--skip-upload)
unset DO_UPLOAD;;
--no-logging)
unset DO_LOGGING;;
--machine=*)
MACHINES=(${PARAMETER##*=});;
--release-mode=*)
RELEASE_MODE=(${PARAMETER##*=});;
--list-machines)
echo "Available machines :"
for MACHINE in ${MACHINES}; do
echo " "${MACHINE}
done
exit 0;;
*)
echo "Unknown parameter : ${PARAMETER}"
exit -1;;
esac
done
# logging
mkdir ${PACKAGING_RESULT_DIR} 2>/dev/null
if [ ${DO_LOGGING} ]; then
# open file descriptor
rm -f ${PACKAGING_RESULT_DIR}/packaging.log
exec 3<> ${PACKAGING_RESULT_DIR}/packaging.log
# redirect outputs (stdout & stderr)
exec 1>&3
exec 2>&3
fi
# check release
if [ ${RELEASE_MODE} ]; then
case ${RELEASE_MODE} in
beta);;
rc[1-9]);;
release);;
*)
echo "Bad release mode"
exit -1;;
esac
fi
# check machines list
if [ -z "${MACHINES}" ]; then
echo "Need at least a machine name to launch"
exit -1
fi
echo
echo "Launching build system with the following machines :"
for MACHINE in ${MACHINES[*]}
do
echo " "${MACHINE}
done
echo
if [ ${RELEASE_MODE} ]; then
echo "Release mode : ${RELEASE_MODE}"
if [ "${RELEASE_MODE}" != "release" ];then
VERSION_APPEND="~${RELEASE_MODE}"
fi
else
echo "Snapshot mode"
fi
#########################
# COMMON PART
#########################
if [ ${DO_PREPARE} ]; then
echo
echo "Cleaning old deploy dir"
rm -rf ${TODEPLOY_DIR}
mkdir ${TODEPLOY_DIR}
mkdir ${TODEPLOY_BUILD_DIR}
echo "Clone repository"
git clone ssh://repos-sflphone-git@sflphone.org/~/sflphone.git ${REPOSITORY_DIR} >/dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo " !! Cannot clone repository"
exit -1
fi
FULL_VER=`cd ${REPOSITORY_DIR} && git describe --tag HEAD | cut -d "/" -f2 | cut -d "-" -f1-2`
# change current branch if needed
if [ ${RELEASE_MODE} ]; then
cd ${REPOSITORY_DIR}
echo "Using release branch"
git checkout origin/release -b release
else
echo "Using master branch"
fi
# generate the changelog, according to the distribution and the git commit messages
echo "Update changelogs"
# use git to generate changelogs
# TODO : currently do symlink to workaround git-dch bug, check if better way is possible
if [ ${RELEASE_MODE} ]; then
cd ${REPOSITORY_DIR} && ln -s ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/ . && ${BIN_DIR}/git-dch -a -R -N "${FULL_VER}${VERSION_APPEND}" --debian-branch=release && rm debian && \
# cd ${REPOSITORY_DIR} && ln -s ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian . && ${BIN_DIR}/git-dch -a -R -N "${FULL_VER}${VERSION_APPEND}" --debian-branch=release && rm debian && \
cd ${REPOSITORY_DIR} && ln -s ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian . && ${BIN_DIR}/git-dch -a -R -N "${FULL_VER}${VERSION_APPEND}" --debian-branch=release && rm debian
else
cd ${REPOSITORY_DIR} && ln -s ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian . && ${BIN_DIR}/git-dch -a -S && rm debian && \
# cd ${REPOSITORY_DIR} && ln -s ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian . && ${BIN_DIR}/git-dch -a -S && rm debian && \
cd ${REPOSITORY_DIR} && ln -s ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian . && ${BIN_DIR}/git-dch -a -S && rm debian
fi
if [ "$?" -ne "0" ]; then
echo "!! Cannot update changelogs"
exit -1
fi
# change UNRELEASED flag to system as we alway do a build for each distribution
# and distribution is set by another script
find ${REPOSITORY_DIR} -name changelog -exec sed -i 's/UNRELEASED/SYSTEM/g' {} \;
cd ${REPOSITORY_DIR}
echo "Update repository with new changelog"
echo " Switch to master branch to commit"
if [ ${RELEASE_MODE} ]; then
echo "Switch to master branch for commit"
git checkout master
fi
echo " Doing commit"
VERSION_COMMIT=${FULL_VER}${VERSION_APPEND}
if [ ! ${RELEASE_MODE} ]; then
VERSION_COMMIT=${FULL_VER}" Snapshot ${TAG}"
fi
git-commit -m "[#1262] Updated changelogs for version ${VERSION_COMMIT}" . >/dev/null
echo " Pushing commit"
git push origin master >/dev/null
# change back current branch if needed
if [ ${RELEASE_MODE} ]; then
echo "Switch back to release branch"
git checkout release
git merge master
fi
echo "Archiving repository"
tar czf ${REPOSITORY_ARCHIVE} -C `dirname ${REPOSITORY_DIR}` sflphone
if [ "$?" -ne "0" ]; then
echo " !! Cannot archive repository"
exit -1
fi
echo "Removing repository"
rm -rf ${REPOSITORY_DIR}
echo "Finish preparing deploy directory"
cp -r ${PACKAGING_SCRIPTS_DIR}/* ${TODEPLOY_DIR}
if [ "$?" -ne "0" ]; then
echo " !! Cannot prepare scripts for deployment"
exit -1
fi
fi
#########################
# MAIN LOOP
#########################
if [ ${DO_MAIN_LOOP} ]; then
echo
echo "Entering main loop"
echo
for MACHINE in ${MACHINES[*]}
do
echo "Launch machine ${MACHINE}"
VM_STATE=`VBoxManage showvminfo ${MACHINE} | grep State | awk '{print $2}'`
if [ "${VM_STATE}" = "running" ]; then
echo "Not needed, already running"
else
cd ${VBOX_USER_HOME} && VBoxHeadless -startvm "${MACHINE}" -p 50000 &
echo "Wait ${STARTUP_WAIT} s"
sleep ${STARTUP_WAIT}
fi
echo "Doing updates"
${SSH_BASE} 'sudo apt-get update >/dev/null'
${SSH_BASE} 'sudo apt-get upgrade -y >/dev/null'
echo "Clean remote directory"
${SSH_BASE} "rm -rf ${REMOTE_DEPLOY_DIR} 2>/dev/null"
echo "Deploy packaging system"
${SCP_BASE} ${TODEPLOY_DIR} ${SSH_HOST}:
if [ "$?" -ne "0" ]; then
echo " !! Cannot deploy packaging system"
exit -1
fi
echo "Launch remote build"
${SSH_BASE} "${REMOTE_DEPLOY_DIR}/build-package-ubuntu.sh ${RELEASE_MODE}"
if [ "$?" -ne "0" ]; then
echo " !! Error during remote packaging process"
# exit -1
fi
echo "Retrieve dists and log files (current tag is ${TAG})"
${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}/dists ${PACKAGING_RESULT_DIR}/
${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}"/*.log" ${PACKAGING_RESULT_DIR}/
if [ "$?" -ne "0" ]; then
echo " !! Cannot retrieve remote files"
exit -1
fi
if [ "${VM_STATE}" = "running" ]; then
echo "Leave machine running"
else
echo "Shut down machine ${MACHINE}"
${SSH_BASE} 'sudo shutdown -h now'
echo "Wait ${SHUTDOWN_WAIT} s"
sleep ${SHUTDOWN_WAIT}
echo "Hard shut down"
cd "${VBOX_USER_HOME}" && VBoxManage controlvm ${MACHINE} poweroff
fi
done
fi
#########################
# SIGNATURES
#########################
if [ ${DO_SIGNATURES} ]; then
echo
echo "Sign packages"
echo
echo "Check GPG agent"
pgrep -u "sflphone" gpg-agent > /dev/null
if [ "$?" -ne "0" ]; then
echo "!! GPG agent is not running"
exit -1
fi
GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null`
export ${GPG_AGENT_INFO}
if [ "${GPG_AGENT_INFO}" == "" ]; then
echo "!! Cannot get GPG agent info"
exit -1
fi
echo "Sign packages"
find ${PACKAGING_RESULT_DIR} -name "*.deb" -exec dpkg-sig -k 'Savoir-Faire Linux Inc.' --sign builder --sign-changes full {} \; >/dev/null 2>&1
find ${PACKAGING_RESULT_DIR} -name "*.changes" -printf "debsign -k'Savoir-Faire Linux Inc.' %p\n" | sh >/dev/null 2>&1
fi
#########################
# UPLOAD FILES
#########################
if [ ${DO_UPLOAD} ]; then
echo
echo "Upload packages"
echo
echo "Prepare packages upload"
scp ${SSH_OPTIONS} ${PACKAGING_SCRIPTS_DIR}/update-repository.sh ${SSH_REPOSITORY_HOST}:
if [ "$?" -ne "0" ]; then
echo " !! Cannot deploy repository scripts"
fi
echo "Upload packages"
echo "Install dists files to repository"
scp -r ${SSH_OPTIONS} ${PACKAGING_RESULT_DIR}/dists ${SSH_REPOSITORY_HOST}:
if [ "$?" -ne "0" ]; then
echo " !! Cannot upload packages"
exit -1
fi
echo "Update repository"
ssh ${SSH_OPTIONS} ${SSH_REPOSITORY_HOST} "./update-repository.sh"
if [ "$?" -ne "0" ]; then
echo " !! Cannot update repository"
exit -1
fi
fi
# close file descriptor
exec 3>&-
exit 0
File added
#!/bin/bash
#
# @author: Yun Liu <yun.liu@savoirfairelinux.com>, Julien Bonjean <julien.bonjean@savoirfairelinux.com>
#
# Refer to http://www.sflphone.org for futher information
#
PLATFORM="ubuntu"
ROOT_DIR="/home/sflphone/sflphone-packaging"
BUILD_DIR="${ROOT_DIR}/build"
DIST_DIR="${ROOT_DIR}/dists"
REPOSITORY_ARCHIVE="${BUILD_DIR}/sflphone.tar.gz"
REPOSITORY_DIR="${BUILD_DIR}/sflphone"
REPOSITORY_SFLPHONE_COMMON_DIR="${REPOSITORY_DIR}/sflphone-common"
REPOSITORY_SFLPHONE_CLIENT_KDE_DIR="${REPOSITORY_DIR}/sflphone-client-kde"
REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR="${REPOSITORY_DIR}/sflphone-client-gnome"
USER="sflphone"
DIST_APPEND="-daily"
RELEASE_MODE=$1
VERSION_APPEND=
EDITOR=echo
export EDITOR
#########################
# BEGIN
#########################
WHO=`whoami`
if [ "${WHO}" != "${USER}" ]; then
echo "!! Please use user ${USER} to run this script"
exit -1;
fi
if [ ${RELEASE_MODE} ]; then
echo "Release mode : ${RELEASE_MODE}"
if [ "${RELEASE_MODE}" = "release" ]; then
DIST_APPEND=""
else
DIST_APPEND="-testing"
VERSION_APPEND="~${RELEASE_MODE}"
fi
else
echo "Snapshot mode"
fi
cd ${ROOT_DIR}
if [ "$?" -ne "0" ]; then
echo " !! Cannot cd to working directory"
exit -1
fi
# decompress reppository
echo "Untar repository"
cd ${BUILD_DIR} && tar xf ${REPOSITORY_ARCHIVE}
if [ "$?" -ne "0" ]; then
echo " !! Cannot untar repository"
exit -1
fi
echo "Switch to internal logging"
# get system parameters
ARCH_FLAG=`getconf -a|grep LONG_BIT | sed -e 's/LONG_BIT\s*//'`
OS_VERSION=`lsb_release -d -s -c | sed -e '1d'`
VER=`cd ${REPOSITORY_DIR} && git describe --tag HEAD | cut -d "/" -f2 | cut -d "-" -f1`
FULL_VER=`cd ${REPOSITORY_DIR} && git describe --tag HEAD | cut -d "/" -f2 | cut -d "-" -f1-2`
# define log files
GLOBAL_LOG=${ROOT_DIR}/sflphone-${OS_VERSION}-${ARCH_FLAG}.log
PACKAGING_LOG=${ROOT_DIR}/sflphone-debuild-${OS_VERSION}-${ARCH_FLAG}.log
# open log file
exec 3<>${GLOBAL_LOG}
# redirect outputs (stdout & stderr)
exec 1>&3
exec 2>&3
echo "SFLPhone version is ${VER}"
# generate the changelog, according to the distribution and the git commit messages
echo "Generate changelogs"
sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/changelog && \
# sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/changelog && \
sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/changelog
if [ "$?" -ne "0" ]; then
echo "!! Cannot generate changelogs"
exit -1
fi
# copy the appropriate control file based on different archtecture
echo "Generate control files"
cp ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/control.$OS_VERSION ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/control && \
# cp ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/control.$OS_VERSION ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/control && \
cp ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/control.$OS_VERSION ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/control
if [ "$?" -ne "0" ]; then
echo "!! Cannot generate control files"
exit -1
fi
# provide prerequisite directories used by debuild
echo "Build sflphone packages on Ubuntu $OS_VERSION $ARCH_FLAG bit architecture...."
cp -r ${REPOSITORY_SFLPHONE_COMMON_DIR} ${BUILD_DIR}/sflphone-common && \
cp -r ${REPOSITORY_SFLPHONE_COMMON_DIR} ${BUILD_DIR}/sflphone-common-$VER.orig && \
# cp -r ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR} ${BUILD_DIR}/sflphone-client-kde-$VER.orig && \
cp -r ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR} ${BUILD_DIR}/sflphone-client-gnome-$VER.orig && \
# do a cp to because path must remain for client compilation
mv ${REPOSITORY_SFLPHONE_COMMON_DIR} ${BUILD_DIR}/sflphone-common-$VER && \
# mv ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR} ${BUILD_DIR}/sflphone-client-kde-$VER && \
mv ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR} ${BUILD_DIR}/sflphone-client-gnome-$VER
# build package sflphone-common
cd ${BUILD_DIR}/sflphone-common-$VER/debian && \
debuild -us -uc >${PACKAGING_LOG} 2>&1
if [ "$?" -ne "0" ]; then
echo "!! Cannot generate package sflphone-common"
exit -1
fi
# build package sflphone-client-gnome
cd ${BUILD_DIR}/sflphone-client-gnome-$VER/debian && \
debuild -us -uc >${PACKAGING_LOG} 2>&1
if [ "$?" -ne "0" ]; then
echo "!! Cannot generate package sflphone-client-gnome"
exit -1
fi
# build package sflphone-client-kde
# cd ${BUILD_DIR}/sflphone-client-kde-$VER/debian && \
# debuild -us -uc >${PACKAGING_LOG} 2>&1
# if [ "$?" -ne "0" ]; then
# echo "!! Cannot generate package sflphone-client-kde"
# exit -1
# fi
# move to dist
echo "Deploy files in dist directories"
BINARY_DIR=""
if [ "${ARCH_FLAG}" -eq "32" ]; then
BINARY_DIR="binary-i386"
else
BINARY_DIR="binary-amd64"
fi
mkdir -p ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source
mkdir -p ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/${BINARY_DIR}
mv ${BUILD_DIR}/sflphone*.deb ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/${BINARY_DIR} && \
mv ${BUILD_DIR}/sflphone*.dsc ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \
mv ${BUILD_DIR}/sflphone*.build ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \
mv ${BUILD_DIR}/sflphone*.changes ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \
mv ${BUILD_DIR}/sflphone*.orig.tar.gz ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \
mv ${BUILD_DIR}/sflphone*.diff.gz ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/
if [ "$?" -ne "0" ]; then
echo "!! Cannot copy dist files"
exit -1
fi
echo "All done"
# close file descriptor
exec 3>&-
exit 0
#!/bin/bash
# Script to update the debian repository description files (Release, Packages, Sources)
#
# @author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
# @date: 2008 Jan 16
ROOT_DIR="/var/repos/sflphone/debian"
USER="sflphone-package-manager"
export LANG=en_CA.UTF-8
export LC_ALL=en_CA.UTF-8
WHO=`whoami`
if [ "${WHO}" != "${USER}" ]; then
echo "!! Please use user ${USER} to run this script"
exit -1;
fi
echo "Check GPG agent"
pgrep -u "sflphone-package-manager" gpg-agent > /dev/null
if [ "$?" -ne "0" ]; then
echo "!! GPG agent is not running"
exit -1
fi
GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null`
export ${GPG_AGENT_INFO}
if [ "${GPG_AGENT_INFO}" == "" ]; then
echo "!! Cannot get GPG agent info"
exit -1
fi
apt-ftparchive generate conf/apt-ftparchive.conf
echo "Generate the description file for each distribution"
apt-ftparchive -c conf/apt-hardy-release.conf release dists/hardy > dists/hardy/Release
apt-ftparchive -c conf/apt-hardy-testing.conf release dists/hardy-testing > dists/hardy-testing/Release
apt-ftparchive -c conf/apt-hardy-daily.conf release dists/hardy-daily > dists/hardy-daily/Release
apt-ftparchive -c conf/apt-intrepid-release.conf release dists/intrepid > dists/intrepid/Release
apt-ftparchive -c conf/apt-intrepid-testing.conf release dists/intrepid-testing > dists/intrepid-testing/Release
apt-ftparchive -c conf/apt-intrepid-daily.conf release dists/intrepid-daily > dists/intrepid-daily/Release
apt-ftparchive -c conf/apt-jaunty-release.conf release dists/jaunty > dists/jaunty/Release
apt-ftparchive -c conf/apt-jaunty-testing.conf release dists/jaunty-testing > dists/jaunty-testing/Release
apt-ftparchive -c conf/apt-jaunty-daily.conf release dists/jaunty-daily > dists/jaunty-daily/Release
echo "Sign the Release files"
rm -f dists/intrepid/Release.gpg
rm -f dists/intrepid-testing/Release.gpg
rm -f dists/intrepid-daily/Release.gpg
gpg --no-tty -u C842D122 --output dists/intrepid/Release.gpg -ba dists/intrepid/Release
gpg --no-tty -u C842D122 --output dists/intrepid-testing/Release.gpg -ba dists/intrepid-testing/Release
gpg --no-tty -u C842D122 --output dists/intrepid-daily/Release.gpg -ba dists/intrepid-daily/Release
rm -f dists/hardy/Release.gpg
rm -f dists/hardy-testing/Release.gpg
rm -f dists/hardy-daily/Release.gpg
gpg --no-tty -u C842D122 --output dists/hardy/Release.gpg -ba dists/hardy/Release
gpg --no-tty -u C842D122 --output dists/hardy-testing/Release.gpg -ba dists/hardy-testing/Release
gpg --no-tty -u C842D122 --output dists/hardy-daily/Release.gpg -ba dists/hardy-daily/Release
rm -f dists/jaunty/Release.gpg
rm -f dists/jaunty-testing/Release.gpg
rm -f dists/jaunty-daily/Release.gpg
gpg --no-tty -u C842D122 --output dists/jaunty/Release.gpg -ba dists/jaunty/Release
gpg --no-tty -u C842D122 --output dists/jaunty-testing/Release.gpg -ba dists/jaunty-testing/Release
gpg --no-tty -u C842D122 --output dists/jaunty-daily/Release.gpg -ba dists/jaunty-daily/Release
echo "All done"
exit 0
#!/bin/bash
#####################################################
# File Name: send-emails.sh
#
# Purpose :
#
# Author: Julien Bonjean (julien@bonjean.info)
#
# Creation Date: 2009-04-20
# Last Modified:
#####################################################
TAG=`date +%Y-%m-%d`
ROOT_DIR="/home/projects/sflphone"
PACKAGING_RESULT_DIR=${ROOT_DIR}/packages-${TAG}
STATUS="OK"
if [ "$1" -ne 0 ]; then
STATUS="ERROR"
fi
echo
echo "Send notification emails"
echo
MAIL_SUBJECT="[ ${TAG} ] SFLphone Automatic Build System : ${STATUS}"
if [ "$1" -eq 0 ]; then
echo | mail -s "${MAIL_SUBJECT}" -c emmanuel.milou@savoirfairelinux.com julien.bonjean@savoirfairelinux.com
else
(
for i in ${PACKAGING_RESULT_DIR}/*.log
do
uuencode $i $(basename $i)
done
) | mail -s "${MAIL_SUBJECT}" -c emmanuel.milou@savoirfairelinux.com julien.bonjean@savoirfairelinux.com
fi
exit 0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment