DocERP/docker/container-files/bootstrap/app/mkdocs/common.py

139 lines
3.8 KiB
Python
Raw Permalink Normal View History

2022-05-24 12:52:25 +00:00
import os
from termcolor import colored
import git
from datetime import datetime
from crontab import CronTab
docks_dir = os.environ['DOCS_DIRECTORY']
modules = os.environ['ADD_MODULES']
repo = os.environ['GIT_REPO']
git_branch = os.environ['GIT_BRANCH']
auto_update = os.environ['AUTO_UPDATE']
interval = int(os.environ['UPDATE_INTERVAL'])
def start():
"""
Start mkdocs server
:return:
"""
if modules != 'false':
_install_modules(modules)
if repo != 'false':
_clone_repo(repo)
_check_previous_installation()
print('Starting MKDocs')
os.chdir(docks_dir)
if "DEV_ADDR" in os.environ:
_dev_addr = os.environ['DEV_ADDR']
else:
_dev_addr = '0.0.0.0:8000'
os.system(f'mkdocs serve -a {_dev_addr} {_live_reload()} {_fast_mode()}')
def _install_modules(modules):
"""
Install Additional Modules
:param modules: str - List of modules to install
:return:
"""
print(colored(f'Installing python modules: {modules}', 'green'))
os.system(f'pip install -q {modules}')
print(colored(f'Modules installed.', 'green'))
def _check_previous_installation():
"""
Check if previous installation present
Creates empty documentation if none detected
:return:
"""
if not os.path.exists(docks_dir + '/mkdocs.yml'):
print(colored(
f'No documentation found in ({docks_dir}). Creating new one.', 'yellow'))
if not os.path.exists(docks_dir):
os.mkdir(docks_dir)
print(colored(f'Starting fresh installation', 'green'))
os.system(f'mkdocs new {docks_dir}/')
else:
print(
colored(f'Detected previous installation in ({docks_dir}).', 'green'))
def _live_reload():
"""
Live Reload
Auto Reload on file change
:return:
"""
if os.environ['LIVE_RELOAD_SUPPORT'] == 'false':
print(colored(f'LIVE RELOAD - [ DISABLED ]', 'red'))
reload = '--no-livereload'
else:
print(colored(f'LIVE RELOAD - [ ENABLED ]', 'green'))
reload = ''
return reload
def _fast_mode():
"""
Fast Mode
Enables/Disables fast reload.
Enabled: build only files that got changed
Disabled: builds all files regardless of changes
:return:
"""
if os.environ['FAST_MODE'] == 'false':
print(colored(f'FAST_MODE - [ DISABLED ]', 'red'))
fast = ''
else:
print(colored(f'FAST_MODE - [ ENABLED ]', 'green'))
fast = '--dirtyreload'
return fast
def _set_auto_update(interval):
"""
Creates cron job for auto updating repository
:param interval: (every x minutes)
:return:
"""
os.system(f'crond')
cron = CronTab(user='root')
cron.remove_all()
job = cron.new(command='bootstrap update', comment='update')
job.minute.every(interval)
cron.write()
def _clone_repo(repo):
"""
Clone Documentation Code from git repository
:return:
"""
if not os.path.exists(docks_dir + '/mkdocs.yml'):
print(colored(f'Getting documentation from: {repo}', 'green'))
git.Repo.clone_from(repo, docks_dir, branch=git_branch)
if auto_update == 'true':
print(colored(f'AUTO_UPDATE - [ ENABLED ]', 'green'))
print(
colored(f'UPDATE_INTERVAL set to every {interval} minute/s', 'green'))
_set_auto_update(interval)
def update_repo():
"""
Fetching latest changes
:return:
"""
repo = git.Repo(docks_dir)
for remote in repo.remotes:
remote.fetch()
remote.pull()
headcommit = repo.head.commit
commit_date = datetime.fromtimestamp(headcommit.authored_date)
print(colored(
f'Pulled branch: {git_branch} \nCommit: {headcommit.hexsha} \nCommit Message: {headcommit.message}Date: {commit_date} \nAuthor: {headcommit.committer.name}',
'green'))