diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 3b4dcfd1fc..1f56323e16 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -3,7 +3,7 @@ To check before create a new issue: * I am using the latest minor version of the major version (`x.y.last`). * I create one issue per subject (do not put more than one thing in the same issue). -For commiters: +For committers: * I have assigned a green label. * I have assigned a milestone. diff --git a/.gitignore b/.gitignore index 1a3eff70a9..4cefaa1ad2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ /npm-packages /Dockerfile /commons/tests.yaml -/commons/.build/ /commons/c2cgeoportal_commons.egg-info/ /geoportal/package.json /geoportal/tests/functional/test.ini @@ -18,17 +17,12 @@ /geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/locale/ /geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static-ngeo/images/ /geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static-ngeo/js/apps/ -/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static-ngeo/components/ /geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_Makefile_tmpl.mk /geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_create_template/ +/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/geoportal/+package+_geoportal/static-ngeo/js/apps/ /geoportal/c2cgeoportal_geoportal/scaffolds/nondockerupdate/CONST_create_template/ /geoportal/c2cgeoportal_geoportal.egg-info/ /admin/tests.ini -/admin/.build/ -/admin/.pytest_cache/ -/admin/package-lock.json -/admin/package.json -/admin/node_modules/ /admin/npm-packages /admin/c2cgeoportal_admin/locale/ /admin/c2cgeoportal_admin.egg-info/ diff --git a/Jenkinsfile b/Jenkinsfile index e353c26ca7..b79320e3f9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -39,7 +39,7 @@ dockerBuild { sh 'docker run --name geomapfish-db --env=POSTGRES_USER=www-data --env=POSTGRES_PASSWORD=www-data --env=POSTGRES_DB=geomapfish --publish=5432:5432 --detach camptocamp/geomapfish-test-db' sh 'travis/test-upgrade-convert.sh init ${HOME}/workspace' } - stage('Test') { + stage('Tests') { checkout scm parallel 'Lint and test c2cgeoportal': { sh './docker-run travis/status.sh' @@ -99,23 +99,24 @@ dockerBuild { sh 'cat ${HOME}/workspace/testgeomapfish/testdb/*.sql' sh 'cat ${HOME}/workspace/testgeomapfish/geoportal/config.yaml' withCredentials([[ - $class : 'UsernamePasswordMultiBinding', - credentialsId : 'dockerhub', - usernameVariable: 'USERNAME', - passwordVariable: 'PASSWORD' - ]]) { + $class: 'UsernamePasswordMultiBinding', + credentialsId: 'dockerhub', + usernameVariable: 'USERNAME', + passwordVariable: 'PASSWORD' + ]]) { try { sh 'docker login -u "$USERNAME" -p "$PASSWORD"' sh '(cd ${HOME}/workspace/testgeomapfish/; docker-compose up --force-recreate -d)' sh '(cd ${HOME}/workspace/testgeomapfish/; docker-compose exec -T geoportal wait-for-db)' sh './docker-run travis/waitwsgi http://`netstat --route --numeric|grep ^0.0.0.0|awk \'{print($2)}\'`:8080/' for (path in [ - 'c2c/health_check', - 'c2c/health_check?max_level=9', - 'c2c/health_check?checks=check_collector', - 'layers/test/values/type enum', - 'admin/layertree', - 'admin/layertree/children' + 'c2c/health_check', + 'c2c/health_check?max_level=9', + 'c2c/health_check?checks=check_collector', +// TODO: activate gunicon logs to debug this test +// 'layers/test/values/type enum', + 'admin/layertree', + 'admin/layertree/children' ]) { def start_lines = [:] ['db', 'external-db', 'print', 'mapserver', 'geoportal'].each { service -> diff --git a/Makefile b/Makefile index c38c0d82d5..c113e52797 100644 --- a/Makefile +++ b/Makefile @@ -64,8 +64,10 @@ ADMIN_SRC_FILES = $(shell ls -1 commons/c2cgeoportal_commons/models/*.py) \ $(shell find admin/c2cgeoportal_admin/templates/widgets -name "*.pt" -print) APPS += desktop mobile +APPS_PACKAGE_PATH_NONDOCKER = geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/geoportal/+package+_geoportal +APPS_HTML_FILES = $(addprefix $(APPS_PACKAGE_PATH_NONDOCKER)/static-ngeo/js/apps/, $(addsuffix .html.ejs_tmpl, $(APPS))) APPS_PACKAGE_PATH = geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal -APPS_HTML_FILES = $(addprefix $(APPS_PACKAGE_PATH)/static-ngeo/js/apps/, $(addsuffix .html.ejs_tmpl, $(APPS))) +APPS_HTML_FILES += $(addprefix $(APPS_PACKAGE_PATH)/static-ngeo/js/apps/, $(addsuffix .html.ejs_tmpl, $(APPS))) APPS_JS_FILES = $(addprefix $(APPS_PACKAGE_PATH)/static-ngeo/js/apps/Controller, $(addsuffix .js_tmpl, $(APPS))) APPS_ALT += desktop_alt mobile_alt oeedit oeview APPS_PACKAGE_PATH_ALT = geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_create_template/geoportal/+package+_geoportal/ @@ -251,12 +253,14 @@ quote: .PHONY: spell spell: - codespell --ignore-words=spell-ignore-words.txt geoportal/setup.py \ - $(shell find commons/c2cgeoportal_commons -name '*.py' -print) \ - $(shell find geoportal/c2cgeoportal_geoportal -name static -prune -or -name '*.py' -print) \ - $(shell find admin/c2cgeoportal_admin -name '*.py' -print) + codespell --quiet-level=2 --check-filenames --ignore-words=spell-ignore-words.txt \ + $(shell find -name node_modules -prune -or -name .build -prune -or -name .git -prune -or -name ngeo -prune \ + -or -name '__pycache__' -prune -or -name _build -prune \ + -or \( -type f -and -not -name '*.png' -and -not -name '*.mo' -and -not -name '*.po*' \ + -and -not -name 'CONST_Makefile_tmpl' \) -print) -YAML_FILES ?= $(shell find -name node_modules -prune -or -name .build -prune -or -name ngeo -prune -or -name functional -prune -or \( -name "*.yml" -or -name "*.yaml" \) -print) + +YAML_FILES ?= $(shell find -name ngeo -prune -or -name functional -prune -or \( -name "*.yml" -or -name "*.yaml" \) -print) .PHONY: yamllint yamllint: yamllint --strict --config-file=yamllint.yaml -s $(YAML_FILES) @@ -334,6 +338,11 @@ $(APPS_PACKAGE_PATH)/static-ngeo/js/apps/%.html.ejs_tmpl: ngeo/contribs/gmf/apps mkdir --parent $(dir $@) import-ngeo-apps --html $* $< $@ +$(APPS_PACKAGE_PATH_NONDOCKER)/static-ngeo/js/apps/%.html.ejs_tmpl: ngeo/contribs/gmf/apps/%/index.html.ejs + $(PRERULE_CMD) + mkdir --parent $(dir $@) + import-ngeo-apps --html --non-docker $* $< $@ + $(APPS_PACKAGE_PATH)/static-ngeo/js/apps/Controller%.js_tmpl: ngeo/contribs/gmf/apps/%/Controller.js $(PRERULE_CMD) mkdir --parent $(dir $@) @@ -369,6 +378,7 @@ npm-packages: ngeo package.json coveralls gaze jasmine-core jsdoc jsdom karma karma-chrome-launcher karma-coverage \ karma-jasmine karma-sourcemap-loader karma-webpack \ --src=ngeo/package.json --src=package.json --dst=$@ + echo googshift eslint-plugin-googshift >> $@ admin/npm-packages: ngeo package.json $(PRERULE_CMD) diff --git a/admin/c2cgeoportal_admin/__init__.py b/admin/c2cgeoportal_admin/__init__.py index 693539f5c0..782941167d 100644 --- a/admin/c2cgeoportal_admin/__init__.py +++ b/admin/c2cgeoportal_admin/__init__.py @@ -56,8 +56,6 @@ def main(_, **settings): config.add_subscriber(add_renderer_globals, BeforeRender) config.add_subscriber(add_localizer, NewRequest) - config.add_tween('c2cgeoportal_admin.cache_tween.CacheTween') - generate_mappers() health_check = HealthCheck(config) @@ -93,9 +91,5 @@ def includeme(config: Configurator): config.include('pyramid_tm') config.add_translation_dirs('c2cgeoportal_admin:locale') - import c2cgeoportal_admin.cache_tween - c2cgeoportal_admin.cache_tween.route_prefix = config.route_prefix - config.add_tween('c2cgeoportal_admin.cache_tween.CacheTween') - with PermissionSetter(config): config.scan() diff --git a/admin/c2cgeoportal_admin/routes.py b/admin/c2cgeoportal_admin/routes.py index 18317febcf..429a086c3c 100644 --- a/admin/c2cgeoportal_admin/routes.py +++ b/admin/c2cgeoportal_admin/routes.py @@ -9,7 +9,9 @@ def includeme(config): '{}:node_modules'.format(config.root_package.__name__)) path = None for path_ in [ + os.path.join(os.path.dirname(__file__), '..', '..', 'admin', 'node_modules'), os.path.join(os.path.dirname(__file__), '..', '..', 'node_modules'), + os.path.join(os.path.dirname(__file__), '..', 'admin', 'node_modules'), os.path.join(os.path.dirname(__file__), '..', 'node_modules'), '/usr/lib/node_modules/', ]: diff --git a/admin/requirements.txt b/admin/requirements.txt index 4bc862d556..7ae35f6172 100644 --- a/admin/requirements.txt +++ b/admin/requirements.txt @@ -1,4 +1,4 @@ -c2cgeoform==2.0.dev20180527 +c2cgeoform #c2cgeoportal-commons # pip -> Could not find a version that satisfies the requirement c2cgeoportal-commons c2cwsgiutils colander diff --git a/admin/c2cgeoportal_admin/cache_tween.py b/commons/c2cgeoportal_commons/alembic/static/53d671b17b20_add_timezone_on_datetime_fields.py similarity index 59% rename from admin/c2cgeoportal_admin/cache_tween.py rename to commons/c2cgeoportal_commons/alembic/static/53d671b17b20_add_timezone_on_datetime_fields.py index 4ad588500f..b51cb8f697 100644 --- a/admin/c2cgeoportal_admin/cache_tween.py +++ b/commons/c2cgeoportal_commons/alembic/static/53d671b17b20_add_timezone_on_datetime_fields.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2011-2018, Camptocamp SA +# Copyright (c) 2017-2018, Camptocamp SA # All rights reserved. # Redistribution and use in source and binary forms, with or without @@ -27,19 +27,40 @@ # of the authors and should not be interpreted as representing official policies, # either expressed or implied, of the FreeBSD Project. -route_prefix = None +"""Add timezone on datetime fields +Revision ID: 53d671b17b20 +Revises: 1857owc78a07 +Create Date: 2018-05-29 08:44:17.675988 +""" -class CacheTween: +from alembic import op +from c2cgeoportal_commons.config import config - def __init__(self, handler, registry): - del registry - self.handler = handler +# revision identifiers, used by Alembic. +revision = '53d671b17b20' +down_revision = '1857owc78a07' +branch_labels = None +depends_on = None - def __call__(self, request): - # Never cache admin pages - response = self.handler(request) - if route_prefix is None or request.path_info.startswith('/' + route_prefix): - response.cache_control.no_cache = True - response.cache_control.max_age = 0 - return response + +def upgrade(): + staticschema = config['schema_static'] + + op.execute(""" +SET TIME ZONE 'UTC'; +ALTER TABLE {staticschema}.user ALTER COLUMN last_login TYPE timestamp with time zone; +SET TIME ZONE LOCAL; +ALTER TABLE {staticschema}.user ALTER COLUMN expire_on TYPE timestamp with time zone; +""".format(staticschema=staticschema)) + + +def downgrade(): + staticschema = config['schema_static'] + + op.execute(""" +SET TIME ZONE 'UTC'; +ALTER TABLE {staticschema}.user ALTER COLUMN last_login TYPE timestamp without time zone; +SET TIME ZONE LOCAL; +ALTER TABLE {staticschema}.user ALTER COLUMN expire_on TYPE timestamp without time zone; +""".format(staticschema=staticschema)) diff --git a/commons/c2cgeoportal_commons/models/static.py b/commons/c2cgeoportal_commons/models/static.py index 09361ef696..c1794525fc 100644 --- a/commons/c2cgeoportal_commons/models/static.py +++ b/commons/c2cgeoportal_commons/models/static.py @@ -31,6 +31,7 @@ import logging from datetime import datetime from hashlib import sha1 +import pytz from typing import Optional from sqlalchemy import Column @@ -198,10 +199,10 @@ def validate_password(self, passwd: str) -> bool: return False def expired(self) -> bool: - return self.expire_on is not None and self.expire_on < datetime.utcnow() + return self.expire_on is not None and self.expire_on < datetime.now(pytz.utc) def update_last_login(self) -> None: - self.last_login = datetime.utcnow() + self.last_login = datetime.now(pytz.utc) def __unicode__(self) -> str: return self.username or '' # pragma: no cover diff --git a/doc/developer/debugging.rst b/doc/developer/debugging.rst index efe8dbaeb3..6d55b83d79 100644 --- a/doc/developer/debugging.rst +++ b/doc/developer/debugging.rst @@ -46,7 +46,7 @@ Sometime more information are available by using this command: You may also activate MapServer's debug mode and set environment variable of the MapServer container ``MS_DEBUGLEVEL`` to ``5`` (most verbose level, default is 0). -`More informations `_ +`More information `_ PostgreSQL ---------- @@ -67,19 +67,45 @@ Logs are available in the ``/var/log/postgresql/postgresql-9.*-main.log`` file. Makefile -------- -You can run `DEBUG=TRUE make ...` to have some debug message. +To obtain additional debug messages, you can rebuild your project as follows: + +.. prompt:: bash + + DEBUG=TRUE make ... + Actually we display the running rule and why she is running (dependence update). Docker ------ -Edit a file in a running apache WSGI container +Run gunicorn to reload on modifications of Python files +....................................................... + +Add the following environment variable to the geoportal container: + +``GUNICORN_PARAMS="-b :80 --worker-class gthread --threads 1 --workers 1 --reload"`` + +Do a graceful restart of the running geoportal container +........................................................ .. prompt:: bash - docker exec -ti _wsgi_1 bash - vi ... - kill -s USR1 1 # graceful + docker-compose exec geoportal bash + kill -s HUP `ps aux|grep gunicorn|head --lines=1|awk '{print $2}'` # graceful + +Mount c2cgeoportal in the container +................................... + +Add in the ``docker-compose.yaml`` file, in the ``geoportal`` service the following lines: + +.. code:: yaml + + services: + geoportal: + volumes: + - /geoportal/c2cgeoportal_commons:/opt/c2cgeoportal_geoportal/c2cgeoportal_commons + - /geoportal/c2cgeoportal_geoportal:/opt/c2cgeoportal_geoportal/c2cgeoportal_geoportal + - /geoportal/c2cgeoportal_admin:/opt/c2cgeoportal_geoportal/c2cgeoportal_admin Performance or network error diff --git a/doc/developer/webservices.rst b/doc/developer/webservices.rst index 4f6830a581..8e5b555231 100644 --- a/doc/developer/webservices.rst +++ b/doc/developer/webservices.rst @@ -240,10 +240,10 @@ Result HTTP code: * 200 Success: Success. * 400 Bad request: When something wrong. -User informations ------------------ +User information +---------------- -Used to get the user informations. +Used to get the user information. URL: ``.../loginuser`` @@ -251,7 +251,7 @@ Result HTTP code: * 200 Success: Success. -Annoymous JSON result +Anonymous JSON result ~~~~~~~~~~~~~~~~~~~~~ .. code:: json diff --git a/doc/integrator/fulltext_search.rst b/doc/integrator/fulltext_search.rst index 8e3c2c3893..8d6f25d1bb 100644 --- a/doc/integrator/fulltext_search.rst +++ b/doc/integrator/fulltext_search.rst @@ -37,7 +37,7 @@ Also make sure that the db user can ``SELECT`` in the ``tsearch`` table: sudo -u postgres psql -c 'GRANT SELECT ON TABLE .tsearch TO "";' -with ````, and ```` substituded as appropriately. +with ````, and ```` substituted as appropriately. Populate the full-text search table ----------------------------------- diff --git a/doc/integrator/security.rst b/doc/integrator/security.rst index 3c07ae232c..95bba9ce27 100644 --- a/doc/integrator/security.rst +++ b/doc/integrator/security.rst @@ -80,11 +80,11 @@ Services: - login - error -Authorized referers -------------------- +Authorized referrers +-------------------- To mitigate `CSRF `_ -attacks, the server validates the referer against a list of authorized referers. +attacks, the server validates the referer against a list of authorized referrers. By default, only the pages coming from the server are allowed. You can change that list by adding an ``authorized_referers`` list in your diff --git a/docker/build/bin/eval-templates b/docker/build/bin/eval-templates new file mode 100755 index 0000000000..187bf2300c --- /dev/null +++ b/docker/build/bin/eval-templates @@ -0,0 +1,8 @@ +#!/bin/bash -e + +find /app/ -name '*.tmpl' -print | while read file +do + envsubst < ${file} > ${file%.tmpl} +done + +exec "$@" diff --git a/docker/build/bin/import-ngeo-apps b/docker/build/bin/import-ngeo-apps index 847f186faf..3be38068db 100755 --- a/docker/build/bin/import-ngeo-apps +++ b/docker/build/bin/import-ngeo-apps @@ -87,6 +87,7 @@ def main(): parser.add_argument('--html', action="store_true", help="Import the html template") parser.add_argument('--js', action="store_true", help="Import the javascript controller") + parser.add_argument('--non-docker', action="store_false", dest="docker", help="Import for non Docker") parser.add_argument('interface', metavar='INTERFACE', help="The interface we import") parser.add_argument('src', metavar='SRC', help="The ngeo source file") parser.add_argument('dst', metavar='DST', help="The destination file") @@ -116,7 +117,9 @@ def main(): data = _sub( re.escape(''.format(args.interface)), - ''.format(interface=args.interface), + ''.format( + entry_point='${htmlWebpackPlugin.options.vars.entry_point}' if args.docker else '', + interface=args.interface), data ) diff --git a/docker/build/requirements.txt b/docker/build/requirements.txt index 4aad34596f..f438086760 100644 --- a/docker/build/requirements.txt +++ b/docker/build/requirements.txt @@ -4,7 +4,7 @@ Babel==2.6.0 # i18n boto3==1.7.28 # Tile generation bottle==0.12.13 # geoportal c2c.cssmin==0.7.dev6 # CGXP build -c2c.template==2.0.9 # geoportal +c2c.template==2.1.0.dev1 # geoportal c2cgeoform==2.0.dev20180527 # commons codacy-coverage==1.3.11 # Codacy send report codespell==1.13.0 # Lint @@ -65,7 +65,7 @@ Sphinx==1.7.5 # doc sphinx-prompt==1.0.0 # doc SQLAlchemy==1.2.8 tilecloud==0.5.1 # Tile generation -tilecloud-chain==1.5.0 # Tile generation +tilecloud-chain==1.5.2 # Tile generation transaction==2.2.1 # commons, geoportal transifex-client==0.12.5 # Makefile, rq.filter: <=0.12.5 translationstring==1.3 # admin diff --git a/geoportal/c2cgeoportal_geoportal/__init__.py b/geoportal/c2cgeoportal_geoportal/__init__.py index 4ed6a0ad22..679a37f995 100644 --- a/geoportal/c2cgeoportal_geoportal/__init__.py +++ b/geoportal/c2cgeoportal_geoportal/__init__.py @@ -492,6 +492,13 @@ def call_hook(settings, name, *args, **kwargs): function(*args, **kwargs) +def notfound(request): + return { + "message": request.path_info, + "status": 404, + } + + def includeme(config): """ This function returns a Pyramid WSGI application. @@ -499,6 +506,8 @@ def includeme(config): settings = config.get_settings() + config.add_notfound_view(notfound, append_slash=True, renderer='json', http_cache=0) + config.include("c2cgeoportal_commons") call_hook(settings, "after_settings", settings) diff --git a/geoportal/c2cgeoportal_geoportal/lib/lingua_extractor.py b/geoportal/c2cgeoportal_geoportal/lib/lingua_extractor.py index 8f6a003810..c68fc59d91 100644 --- a/geoportal/c2cgeoportal_geoportal/lib/lingua_extractor.py +++ b/geoportal/c2cgeoportal_geoportal/lib/lingua_extractor.py @@ -208,7 +208,7 @@ class GeoMapfishConfigExtractor(Extractor): # pragma: no cover GeoMapfish config extractor (raster layers, and print templates) """ - extensions = [".yaml"] + extensions = [".yaml", ".tmpl"] def __call__(self, filename, options): init_region({"backend": "dogpile.cache.memory"}) diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/__init__.py b/geoportal/c2cgeoportal_geoportal/scaffolds/__init__.py index 6258b9fb6c..bccf98ac60 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/__init__.py +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/__init__.py @@ -148,6 +148,17 @@ def _epsg2bbox(srid): return None +def fix_executables(output_dir, patterns, in_const_create_template=False): + if os.name == 'posix': + for pattern in patterns: + if in_const_create_template: + pattern = os.path.join(output_dir, "CONST_create_template", pattern) + else: + pattern = os.path.join(output_dir, pattern) + for file_ in glob.glob(pattern): + subprocess.check_call(["chmod", "+x", file_]) + + class TemplateCreate(BaseTemplate): # pragma: no cover _template_dir = "create" summary = "Template used to create a c2cgeoportal project" @@ -157,10 +168,7 @@ def post(self, command, output_dir, vars_): Overrides the base template class to print the next step. """ - if os.name == 'posix': - for file_ in ("docker-run", "docker-compose-run"): - dest = os.path.join(output_dir, file_) - subprocess.check_call(["chmod", "+x", dest]) + fix_executables(output_dir, ("docker-run", "docker-compose-run", "bin/*")) self.out("\nContinue with:") self.out(colorize( @@ -198,10 +206,8 @@ def post(self, command, output_dir, vars_): after a successful scaffolding rendering. """ - if os.name == 'posix': - for file_ in ("docker-run", "docker-compose-run"): - dest = os.path.join(output_dir, "CONST_create_template", file_) - subprocess.check_call(["chmod", "+x", dest]) + fix_executables(output_dir, ("docker-run", "docker-compose-run", "bin/*"), True) + self.out(colorize("\nWelcome to c2cgeoportal!", GREEN)) return BaseTemplate.post(self, command, output_dir, vars_) @@ -216,13 +222,8 @@ def pre(self, command, output_dir, vars_): return super().pre(command, output_dir, vars_) def post(self, command, output_dir, vars_): - if os.name == 'posix': - for glob_ in ( - "get-pip-dependencies", - "deploy/hooks/*", - ): - for file_ in glob.glob(os.path.join(output_dir, glob_)): - subprocess.check_call(["chmod", "+x", file_]) + fix_executables(output_dir, ("get-pip-dependencies", "deploy/hooks/*")) + return super().post(command, output_dir, vars_) @@ -236,12 +237,6 @@ def pre(self, command, output_dir, vars_): return BaseTemplate.pre(self, command, output_dir, vars_) def post(self, command, output_dir, vars_): - if os.name == 'posix': - for glob_ in ( - "get-pip-dependencies", - "deploy/hooks/*", - ): - for file_ in glob.glob(os.path.join(output_dir, "CONST_create_template", glob_)): - subprocess.check_call(["chmod", "+x", file_]) + fix_executables(output_dir, ("get-pip-dependencies", "deploy/hooks/*"), True) return BaseTemplate.post(self, command, output_dir, vars_) diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore b/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore index decb2c2e47..afb08d0b96 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore @@ -1,4 +1,5 @@ * +!bin/ !front/ !mapserver/ !qgisserver/ diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl index 184d57b5dd..571344ece4 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl @@ -11,7 +11,7 @@ __pycache__/ /testdb/13-alembic-static.sql /mapcache/ /tilegeneration/config.yaml -/print/print-apps/{{package}}/config.yaml +/print/print-apps/{{package}}/config.yaml.mako /mapserver/mapserver.map.tmpl /mapserver/*.map.tmpl /mapserver/tinyows.xml @@ -30,5 +30,6 @@ __pycache__/ /geoportal/{{package}}_geoportal/static-ngeo/fonts/gmf-icons.* /geoportal/{{package}}_geoportal/static-ngeo/fonts/fontawesome-webfont.* /geoportal/{{package}}_geoportal/static/build/ +/node_modules /webpack.apps.js /.upgrade.yaml diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+travis.yml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+travis.yml_tmpl index ae6768a416..29f1c0cdb3 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+travis.yml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/+dot+travis.yml_tmpl @@ -8,4 +8,4 @@ addons: - python3-netifaces script: - - ./docker-run make --makefile={{project}}.mk checks + - ./docker-run make --makefile={{package}}.mk checks diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/Dockerfile b/geoportal/c2cgeoportal_geoportal/scaffolds/create/Dockerfile index 87019e07d6..f4bf2b9d23 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/Dockerfile +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/Dockerfile @@ -1,6 +1,14 @@ -FROM tianon/true:latest +FROM debian:jessie LABEL maintainer Camptocamp "info@camptocamp.com" +RUN \ + apt-get update && \ + apt-get install --assume-yes --no-install-recommends gettext-base && \ + apt-get clean && \ + rm --recursive --force /var/lib/apt/lists/* + +COPY bin/* /usr/bin/ + COPY mapserver /etc/mapserver VOLUME /etc/mapserver @@ -10,11 +18,13 @@ VOLUME /etc/mapserver COPY mapcache /mapcache VOLUME /mapcache -COPY tilegeneration /tilecloudchain -VOLUME /tilecloudchain +COPY tilegeneration /etc/tilecloudchain +VOLUME /etc/tilecloudchain COPY print/print-apps /usr/local/tomcat/webapps/ROOT/print-apps VOLUME /usr/local/tomcat/webapps/ROOT/print-apps COPY front /etc/haproxy VOLUME /etc/haproxy + +ENTRYPOINT [ "/usr/bin/eval-templates" ] diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/README.rst_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/README.rst_tmpl index 3e2e68606a..b32a02c11c 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/README.rst_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/README.rst_tmpl @@ -19,6 +19,13 @@ Build ./docker-run make --makefile= build +If you want to work on your own instance, create a ${USER}.mk file like that: + +.. script:: + + INSTANCE=myUserName + include Makefile + Run --- @@ -26,5 +33,11 @@ Run docker-compose up +If the project is configured with a global front (for being able the run more than one instance at the same +time: + +.. script:: + + (cd global-front; docker-compose -p global up --build) .. Feel free to add project-specific things. diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/bin/eval-templates b/geoportal/c2cgeoportal_geoportal/scaffolds/create/bin/eval-templates new file mode 100755 index 0000000000..728d58115f --- /dev/null +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/bin/eval-templates @@ -0,0 +1,11 @@ +#!/bin/bash -e + +export VISIBLE_WEB_HOST_RE_ESCAPED=`python -c "print(__import__('re').escape('${VISIBLE_WEB_HOST}'))"` +export VISIBLE_ENTRY_POINT_RE_ESCAPED=`python -c "print(__import__('re').escape('${VISIBLE_ENTRY_POINT}'))"` + +find /etc /mapcache /usr/local/tomcat/webapps/ -name '*.tmpl' -print | while read file +do + envsubst < ${file} > ${file%.tmpl} +done + +exec "$@" diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/docker-compose.yaml.mako b/geoportal/c2cgeoportal_geoportal/scaffolds/create/docker-compose.yaml.mako index 7c77a0339c..394e26cfa3 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/docker-compose.yaml.mako +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/docker-compose.yaml.mako @@ -7,6 +7,7 @@ version: '2' services: config: image: ${docker_base}-config:${docker_tag} +${service_defaults('config')}\ print: image: camptocamp/mapfish_print:3.12.1 @@ -18,27 +19,30 @@ ${service_defaults('print', 8080)}\ image: camptocamp/mapserver:7.0 volumes_from: - config:rw + volumes: + - /var/sig:/var/sig:ro + entrypoint: [] ${service_defaults('mapserver', 80)}\ ## qgisserver: -## image: camptocamp/geomapfish-qgisserver +## image: camptocamp/qgis-server:latest ## volumes_from: ## - config:ro -##${service_defaults('mapserver', 80)} +##${service_defaults('qgisserver', 80)} mapcache: image: camptocamp/mapcache:1.6 volumes_from: - config:ro -${service_defaults('mapserver', 80)}\ +${service_defaults('mapcache', 80)}\ memcached: image: memcached:1.5 -${service_defaults('mapserver', 11211)}\ +${service_defaults('memcached', 11211)}\ redis: image: redis:3.2 -${service_defaults('mapserver', 6379)}\ +${service_defaults('redis', 6379)}\ tilecloudchain: image: camptocamp/tilecloud-chain:1.5.0 @@ -48,6 +52,8 @@ ${service_defaults('mapserver', 80)}\ geoportal: image: ${docker_base}-geoportal:${docker_tag} + volumes: + - /var/sig:/var/sig:ro ${service_defaults('geoportal', 80)}\ front: @@ -57,4 +63,19 @@ ${service_defaults('geoportal', 80)}\ volumes: - /dev/log:/dev/log:rw command: ["haproxy", "-f", "/etc/haproxy"] -${service_defaults('front', 80, True)} +${service_defaults('front', 80, not docker_global_front)} +%if docker_global_front: + networks: + default: {} + global: + aliases: + - ${instance} +%endif + +%if docker_global_front: +networks: + default: {} + global: + external: + name: global_default +%endif diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/front/haproxy.cfg b/geoportal/c2cgeoportal_geoportal/scaffolds/create/front/haproxy.cfg.tmpl similarity index 93% rename from geoportal/c2cgeoportal_geoportal/scaffolds/create/front/haproxy.cfg rename to geoportal/c2cgeoportal_geoportal/scaffolds/create/front/haproxy.cfg.tmpl index c7fc49800c..3f3bad4b55 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/front/haproxy.cfg +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/front/haproxy.cfg.tmpl @@ -57,7 +57,7 @@ backend geoportal backend tilecloudchain - option httpchk GET /tiles HTTP/1.0\r\nUser-Agent:\ healthcheck + option httpchk GET ${VISIBLE_ENTRY_POINT}tiles HTTP/1.0\r\nUser-Agent:\ healthcheck http-check expect status 200 server linked tilecloudchain:80 resolvers dns #check @@ -69,7 +69,7 @@ frontend plain http-request set-var(req.path) path # If the path starts with /tiles/, use the tilecloudchain backend - acl is_tiles var(req.path) -m beg /tiles/ + acl is_tiles var(req.path) -m beg ${VISIBLE_ENTRY_POINT}tiles/ use_backend tilecloudchain if is_tiles # Redirect all to geoportal by default diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl index 24a28cfe5d..1de7eaac11 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl @@ -1,7 +1,8 @@ * +!alembic.ini !config.yaml -!{{package}}_geoportal +!eval_templates.sh +!production.ini !setup.cfg !setup.py -!production.ini -!alembic.ini +!{{package}}_geoportal diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/Dockerfile.mako b/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/Dockerfile.mako index e04bc6189f..6ace9218b4 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/Dockerfile.mako +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/geoportal/Dockerfile.mako @@ -1,15 +1,6 @@ FROM camptocamp/geomapfish-build:${geomapfish_version} LABEL maintainer Camptocamp "info@camptocamp.com" -COPY . /app -WORKDIR /app - -ARG GIT_HASH - -RUN pip install --disable-pip-version-check --no-cache-dir --no-deps --editable=/app/ && \ - python -m compileall -q /app/${package}_geoportal -x /app/${package}_geoportal/static.* && \ - c2cwsgiutils_genversion.py $GIT_HASH - ENV NODE_PATH=/usr/lib/node_modules \ LOG_LEVEL=INFO \ GUNICORN_ACCESS_LOG_LEVEL=INFO \ @@ -26,5 +17,14 @@ ENV NODE_PATH=/usr/lib/node_modules \ MAPSERVER_URL=http://mapserver/ \ PRINT_URL=http://print:8080/print/ -ENTRYPOINT [] +WORKDIR /app +COPY . /app + +ARG GIT_HASH + +RUN pip install --disable-pip-version-check --no-cache-dir --no-deps --editable=/app/ && \ + python -m compileall -q /app/${package}_geoportal -x /app/${package}_geoportal/static.* && \ + c2cwsgiutils_genversion.py $GIT_HASH + +ENTRYPOINT [ "/usr/bin/eval-templates" ] CMD ["c2cwsgiutils_run"] diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/.dockerignore b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/.dockerignore new file mode 100644 index 0000000000..8452664436 --- /dev/null +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/.dockerignore @@ -0,0 +1,2 @@ +docker-compose.yaml +Dockerfile diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/Dockerfile b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/Dockerfile index b34da46176..00b7fa4ef3 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/Dockerfile +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/Dockerfile @@ -1,5 +1,5 @@ FROM tianon/true:latest LABEL maintainer Camptocamp "info@camptocamp.com" -COPY . /etc/nginx/cond.d -VOLUME /etc/nginx/cond.d +COPY . /etc/nginx/conf.d +VOLUME /etc/nginx/conf.d diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/docker-compose.yaml b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/docker-compose.yaml new file mode 100644 index 0000000000..9b7322409e --- /dev/null +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/docker-compose.yaml @@ -0,0 +1,13 @@ +--- +version: '2' +services: + config: + build: . + image: global-config + + front: + image: nginx:1.14 + volumes_from: + - config:ro + ports: + - 80:80 diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/main.conf b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/main.conf index e36d97e042..d26049dccc 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/main.conf +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/global-front/main.conf @@ -1,21 +1,23 @@ server { listen 80; - server_name localhost; + resolver 127.0.0.11 valid=10s; - location /preprod { - proxy_pass http://localhost:8180/preprod; + location ~ ^/_(?[\w_-]+)(?/.*)?$ { + proxy_pass http://$instance/_$instance$path$is_args$args; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port; + proxy_set_header X-Forwarded-Port $server_port; } + location / { - proxy_pass http://localhost:8280/; + set $backend "http://main"; + proxy_pass $backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port; + proxy_set_header X-Forwarded-Port $server_port; } } diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml.mako b/geoportal/c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml.tmpl similarity index 93% rename from geoportal/c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml.mako rename to geoportal/c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml.tmpl index a4a38c94cf..de8018d049 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml.mako +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml.tmpl @@ -49,7 +49,7 @@ templates: httpProcessors: - !mapUri mapping: - (https?)://${__import__('re').escape(host)}/(.*): "http://127.0.0.1/$2" + (https?)://${VISIBLE_WEB_HOST_RE_ESCAPED}/(.*): "http://${GEOPORTAL_INTERNAL_URL}/$2" - !forwardHeaders matchers: - !localMatch {} @@ -63,9 +63,9 @@ templates: - !restrictUris matchers: - !localMatch - pathRegex: '${entry_point}mapserv_proxy' + pathRegex: '${VISIBLE_ENTRY_POINT_RE_ESCAPED}mapserv_proxy' - !localMatch - pathRegex: '${entry_point}tiles/.*' + pathRegex: '${VISIBLE_ENTRY_POINT_RE_ESCAPED}tiles/.*' - !localMatch reject: true - !ipMatch diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/project.yaml.mako_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/project.yaml.mako_tmpl index f230bf3af4..c17d184747 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/project.yaml.mako_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/project.yaml.mako_tmpl @@ -1,7 +1,7 @@ --- project_folder: {{project}} project_package: ${package} -checker_url: https://${host}/c2c/health_check?max_level=9 +checker_url: https://172.17.0.1:8480/docker/c2c/health_check?max_level=9 managed_files: [] template_vars: package: {{package}} diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt b/geoportal/c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt new file mode 100644 index 0000000000..2fbe53211b --- /dev/null +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt @@ -0,0 +1 @@ +oder diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.mako_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.mako_tmpl index 703c375d52..e910691a9c 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.mako_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.mako_tmpl @@ -14,13 +14,7 @@ caches: folder: /var/sig/tiles wmtscapabilities_file: ${wmtscapabilities_path} # for GetCapabilities - http_url: https://%(host)s/tiles/ - hosts: - - wmts0. - - wmts1. - - wmts2. - - wmts3. - - wmts4. + http_url: ${web_protocol}://${host}${entry_point}tiles/ s3: type: s3 bucket: tiles diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/vars.yaml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/vars.yaml_tmpl index 78519e372c..80444744e1 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/vars.yaml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/vars.yaml_tmpl @@ -271,7 +271,15 @@ update_paths: - check_collector.disabled - check_collector.hosts - checker.fulltextsearch + - checker.lang + - checker.phantomjs + - checker.routes + - checker.themes - checker.print + - docker_services.config.environment + - docker_services.db.environment + - docker_services.geoportal.environment + - docker_services.tilecloudchain.environment - fulltextsearch - interfaces_theme - shortener diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/create/webpack.apps.js.mako_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/create/webpack.apps.js.mako_tmpl index 5d033a1f4d..5773f553f8 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/create/webpack.apps.js.mako_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/create/webpack.apps.js.mako_tmpl @@ -25,6 +25,9 @@ plugins.push( chunksSortMode: 'manual', filename: name + '.html', chunks: [name], + vars: { + entry_point: '${entry_point}', + }, }) ); @@ -49,18 +52,25 @@ const projectRule = { }; const rules = [ - projectRule + projectRule, ]; +const noDevServer = process.env['NO_DEV_SERVER'] != 'FALSE'; +devServer = dev && !noDevServer; module.exports = { output: { path: path.resolve(__dirname, 'geoportal/{{package}}_geoportal/static-ngeo/build/'), - publicPath: dev ? '/${instance}/dev/' : '${entry_point}static-ngeo/UNUSED_CACHE_VERSION/build/' + publicPath: devServer ? '/${instance}/dev/' : '${entry_point}static-ngeo/UNUSED_CACHE_VERSION/build/' }, entry: entry, module: { rules }, plugins: plugins, + resolve: { + alias: { + {{package}}: path.resolve(__dirname, 'geoportal/{{package}}_geoportal/static-ngeo/js'), + } + } }; diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/+dot+gitignore_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/+dot+gitignore_tmpl index b9603e1975..baa7b4d9e9 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/+dot+gitignore_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/+dot+gitignore_tmpl @@ -6,6 +6,7 @@ __pycache__/ /project.yaml /docker-compose.yaml /docker-compose-build.yaml +/admin/ /alembic.yaml /testdb/11-schemas.sql /testdb/12-alembic.sql @@ -25,6 +26,7 @@ __pycache__/ /print/WEB-INF/lib/*.jar /print/WEB-INF/classes/logback.xml /print/print-apps/{{package}}/config.yaml +/print/print-apps/{{package}}/config.yaml.tmpl /mapserver/*.map /mapserver/*.map.tmpl.mako /mapserver/tinyows.xml diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/apache/wsgi.conf.mako b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/apache/wsgi.conf.mako index dd82353caa..bfbfb30559 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/apache/wsgi.conf.mako +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/apache/wsgi.conf.mako @@ -32,11 +32,13 @@ RewriteRule ^${apache_entry_point}dev/(${'|'.join([re.escape(e) for e in interfa RewriteRule ^${apache_entry_point}dev/(${'|'.join([re.escape(e) for e in interfaces])}).html/theme/.* http://127.0.0.1:8081/${instanceid}/dev/$1.html [P] RewriteRule ^${apache_entry_point}dev/ http://127.0.0.1:${dev_server_port}$0 [P] -RewriteRule ^${apache_entry_point}theme/(.+)$ /${instanceid}/wsgi/theme/$1 [PT] - RewriteRule ^${apache_entry_point}dynamic.js$ /${instanceid}/wsgi/dynamic.js [R] RewriteRule ^${apache_entry_point}(${'|'.join([re.escape(e) for e in interfaces])}|theme)/dynamic.js$ /${instanceid}/wsgi/dynamic.js [R] RewriteRule ^${apache_entry_point}(${'|'.join([re.escape(e) for e in interfaces])})/theme/dynamic.js$ /${instanceid}/wsgi/dynamic.js [R] +RewriteRule ^${apache_entry_point}wsgi/theme/dynamic.js$ /${instanceid}/wsgi/dynamic.js [R] +RewriteRule ^${apache_entry_point}wsgi/(${'|'.join([re.escape(e) for e in interfaces])})/theme/dynamic.js$ /${instanceid}/wsgi/dynamic.js [R] + +RewriteRule ^${apache_entry_point}theme/(.+)$ /${instanceid}/wsgi/theme/$1 [PT] % for interface in interfaces: RewriteRule ^${apache_entry_point}${interface}/?$ /${instanceid}/wsgi/${interface} [PT] diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-finalise.mk_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-finalise.mk_tmpl index cd14d63320..7ca7d9215d 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-finalise.mk_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-finalise.mk_tmpl @@ -162,11 +162,11 @@ else $(PYTHON) -m venv --system-site-packages .build/venv endif ifeq ($(OPERATING_SYSTEM), WINDOWS) - $(PYTHON_BIN)/python -m pip install `./get-pip-dependencies c2cgeoportal Shapely` - $(PYTHON_BIN)/python -m pip install wheels/Shapely-1.5.13-cp27-none-win32.whl + $(PYTHON_BIN)/python -m pip install `./get-pip-dependencies c2cgeoportal-commons c2cgeoportal-geoportal c2cgeoportal-admin Shapely Fiona rasterio GDAL flake8-mypy mypy` else $(PYTHON_BIN)/python -m pip install `./get-pip-dependencies c2cgeoportal-commons c2cgeoportal-geoportal c2cgeoportal-admin GDAL flake8-mypy mypy` endif + $(PYTHON_BIN)/python -m pip install -r requirements.txt rm --force --recursive c2cgeoportal_commons c2cgeoportal_geoportal c2cgeoportal_admin $(DOCKER_RUN) cp -r /opt/c2cgeoportal_commons c2cgeoportal_commons $(DOCKER_RUN) cp -r /opt/c2cgeoportal_geoportal c2cgeoportal_geoportal @@ -174,9 +174,10 @@ endif $(DOCKER_RUN) cp /opt/npm-packages . $(PYTHON_BIN)/python -m pip install --editable=c2cgeoportal_commons --editable=c2cgeoportal_geoportal --editable=c2cgeoportal_admin $(PYTHON_BIN)/python -m pip install --editable=geoportal - $(PYTHON_BIN)/python -m compileall -q .build/venv || true - $(PYTHON_BIN)/python -m compileall -q c2cgeoportal_* - $(PYTHON_BIN)/python -m compileall -q geoportal/$(PACKAGE)_geoportal -x geoportal/$(PACKAGE)_geoportal/static.* - rm --force --recursive node_modules - cat npm-packages | xargs npm install + $(PYTHON_BIN)/python -m compileall -q .build/venv 2&>/dev/null|| true + $(PYTHON_BIN)/python -m compileall -q c2cgeoportal_* 2&>/dev/null || true + $(PYTHON_BIN)/python -m compileall -q geoportal/$(PACKAGE)_geoportal -x geoportal/$(PACKAGE)_geoportal/static.* 2&>/dev/null || true + rm --force --recursive admin/node_modules + mkdir --parent admin + cat npm-packages | xargs npm install --prefix ./admin touch $@ diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-override.mk b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-override.mk index 03b5249e2a..67c70e6b66 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-override.mk +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/nondocker-override.mk @@ -13,6 +13,14 @@ MAPSERVER_URL ?= http://mapserver/ export MAPSERVER_URL PRINT_URL ?= http://print:8080/print/ export PRINT_URL +PRINT_CONFIG_FILE ?= print/print-apps/$(PACKAGE)/config.yaml + +VISIBLE_WEB_PROTOCOL ?= https +VISIBLE_WEB_PORT ?= 443 +VISIBLE_ENTRY_POINT ?= / +export VISIBLE_WEB_HOST +export VISIBLE_WEB_PROTOCOL +export VISIBLE_ENTRY_POINT ADDITIONAL_MAKO_FILES += $(shell find print $(FIND_OPTS) -name "*.mako" -print) \ $(shell find apache $(FIND_OPTS) -name "*.mako" -print) \ diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/requirements.txt b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/requirements.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockerupdate/+dot+upgrade.yaml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockerupdate/+dot+upgrade.yaml_tmpl index 90b60d1359..0636740fee 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockerupdate/+dot+upgrade.yaml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockerupdate/+dot+upgrade.yaml_tmpl @@ -125,12 +125,6 @@ files_to_move: - from: mapserver/mapserver.map.tmpl.mako to: mapserver/mapserver.map.mako version: 2.3 - - from: Dockerfile - to: geoportal/Dockerfile.mako - version: 2.3 - - from: .dockerignore - to: geoportal/.dockerignore - version: 2.3 - from: jsbuild to: geoportal/jsbuild version: 2.3 @@ -164,3 +158,9 @@ files_to_move: - from: geoportal/{{package}}_geoportal/static-ngeo/components/contextualdata/contextualdata.html to: geoportal/{{package}}_geoportal/static-ngeo/js/apps/contextualdata.html version: 2.3 + - from: print/print-apps/{{package}}/config.yaml.tmpl + to: print/print-apps/{{package}}/config.yaml.mako + version: 2.3 + - from: front/haproxy.cfg + to: front/haproxy.cfg.tmpl + version: 2.3 diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl index 26efab158f..b75b14b6af 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl @@ -112,6 +112,9 @@ files_to_remove: - file: development.ini.mako version: 2.3 from: nondocker + - file: requirements.txt + version: 2.3 + from: nondocker - file: {{package}}.egg-info version: 2.3 from: 2.2 @@ -162,12 +165,6 @@ files_to_move: - from: mapserver/demo.map.mako to: mapserver/demo.map.tmpl.mako version: 2.3 - - from: Dockerfile - to: geoportal/Dockerfile.mako - version: 2.3 - - from: .dockerignore - to: geoportal/.dockerignore - version: 2.3 - from: jsbuild to: geoportal/jsbuild version: 2.3 @@ -198,3 +195,9 @@ files_to_move: - from: geoportal/{{package}}_geoportal/static-ngeo/components/contextualdata/contextualdata.html to: geoportal/{{package}}_geoportal/static-ngeo/js/apps/contextualdata.html version: 2.3 + - from: print/print-apps/{{package}}/config.yaml.mako + to: print/print-apps/{{package}}/config.yaml.tmpl + version: 2.3 + - from: front/haproxy.cfg + to: front/haproxy.cfg.tmpl + version: 2.3 diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST.mako_inc b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST.mako_inc index 723cbafd2f..445f007324 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST.mako_inc +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST.mako_inc @@ -1,4 +1,4 @@ -<%def name="service_defaults(service, inner_port, port_required=False)">\ +<%def name="service_defaults(service, inner_port=None, port_required=False)">\ % if port_required or 'port' in docker_services.get(service, {}): ports: - ${docker_services[service]['port']}:${inner_port} diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl index 1ddad5ff8e..39bc115a51 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl @@ -3,8 +3,8 @@ This file includes migration steps for each release of c2cgeoportal. Version 2.3.0 ============= -Informations ------------- +Information +----------- 1. The structure of the project change: * The package name becomes `{{package}}_geoportal`. @@ -32,6 +32,7 @@ Informations ] ...''' + Changes to apply ---------------- @@ -40,5 +41,14 @@ Changes to apply mv geoportal/{{package}}_geoportal/locale/fr/LC_MESSAGES/{{package}}{,_geoportal}-client.po mv geoportal/{{package}}_geoportal/locale/fr/LC_MESSAGES/{{package}}{,_geoportal}-server.po -2. If you have some custom Angular components you should follow these instructions: +2. Move all your components from `geoportal/{{package}}_geoportal/static-ngeo/components/` + to `geoportal/{{package}}_geoportal/static-ngeo/js/`. + +3. If you have some custom Angular components you should follow these instructions: https://github.com/camptocamp/ngeo/blob/master/docs/how_to_migrate_from_2.2_to_2.3.md + + +Changes to apply on Docker version +---------------------------------- + +1. Move all yours `mapserver/*.map.mako` files to `mapserver/*.map.tmpl.mako`. diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_Makefile_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_Makefile_tmpl index 0291f66caf..2837d34f48 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_Makefile_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_Makefile_tmpl @@ -2,15 +2,23 @@ GEOMAPFISH_VERSION ?= {{geomapfish_version}} export GEOMAPFISH_VERSION export PACKAGE = {{package}} -VISIBLE_WEB_PROTOCOL ?= https -VISIBLE_WEB_PORT ?= 443 -VISIBLE_ENTRY_POINT ?= / -export VISIBLE_WEB_HOST -export VISIBLE_WEB_PROTOCOL -export VISIBLE_ENTRY_POINT DEV_SERVER_PORT ?= 8081 export DEV_SERVER_PORT +INSTANCE ?= main +export INSTANCE + +ifeq ($(INSTANCE), main) +DOCKER_ENTRY_POINT ?= / +else +DOCKER_ENTRY_POINT ?= /_$(INSTANCE)/ +endif +DOCKER_WEB_HOST ?= localhost +DOCKER_WEB_PROTOCOL ?= https +export DOCKER_ENTRY_POINT +export DOCKER_WEB_HOST +export DOCKER_WEB_PROTOCOL + MAPSERVER ?= TRUE ifeq ($(DEBUG), TRUE) @@ -295,7 +303,8 @@ endif # Print PRINT_BASE_DIR ?= print -I18N_SOURCE_FILES += print/print-apps/$(PACKAGE)/config.yaml +PRINT_CONFIG_FILE ?= print/print-apps/$(PACKAGE)/config.yaml.tmpl +I18N_SOURCE_FILES += $(PRINT_CONFIG_FILE) PY_FILES = $(shell find $(PACKAGE) -type f -name '*.py' -print) @@ -377,7 +386,7 @@ docker-build: build: $(BUILD_RULES) .PHONY: checks -checks: flake8 $(CLIENT_CHECK_RULE) git-attributes yamllint +checks: flake8 $(CLIENT_CHECK_RULE) git-attributes yamllint spell .PHONY: git-attributes git-attributes: @@ -392,6 +401,14 @@ YAML_FILES ?= $(filter-out ./tilegeneration/config.yaml ./geoportal/config.yaml yamllint: $(YAML_FILES) yamllint --strict --config-file=yamllint.yaml -s $(YAML_FILES) +.PHONY: spell +spell: + codespell --quiet-level=2 --check-filenames --ignore-words=spell-ignore-words.txt \ + $(shell find -name node_modules -prune -or -name .git -prune -or -name '__pycache__' -prune \ + -or -name 'build' -prune -or -name '.build' -prune -or -name 'cgxp' -prune -or -name 'c2cgeoportal_*' -prune \ + -or \( -type f -and -not -name '*.png' -and -not -name '*.mo' -and -not -name '*.po*' \ + -and -not -name 'CONST_Makefile' -and -not -name 'package-lock.json' \) -print) + .PHONY: clean clean: template-clean rm --recursive --force /build/*.timestamp \ @@ -461,11 +478,13 @@ endif %: %.mako /build/c2ctemplate-cache.json $(PRERULE_CMD) - c2c-template --cache /build/c2ctemplate-cache.json --engine mako --files $< + c2c-template --cache /build/c2ctemplate-cache.json --engine mako \ + --runtime-environment-pattern '$${{'{{'}}{}}}' --files $< %: %.jinja /build/c2ctemplate-cache.json $(PRERULE_CMD) - c2c-template --cache /build/c2ctemplate-cache.json --engine jinja --files $< + c2c-template --cache /build/c2ctemplate-cache.json --engine jinja \ + --runtime-environment-pattern '$${{'{{'}}{}}}' --files $< geoportal/config.yaml: /build/c2ctemplate-cache.json $(PRERULE_CMD) @@ -580,11 +599,11 @@ $(APP_OUTPUT_DIR)/images/: /usr/lib/node_modules/jquery-ui/themes/base/images $(APP_OUTPUT_DIR)/images/ $(PRERULE_CMD) # Workaround to make Webpack working for ol/index.js - if [ -e node_modules ]; then rm --force node_modules_bak; mv node_modules node_modules_bak; fi ln --symbolic /usr/lib/node_modules/ . INTERFACE=$* webpack $(WEBPACK_ARGS) rm node_modules - if [ -e node_modules_bak ]; then mv node_modules_bak node_modules; fi + mv $(APP_OUTPUT_DIR)/$*.html $(APP_OUTPUT_DIR)/$*.html.tmpl + ls -1 $(APP_OUTPUT_DIR)/$*.*.css|while read file; do mv $${file} $${file}.tmpl; done touch $@ .PHONY: serve @@ -667,7 +686,7 @@ docker-compose-build.yaml: /build/requirements.timestamp .PHONY: docker-build-config docker-build-config: $(shell docker-required --path .) \ - print/print-apps/$(PACKAGE)/config.yaml \ + $(PRINT_CONFIG_FILE) \ $(MAPCACHE_FILE) docker build -t $(DOCKER_BASE)-config:$(DOCKER_TAG) . @@ -697,7 +716,8 @@ testdb/11-schemas.sql: $(ALEMBIC_YAML_FILE) testdb/11-schemas.sql_mako vars.yaml $(PRERULE_CMD) rm --force testdb/11-schemas.sql.mako ln -s 11-schemas.sql_mako testdb/11-schemas.sql.mako - c2c-template --vars $< --engine mako --files testdb/11-schemas.sql.mako + c2c-template --vars $< --engine mako --runtime-environment-pattern '$${{'{{'}}{}}}' \ + --files testdb/11-schemas.sql.mako rm testdb/11-schemas.sql.mako testdb/12-alembic.sql: alembic.ini alembic.yaml $(shell ls -1 /opt/alembic/main/*.py) diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl index 8732e81ded..f5d61a4620 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl @@ -6,7 +6,7 @@ vars: # the package name package: {{package}} geomapfish_version: '{GEOMAPFISH_VERSION}' - instance: main + instance: '{INSTANCE}' build_volume_name: '{BUILD_VOLUME_NAME}' srid: -1 @@ -15,11 +15,27 @@ vars: web_protocol: '{VISIBLE_WEB_PROTOCOL}' entry_point: '{VISIBLE_ENTRY_POINT}' dev_server_port: '{DEV_SERVER_PORT}' + docker_entry_point: '{DOCKER_ENTRY_POINT}' + docker_host: '{DOCKER_WEB_HOST}' + docker_web_protocol: '{DOCKER_WEB_PROTOCOL}' # Docker base image name (comes from the makefile). docker_base: '{DOCKER_BASE}' docker_tag: '{DOCKER_TAG}' + docker_global_front: false docker_services: + config: + environment: + VISIBLE_WEB_HOST: '{docker_host}' + VISIBLE_WEB_PROTOCOL: '{docker_web_protocol}' + VISIBLE_ENTRY_POINT: '{docker_entry_point}' + PGHOST: 172.17.0.1 + PGHOST_SLAVE: 172.17.0.1 + PGPORT: 5432 + PGUSER: www-data + PGPASSWORD: www-data + PGDATABASE: geomapfish + GEOPORTAL_INTERNAL_URL: 'http://geoportal/' db: environment: POSTGRES_DB: geomapfish @@ -27,9 +43,9 @@ vars: POSTGRES_PASSWORD: www-data geoportal: environment: - VISIBLE_WEB_HOST: localhost:80 - VISIBLE_WEB_PROTOCOL: https - VISIBLE_ENTRY_POINT: / + VISIBLE_WEB_HOST: '{docker_host}' + VISIBLE_WEB_PROTOCOL: '{docker_web_protocol}' + VISIBLE_ENTRY_POINT: '{docker_entry_point}' PGHOST: 172.17.0.1 PGHOST_SLAVE: 172.17.0.1 PGPORT: 5432 @@ -43,6 +59,10 @@ vars: PRINT_URL: http://print:8080/print/ REDIS_HOST: redis REDIS_PORT: 6379 + tilecloudchain: + environment: + VISIBLE_ENTRY_POINT: '{docker_entry_point}' + TILEGENERATION_CONFIGFILE: /etc/tilegeneration/config.yaml front: port: 80 @@ -99,7 +119,7 @@ vars: # Cookie session secret secret: __import__('uuid').uuid4().hex cookie_name: auth_tkt_{instance} - # Database informations + # Database information sqlalchemy: url: postgresql://{dbuser}:{dbpassword}@{dbhost}:{dbport}/{db} sqlalchemy_slave: @@ -131,6 +151,11 @@ vars: interfaces_theme: desktop: desktop + desktop_alt: desktop_alt + mobile: mobile + mobile_alt: mobile + oeview: desktop + oeedit: desktop # The dogpile.cache configuration. # @@ -490,14 +515,19 @@ environment: - GEOMAPFISH_VERSION - DOCKER_BASE - DOCKER_TAG + - DOCKER_WEB_PROTOCOL + - DOCKER_WEB_HOST + - DOCKER_ENTRY_POINT - DEVELOPMENT - WMTSCAPABILITIES_PATH - BUILD_VOLUME_NAME - PROJECT_DIRECTORY - DEV_SERVER_PORT + - INSTANCE runtime_environment: - - VISIBLE_WEB_HOST + - name: VISIBLE_WEB_HOST + default: localhost - name: VISIBLE_WEB_PROTOCOL default: https - name: VISIBLE_ENTRY_POINT diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/mapserver/CONST_example_map_mako_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/update/mapserver/CONST_example_map_mako_tmpl index caa80b5757..dbd474d6b4 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/mapserver/CONST_example_map_mako_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/mapserver/CONST_example_map_mako_tmpl @@ -8,11 +8,11 @@ LAYER PROCESSING "CLOSE_CONNECTION=DEFER" # For performance CONNECTION "${mapserver_connection}" # Example data for secured layer by restriction area - DATA "geometrie FROM (SELECT geo.* FROM geodata.table AS geo WHERE ST_Contains((${mapfile_data_subselect} 'layer_name'), ST_SetSRID(geo.geometrie, {{srid}}))) as foo using unique id using srid={{srid}}" + DATA "geometry FROM (SELECT geo.* FROM geodata.table AS geo WHERE ST_Contains((${mapfile_data_subselect} 'layer_name'), ST_SetSRID(geo.geometry, {{srid}}))) as foo using unique id using srid={{srid}}" # Example data for secured layer by role (without any area) - #DATA "geometrie FROM (SELECT geo.geom as geom FROM geodata.table AS geo WHERE %role_id% IN (${mapfile_data_noarea_subselect} 'layer_name')) as foo USING UNIQUE gid USING srid={{srid}}" + #DATA "geometry FROM (SELECT geo.geom as geom FROM geodata.table AS geo WHERE %role_id% IN (${mapfile_data_noarea_subselect} 'layer_name')) as foo USING UNIQUE gid USING srid={{srid}}" # Example data for public layer - #DATA "geometrie FROM (SELECT geo.geom as geom FROM geodata.table AS geo) AS foo USING UNIQUE gid USING srid={{srid}}" + #DATA "geometry FROM (SELECT geo.geom as geom FROM geodata.table AS geo) AS foo USING UNIQUE gid USING srid={{srid}}" METADATA "wms_title" "layer_name" # For WMS "wms_srs" "EPSG:{{srid}}" # For WMS diff --git a/geoportal/c2cgeoportal_geoportal/scripts/c2cupgrade.py b/geoportal/c2cgeoportal_geoportal/scripts/c2cupgrade.py index 69a907b7c7..fd9ede953c 100644 --- a/geoportal/c2cgeoportal_geoportal/scripts/c2cupgrade.py +++ b/geoportal/c2cgeoportal_geoportal/scripts/c2cupgrade.py @@ -255,11 +255,11 @@ def test_checkers(self): except ConnectionRefusedError as e: return False, "\n".join([ "Connection refused: {}", - "Run `curl {} '{}'` for more information." + "Run `curl --insecure {} '{}'` for more information." ]).format( e, ' '.join([ - '--header={}={}'.format(*i) for i in self.project.get("checker_headers", {}).items() + '--header {}={}'.format(*i) for i in self.project.get("checker_headers", {}).items() ]), self.project["checker_url"], ) @@ -658,7 +658,7 @@ def step11(self, step): else: message = [ "The upgrade is nearly done, now you should:", - "- Run `docker-compose up`.", + "- Run `docker-compose up -d`.", "- Test your application on 'http://localhost:8480/desktop'." ] diff --git a/package.json b/package.json index d00320e016..c9fb422713 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "jstreegrid": "3.9.3", "magicsuggest-alpine": "1.0.0", "openlayers": "https://api.github.com/repos/openlayers/openlayers/tarball/f284b95cb897b3ce1b49b985b58ebe1ca76be1fe", - "typeahead.js": "0.11.1", - "webpack-replace": "1.0.0" + "typeahead.js": "0.11.1" } } diff --git a/spell-ignore-words.txt b/spell-ignore-words.txt index 9861b8480b..858666fa95 100644 --- a/spell-ignore-words.txt +++ b/spell-ignore-words.txt @@ -1 +1,2 @@ te +oder diff --git a/travis/deploy-pip b/travis/deploy-pip index 40b6a18e39..66ef48091f 100755 --- a/travis/deploy-pip +++ b/travis/deploy-pip @@ -11,6 +11,6 @@ echo "password:${TRAVIS_PASSWORD}" >> ~/.pypirc export VERSION=${TRAVIS_TAG} # Deploy all the packages on pypi -python commons/setup.py egg_info sdist bdist_wheel upload -r pypi -python geoportal/setup.py egg_info sdist bdist_wheel upload -r pypi -python admin/setup.py egg_info sdist bdist_wheel upload -r pypi +(cd commons; python setup.py egg_info sdist bdist_wheel upload -r pypi) +(cd geoportal; python setup.py egg_info sdist bdist_wheel upload -r pypi) +(cd admin; python setup.py egg_info sdist bdist_wheel upload -r pypi) diff --git a/travis/old-project.yaml b/travis/old-project.yaml index c7167c1db4..09c9845b55 100644 --- a/travis/old-project.yaml +++ b/travis/old-project.yaml @@ -19,6 +19,7 @@ unmanaged_files: - mapserver/mapserver\.map\.mako - mapserver/mapserver\.map\.tmpl\.mako - print/print-apps/testgeomapfish/config\.yaml\.mako + - print/print-apps/testgeomapfish/config\.yaml\.tmpl - print/print-apps/testgeomapfish/.*\.jrxml - geoportal/testgeomapfish_geoportal/locale/fr/LC_MESSAGES/testgeomapfish_geoportal-client\.po - geoportal/testgeomapfish_geoportal/locale/de/LC_MESSAGES/testgeomapfish_geoportal-client\.po diff --git a/travis/test-upgrade-convert.sh b/travis/test-upgrade-convert.sh index df9237c275..006aa91370 100755 --- a/travis/test-upgrade-convert.sh +++ b/travis/test-upgrade-convert.sh @@ -57,6 +57,7 @@ function createv220 { } function printdiff { + ls -l .UPGRADE* for f in $(ls -1 *.diff) do echo "--- $f ---" @@ -140,7 +141,7 @@ then cp {CONST_create_template/,}project.yaml.mako cp {CONST_create_template/,}vars.yaml cp {CONST_create_template/,}mapserver/tinyows.xml.mako - cp {CONST_create_template/,}print/print-apps/testgeomapfish/config.yaml.mako + cp {CONST_create_template/,}print/print-apps/testgeomapfish/config.yaml.tmpl ./docker-run --env=NODE_ENV make upgrade11 if [ ! -e .UPGRADE_SUCCESS ] then @@ -252,11 +253,21 @@ fi if [ "$1" = "v230-docker" ] then cp travis/old-project.yaml ${WORKSPACE}/v230-docker/testgeomapfish/project.yaml.mako + cd ${WORKSPACE}/v230-docker/testgeomapfish + ./docker-run make project.yaml + cd - cp travis/from23-config ${WORKSPACE}/v230-docker/testgeomapfish/.config cd ${WORKSPACE}/v230-docker/testgeomapfish git add project.yaml.mako .config git commit --quiet --message="Start upgrade" ./docker-run --env=NODE_ENV make upgrade + if [ ! -e .UPGRADE8 ] + then + printdiff + echo "Fail to upgrade" + exit 1 + fi + ./docker-run --env=NODE_ENV make upgrade9 if [ ! -e .UPGRADE_SUCCESS ] then printdiff @@ -274,6 +285,9 @@ fi if [ "$1" = "v230-nondocker" ] then cp travis/old-project.yaml ${WORKSPACE}/v230-nondocker/testgeomapfish/project.yaml.mako + cd ${WORKSPACE}/v230-docker/testgeomapfish + ./docker-run make project.yaml + cd - cp travis/from23-config ${WORKSPACE}/v230-nondocker/testgeomapfish/.config cd ${WORKSPACE}/v230-nondocker/testgeomapfish echo "UPGRADE_ARGS += --force-docker --new-makefile=Makefile" > temp.mk @@ -282,6 +296,13 @@ then git add project.yaml.mako .config temp.mk git commit --quiet --message="Start upgrade" ./docker-run --env=NODE_ENV make --makefile=temp.mk upgrade + if [ ! -e .UPGRADE8 ] + then + printdiff + echo "Fail to upgrade" + exit 1 + fi + ./docker-run --env=NODE_ENV make upgrade9 if [ ! -e .UPGRADE_SUCCESS ] then echo "Fail to upgrade" diff --git a/travis/v24-project.yaml b/travis/v24-project.yaml index bffd8cab8b..033ca58f17 100644 --- a/travis/v24-project.yaml +++ b/travis/v24-project.yaml @@ -10,6 +10,8 @@ unmanaged_files: - mapserver/mapserver\.map\.mako - mapserver/mapserver\.map\.tmpl\.mako - tilegeneration/config\.yaml\.mako + - geoportal/testgeomapfish_geoportal/static-ngeo/js/apps/desktop\.html\.ejs + - geoportal/testgeomapfish_geoportal/static-ngeo/js/apps/mobile\.html\.ejs template_vars: package: testgeomapfish srid: 21781