From 5686388219801e7dc359c0cdc155a6d5b1232965 Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Wed, 22 Feb 2017 14:36:41 -0800 Subject: [PATCH 01/15] Added basic Dockerfile --- Dockerfile | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..592904d4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:14.04 + +RUN apt-get update -y && \ + apt-get install -y software-properties-common python-software-properties + +ENV LC_ALL=C.UTF-8 + +# From chef/prereqs/recipes/default.rb +RUN add-apt-repository -y ppa:openaddresses/gdal2 && \ + apt-get update -y && \ + apt-get install -y python3-pip + +# # Watch for compatibility between awscli, botocore, and boto3. +# RUN apt-get install -y libyaml-dev && \ +# pip3 install -U 'awscli == 1.11.50' 'botocore == 1.5.14' + +# From chef/openaddr-prereqs/recipes/default.rb +RUN apt-get install -y python3-cairo libgeos-c1v5=3.5.0-1~trusty1 \ + libgdal20=2.1.0+dfsg-1~trusty2 python3-gdal=2.1.0+dfsg-1~trusty2 \ + python3-pip python3-dev libpq-dev memcached libffi-dev \ + gdal-bin=2.1.0+dfsg-1~trusty2 libgdal-dev=2.1.0+dfsg-1~trusty2 + +# From chef/openaddr/recipes/default.rb +COPY . /usr/local/src/openaddr +RUN cd /usr/local/src/openaddr && \ + pip3 install -U . From 2ab9f0a6ee40df8dfb4f2d0a7e039eef96ab8f6a Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 24 Mar 2017 14:07:03 -0700 Subject: [PATCH 02/15] Added Docker hub push for possible image --- Dockerfile | 8 ++++---- circle.yml | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 592904d4..28cfbd8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN apt-get install -y python3-cairo libgeos-c1v5=3.5.0-1~trusty1 \ python3-pip python3-dev libpq-dev memcached libffi-dev \ gdal-bin=2.1.0+dfsg-1~trusty2 libgdal-dev=2.1.0+dfsg-1~trusty2 -# From chef/openaddr/recipes/default.rb -COPY . /usr/local/src/openaddr -RUN cd /usr/local/src/openaddr && \ - pip3 install -U . +# # From chef/openaddr/recipes/default.rb +# COPY . /usr/local/src/openaddr +# RUN cd /usr/local/src/openaddr && \ +# pip3 install -U . diff --git a/circle.yml b/circle.yml index 3127b853..4d800ec1 100644 --- a/circle.yml +++ b/circle.yml @@ -1,6 +1,8 @@ machine: python: version: 3.4.4 + services: + - docker environment: BOTO_CONFIG: /tmp/nowhere DATABASE_URL: postgres://openaddr:openaddr@localhost/openaddr @@ -30,3 +32,11 @@ dependencies: test: override: - python setup.py test + +deployment: + hub: + branch: [migurski/docker-docker-docker] + commands: + - docker build -t openaddr/machine:`cat openaddr/VERSION` . + - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS + - docker push openaddr/machine:`cat openaddr/VERSION` From a6a4a04e6a48a8947d914e6a89a647d85de9b8da Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 24 Mar 2017 14:48:21 -0700 Subject: [PATCH 03/15] Configured docker-compose for test running Adapts changes from @iandees commits: - https://github.com/openaddresses/machine/commits/6d0f04202e048dcd970119961255a0e95cabeb1b - https://github.com/openaddresses/machine/commits/82d58f47f077db4027c75faa77c5aac3885c425e --- Dockerfile | 30 +++++------------------------- Dockerfile-machine | 26 ++++++++++++++++++++++++++ circle.yml | 31 +++++-------------------------- docker-compose.yml | 11 +++++++++++ openaddr/ci/schema.pgsql | 4 ++-- 5 files changed, 49 insertions(+), 53 deletions(-) create mode 100644 Dockerfile-machine create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile index 28cfbd8f..e5e7277c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,6 @@ -FROM ubuntu:14.04 +FROM openaddr/machine:4.8.3 -RUN apt-get update -y && \ - apt-get install -y software-properties-common python-software-properties - -ENV LC_ALL=C.UTF-8 - -# From chef/prereqs/recipes/default.rb -RUN add-apt-repository -y ppa:openaddresses/gdal2 && \ - apt-get update -y && \ - apt-get install -y python3-pip - -# # Watch for compatibility between awscli, botocore, and boto3. -# RUN apt-get install -y libyaml-dev && \ -# pip3 install -U 'awscli == 1.11.50' 'botocore == 1.5.14' - -# From chef/openaddr-prereqs/recipes/default.rb -RUN apt-get install -y python3-cairo libgeos-c1v5=3.5.0-1~trusty1 \ - libgdal20=2.1.0+dfsg-1~trusty2 python3-gdal=2.1.0+dfsg-1~trusty2 \ - python3-pip python3-dev libpq-dev memcached libffi-dev \ - gdal-bin=2.1.0+dfsg-1~trusty2 libgdal-dev=2.1.0+dfsg-1~trusty2 - -# # From chef/openaddr/recipes/default.rb -# COPY . /usr/local/src/openaddr -# RUN cd /usr/local/src/openaddr && \ -# pip3 install -U . +# From chef/openaddr/recipes/default.rb +COPY . /usr/local/src/openaddr +RUN cd /usr/local/src/openaddr && \ + pip3 install -U . diff --git a/Dockerfile-machine b/Dockerfile-machine new file mode 100644 index 00000000..28cfbd8f --- /dev/null +++ b/Dockerfile-machine @@ -0,0 +1,26 @@ +FROM ubuntu:14.04 + +RUN apt-get update -y && \ + apt-get install -y software-properties-common python-software-properties + +ENV LC_ALL=C.UTF-8 + +# From chef/prereqs/recipes/default.rb +RUN add-apt-repository -y ppa:openaddresses/gdal2 && \ + apt-get update -y && \ + apt-get install -y python3-pip + +# # Watch for compatibility between awscli, botocore, and boto3. +# RUN apt-get install -y libyaml-dev && \ +# pip3 install -U 'awscli == 1.11.50' 'botocore == 1.5.14' + +# From chef/openaddr-prereqs/recipes/default.rb +RUN apt-get install -y python3-cairo libgeos-c1v5=3.5.0-1~trusty1 \ + libgdal20=2.1.0+dfsg-1~trusty2 python3-gdal=2.1.0+dfsg-1~trusty2 \ + python3-pip python3-dev libpq-dev memcached libffi-dev \ + gdal-bin=2.1.0+dfsg-1~trusty2 libgdal-dev=2.1.0+dfsg-1~trusty2 + +# # From chef/openaddr/recipes/default.rb +# COPY . /usr/local/src/openaddr +# RUN cd /usr/local/src/openaddr && \ +# pip3 install -U . diff --git a/circle.yml b/circle.yml index 4d800ec1..f1a59c77 100644 --- a/circle.yml +++ b/circle.yml @@ -1,42 +1,21 @@ machine: - python: - version: 3.4.4 services: - docker - environment: - BOTO_CONFIG: /tmp/nowhere - DATABASE_URL: postgres://openaddr:openaddr@localhost/openaddr dependencies: - pre: - # Remove existing PostGIS and Postgres to make room for our own. - - sudo apt-get autoremove -y postgis* postgresql* override: - # Install Machine globally via Chef recipe, to pick up complete dependencies. - - sudo chef/run.sh prereqs - - sudo chef/run.sh testing - # Determine GDAL library version and install a compatible python binding. - # http://gis.stackexchange.com/questions/28966/python-gdal-package-missing-header-file-when-installing-via-pip - - CPLUS_INCLUDE_PATH=/usr/include/gdal C_INCLUDE_PATH=/usr/include/gdal pip install "GDAL==`gdal-config --version`" - # cairocffi is a drop-in replacement for Pycairo, which is absent from pip. - # http://stackoverflow.com/questions/11491268/install-pycairo-in-virtualenv - # https://pythonhosted.org/cairocffi/ - - pip install cairocffi - # Install Machine for virtualenv, to test with this Python version. - - pip install -U . - # Create necessary database tables. - - openaddr-ci-recreate-db - # Destroy the evidence, so that tests use a setup-installed version of openaddr. - - find openaddr -type f -a ! -name VERSION -delete + - docker build -t openaddr/testing -f Dockerfile . test: override: - - python setup.py test + - docker-compose run machine python3 setup.py test deployment: hub: branch: [migurski/docker-docker-docker] commands: - - docker build -t openaddr/machine:`cat openaddr/VERSION` . + - docker build -f Dockerfile-machine -t openaddr/machine:`cat openaddr/VERSION` . - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS + - docker tag openaddr/machine:`cat openaddr/VERSION` openaddr/machine:latest - docker push openaddr/machine:`cat openaddr/VERSION` + - docker push openaddr/machine:latest diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..cce7750c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +machine: + image: openaddr/testing:latest + environment: + - DATABASE_URL=postgresql://openaddr:openaddr@postgres/openaddr + links: + - postgres +postgres: + image: mdillon/postgis:9.3 + environment: + - POSTGRES_USER=openaddr + - POSTGRES_PASSWORD=openaddr diff --git a/openaddr/ci/schema.pgsql b/openaddr/ci/schema.pgsql index bf2c8831..82d4730a 100644 --- a/openaddr/ci/schema.pgsql +++ b/openaddr/ci/schema.pgsql @@ -99,7 +99,7 @@ CREATE VIEW dashboard_runs AS SELECT round(extract(epoch from datetime_start)::numeric, 3)::text AS tsname FROM sets; -GRANT SELECT ON dashboard_runs TO dashboard; +--GRANT SELECT ON dashboard_runs TO dashboard; CREATE VIEW dashboard_stats AS SELECT round(extract(epoch from s.datetime_start)::numeric, 3)::text AS tsname, @@ -120,4 +120,4 @@ CREATE VIEW dashboard_stats AS AND s.datetime_end IS NOT NULL AND r.state::text != 'null'; -GRANT SELECT ON dashboard_stats TO dashboard; +--GRANT SELECT ON dashboard_stats TO dashboard; From 02f9345c512faadfed4ca8cb6208d01de6633a85 Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 24 Mar 2017 14:57:24 -0700 Subject: [PATCH 04/15] Adjusted docker paths and filenames --- Dockerfile => Dockerfile-testing | 2 +- circle.yml | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) rename Dockerfile => Dockerfile-testing (81%) diff --git a/Dockerfile b/Dockerfile-testing similarity index 81% rename from Dockerfile rename to Dockerfile-testing index e5e7277c..1b14e086 100644 --- a/Dockerfile +++ b/Dockerfile-testing @@ -1,4 +1,4 @@ -FROM openaddr/machine:4.8.3 +FROM openaddr/machine:latest # From chef/openaddr/recipes/default.rb COPY . /usr/local/src/openaddr diff --git a/circle.yml b/circle.yml index f1a59c77..af0d6649 100644 --- a/circle.yml +++ b/circle.yml @@ -3,19 +3,23 @@ machine: - docker dependencies: + pre: + - docker pull openaddr/machine || true override: - - docker build -t openaddr/testing -f Dockerfile . + - docker build -f Dockerfile-machine -t openaddr/machine:latest . + - docker build -f Dockerfile-testing -t openaddr/testing:latest . test: override: - - docker-compose run machine python3 setup.py test + # Postgres needs a little time + - docker-compose up -d && sleep 15 + - docker-compose run machine python3 /usr/local/src/openaddr/test.py deployment: hub: branch: [migurski/docker-docker-docker] commands: - - docker build -f Dockerfile-machine -t openaddr/machine:`cat openaddr/VERSION` . - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - - docker tag openaddr/machine:`cat openaddr/VERSION` openaddr/machine:latest + - docker tag openaddr/machine:latest openaddr/machine:`cat openaddr/VERSION` - docker push openaddr/machine:`cat openaddr/VERSION` - docker push openaddr/machine:latest From 965df2f3a04095a2066355807e491d33c3756f9e Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 24 Mar 2017 15:51:09 -0700 Subject: [PATCH 05/15] Copied Circle config changes to Travis config --- .travis.yml | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/.travis.yml b/.travis.yml index 23ac01ff..27ed6fd3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,11 @@ -language: python sudo: required -dist: trusty -python: - - "3.4" -cache: - apt: true - pip: true -addons: - postgresql: "9.3" +services: + - docker before_install: - # Remove existing PostGIS to make room for our own. - - sudo apt-get remove -y postgis* -install: - # Install Machine globally via Chef recipe, to pick up complete dependencies. - - sudo chef/run.sh prereqs - - sudo chef/run.sh testing - # Determine GDAL library version and install a compatible python binding. - # http://gis.stackexchange.com/questions/28966/python-gdal-package-missing-header-file-when-installing-via-pip - - CPLUS_INCLUDE_PATH=/usr/include/gdal C_INCLUDE_PATH=/usr/include/gdal pip install "GDAL==`gdal-config --version`" - # cairocffi is a drop-in replacement for Pycairo, which is absent from pip. - # http://stackoverflow.com/questions/11491268/install-pycairo-in-virtualenv - # https://pythonhosted.org/cairocffi/ - - pip install cairocffi - # Install Machine for virtualenv, to test with this Python version. - - pip install -U . - # Create necessary database tables. - - openaddr-ci-recreate-db - # Destroy the evidence, so that tests use a setup-installed version of openaddr. - - find openaddr -type f -a ! -name VERSION -delete -env: BOTO_CONFIG=/tmp/nowhere DATABASE_URL=postgres://openaddr:openaddr@localhost/openaddr -script: python setup.py test - + - docker pull openaddr/machine || true + - docker build -f Dockerfile-machine -t openaddr/machine:latest . + - docker build -f Dockerfile-testing -t openaddr/testing:latest . +script: + # Postgres needs a little time + - docker-compose up -d && sleep 15 + - docker-compose run machine python3 /usr/local/src/openaddr/test.py From 540b82455b7ed075259b7e81084858a50ded7d79 Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 24 Mar 2017 16:11:01 -0700 Subject: [PATCH 06/15] Clarified correct unicode normal form --- openaddr/render.py | 2 +- openaddr/tests/__init__.py | 23 ++++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/openaddr/render.py b/openaddr/render.py index ddacfb60..957c2625 100644 --- a/openaddr/render.py +++ b/openaddr/render.py @@ -105,7 +105,7 @@ def iterate_sources_dir(sources_dir): _, ext = splitext(filename.lower()) if ext == '.json': path = relpath(join(dirname, filename), sources_dir) - yield normalize('NFC', path) + yield path # yield normalize('NFC', path) def load_fake_state(sources_dir): ''' diff --git a/openaddr/tests/__init__.py b/openaddr/tests/__init__.py index 36b08297..fb43aa58 100644 --- a/openaddr/tests/__init__.py +++ b/openaddr/tests/__init__.py @@ -34,6 +34,7 @@ from os.path import dirname, join, basename, exists, splitext from contextlib import contextmanager from subprocess import Popen, PIPE +from unicodedata import normalize from threading import Lock if sys.platform != 'win32': @@ -987,19 +988,15 @@ def test_single_fr_paris(self): def test_single_fr_lareunion(self): ''' Test complete process_one.process on data that uses non-UTF8 encoding (issue #136) ''' - # Common encoding of la-réunion uses U+00E9: - # http://www.fileformat.info/info/unicode/char/e9/index.htm - filename_00E9 = b'fr/la-r\xc3\xa9union.json'.decode('utf8') - - # Less-common encoding of la-réunion uses combining character U+0301: - # http://www.fileformat.info/info/unicode/char/0301/index.htm - filename_0301 = b'fr/la-re\xcc\x81union.json'.decode('utf8') - - if os.path.exists(join(self.src_dir, filename_00E9)): - source = join(self.src_dir, filename_00E9) - elif os.path.exists(join(self.src_dir, filename_0301)): - source = join(self.src_dir, filename_0301) - else: + source = None + + for form in ('NFC', 'NFD'): + normalized = normalize(form, u'fr/la-réunion.json') + if os.path.exists(join(self.src_dir, normalized)): + source = join(self.src_dir, normalized) + break + + if source is None: raise Exception('Could not find a usable fr/la-réunion.json') with HTTMock(self.response_content): From a66696595c17347db69cb858c6f8abee70e95336 Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 24 Mar 2017 16:46:33 -0700 Subject: [PATCH 07/15] Renamed Docker openaddr/machine to openaddr/prereqs --- .travis.yml | 4 ++-- Dockerfile-machine => Dockerfile-prereqs | 0 Dockerfile-testing | 2 +- circle.yml | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) rename Dockerfile-machine => Dockerfile-prereqs (100%) diff --git a/.travis.yml b/.travis.yml index 27ed6fd3..db716552 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,8 @@ sudo: required services: - docker before_install: - - docker pull openaddr/machine || true - - docker build -f Dockerfile-machine -t openaddr/machine:latest . + - docker pull openaddr/prereqs || true + - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . - docker build -f Dockerfile-testing -t openaddr/testing:latest . script: # Postgres needs a little time diff --git a/Dockerfile-machine b/Dockerfile-prereqs similarity index 100% rename from Dockerfile-machine rename to Dockerfile-prereqs diff --git a/Dockerfile-testing b/Dockerfile-testing index 1b14e086..abf5a487 100644 --- a/Dockerfile-testing +++ b/Dockerfile-testing @@ -1,4 +1,4 @@ -FROM openaddr/machine:latest +FROM openaddr/prereqs:latest # From chef/openaddr/recipes/default.rb COPY . /usr/local/src/openaddr diff --git a/circle.yml b/circle.yml index af0d6649..e9885269 100644 --- a/circle.yml +++ b/circle.yml @@ -4,9 +4,9 @@ machine: dependencies: pre: - - docker pull openaddr/machine || true + - docker pull openaddr/prereqs || true override: - - docker build -f Dockerfile-machine -t openaddr/machine:latest . + - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . - docker build -f Dockerfile-testing -t openaddr/testing:latest . test: @@ -20,6 +20,6 @@ deployment: branch: [migurski/docker-docker-docker] commands: - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - - docker tag openaddr/machine:latest openaddr/machine:`cat openaddr/VERSION` - - docker push openaddr/machine:`cat openaddr/VERSION` - - docker push openaddr/machine:latest + - docker tag openaddr/prereqs:latest openaddr/prereqs:`cat openaddr/VERSION` + - docker push openaddr/prereqs:`cat openaddr/VERSION` + - docker push openaddr/prereqs:latest From 13430daa017d4be5c6ecdacba8510b17b2888a0c Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 14 Apr 2017 14:56:59 -0700 Subject: [PATCH 08/15] Renamed openaddr/testing Docker image to openaddr/machine and published it --- .travis.yml | 2 +- Dockerfile-testing => Dockerfile-machine | 0 circle.yml | 5 ++++- docker-compose.yml | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) rename Dockerfile-testing => Dockerfile-machine (100%) diff --git a/.travis.yml b/.travis.yml index db716552..f4dcdbb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ services: before_install: - docker pull openaddr/prereqs || true - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . - - docker build -f Dockerfile-testing -t openaddr/testing:latest . + - docker build -f Dockerfile-machine -t openaddr/machine:latest . script: # Postgres needs a little time - docker-compose up -d && sleep 15 diff --git a/Dockerfile-testing b/Dockerfile-machine similarity index 100% rename from Dockerfile-testing rename to Dockerfile-machine diff --git a/circle.yml b/circle.yml index e9885269..417200db 100644 --- a/circle.yml +++ b/circle.yml @@ -7,7 +7,7 @@ dependencies: - docker pull openaddr/prereqs || true override: - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . - - docker build -f Dockerfile-testing -t openaddr/testing:latest . + - docker build -f Dockerfile-machine -t openaddr/machine:latest . test: override: @@ -23,3 +23,6 @@ deployment: - docker tag openaddr/prereqs:latest openaddr/prereqs:`cat openaddr/VERSION` - docker push openaddr/prereqs:`cat openaddr/VERSION` - docker push openaddr/prereqs:latest + - docker tag openaddr/machine:latest openaddr/machine:`cat openaddr/VERSION` + - docker push openaddr/machine:`cat openaddr/VERSION` + - docker push openaddr/machine:latest diff --git a/docker-compose.yml b/docker-compose.yml index cce7750c..444aecc9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,5 @@ machine: - image: openaddr/testing:latest + image: openaddr/machine:latest environment: - DATABASE_URL=postgresql://openaddr:openaddr@postgres/openaddr links: From 20db227649a4c0c72652671daf8af6d485dde10e Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Fri, 14 Apr 2017 16:05:51 -0700 Subject: [PATCH 09/15] Rewrote install docs to reflect Docker usage --- .gitignore | 2 + docs/install.md | 101 ++++++++++++++++++++++++++++++------------------ 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/.gitignore b/.gitignore index 856af55b..ca8835d9 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ venv-hooked-on-sources # PyCharm/JetBrains IDE files .idea +process_one-???????? +work-???????? diff --git a/docs/install.md b/docs/install.md index 57df7d0e..dce60434 100644 --- a/docs/install.md +++ b/docs/install.md @@ -3,52 +3,76 @@ Install This document describes how to install the Machine code for local development, and demonstrates two ways to use it: running a single source and running a complete batch set. If you’re editing a lot of sources and want to do it quickly without waiting for a remote Github-based continuous integration service, you may want to use run single sources locally. If you're working on the queuing and job control portions of Machine code, you may want to run complete batch sets on test data. -Local Development ------------------ - -You can edit a local copy of OpenAddresses code with working tests by installing -everything onto a local virtual machine using [VirtualBox](https://www.virtualbox.org) -and [Vagrant](https://www.vagrantup.com). This process should take about 10-20 -minutes depending on download speed. - -1. Download and install [VirtualBox](https://www.virtualbox.org) and [Vagrant](https://www.vagrantup.com) on your development machine. Both are available as separate installs, or as [part of Homebrew](https://brew.sh). - - Ensure that `VBoxManage` is in your path. If you download [VirtualBox from the website](https://www.virtualbox.org/wiki/Downloads), `VBoxManage` may be located in `/Applications/VirtualBox.app/Contents/MacOS` and you will need to [add it to your shell path](https://kb.iu.edu/d/acar). +Running A Source Locally +------------------------ -2. Clone [OpenAddresses Machine code](https://github.com/openaddresses/machine) from Github. +Run a single source without installing Python or other packages locally +using [OpenAddresses from Docker Hub](https://hub.docker.com/r/openaddr/). -3. From inside the machine folder, prepare the VirtualBox virtual machine with this command: +1. Get the latest OpenAddresses image from Docker Hub: + + docker pull openaddr/machine:latest - vagrant up +2. Download a source from [OpenAdresses/openaddresses on Github](https://github.com/openaddresses/openaddresses). [Berkeley, California](https://results.openaddresses.io/sources/us/ca/berkeley) is a small, reliable source that’s good to test with: - You’ll see a few notices scroll by to know that this process is working: + curl -o us-ca-berkeley.json \ + -L https://github.com/openaddresses/openaddresses/raw/master/sources/us/ca/berkeley.json - ==> default: Importing base box 'ubuntu/trusty64'... - ==> default: Setting the name of the VM: OpenAddresses-Machine_default_1487786156783_59682 - ==> default: Waiting for machine to boot. This may take a few minutes... - ==> default: Machine booted and ready! +3. Using Docker, run `openaddr-process-one` to process the source: - This last part can take ~5 minutes: + docker run --volume `pwd`:/vol openaddr/machine \ + openaddr-process-one -v vol/us-ca-berkeley.json vol - ==> default: Mounting shared folders... - default: /home/vagrant/machine => /Users/jrandom/Sites/OpenAddresses-Machine - ==> default: Running provisioner: shell... - default: Running: inline script +4. Look in the directory `us-ca-berkeley` for address output, logs, and other files. -4. Connect to the virtual machine with this command: - - vagrant ssh - -5. Run the complete test suite to verify that it works: - - cd machine - python3 test.py +Local Development +----------------- -You should now be able to make changes and test them. The virtual machine’s -`/home/vagrant/machine` directory is a mount of your host machine’s current directory, so you -will be able to edit files in your normal text editor. Be sure to use `pip3` and -`python3` when running, or [set up an optional quick local virtual environment](http://docs.python-guide.org/en/latest/dev/virtualenvs/) -with Python 3 and the [`--editable` flag](https://pip.pypa.io/en/stable/reference/pip_install/#install-editable). +You can edit a local copy of OpenAddresses code with working tests by installing +everything onto a local virtual machine using [Docker](https://www.docker.com). +This process should take 5-10 minutes depending on download speed. + +1. Download and install [Docker](https://www.docker.com). On Mac OS X, + use [Docker for Mac](https://docs.docker.com/docker-for-mac/). On Ubuntu, + run `apt-get install docker.io` or follow [Docker’s own directions](https://docs.docker.com/engine/installation/linux/ubuntu/). + +2. Build the pre-requisites image, which includes binary packages like GDAL. + + docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . + + You’ll see notices like this scroll by so you know that it’s working: + + Sending build context to Docker daemon 650.7 MB + Step 1/5 : FROM ubuntu:14.04 + ---> 302fa07d8117 + Step 2/5 : RUN apt-get update -y && apt-get install -y software-properties-common python-software-properties + ---> Running in 45a617062a5f + Ign http://archive.ubuntu.com trusty InRelease + Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB] + Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB] + Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B] + (etc.) + +3. Connect to the pre-requisites image `openaddr/prereqs` with a bash shell + and the current working directory mapped to `/vol`: + + docker run -it --volume `pwd`:/vol openaddr/prereqs bash + +4. Build the OpenAddresses packages using + [virtualenv](https://packaging.python.org/installing/#creating-virtual-environments) + and [pip](https://packaging.python.org/installing/#use-pip-for-installing). + The `-e` flag to `pip install` insures that your local copy of OpenAddresses + is used, so that you can test changes to the code made in your own editor: + + pip install virtualenv + virtualenv -p python3 --system-site-packages venv + source venv/bin/activate + pip install -e file:///vol + +You should now be able to make changes and test them. +If you exit the Docker container, changes made in step 4 above will be lost. +Use [Docker commit](https://docs.docker.com/engine/reference/commandline/commit/) +or similar if you need to save them. Running A First Source ---------------------- @@ -57,7 +81,8 @@ You can process a single individual source of OpenAddresses data with the comman 1. Download a source from [OpenAdresses/openaddresses on Github](https://github.com/openaddresses/openaddresses). [Berkeley, California](https://results.openaddresses.io/sources/us/ca/berkeley) is a small, reliable source that’s good to test with: - curl -L https://github.com/openaddresses/openaddresses/raw/master/sources/us/ca/berkeley.json -o us-ca-berkeley.json + curl -o us-ca-berkeley.json \ + -L https://github.com/openaddresses/openaddresses/raw/master/sources/us/ca/berkeley.json 2. Run `openaddr-process-one` to process the source: From 0b9c5561b7176a14e8f43c15b9b1359e0246fbdb Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Mon, 17 Apr 2017 14:21:53 -0700 Subject: [PATCH 10/15] Rewrote local development instructions with docker-compose --- docker-compose.yml | 2 ++ docs/install.md | 37 +++++++++++++++++-------------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 444aecc9..f28abfcf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,8 @@ machine: - DATABASE_URL=postgresql://openaddr:openaddr@postgres/openaddr links: - postgres + volumes: + - .:/vol postgres: image: mdillon/postgis:9.3 environment: diff --git a/docs/install.md b/docs/install.md index dce60434..f561e99e 100644 --- a/docs/install.md +++ b/docs/install.md @@ -36,41 +36,38 @@ This process should take 5-10 minutes depending on download speed. use [Docker for Mac](https://docs.docker.com/docker-for-mac/). On Ubuntu, run `apt-get install docker.io` or follow [Docker’s own directions](https://docs.docker.com/engine/installation/linux/ubuntu/). -2. Build the pre-requisites image, which includes binary packages like GDAL. +2. Build the required images, which includes binary packages like GDAL and Postgres. - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . + docker-compose build - You’ll see notices like this scroll by so you know that it’s working: +3. Run everything in detached mode: - Sending build context to Docker daemon 650.7 MB - Step 1/5 : FROM ubuntu:14.04 - ---> 302fa07d8117 - Step 2/5 : RUN apt-get update -y && apt-get install -y software-properties-common python-software-properties - ---> Running in 45a617062a5f - Ign http://archive.ubuntu.com trusty InRelease - Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB] - Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB] - Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B] - (etc.) - -3. Connect to the pre-requisites image `openaddr/prereqs` with a bash shell + docker-compose up -d + + Run `docker ps -a` to see output like this: + + IMAGE STATUS NAMES + ... openaddr/machine:latest ... Exited (0) 44 seconds ago ... openaddressesmachine_machine_1 + mdillon/postgis:9.3 Up 45 seconds openaddressesmachine_postgres_1 + +4. Connect to the OpenAddresses image `openaddr/machine` with a bash shell and the current working directory mapped to `/vol`: - docker run -it --volume `pwd`:/vol openaddr/prereqs bash + docker-compose run machine bash -4. Build the OpenAddresses packages using +5. Build the OpenAddresses packages using [virtualenv](https://packaging.python.org/installing/#creating-virtual-environments) and [pip](https://packaging.python.org/installing/#use-pip-for-installing). The `-e` flag to `pip install` insures that your local copy of OpenAddresses is used, so that you can test changes to the code made in your own editor: - pip install virtualenv + pip3 install virtualenv virtualenv -p python3 --system-site-packages venv source venv/bin/activate - pip install -e file:///vol + pip3 install -e file:///vol You should now be able to make changes and test them. -If you exit the Docker container, changes made in step 4 above will be lost. +If you exit the Docker container, changes made in step 5 above will be lost. Use [Docker commit](https://docs.docker.com/engine/reference/commandline/commit/) or similar if you need to save them. From be0c163ceac5d91bf9aaa2901803ba84edde6777 Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Mon, 17 Apr 2017 17:19:38 -0700 Subject: [PATCH 11/15] Started pulling from second task queue for Docker branch --- openaddr/ci/worker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openaddr/ci/worker.py b/openaddr/ci/worker.py index 36749b25..4d72f4d2 100755 --- a/openaddr/ci/worker.py +++ b/openaddr/ci/worker.py @@ -15,7 +15,7 @@ from . import ( db_connect, db_queue, db_queue, pop_task_from_taskqueue, - DONE_QUEUE, TASK_QUEUE, DUE_QUEUE, setup_logger, HEARTBEAT_QUEUE, + DONE_QUEUE, TASK_QUEUE_2, DUE_QUEUE, setup_logger, HEARTBEAT_QUEUE, log_function_errors ) @@ -58,7 +58,7 @@ def main(): try: with db_connect(args.database_url) as conn: - task_Q = db_queue(conn, TASK_QUEUE) + task_Q = db_queue(conn, TASK_QUEUE_2) done_Q = db_queue(conn, DONE_QUEUE) due_Q = db_queue(conn, DUE_QUEUE) beat_Q = db_queue(conn, HEARTBEAT_QUEUE) From c40e2b5ba60a19e817d3100aede37a63682764db Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Mon, 17 Apr 2017 20:41:44 -0700 Subject: [PATCH 12/15] Added Tippecanoe to Docker prereqs --- Dockerfile-prereqs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Dockerfile-prereqs b/Dockerfile-prereqs index 28cfbd8f..db8e5370 100644 --- a/Dockerfile-prereqs +++ b/Dockerfile-prereqs @@ -20,6 +20,14 @@ RUN apt-get install -y python3-cairo libgeos-c1v5=3.5.0-1~trusty1 \ python3-pip python3-dev libpq-dev memcached libffi-dev \ gdal-bin=2.1.0+dfsg-1~trusty2 libgdal-dev=2.1.0+dfsg-1~trusty2 +# From chef/tippecanoe/recipes/default.rb +RUN apt-get install -y git build-essential libsqlite3-dev protobuf-compiler libprotobuf-dev && \ + git clone -b 1.15.1 https://github.com/mapbox/tippecanoe.git /tmp/tippecanoe && \ + cd /tmp/tippecanoe && \ + make && \ + PREFIX=/usr/local make install && \ + rm -rf /tmp/tippecanoe + # # From chef/openaddr/recipes/default.rb # COPY . /usr/local/src/openaddr # RUN cd /usr/local/src/openaddr && \ From 675e3a4babd86f5946029981ff55b9cb0b33282e Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Wed, 19 Apr 2017 15:26:07 -0700 Subject: [PATCH 13/15] Tagged major and minor versions of Docker images instead of "latest" --- Dockerfile-machine | 2 +- circle.yml | 14 +++++++------- docker-compose.yml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile-machine b/Dockerfile-machine index abf5a487..bee4d434 100644 --- a/Dockerfile-machine +++ b/Dockerfile-machine @@ -1,4 +1,4 @@ -FROM openaddr/prereqs:latest +FROM openaddr/prereqs:4.x # From chef/openaddr/recipes/default.rb COPY . /usr/local/src/openaddr diff --git a/circle.yml b/circle.yml index 417200db..76e8cc79 100644 --- a/circle.yml +++ b/circle.yml @@ -4,10 +4,10 @@ machine: dependencies: pre: - - docker pull openaddr/prereqs || true + - docker pull openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x || true override: - - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . - - docker build -f Dockerfile-machine -t openaddr/machine:latest . + - docker build -f Dockerfile-prereqs -t openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x . + - docker build -f Dockerfile-machine -t openaddr/machine:`cut -f1 -d. openaddr/VERSION`.x . test: override: @@ -20,9 +20,9 @@ deployment: branch: [migurski/docker-docker-docker] commands: - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - - docker tag openaddr/prereqs:latest openaddr/prereqs:`cat openaddr/VERSION` + - docker tag openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x openaddr/prereqs:`cat openaddr/VERSION` + - docker tag openaddr/machine:`cut -f1 -d. openaddr/VERSION`.x openaddr/machine:`cat openaddr/VERSION` + - docker push openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x + - docker push openaddr/machine:`cut -f1 -d. openaddr/VERSION`.x - docker push openaddr/prereqs:`cat openaddr/VERSION` - - docker push openaddr/prereqs:latest - - docker tag openaddr/machine:latest openaddr/machine:`cat openaddr/VERSION` - docker push openaddr/machine:`cat openaddr/VERSION` - - docker push openaddr/machine:latest diff --git a/docker-compose.yml b/docker-compose.yml index f28abfcf..ca97e256 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,5 @@ machine: - image: openaddr/machine:latest + image: openaddr/machine:4.x environment: - DATABASE_URL=postgresql://openaddr:openaddr@postgres/openaddr links: From aeaaa7ac2a552b7419098ff1c5581079aa18674f Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Wed, 19 Apr 2017 21:01:54 -0700 Subject: [PATCH 14/15] Updated branches in preparation for merge and new release --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index 76e8cc79..7067930b 100644 --- a/circle.yml +++ b/circle.yml @@ -17,7 +17,7 @@ test: deployment: hub: - branch: [migurski/docker-docker-docker] + branch: [master, migurski/docker-docker-docker] commands: - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - docker tag openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x openaddr/prereqs:`cat openaddr/VERSION` From da3fe6bf37ec3ee820a9de4acf0442ce52c9f1d7 Mon Sep 17 00:00:00 2001 From: Michal Migurski Date: Wed, 19 Apr 2017 21:14:11 -0700 Subject: [PATCH 15/15] Updated Travis config to reflect versioned Docker tags --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f4dcdbb1..f149a313 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,9 @@ sudo: required services: - docker before_install: - - docker pull openaddr/prereqs || true - - docker build -f Dockerfile-prereqs -t openaddr/prereqs:latest . - - docker build -f Dockerfile-machine -t openaddr/machine:latest . + - docker pull openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x || true + - docker build -f Dockerfile-prereqs -t openaddr/prereqs:`cut -f1 -d. openaddr/VERSION`.x . + - docker build -f Dockerfile-machine -t openaddr/machine:`cut -f1 -d. openaddr/VERSION`.x . script: # Postgres needs a little time - docker-compose up -d && sleep 15