Версия №1

This commit is contained in:
GafarovaGG
2022-05-24 17:52:25 +05:00
commit b2d0495866
808 changed files with 6827 additions and 0 deletions

View File

@ -0,0 +1,30 @@
import click
from app.mkdocs import common
"""CLI commands interface
These are the primitive operation wrappers that the CLI
will expose and be available to invoke.
In order to do so, the comprehensive Click library is used to
create commands, subcommands, parameters, flags...
.. _Click CLI library docs:
https://click.palletsprojects.com/en/7.x/#documentation
"""
@click.group(chain=True)
def cli() -> None:
"""
Bootstrap CLI
"""
@cli.command('start', help='Start Application')
def start():
common.start()
@cli.command('update', help='Update documentation code from repository')
def update():
common.update_repo()

View File

@ -0,0 +1,138 @@
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'))