Loading __init__.py +30 −46 Original line number Diff line number Diff line from fabric.api import task, env, execute from fabric.colors import red from fabric.contrib.console import confirm import behat import deploy import docker from deploy import * import drush import behat import patternlab from .environments import e from deploy import migrate, provision, push from fabric.api import task, env, execute from fabric.colors import red from fabric.contrib.console import confirm @task def init(): """ Complete local installation process, used generally when building the docker image for install and configure Drupal. """ execute(docker.image_create) execute(docker.container_start) execute(drush.make, 'install') execute(drush.site_install, host='root@{}'.format(env.container_ip)) execute(drush.aliases) execute(behat.init, host='root@{}'.format(env.container_ip)) @task def install(): """ Run the full installation process. """ execute(drush.make, 'install') execute(drush.site_install) execute(behat.init) @task def release(): """ Generate all artefacts related to a release process or a deployment process. """ execute(drush.archive_dump) execute(drush.gen_doc) @task def test(tags=''): Loading @@ -32,57 +53,20 @@ def test(tags=''): The JUnit report file is specified in the Behat configuration file. Default: tests/behat/out/behat.junit.xml. :param tags Specific Behat tests tags to run. """ execute(behat.init) if not tags: execute(behat.run) else: execute(behat.run, tags='{}'.format(tags)) @task def install(): """ Run the full installation process. """ execute(drush.make, 'install') execute(drush.site_install) execute(behat.init) @task def update(): """ Update the full codebase and run the availabe database updates. """ execute(drush.make, 'update') execute(drush.updatedb) execute(behat.init) @task def release(): """ Generate all artefacts related to a release process or a deployment process. """ execute(drush.archive_dump) execute(drush.gen_doc) @task def deploy(environment): """Deploy code and run database updates on a target Drupal environment. """ execute(provision, environment) execute(push, environment, hosts=env.hosts) execute(migrate, environment, hosts=env.hosts) behat.py +8 −6 Original line number Diff line number Diff line from __future__ import unicode_literals from fabric.api import task, roles, env from fabric.colors import green import helpers as h @task @roles('docker') def init(rewrite=True): Loading @@ -12,7 +14,6 @@ def init(rewrite=True): :param role Default 'role' where to run the task :param rewrite If the behat.yml file should be rewrited or not. """ role = 'docker' workspace = env.docker_workspace host = env.site_hostname Loading @@ -24,18 +25,18 @@ def init(rewrite=True): h.fab_run(role, 'sed -i "s@%DRUPAL_ROOT@{}@g" behat.yml'.format(site_root)) h.fab_run(role, 'sed -i "s@%URL@http://{}@g" behat.yml'.format(host)) h.fab_run(role, 'echo "127.0.0.1 {}" >> /etc/hosts'.format(host)) print green('Behat is now properly configured. The configuration file is {}/tests/behat/behat.yml'.format(workspace)) else: print green('{}/tests/behat/behat.yml is already created.'.format(workspace)) @task() @task @roles('docker') def install(): """ Install behat """ role = 'docker' workspace = env.docker_workspace Loading @@ -44,6 +45,7 @@ def install(): h.fab_run(role, 'curl -s https://getcomposer.org/installer | php') h.fab_run(role, 'php composer.phar install') h.fab_run(role, 'ln -s bin/behat /usr/local/bin/behat') print green('Behat has been properly installed with Composer in /usr/local/bin') else: print(green('Behat is already installed, no need for a new installation')) Loading @@ -56,7 +58,6 @@ def run(tags='~@wip&&~@disabled&&~@test'): Execute the complete Behat tests suite. :param role Default 'role' where to run the task """ role = 'docker' workspace = env.docker_workspace Loading @@ -64,9 +65,10 @@ def run(tags='~@wip&&~@disabled&&~@test'): # In the container behat is installed globaly, so check before install it inside the tests directory if not h.fab_exists(role, '/usr/local/bin/behat') or not h.fab_exists(role, '../tests/behat/bin/behat'): install() # If the configuration file behat.yml doesn't exist, call behat_init before run the test. if not h.fab_exists(role, '{}/tests/behat/behat.yml'.format(workspace)): init() with h.fab_cd(role, '{}/tests/behat'.format(workspace)): h.fab_run(role, 'behat --format junit --format pretty --tags "{}" --colors'.format(tags)) core.py +2 −1 Original line number Diff line number Diff line from __future__ import unicode_literals from fabric.api import task, roles, env from fabric.colors import red, green import helpers as h @task @roles('docker') def db_import(filename, role='docker'): Loading @@ -13,7 +15,6 @@ def db_import(filename, role='docker'): :param filename: a full path to a gzipped sql dump. """ if h.fab_exists(role, filename): print green('Database dump {} found.'.format(filename)) h.fab_run(role, 'zcat {} | mysql -u{} -p{} {}'.format(filename, env.site_db_user, env.site_db_pass, env.site_db_name)) Loading default_vars.py +3 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ env.site_languages = 'fr' # PatternLab # Specify the PatternLab dir is you want the style guide to be generated env.patternlab_dir = '' Loading @@ -41,6 +42,7 @@ env.patternlab_dir = '' env.db_dump = False # Docker env.docker_workspace = '/opt/sfl' Loading @@ -49,6 +51,7 @@ env.bind_port = 8001 env.apache_user = 'www-data' # Docker auto-added container IP env.container_ip = '172.17.0.0' Loading deploy.py +24 −6 Original line number Diff line number Diff line Loading @@ -17,13 +17,15 @@ # from __future__ import unicode_literals import glob import os from fabric.api import task, env, local, run from fabric.colors import green from fabric.utils import abort import helpers as h import os import glob def _set_hosts(environment): Loading Loading @@ -51,7 +53,9 @@ def _aegir_platform_name(target, environment): """ if 'aegir_platform' not in target: abort('Aegir needs a unique platform name to function properly. Check your aegir_platform key in your aliases.') aegir_platform = target.get('aegir_platform') return aegir_platform.format(name=env.project_name, env=environment, build=env.build_number) Loading @@ -61,8 +65,10 @@ def _target_dir(environment): :param environment """ target = env.aliases.get(environment) if _is_aegir_deployment(target): return target.get('root') + _aegir_platform_name(target, environment) return target.get('root') Loading Loading @@ -98,7 +104,6 @@ def _clear_site_cache(target, environment): Helper function to clear site cache. :param environment """ run('drush --yes --root={} cache-clear all'.format(target.get('root'))) print(green('The cache have been cleared on the target environment {}.'.format(environment))) Loading @@ -109,10 +114,13 @@ def _get_archive_from_dir(directory): :param directory The directory used to untar the artefact. """ files = glob.glob1(directory, '*.tar.gz') if len(files) == 0: abort('No tarball found in {}'.format(directory)) if len(files) > 1: abort('More than one tarball has been found in {}. Can not decide which one to deploy.'.format(directory)) return files[0] Loading @@ -132,6 +140,7 @@ def _aegir_provision_platform(platform, aegir_path, aegir_destsrv): """ run('drush --root="{}/platforms/{}" provision-save "@platform_{}" --context_type="platform" --web_server=@{}' .format(aegir_path, platform, platform, aegir_destsrv)) run('drush @hostmaster hosting-import platform_{}'.format(platform)) run('drush @hostmaster hosting-dispatch') Loading @@ -156,6 +165,15 @@ def _aegir_remove_platform_without_sites(target, environment, platform): run('{}/remove-platforms {} {}'.format(aegir_path, environment, platform)) @task(default=True) def deploy(environment): """Deploy code and run database updates on a target Drupal environment. """ execute(provision, environment) execute(push, environment, hosts=env.hosts) execute(migrate, environment, hosts=env.hosts) @task def provision(environment, role='local'): """ Loading @@ -169,10 +187,10 @@ def provision(environment, role='local'): artefact = _get_archive_from_dir(env.builddir) with h.fab_cd(role, '{}/src'.format(env.workspace)): # Clear the currently installed platform if h.fab_exists(role, env.site_root): h.fab_run(role, 'rm -rf {}'.format(env.site_root)) # Extract the platform to deploy h.fab_run(role, 'tar -xzf {}/{}'.format(env.builddir, artefact)) Loading @@ -186,7 +204,6 @@ def provision(environment, role='local'): print(green('The platform {} is now ready to be deployed to the target environment {}.'.format(artefact, environment))) @task def push(environment): """ Loading Loading @@ -217,6 +234,7 @@ def migrate(environment): if _is_aegir_deployment(target): # Deploy to Aegir server. platform = _aegir_platform_name(target, environment) if env.get('migrate', "false") == "true": _aegir_migrate_sites(target, environment, platform) Loading Loading
__init__.py +30 −46 Original line number Diff line number Diff line from fabric.api import task, env, execute from fabric.colors import red from fabric.contrib.console import confirm import behat import deploy import docker from deploy import * import drush import behat import patternlab from .environments import e from deploy import migrate, provision, push from fabric.api import task, env, execute from fabric.colors import red from fabric.contrib.console import confirm @task def init(): """ Complete local installation process, used generally when building the docker image for install and configure Drupal. """ execute(docker.image_create) execute(docker.container_start) execute(drush.make, 'install') execute(drush.site_install, host='root@{}'.format(env.container_ip)) execute(drush.aliases) execute(behat.init, host='root@{}'.format(env.container_ip)) @task def install(): """ Run the full installation process. """ execute(drush.make, 'install') execute(drush.site_install) execute(behat.init) @task def release(): """ Generate all artefacts related to a release process or a deployment process. """ execute(drush.archive_dump) execute(drush.gen_doc) @task def test(tags=''): Loading @@ -32,57 +53,20 @@ def test(tags=''): The JUnit report file is specified in the Behat configuration file. Default: tests/behat/out/behat.junit.xml. :param tags Specific Behat tests tags to run. """ execute(behat.init) if not tags: execute(behat.run) else: execute(behat.run, tags='{}'.format(tags)) @task def install(): """ Run the full installation process. """ execute(drush.make, 'install') execute(drush.site_install) execute(behat.init) @task def update(): """ Update the full codebase and run the availabe database updates. """ execute(drush.make, 'update') execute(drush.updatedb) execute(behat.init) @task def release(): """ Generate all artefacts related to a release process or a deployment process. """ execute(drush.archive_dump) execute(drush.gen_doc) @task def deploy(environment): """Deploy code and run database updates on a target Drupal environment. """ execute(provision, environment) execute(push, environment, hosts=env.hosts) execute(migrate, environment, hosts=env.hosts)
behat.py +8 −6 Original line number Diff line number Diff line from __future__ import unicode_literals from fabric.api import task, roles, env from fabric.colors import green import helpers as h @task @roles('docker') def init(rewrite=True): Loading @@ -12,7 +14,6 @@ def init(rewrite=True): :param role Default 'role' where to run the task :param rewrite If the behat.yml file should be rewrited or not. """ role = 'docker' workspace = env.docker_workspace host = env.site_hostname Loading @@ -24,18 +25,18 @@ def init(rewrite=True): h.fab_run(role, 'sed -i "s@%DRUPAL_ROOT@{}@g" behat.yml'.format(site_root)) h.fab_run(role, 'sed -i "s@%URL@http://{}@g" behat.yml'.format(host)) h.fab_run(role, 'echo "127.0.0.1 {}" >> /etc/hosts'.format(host)) print green('Behat is now properly configured. The configuration file is {}/tests/behat/behat.yml'.format(workspace)) else: print green('{}/tests/behat/behat.yml is already created.'.format(workspace)) @task() @task @roles('docker') def install(): """ Install behat """ role = 'docker' workspace = env.docker_workspace Loading @@ -44,6 +45,7 @@ def install(): h.fab_run(role, 'curl -s https://getcomposer.org/installer | php') h.fab_run(role, 'php composer.phar install') h.fab_run(role, 'ln -s bin/behat /usr/local/bin/behat') print green('Behat has been properly installed with Composer in /usr/local/bin') else: print(green('Behat is already installed, no need for a new installation')) Loading @@ -56,7 +58,6 @@ def run(tags='~@wip&&~@disabled&&~@test'): Execute the complete Behat tests suite. :param role Default 'role' where to run the task """ role = 'docker' workspace = env.docker_workspace Loading @@ -64,9 +65,10 @@ def run(tags='~@wip&&~@disabled&&~@test'): # In the container behat is installed globaly, so check before install it inside the tests directory if not h.fab_exists(role, '/usr/local/bin/behat') or not h.fab_exists(role, '../tests/behat/bin/behat'): install() # If the configuration file behat.yml doesn't exist, call behat_init before run the test. if not h.fab_exists(role, '{}/tests/behat/behat.yml'.format(workspace)): init() with h.fab_cd(role, '{}/tests/behat'.format(workspace)): h.fab_run(role, 'behat --format junit --format pretty --tags "{}" --colors'.format(tags))
core.py +2 −1 Original line number Diff line number Diff line from __future__ import unicode_literals from fabric.api import task, roles, env from fabric.colors import red, green import helpers as h @task @roles('docker') def db_import(filename, role='docker'): Loading @@ -13,7 +15,6 @@ def db_import(filename, role='docker'): :param filename: a full path to a gzipped sql dump. """ if h.fab_exists(role, filename): print green('Database dump {} found.'.format(filename)) h.fab_run(role, 'zcat {} | mysql -u{} -p{} {}'.format(filename, env.site_db_user, env.site_db_pass, env.site_db_name)) Loading
default_vars.py +3 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ env.site_languages = 'fr' # PatternLab # Specify the PatternLab dir is you want the style guide to be generated env.patternlab_dir = '' Loading @@ -41,6 +42,7 @@ env.patternlab_dir = '' env.db_dump = False # Docker env.docker_workspace = '/opt/sfl' Loading @@ -49,6 +51,7 @@ env.bind_port = 8001 env.apache_user = 'www-data' # Docker auto-added container IP env.container_ip = '172.17.0.0' Loading
deploy.py +24 −6 Original line number Diff line number Diff line Loading @@ -17,13 +17,15 @@ # from __future__ import unicode_literals import glob import os from fabric.api import task, env, local, run from fabric.colors import green from fabric.utils import abort import helpers as h import os import glob def _set_hosts(environment): Loading Loading @@ -51,7 +53,9 @@ def _aegir_platform_name(target, environment): """ if 'aegir_platform' not in target: abort('Aegir needs a unique platform name to function properly. Check your aegir_platform key in your aliases.') aegir_platform = target.get('aegir_platform') return aegir_platform.format(name=env.project_name, env=environment, build=env.build_number) Loading @@ -61,8 +65,10 @@ def _target_dir(environment): :param environment """ target = env.aliases.get(environment) if _is_aegir_deployment(target): return target.get('root') + _aegir_platform_name(target, environment) return target.get('root') Loading Loading @@ -98,7 +104,6 @@ def _clear_site_cache(target, environment): Helper function to clear site cache. :param environment """ run('drush --yes --root={} cache-clear all'.format(target.get('root'))) print(green('The cache have been cleared on the target environment {}.'.format(environment))) Loading @@ -109,10 +114,13 @@ def _get_archive_from_dir(directory): :param directory The directory used to untar the artefact. """ files = glob.glob1(directory, '*.tar.gz') if len(files) == 0: abort('No tarball found in {}'.format(directory)) if len(files) > 1: abort('More than one tarball has been found in {}. Can not decide which one to deploy.'.format(directory)) return files[0] Loading @@ -132,6 +140,7 @@ def _aegir_provision_platform(platform, aegir_path, aegir_destsrv): """ run('drush --root="{}/platforms/{}" provision-save "@platform_{}" --context_type="platform" --web_server=@{}' .format(aegir_path, platform, platform, aegir_destsrv)) run('drush @hostmaster hosting-import platform_{}'.format(platform)) run('drush @hostmaster hosting-dispatch') Loading @@ -156,6 +165,15 @@ def _aegir_remove_platform_without_sites(target, environment, platform): run('{}/remove-platforms {} {}'.format(aegir_path, environment, platform)) @task(default=True) def deploy(environment): """Deploy code and run database updates on a target Drupal environment. """ execute(provision, environment) execute(push, environment, hosts=env.hosts) execute(migrate, environment, hosts=env.hosts) @task def provision(environment, role='local'): """ Loading @@ -169,10 +187,10 @@ def provision(environment, role='local'): artefact = _get_archive_from_dir(env.builddir) with h.fab_cd(role, '{}/src'.format(env.workspace)): # Clear the currently installed platform if h.fab_exists(role, env.site_root): h.fab_run(role, 'rm -rf {}'.format(env.site_root)) # Extract the platform to deploy h.fab_run(role, 'tar -xzf {}/{}'.format(env.builddir, artefact)) Loading @@ -186,7 +204,6 @@ def provision(environment, role='local'): print(green('The platform {} is now ready to be deployed to the target environment {}.'.format(artefact, environment))) @task def push(environment): """ Loading Loading @@ -217,6 +234,7 @@ def migrate(environment): if _is_aegir_deployment(target): # Deploy to Aegir server. platform = _aegir_platform_name(target, environment) if env.get('migrate', "false") == "true": _aegir_migrate_sites(target, environment, platform) Loading