rem
This commit is contained in:
@@ -1,12 +0,0 @@
|
|||||||
[[source]]
|
|
||||||
name = "pypi"
|
|
||||||
url = "https://pypi.org/simple"
|
|
||||||
verify_ssl = true
|
|
||||||
|
|
||||||
[dev-packages]
|
|
||||||
|
|
||||||
[packages]
|
|
||||||
click = "*"
|
|
||||||
|
|
||||||
[requires]
|
|
||||||
python_version = "3.8"
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
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()
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
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'))
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
from app.cli import cli
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
cli()
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
from setuptools import setup
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name='bootstrap',
|
|
||||||
version='1.0.0',
|
|
||||||
py_modules=['bootstrap'],
|
|
||||||
include_package_data=True,
|
|
||||||
install_requires=[
|
|
||||||
'click', 'termcolor', 'GitPython', 'python-crontab'
|
|
||||||
],
|
|
||||||
entry_points='''
|
|
||||||
[console_scripts]
|
|
||||||
bootstrap=app.cli:cli
|
|
||||||
''',
|
|
||||||
)
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
Host *
|
|
||||||
StrictHostKeyChecking no
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "ecm-administrator-manuals",
|
"name": "ecm-administrator-manuals",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"description": "ecm-administrator-manuals doc"
|
"description": "ecm-administrator-manuals doc"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user