Skip to content

Commit

Permalink
[ADD] Packaging: Debian and CentOS Dockerfiles for nightly builds tests
Browse files Browse the repository at this point in the history
This way we'll be using docker cache to spare dependencies download time.
  • Loading branch information
aab-odoo authored and sle-odoo committed Dec 9, 2014
1 parent a700a11 commit a7ab5a4
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 22 deletions.
49 changes: 49 additions & 0 deletions setup/package.dfcentos
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Please note that this Dockerfile is used for testing nightly builds and should
# not be used to deploy Odoo
FROM centos:centos7
MAINTAINER Odoo S.A. <info@odoo.com>

# Dependencies and postgres
RUN yum install -d 0 -e 0 epel-release -y && \
yum update -d 0 -e 0 -y && \
yum install -d 0 -e 0 \
babel \
libxslt-python \
pychart \
pyparsing \
python-dateutil \
python-decorator \
python-docutils \
python-feedparser \
python-imaging \
python-jinja2 \
python-ldap \
python-lxml \
python-mako \
python-mock \
python-openid \
python-passlib \
python-psutil \
python-psycopg2 \
python-reportlab \
python-requests \
python-simplejson \
python-unittest2 \
python-vobject \
python-werkzeug \
python-yaml \
pytz \
postgresql \
postgresql-server \
postgresql-libs \
postgresql-contrib \
postgresql-devel -y && \
yum clean all

RUN easy_install pyPdf vatnumber pydot psycogreen

# Manual start of postgres
RUN mkdir -p /var/lib/postgres/data
RUN chown -R postgres:postgres /var/lib/postgres/data
RUN su postgres -c "initdb -D /var/lib/postgres/data -E UTF-8"
RUN cp /usr/share/pgsql/postgresql.conf.sample /var/lib/postgres/data/postgresql.conf
70 changes: 70 additions & 0 deletions setup/package.dfdebian
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Please note that this Dockerfile is used for testing nightly builds and should
# not be used to deploy Odoo
FROM debian:stable
MAINTAINER Odoo S.A. <info@odoo.com>

# Change policy-rc.d so that services start automatically once installed
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d

