139 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			139 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | 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')) |