# -*- coding: utf-8 -*- import os import shutil import sys from invoke import task from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer CONFIG = { 'content_path': 'content', 'deploy_path': 'output', 'dest_path': '/var/www/homebrewserver.club', 'port': 8000, } @task def clean(c): """Remove generated files""" if os.path.isdir(CONFIG['deploy_path']): shutil.rmtree(CONFIG['deploy_path']) os.makedirs(CONFIG['deploy_path']) @task def build(c): """Build local version of site""" c.run('pelican -s pelicanconf.py') @task def rebuild(c): """`build` with the delete switch""" c.run('pelican -d -s pelicanconf.py') @task def regenerate(c): """Automatically regenerate site upon file modification""" c.run('pelican -r -s pelicanconf.py') @task def serve(c): """Serve site at http://localhost:8000/""" class AddressReuseTCPServer(RootedHTTPServer): allow_reuse_address = True server = AddressReuseTCPServer( CONFIG['deploy_path'], ('', CONFIG['port']), ComplexHTTPRequestHandler ) sys.stderr.write('Serving on port {port} ...\n'.format(**CONFIG)) server.serve_forever() @task def reserve(c): """`build`, then `serve`""" build(c) serve(c) @task def preview(c): """Build production version of site""" c.run('pelican -s publishconf.py') @task def publish(c): """Publish to production via Git hook""" # TODO: use generation and rsync here for publishing # also update README.md "Deploying the site" instructions c.run('git push origin master')