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.
104 lines
3.0 KiB
104 lines
3.0 KiB
from fabric.api import * |
|
import fabric.contrib.project as project |
|
import os |
|
import shutil |
|
import sys |
|
import SimpleHTTPServer |
|
import SocketServer |
|
|
|
|
|
theme_path = '/Volumes/momentus-xt/home/sipp11/dev/pelican-themes/twenty-html5up/' |
|
# Local path configuration (can be absolute or relative to fabfile) |
|
env.deploy_path = 'output' |
|
DEPLOY_PATH = env.deploy_path |
|
|
|
# Remote server configuration |
|
production = 'root@localhost:22' |
|
dest_path = '/var/www' |
|
|
|
# Rackspace Cloud Files configuration settings |
|
# env.cloudfiles_username = 'my_rackspace_username' |
|
# env.cloudfiles_api_key = 'my_rackspace_api_key' |
|
# env.cloudfiles_container = 'my_cloudfiles_container' |
|
|
|
# Github Pages configuration |
|
env.github_pages_branch = "gh-pages" |
|
|
|
# Port for `serve` |
|
PORT = 8000 |
|
|
|
def clean(): |
|
"""Remove generated files""" |
|
if os.path.isdir(DEPLOY_PATH): |
|
shutil.rmtree(DEPLOY_PATH) |
|
os.makedirs(DEPLOY_PATH) |
|
|
|
def build(): |
|
"""Build local version of site""" |
|
local('pelican -s pelicanconf.py') |
|
|
|
def rebuild(): |
|
"""`clean` then `build`""" |
|
clean() |
|
build() |
|
|
|
def regenerate(): |
|
"""Automatically regenerate site upon file modification""" |
|
local('pelican -r -s pelicanconf.py') |
|
|
|
def serve(): |
|
"""Serve site at http://localhost:8000/""" |
|
os.chdir(env.deploy_path) |
|
|
|
class AddressReuseTCPServer(SocketServer.TCPServer): |
|
allow_reuse_address = True |
|
|
|
server = AddressReuseTCPServer(('', PORT), SimpleHTTPServer.SimpleHTTPRequestHandler) |
|
|
|
sys.stderr.write('Serving on port {0} ...\n'.format(PORT)) |
|
server.serve_forever() |
|
|
|
def reserve(): |
|
"""`build`, then `serve`""" |
|
build() |
|
serve() |
|
|
|
def preview(): |
|
"""Build production version of site""" |
|
local('pelican -s publishconf.py') |
|
|
|
def cf_upload(): |
|
"""Publish to Rackspace Cloud Files""" |
|
rebuild() |
|
with lcd(DEPLOY_PATH): |
|
local('swift -v -A https://auth.api.rackspacecloud.com/v1.0 ' |
|
'-U {cloudfiles_username} ' |
|
'-K {cloudfiles_api_key} ' |
|
'upload -c {cloudfiles_container} .'.format(**env)) |
|
|
|
@hosts(production) |
|
def publish(): |
|
"""Publish to production via rsync""" |
|
local('pelican -s publishconf.py') |
|
project.rsync_project( |
|
remote_dir=dest_path, |
|
exclude=".DS_Store", |
|
local_dir=DEPLOY_PATH.rstrip('/') + '/', |
|
delete=True, |
|
extra_opts='-c', |
|
) |
|
|
|
def gh_pages(): |
|
"""Publish to GitHub Pages""" |
|
rebuild() |
|
local("ghp-import -b {github_pages_branch} {deploy_path}".format(**env)) |
|
local("git push origin {github_pages_branch}".format(**env)) |
|
|
|
|
|
def collectstatic(): |
|
if os.path.isdir(DEPLOY_PATH): |
|
local('mkdir -p {deploy_path}/css/ {deploy_path}/js/ {deploy_path}/fonts/ {deploy_path}/images/'.format(**env)) |
|
local('cp -rf {theme_path}/twenty/static/css/* {deploy_path}/css/'.format(**env)) |
|
local('cp -rf {theme_path}/twenty/static/js/* {deploy_path}/js/'.format(**env)) |
|
local('cp -rf {theme_path}/twenty/static/fonts/* {deploy_path}/fonts/'.format(**env)) |
|
local('cp -rf {theme_path}/twenty/static/images/* {deploy_path}/images/'.format(**env))
|
|
|