You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.8 KiB
80 lines
1.8 KiB
# -*- coding: utf-8 -*- |
|
|
|
import os |
|
import shutil |
|
import sys |
|
import datetime |
|
|
|
from invoke import task |
|
from invoke.util import cd |
|
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer |
|
|
|
CONFIG = { |
|
# Local path configuration (can be absolute or relative to tasks.py) |
|
'deploy_path': 'output', |
|
# Remote server configuration |
|
'production': 'alex@www.alextee.org:22', |
|
'dest_path': '/var/www/alextee', |
|
# Port for `serve` |
|
'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 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)) |
|
|
|
|