RUN apt-get update && \
apt-get install -y locales && \
rm -rf /var/lib/apt/lists/*

# Reconfigure locales such that postgresql uses UTF-8 encoding
RUN dpkg-reconfigure locales && \
locale-gen C.UTF-8 && \
/usr/sbin/update-locale LANG=C.UTF-8
ENV LC_ALL C.UTF-8

RUN apt-get update -qq && \
apt-get upgrade -qq -y && \
apt-get install \
postgresql \
postgresql-server-dev-all \
postgresql-client \
adduser \
libxml2-dev \
libxslt1-dev \
libldap2-dev \
libsasl2-dev \
libssl-dev \
libjpeg-dev \
python-dev \
python-pip \
build-essential \
python \
python-dateutil \
python-decorator \
python-docutils \
python-feedparser \
python-imaging \
python-jinja2 \
python-ldap \
python-libxslt1 \
python-lxml \
python-mako \
python-mock \
python-openid \
python-passlib \
python-psutil \
python-psycopg2 \
python-pybabel \
python-pychart \
python-pydot \
python-pyparsing \
python-pypdf \
python-reportlab \
python-requests \
python-simplejson \
python-tz \
python-unittest2 \
python-vatnumber \
python-vobject \
python-werkzeug \
python-xlwt \
python-yaml -y && \
rm -rf /var/lib/apt/lists/*

COPY requirements.txt /opt/release/requirements.txt

RUN pip install -r /opt/release/requirements.txt
45 changes: 23 additions & 22 deletions setup/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,15 +298,27 @@ def build_exe(o):
#----------------------------------------------------------
# Stage: testing
#----------------------------------------------------------
def _prepare_testing(o):
if not o.no_tarball or not o.no_debian:
subprocess.call(["mkdir", "docker_debian"], cwd=o.build_dir)
subprocess.call(["cp", "package.dfdebian", os.path.join(o.build_dir, "docker_debian", "Dockerfile")],
cwd=os.path.join(o.odoo_dir, "setup"))
# Use rsync to copy requirements.txt in order to keep original permissions
subprocess.call(["rsync", "-a", "requirements.txt", os.path.join(o.build_dir, "docker_debian")],
cwd=os.path.join(o.odoo_dir))
subprocess.call(["docker", "build", "-t", "odoo-debian-nightly-tests", "."],
cwd=os.path.join(o.build_dir, "docker_debian"))
if not o.no_rpm:
subprocess.call(["mkdir", "docker_centos"], cwd=o.build_dir)
subprocess.call(["cp", "package.dfcentos", os.path.join(o.build_dir, "docker_centos", "Dockerfile")],
cwd=os.path.join(o.odoo_dir, "setup"))
subprocess.call(["docker", "build", "-t", "odoo-centos-nightly-tests", "."],
cwd=os.path.join(o.build_dir, "docker_centos"))

def test_tgz(o):
with docker('debian:stable', o.build_dir, o.pub) as wheezy:
with docker('odoo-debian-nightly-tests', o.build_dir, o.pub) as wheezy:
wheezy.release = 'odoo.tar.gz'
wheezy.system('apt-get update -qq && apt-get upgrade -qq -y')
wheezy.system("apt-get install postgresql python-dev postgresql-server-dev-all python-pip build-essential libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libssl-dev libjpeg-dev -y")
wheezy.system("service postgresql start")
wheezy.system('su postgres -s /bin/bash -c "pg_dropcluster --stop 9.1 main"')
wheezy.system('su postgres -s /bin/bash -c "pg_createcluster --start -e UTF-8 9.1 main"')
wheezy.system('pip install -r /opt/release/requirements.txt')
wheezy.system('/usr/local/bin/pip install /opt/release/%s' % wheezy.release)
wheezy.system("useradd --system --no-create-home odoo")
wheezy.system('su postgres -s /bin/bash -c "createuser -s odoo"')
Expand All @@ -317,32 +329,19 @@ def test_tgz(o):
wheezy.system('su odoo -s /bin/bash -c "odoo.py --addons-path=/usr/local/lib/python2.7/dist-packages/openerp/addons -d mycompany &"')

def test_deb(o):
with docker('debian:stable', o.build_dir, o.pub) as wheezy:
with docker('odoo-debian-nightly-tests', o.build_dir, o.pub) as wheezy:
wheezy.release = '*.deb'
wheezy.system('/usr/bin/apt-get update -qq && /usr/bin/apt-get upgrade -qq -y')
wheezy.system("apt-get install postgresql -y")
wheezy.system("service postgresql start")
wheezy.system('su postgres -s /bin/bash -c "pg_dropcluster --stop 9.1 main"')
wheezy.system('su postgres -s /bin/bash -c "pg_createcluster --start -e UTF-8 9.1 main"')
wheezy.system('su postgres -s /bin/bash -c "createdb mycompany"')
wheezy.system('/usr/bin/dpkg -i /opt/release/%s' % wheezy.release)
wheezy.system('/usr/bin/apt-get install -f -y')
wheezy.system('su odoo -s /bin/bash -c "odoo.py -c /etc/odoo/openerp-server.conf -d mycompany -i base --stop-after-init"')
wheezy.system('su odoo -s /bin/bash -c "odoo.py -c /etc/odoo/openerp-server.conf -d mycompany &"')

def test_rpm(o):
with docker('centos:centos7', o.build_dir, o.pub) as centos7:
with docker('odoo-centos-nightly-tests', o.build_dir, o.pub) as centos7:
centos7.release = 'odoo.noarch.rpm'
# Dependencies
centos7.system('yum install -d 0 -e 0 epel-release -y')
centos7.system('yum update -d 0 -e 0 -y')
# Manual install/start of postgres
centos7.system('yum install -d 0 -e 0 postgresql postgresql-server postgresql-libs postgresql-contrib postgresql-devel -y')
centos7.system('mkdir -p /var/lib/postgres/data')
centos7.system('chown -R postgres:postgres /var/lib/postgres/data')
centos7.system('chmod 0700 /var/lib/postgres/data')
centos7.system('su postgres -c "initdb -D /var/lib/postgres/data -E UTF-8"')
centos7.system('cp /usr/share/pgsql/postgresql.conf.sample /var/lib/postgres/data/postgresql.conf')
# Start postgresql
centos7.system('su postgres -c "/usr/bin/pg_ctl -D /var/lib/postgres/data start"')
centos7.system('sleep 5')
centos7.system('su postgres -c "createdb mycompany"')
Expand Down Expand Up @@ -447,6 +446,8 @@ def options():
def main():
o = options()
_prepare_build_dir(o)
if not o.no_testing:
_prepare_testing(o)
try:
if not o.no_tarball:
build_tgz(o)
Expand Down

0 comments on commit a7ab5a4

Please sign in to comment.