|
|
@ -3,22 +3,19 @@ |
|
|
|
import os |
|
|
|
import shutil |
|
|
|
import sys |
|
|
|
import datetime |
|
|
|
|
|
|
|
from invoke import task |
|
|
|
from invoke.util import cd |
|
|
|
from livereload import Server |
|
|
|
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer |
|
|
|
|
|
|
|
CONFIG = { |
|
|
|
# Local path configuration (can be absolute or relative to tasks.py) |
|
|
|
'content_path': 'content', |
|
|
|
'deploy_path': 'output', |
|
|
|
# Remote server configuration |
|
|
|
'production': 'lidia@varia.zone:12345', |
|
|
|
'dest_path': '/var/www/homebrewserver.club', |
|
|
|
# Port for `serve` |
|
|
|
'port': 8000, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@task |
|
|
|
def clean(c): |
|
|
|
"""Remove generated files""" |
|
|
@ -26,21 +23,25 @@ def clean(c): |
|
|
|
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/""" |
|
|
@ -49,19 +50,20 @@ def serve(c): |
|
|
|
allow_reuse_address = True |
|
|
|
|
|
|
|
server = AddressReuseTCPServer( |
|
|
|
CONFIG['deploy_path'], |
|
|
|
('', CONFIG['port']), |
|
|
|
ComplexHTTPRequestHandler) |
|
|
|
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""" |
|
|
@ -70,11 +72,13 @@ def preview(c): |
|
|
|
|
|
|
|
@task |
|
|
|
def publish(c): |
|
|
|
"""Publish to production via rsync""" |
|
|
|
c.run('pelican -s publishconf.py') |
|
|
|
c.run( |
|
|
|
'rsync --delete --exclude ".DS_Store" -pthrvz -c ' |
|
|
|
'{} {production}:{dest_path}'.format( |
|
|
|
CONFIG['deploy_path'].rstrip('/') + '/', |
|
|
|
**CONFIG)) |
|
|
|
"""Publish to production via Git hook""" |
|
|
|
c.run('git push origin master') |
|
|
|
|
|
|
|
|
|
|
|
@task |
|
|
|
def livereload(c): |
|
|
|
"""Get automatic live reloading when hacking on the site""" |
|
|
|
server = Server() |
|
|
|
server.watch(CONFIG['content_path'], lambda: build(c)) |
|
|
|
server.serve(root=CONFIG['deploy_path'], port=CONFIG['port']) |
|
|
|