[PATCH 1/4] docker: Move 'docker' directory to 'tools'
Daniel Axtens
dja at axtens.net
Sun Aug 28 14:00:19 AEST 2016
Stephen Finucane <stephenfinucane at hotmail.com> writes:
> ...like the Vagrant scripts (which have been renamed also).
>
> Signed-off-by: Stephen Finucane <stephenfinucane at hotmail.com>
Looks good to me. I haven't checked it because it doesn't apply cleanly
for me, but I like the idea. I don't know if I'm quite in the position
to formally give it an Acked-by yet, but I'm happy to give it a +1 :)
Regards,
Daniel
> ---
> .dockerignore | 2 +-
> Vagrantfile | 2 +-
> docker-compose.yml | 6 +--
> docker/Dockerfile | 46 -----------------------
> docker/bashrc | 5 ---
> docker/db/.dockerignore | 1 -
> docker/db/.gitignore | 1 -
> docker/db/Dockerfile | 10 -----
> docker/entrypoint.sh | 86 -------------------------------------------
> tools/docker/Dockerfile | 46 +++++++++++++++++++++++
> tools/docker/bashrc | 5 +++
> tools/docker/db/.dockerignore | 1 +
> tools/docker/db/.gitignore | 1 +
> tools/docker/db/Dockerfile | 10 +++++
> tools/docker/entrypoint.sh | 86 +++++++++++++++++++++++++++++++++++++++++++
> tools/install/install.sh | 75 -------------------------------------
> tools/vagrant/install.sh | 75 +++++++++++++++++++++++++++++++++++++
> 17 files changed, 229 insertions(+), 229 deletions(-)
> delete mode 100644 docker/Dockerfile
> delete mode 100644 docker/bashrc
> delete mode 100644 docker/db/.dockerignore
> delete mode 100644 docker/db/.gitignore
> delete mode 100644 docker/db/Dockerfile
> delete mode 100755 docker/entrypoint.sh
> create mode 100644 tools/docker/Dockerfile
> create mode 100644 tools/docker/bashrc
> create mode 100644 tools/docker/db/.dockerignore
> create mode 100644 tools/docker/db/.gitignore
> create mode 100644 tools/docker/db/Dockerfile
> create mode 100755 tools/docker/entrypoint.sh
> delete mode 100644 tools/install/install.sh
> create mode 100644 tools/vagrant/install.sh
>
> diff --git a/.dockerignore b/.dockerignore
> index 24473bb..83cfa98 100644
> --- a/.dockerignore
> +++ b/.dockerignore
> @@ -1,3 +1,3 @@
> .vagrant
> -docker/db
> +tools/docker/db
>
> diff --git a/Vagrantfile b/Vagrantfile
> index b316d41..2ddbca0 100644
> --- a/Vagrantfile
> +++ b/Vagrantfile
> @@ -22,5 +22,5 @@ Vagrant.configure(2) do |config|
> # vb.memory = "1024"
> # end
>
> - config.vm.provision :shell, :path => "tools/install/install.sh"
> + config.vm.provision :shell, :path => "tools/vagrant/install.sh"
> end
> diff --git a/docker-compose.yml b/docker-compose.yml
> index 881a72a..7db3486 100644
> --- a/docker-compose.yml
> +++ b/docker-compose.yml
> @@ -5,12 +5,12 @@
> # or upgrade to v2 and use the build-arg to override it.
>
> db:
> - build: docker/db
> + build: tools/docker/db
> volumes:
> - - ./docker/db/data:/var/lib/mysql
> + - ./tools/docker/db/data:/var/lib/mysql
> web:
> build: .
> - dockerfile: ./docker/Dockerfile
> + dockerfile: ./tools/docker/Dockerfile
> command: python3 manage.py runserver 0.0.0.0:8000
> volumes:
> - .:/home/patchwork/patchwork/
> diff --git a/docker/Dockerfile b/docker/Dockerfile
> deleted file mode 100644
> index ea2a8fc..0000000
> --- a/docker/Dockerfile
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -FROM ubuntu
> -
> -ARG UID=1000
> -
> -ENV PROJECT_HOME /home/patchwork/patchwork
> -
> -ENV db_user root
> -ENV db_pass password
> -
> -ENV DJANGO_SETTINGS_MODULE patchwork.settings.dev
> -ENV DEBIAN_FRONTEND noninteractive
> -ENV PYTHONUNBUFFERED 1
> -
> -# System
> -RUN apt-get update -qq && \
> - apt-get install -y --no-install-recommends \
> - python-dev python-pip python-setuptools python-wheel \
> - python3-dev python3-pip python3-setuptools python3-wheel \
> - libmysqlclient-dev mysql-client curl unzip xvfb chromium-chromedriver \
> - chromium-browser build-essential && \
> - ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
> -
> -# User
> -RUN useradd --uid=$UID --create-home patchwork
> -
> -# Python requirements.
> -# If you update requirements, you should rebuild the container.
> -# entrypoint.sh will prompt you to do this.
> -COPY requirements-*.txt /tmp/
> -RUN pip3 install virtualenv tox && \
> - pip3 install -r /tmp/requirements-dev.txt
> -# we deliberately leave the requirements files in tmp so we can
> -# ping the user in entrypoint.sh if the change them!
> -
> -COPY docker/bashrc /tmp/bashrc
> -
> -# we put the code in ~/patchwork rather than ~ so that we
> -# can put in these bashrc snippets without dirtying the
> -# working directory
> -RUN cat /tmp/bashrc >> /home/patchwork/.bashrc
> -
> -COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
> -
> -ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
> -USER patchwork
> -WORKDIR /home/patchwork/patchwork
> diff --git a/docker/bashrc b/docker/bashrc
> deleted file mode 100644
> index eb2ed7d..0000000
> --- a/docker/bashrc
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -# This snippet is appended to ~/.bashrc when the container is created
> -
> -alias runserver='python3 $PROJECT_HOME/manage.py runserver 0.0.0.0:8000'
> -alias createsu='python3 $PROJECT_HOME/manage.py createsuperuser'
> -
> diff --git a/docker/db/.dockerignore b/docker/db/.dockerignore
> deleted file mode 100644
> index 1269488..0000000
> --- a/docker/db/.dockerignore
> +++ /dev/null
> @@ -1 +0,0 @@
> -data
> diff --git a/docker/db/.gitignore b/docker/db/.gitignore
> deleted file mode 100644
> index 60baa9c..0000000
> --- a/docker/db/.gitignore
> +++ /dev/null
> @@ -1 +0,0 @@
> -data/*
> diff --git a/docker/db/Dockerfile b/docker/db/Dockerfile
> deleted file mode 100644
> index 5df9b5a..0000000
> --- a/docker/db/Dockerfile
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -FROM mysql:5.7
> -
> -ENV MYSQL_ROOT_PASSWORD password
> -ENV MYSQL_USER patchwork
> -ENV MYSQL_PASSWORD password
> -
> -# We don't want to use the MYSQL_DATABASE env here because
> -# we want to be able to create the database with UTF-8 explictly.
> -# We also can't load in the data because it's in XML, yay.
> -
> diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
> deleted file mode 100755
> index 8efaada..0000000
> --- a/docker/entrypoint.sh
> +++ /dev/null
> @@ -1,86 +0,0 @@
> -#!/bin/bash
> -set -euo pipefail
> -
> -# functions
> -
> -test_db_connection() {
> - mysqladmin -h $PW_TEST_DB_HOST -u patchwork --password=password ping > /dev/null 2> /dev/null
> -}
> -
> -reset_data() {
> - mysql -u$db_user -p$db_pass -h $PW_TEST_DB_HOST << EOF
> -DROP DATABASE IF EXISTS patchwork;
> -CREATE DATABASE patchwork CHARACTER SET utf8;
> -GRANT ALL ON patchwork.* TO 'patchwork' IDENTIFIED BY 'password';
> -GRANT ALL PRIVILEGES ON test_patchwork.* TO 'patchwork'@'%';
> -FLUSH PRIVILEGES;
> -EOF
> -
> - # load initial data
> - python3 $PROJECT_HOME/manage.py migrate #> /dev/null
> - python3 $PROJECT_HOME/manage.py loaddata default_tags #> /dev/null
> - python3 $PROJECT_HOME/manage.py loaddata default_states #> /dev/null
> - python3 $PROJECT_HOME/manage.py loaddata default_projects #> /dev/null
> -}
> -
> -# the script begins!
> -
> -# check if patchwork is mounted. Checking if we exist is a
> -# very good start!
> -if [ ! -f ~patchwork/patchwork/docker/entrypoint.sh ]; then
> - echo "The patchwork directory doesn't seem to be mounted!"
> - echo "Are you using docker-compose?"
> - echo "If not, you need -v PATH_TO_PATCHWORK:/home/patchwork/patchwork"
> - exit 1
> -fi
> -
> -# check if we need to rebuild because requirements changed
> -for x in /tmp/requirements-*.txt; do
> - if ! cmp $x ~/patchwork/$(basename $x); then
> - echo "A requirements file has changed."
> - echo "Please rebuild the patchwork image:"
> - echo " docker-compose build web"
> - exit 1
> - fi
> -done
> -
> -# check if mysql is connected
> -if ! test_db_connection; then
> - echo "MySQL seems not to be connected, or the patchwork user is broken"
> - echo "MySQL may still be starting. Waiting 5 seconds."
> - sleep 5
> - if ! test_db_connection; then
> - echo "Still cannot connect to MySQL."
> - echo "Maybe you are starting the db for the first time. Waiting 15 seconds."
> - sleep 15
> - if ! test_db_connection; then
> - echo "Still cannot connect to MySQL. Giving up."
> - echo "Are you using docker-compose? If not, have you set up the link correctly?"
> - exit 1
> - fi
> - fi
> -fi
> -
> -# rebuild mysql db
> -# do this on --reset or if the db doesn't exist
> -if [[ "$1" == "--reset" ]]; then
> - shift
> - reset_data
> -elif ! ( echo ';' | mysql -h db -u patchwork -ppassword patchwork 2> /dev/null ); then
> - reset_data
> -fi
> -
> -if [ $# -eq 0 ]; then
> - # we probably ran with --reset and nothing else
> - # just exit cleanly
> - exit 0
> -elif [ "$1" == "--shell" ]; then
> - exec bash
> -elif [ "$1" == "--quick-test" ]; then
> - export PW_SKIP_BROWSER_TESTS=yes
> - python3 manage.py test
> -elif [ "$1" == "--test" ]; then
> - xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
> -else # run whatever CMD is set to
> - $@
> -fi
> diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
> new file mode 100644
> index 0000000..99a03bd
> --- /dev/null
> +++ b/tools/docker/Dockerfile
> @@ -0,0 +1,46 @@
> +FROM ubuntu
> +
> +ARG UID=1000
> +
> +ENV PROJECT_HOME /home/patchwork/patchwork
> +
> +ENV db_user root
> +ENV db_pass password
> +
> +ENV DJANGO_SETTINGS_MODULE patchwork.settings.dev
> +ENV DEBIAN_FRONTEND noninteractive
> +ENV PYTHONUNBUFFERED 1
> +
> +# System
> +RUN apt-get update -qq && \
> + apt-get install -y --no-install-recommends \
> + python-dev python-pip python-setuptools python-wheel \
> + python3-dev python3-pip python3-setuptools python3-wheel \
> + libmysqlclient-dev mysql-client curl unzip xvfb chromium-chromedriver \
> + chromium-browser build-essential && \
> + ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
> +
> +# User
> +RUN useradd --uid=$UID --create-home patchwork
> +
> +# Python requirements.
> +# If you update requirements, you should rebuild the container.
> +# entrypoint.sh will prompt you to do this.
> +COPY requirements-*.txt /tmp/
> +RUN pip3 install virtualenv tox && \
> + pip3 install -r /tmp/requirements-dev.txt
> +# we deliberately leave the requirements files in tmp so we can
> +# ping the user in entrypoint.sh if the change them!
> +
> +COPY tools/docker/bashrc /tmp/bashrc
> +
> +# we put the code in ~/patchwork rather than ~ so that we
> +# can put in these bashrc snippets without dirtying the
> +# working directory
> +RUN cat /tmp/bashrc >> /home/patchwork/.bashrc
> +
> +COPY tools/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
> +
> +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
> +USER patchwork
> +WORKDIR /home/patchwork/patchwork
> diff --git a/tools/docker/bashrc b/tools/docker/bashrc
> new file mode 100644
> index 0000000..eb2ed7d
> --- /dev/null
> +++ b/tools/docker/bashrc
> @@ -0,0 +1,5 @@
> +# This snippet is appended to ~/.bashrc when the container is created
> +
> +alias runserver='python3 $PROJECT_HOME/manage.py runserver 0.0.0.0:8000'
> +alias createsu='python3 $PROJECT_HOME/manage.py createsuperuser'
> +
> diff --git a/tools/docker/db/.dockerignore b/tools/docker/db/.dockerignore
> new file mode 100644
> index 0000000..1269488
> --- /dev/null
> +++ b/tools/docker/db/.dockerignore
> @@ -0,0 +1 @@
> +data
> diff --git a/tools/docker/db/.gitignore b/tools/docker/db/.gitignore
> new file mode 100644
> index 0000000..60baa9c
> --- /dev/null
> +++ b/tools/docker/db/.gitignore
> @@ -0,0 +1 @@
> +data/*
> diff --git a/tools/docker/db/Dockerfile b/tools/docker/db/Dockerfile
> new file mode 100644
> index 0000000..5df9b5a
> --- /dev/null
> +++ b/tools/docker/db/Dockerfile
> @@ -0,0 +1,10 @@
> +FROM mysql:5.7
> +
> +ENV MYSQL_ROOT_PASSWORD password
> +ENV MYSQL_USER patchwork
> +ENV MYSQL_PASSWORD password
> +
> +# We don't want to use the MYSQL_DATABASE env here because
> +# we want to be able to create the database with UTF-8 explictly.
> +# We also can't load in the data because it's in XML, yay.
> +
> diff --git a/tools/docker/entrypoint.sh b/tools/docker/entrypoint.sh
> new file mode 100755
> index 0000000..bad507d
> --- /dev/null
> +++ b/tools/docker/entrypoint.sh
> @@ -0,0 +1,86 @@
> +#!/bin/bash
> +set -euo pipefail
> +
> +# functions
> +
> +test_db_connection() {
> + mysqladmin -h $PW_TEST_DB_HOST -u patchwork --password=password ping > /dev/null 2> /dev/null
> +}
> +
> +reset_data() {
> + mysql -u$db_user -p$db_pass -h $PW_TEST_DB_HOST << EOF
> +DROP DATABASE IF EXISTS patchwork;
> +CREATE DATABASE patchwork CHARACTER SET utf8;
> +GRANT ALL ON patchwork.* TO 'patchwork' IDENTIFIED BY 'password';
> +GRANT ALL PRIVILEGES ON test_patchwork.* TO 'patchwork'@'%';
> +FLUSH PRIVILEGES;
> +EOF
> +
> + # load initial data
> + python3 $PROJECT_HOME/manage.py migrate #> /dev/null
> + python3 $PROJECT_HOME/manage.py loaddata default_tags #> /dev/null
> + python3 $PROJECT_HOME/manage.py loaddata default_states #> /dev/null
> + python3 $PROJECT_HOME/manage.py loaddata default_projects #> /dev/null
> +}
> +
> +# the script begins!
> +
> +# check if patchwork is mounted. Checking if we exist is a
> +# very good start!
> +if [ ! -f ~patchwork/patchwork/tools/docker/entrypoint.sh ]; then
> + echo "The patchwork directory doesn't seem to be mounted!"
> + echo "Are you using docker-compose?"
> + echo "If not, you need -v PATH_TO_PATCHWORK:/home/patchwork/patchwork"
> + exit 1
> +fi
> +
> +# check if we need to rebuild because requirements changed
> +for x in /tmp/requirements-*.txt; do
> + if ! cmp $x ~/patchwork/$(basename $x); then
> + echo "A requirements file has changed."
> + echo "Please rebuild the patchwork image:"
> + echo " docker-compose build web"
> + exit 1
> + fi
> +done
> +
> +# check if mysql is connected
> +if ! test_db_connection; then
> + echo "MySQL seems not to be connected, or the patchwork user is broken"
> + echo "MySQL may still be starting. Waiting 5 seconds."
> + sleep 5
> + if ! test_db_connection; then
> + echo "Still cannot connect to MySQL."
> + echo "Maybe you are starting the db for the first time. Waiting 15 seconds."
> + sleep 15
> + if ! test_db_connection; then
> + echo "Still cannot connect to MySQL. Giving up."
> + echo "Are you using docker-compose? If not, have you set up the link correctly?"
> + exit 1
> + fi
> + fi
> +fi
> +
> +# rebuild mysql db
> +# do this on --reset or if the db doesn't exist
> +if [[ "$1" == "--reset" ]]; then
> + shift
> + reset_data
> +elif ! ( echo ';' | mysql -h db -u patchwork -ppassword patchwork 2> /dev/null ); then
> + reset_data
> +fi
> +
> +if [ $# -eq 0 ]; then
> + # we probably ran with --reset and nothing else
> + # just exit cleanly
> + exit 0
> +elif [ "$1" == "--shell" ]; then
> + exec bash
> +elif [ "$1" == "--quick-test" ]; then
> + export PW_SKIP_BROWSER_TESTS=yes
> + python3 manage.py test
> +elif [ "$1" == "--test" ]; then
> + xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
> +else # run whatever CMD is set to
> + $@
> +fi
> diff --git a/tools/install/install.sh b/tools/install/install.sh
> deleted file mode 100644
> index 3edec85..0000000
> --- a/tools/install/install.sh
> +++ /dev/null
> @@ -1,75 +0,0 @@
> -#!/bin/bash
> -
> -# Script to set up Patchwork on a Vagrant-powered Ubuntu Trusty host
> -
> -echo -e "\n--- Configuring environment ---\n"
> -
> -PROJECT_NAME=patchwork
> -PROJECT_HOME=/vagrant
> -WORKON_HOME=$PROJECT_HOME/.virtualenvs
> -
> -db_user=root
> -db_pass=password
> -
> -export DJANGO_SETTINGS_MODULE=patchwork.settings.dev
> -export DEBIAN_FRONTEND=noninteractive
> -
> -echo "mysql-server mysql-server/root_password password $db_pass" | debconf-set-selections
> -echo "mysql-server mysql-server/root_password_again password $db_pass" | debconf-set-selections
> -
> -echo -e "\n--- Updating packages list ---\n"
> -
> -apt-get update -qq
> -
> -echo -e "\n--- Installing system packages ---\n"
> -
> -apt-get install -y python python3-dev python3-pip mysql-server \
> - libmysqlclient-dev curl > /dev/null
> -
> -echo -e "\n--- Installing Python dependencies ---\n"
> -
> -pip3 -q install virtualenv tox
> -pip3 -q install -r $PROJECT_HOME/requirements-dev.txt
> -
> -echo -e "\n--- Configuring database ---\n"
> -
> -mysql -u$db_user -p$db_pass << EOF
> -DROP DATABASE IF EXISTS patchwork;
> -CREATE DATABASE patchwork CHARACTER SET utf8;
> -GRANT ALL ON patchwork.* TO 'patchwork'@'localhost' IDENTIFIED BY 'password';
> -EOF
> -
> -chmod a+x $PROJECT_HOME/manage.py
> -
> -echo -e "\n--- Loading initial data ---\n"
> -
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py migrate > /dev/null
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> - default_tags > /dev/null
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> - default_states > /dev/null
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> - default_projects > /dev/null
> -
> -echo -e "\n--- Configuring environment ---\n"
> -
> -cat >> /home/vagrant/.bashrc << EOF
> -export DJANGO_SETTINGS_MODULE='patchwork.settings.dev'
> -
> -alias runserver='python3 /vagrant/manage.py runserver 0.0.0.0:8000'
> -alias createsu='python3 /vagrant/manage.py createsuperuser'
> -cd /vagrant
> -EOF
> -
> -echo "Done."
> -echo "You may now log in:"
> -echo " $ vagrant ssh"
> -echo "Once logged in, start the server using the 'runserver' alias:"
> -echo " $ runserver"
> -echo "You may wish to create a superuser for use with the admin console:"
> -echo " $ createsuperuser"
> -echo "For information on the above, and some examples on loading sample date,"
> -echo "please refer to the documentation found in the 'doc' folder."
> -echo "Alternatively, check out the docs online:"
> -echo " https://patchwork.readthedocs.org/en/latest/development/"
> -echo "Happy patchworking."
> diff --git a/tools/vagrant/install.sh b/tools/vagrant/install.sh
> new file mode 100644
> index 0000000..3edec85
> --- /dev/null
> +++ b/tools/vagrant/install.sh
> @@ -0,0 +1,75 @@
> +#!/bin/bash
> +
> +# Script to set up Patchwork on a Vagrant-powered Ubuntu Trusty host
> +
> +echo -e "\n--- Configuring environment ---\n"
> +
> +PROJECT_NAME=patchwork
> +PROJECT_HOME=/vagrant
> +WORKON_HOME=$PROJECT_HOME/.virtualenvs
> +
> +db_user=root
> +db_pass=password
> +
> +export DJANGO_SETTINGS_MODULE=patchwork.settings.dev
> +export DEBIAN_FRONTEND=noninteractive
> +
> +echo "mysql-server mysql-server/root_password password $db_pass" | debconf-set-selections
> +echo "mysql-server mysql-server/root_password_again password $db_pass" | debconf-set-selections
> +
> +echo -e "\n--- Updating packages list ---\n"
> +
> +apt-get update -qq
> +
> +echo -e "\n--- Installing system packages ---\n"
> +
> +apt-get install -y python python3-dev python3-pip mysql-server \
> + libmysqlclient-dev curl > /dev/null
> +
> +echo -e "\n--- Installing Python dependencies ---\n"
> +
> +pip3 -q install virtualenv tox
> +pip3 -q install -r $PROJECT_HOME/requirements-dev.txt
> +
> +echo -e "\n--- Configuring database ---\n"
> +
> +mysql -u$db_user -p$db_pass << EOF
> +DROP DATABASE IF EXISTS patchwork;
> +CREATE DATABASE patchwork CHARACTER SET utf8;
> +GRANT ALL ON patchwork.* TO 'patchwork'@'localhost' IDENTIFIED BY 'password';
> +EOF
> +
> +chmod a+x $PROJECT_HOME/manage.py
> +
> +echo -e "\n--- Loading initial data ---\n"
> +
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py migrate > /dev/null
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> + default_tags > /dev/null
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> + default_states > /dev/null
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> + default_projects > /dev/null
> +
> +echo -e "\n--- Configuring environment ---\n"
> +
> +cat >> /home/vagrant/.bashrc << EOF
> +export DJANGO_SETTINGS_MODULE='patchwork.settings.dev'
> +
> +alias runserver='python3 /vagrant/manage.py runserver 0.0.0.0:8000'
> +alias createsu='python3 /vagrant/manage.py createsuperuser'
> +cd /vagrant
> +EOF
> +
> +echo "Done."
> +echo "You may now log in:"
> +echo " $ vagrant ssh"
> +echo "Once logged in, start the server using the 'runserver' alias:"
> +echo " $ runserver"
> +echo "You may wish to create a superuser for use with the admin console:"
> +echo " $ createsuperuser"
> +echo "For information on the above, and some examples on loading sample date,"
> +echo "please refer to the documentation found in the 'doc' folder."
> +echo "Alternatively, check out the docs online:"
> +echo " https://patchwork.readthedocs.org/en/latest/development/"
> +echo "Happy patchworking."
> --
> 2.7.4
>
> _______________________________________________
> Patchwork mailing list
> Patchwork at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 859 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/patchwork/attachments/20160828/244f3ebc/attachment.sig>
More information about the Patchwork
mailing list