200 lines
6.2 KiB
Python
200 lines
6.2 KiB
Python
assert node.has_bundle('redis'), f'{node.name}: pretalx needs redis'
|
|
assert node.has_bundle('nodejs'), f'{node.name}: pretalx needs nodejs for rebuild step'
|
|
|
|
actions = {
|
|
'pretalx_create_virtualenv': {
|
|
'command': '/usr/bin/python3 -m virtualenv -p python3 /opt/pretalx/venv/',
|
|
'unless': 'test -d /opt/pretalx/venv/',
|
|
'needs': {
|
|
# actually /opt/pretalx, but we don't create that
|
|
'directory:/opt/pretalx/src',
|
|
},
|
|
},
|
|
'pretalx_install': {
|
|
'command': ' && '.join([
|
|
'cd /opt/pretalx/src',
|
|
'/opt/pretalx/venv/bin/pip install --upgrade pip wheel gunicorn psycopg2-binary',
|
|
'/opt/pretalx/venv/bin/pip install --upgrade -e .[redis]',
|
|
]),
|
|
'needs': {
|
|
'action:pretalx_create_virtualenv',
|
|
'pkg_apt:gcc',
|
|
'pkg_apt:python3-dev',
|
|
},
|
|
'triggered': True,
|
|
},
|
|
'pretalx_migrate': {
|
|
'command': '/usr/bin/sudo -Hu pretalx PRETALX_CONFIG_FILE=/opt/pretalx/pretalx.cfg /opt/pretalx/venv/bin/python -m pretalx migrate',
|
|
'needs': {
|
|
'action:pretalx_install',
|
|
'file:/opt/pretalx/pretalx.cfg',
|
|
'postgres_db:pretalx',
|
|
'postgres_role:pretalx',
|
|
},
|
|
'triggered': True,
|
|
},
|
|
'pretalx_rebuild': {
|
|
'command': ' && '.join([
|
|
'cd /opt/pretalx/src/src/pretalx/frontend/schedule-editor/',
|
|
'npm install',
|
|
'PRETALX_CONFIG_FILE=/opt/pretalx/pretalx.cfg /opt/pretalx/venv/bin/python -m pretalx rebuild',
|
|
]),
|
|
'needs': {
|
|
'action:pretalx_install',
|
|
'action:pretalx_migrate',
|
|
'directory:/opt/pretalx/data',
|
|
'directory:/opt/pretalx/static',
|
|
'file:/opt/pretalx/pretalx.cfg',
|
|
'bundle:nodejs',
|
|
},
|
|
'triggers': {
|
|
# pretalx-web reads the manifest.json generated by this build-step upon startup
|
|
'svc_systemd:pretalx-web:restart',
|
|
},
|
|
'triggered': True,
|
|
},
|
|
}
|
|
|
|
users = {
|
|
'pretalx': {
|
|
'home': '/opt/pretalx',
|
|
},
|
|
}
|
|
|
|
directories = {
|
|
'/opt/pretalx/src': {},
|
|
'/opt/pretalx/data': {
|
|
'owner': 'pretalx',
|
|
},
|
|
'/opt/pretalx/static': {
|
|
'owner': 'pretalx',
|
|
},
|
|
}
|
|
|
|
git_deploy = {
|
|
'/opt/pretalx/src': {
|
|
'repo': 'https://github.com/pretalx/pretalx.git',
|
|
'rev': node.metadata.get('pretalx/version'),
|
|
'triggers': {
|
|
'action:pretalx_install',
|
|
'action:pretalx_migrate',
|
|
'action:pretalx_rebuild',
|
|
'svc_systemd:pretalx-web:restart',
|
|
'svc_systemd:pretalx-worker:restart',
|
|
},
|
|
},
|
|
}
|
|
|
|
svc_systemd = {
|
|
'pretalx-runperiodic.timer': {
|
|
'needs': {
|
|
'action:pretalx_install',
|
|
'action:pretalx_migrate',
|
|
'file:/etc/systemd/system/pretalx-runperiodic.timer',
|
|
'file:/etc/systemd/system/pretalx-runperiodic.service',
|
|
'file:/opt/pretalx/pretalx.cfg',
|
|
},
|
|
},
|
|
'pretalx-clearsessions.timer': {
|
|
'needs': {
|
|
'action:pretalx_install',
|
|
'action:pretalx_migrate',
|
|
'file:/etc/systemd/system/pretalx-clearsessions.timer',
|
|
'file:/etc/systemd/system/pretalx-clearsessions.service',
|
|
'file:/opt/pretalx/pretalx.cfg',
|
|
},
|
|
},
|
|
'pretalx-web': {
|
|
'needs': {
|
|
'action:pretalx_install',
|
|
'action:pretalx_migrate',
|
|
'action:pretalx_rebuild',
|
|
'file:/etc/systemd/system/pretalx-web.service',
|
|
'file:/opt/pretalx/pretalx.cfg',
|
|
},
|
|
},
|
|
'pretalx-worker': {
|
|
'needs': {
|
|
'action:pretalx_install',
|
|
'action:pretalx_migrate',
|
|
'action:pretalx_rebuild',
|
|
'file:/etc/systemd/system/pretalx-worker.service',
|
|
'file:/opt/pretalx/pretalx.cfg',
|
|
},
|
|
},
|
|
}
|
|
|
|
files = {
|
|
'/opt/pretalx/pretalx.cfg': {
|
|
'content_type': 'mako',
|
|
'context': node.metadata.get('pretalx'),
|
|
'triggers': {
|
|
'svc_systemd:pretalx-web:restart',
|
|
'svc_systemd:pretalx-worker:restart',
|
|
},
|
|
},
|
|
'/etc/systemd/system/pretalx-runperiodic.timer': {
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
'svc_systemd:pretalx-runperiodic.timer:restart',
|
|
},
|
|
},
|
|
'/etc/systemd/system/pretalx-runperiodic.service': {
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
},
|
|
},
|
|
'/etc/systemd/system/pretalx-clearsessions.timer': {
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
'svc_systemd:pretalx-clearsessions.timer:restart',
|
|
},
|
|
},
|
|
'/etc/systemd/system/pretalx-clearsessions.service': {
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
},
|
|
},
|
|
'/etc/systemd/system/pretalx-web.service': {
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
'svc_systemd:pretalx-web:restart',
|
|
},
|
|
},
|
|
'/etc/systemd/system/pretalx-worker.service': {
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
'svc_systemd:pretalx-worker:restart',
|
|
},
|
|
},
|
|
}
|
|
|
|
# run `pip install` one after another due to concurrency issues
|
|
last_action = 'action:pretalx_install'
|
|
for plugin_name, plugin_config in node.metadata.get('pretalx/plugins', {}).items():
|
|
assert '-' not in plugin_name, f'{node.name} pretalx plugin {plugin_name} must not contain dashes'
|
|
|
|
directories[f'/opt/pretalx/plugin_{plugin_name}'] = {}
|
|
|
|
git_deploy[f'/opt/pretalx/plugin_{plugin_name}'] = {
|
|
'repo': plugin_config['repo'],
|
|
'rev': plugin_config.get('rev', 'master'),
|
|
'triggers': {
|
|
f'action:pretalx_install_plugin_{plugin_name}',
|
|
},
|
|
}
|
|
|
|
actions[f'pretalx_install_plugin_{plugin_name}'] = {
|
|
'command': f'cd /opt/pretalx/plugin_{plugin_name} && /opt/pretalx/venv/bin/pip install --upgrade -e .',
|
|
'needs': {
|
|
last_action,
|
|
},
|
|
'triggers': {
|
|
'action:pretalx_migrate',
|
|
'action:pretalx_rebuild',
|
|
'svc_systemd:pretalx-web:restart',
|
|
'svc_systemd:pretalx-worker:restart',
|
|
},
|
|
'triggered': True,
|
|
}
|
|
last_action = f'action:pretalx_install_plugin_{plugin_name}'
|