-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Paweł Fertyk
committed
Sep 20, 2016
0 parents
commit 94c5e16
Showing
7 changed files
with
394 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
output/* | ||
*.py[cod] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
PY?=python3 | ||
PELICAN?=pelican | ||
PELICANOPTS= | ||
|
||
BASEDIR=$(CURDIR) | ||
INPUTDIR=$(BASEDIR)/content | ||
OUTPUTDIR=$(BASEDIR)/output | ||
CONFFILE=$(BASEDIR)/pelicanconf.py | ||
PUBLISHCONF=$(BASEDIR)/publishconf.py | ||
|
||
FTP_HOST=localhost | ||
FTP_USER=anonymous | ||
FTP_TARGET_DIR=/ | ||
|
||
SSH_HOST=localhost | ||
SSH_PORT=22 | ||
SSH_USER=root | ||
SSH_TARGET_DIR=/var/www | ||
|
||
S3_BUCKET=my_s3_bucket | ||
|
||
CLOUDFILES_USERNAME=my_rackspace_username | ||
CLOUDFILES_API_KEY=my_rackspace_api_key | ||
CLOUDFILES_CONTAINER=my_cloudfiles_container | ||
|
||
DROPBOX_DIR=~/Dropbox/Public/ | ||
|
||
GITHUB_PAGES_BRANCH=gh-pages | ||
|
||
DEBUG ?= 0 | ||
ifeq ($(DEBUG), 1) | ||
PELICANOPTS += -D | ||
endif | ||
|
||
RELATIVE ?= 0 | ||
ifeq ($(RELATIVE), 1) | ||
PELICANOPTS += --relative-urls | ||
endif | ||
|
||
help: | ||
@echo 'Makefile for a pelican Web site ' | ||
@echo ' ' | ||
@echo 'Usage: ' | ||
@echo ' make html (re)generate the web site ' | ||
@echo ' make clean remove the generated files ' | ||
@echo ' make regenerate regenerate files upon modification ' | ||
@echo ' make publish generate using production settings ' | ||
@echo ' make serve [PORT=8000] serve site at http://localhost:8000' | ||
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 ' | ||
@echo ' make devserver [PORT=8000] start/restart develop_server.sh ' | ||
@echo ' make stopserver stop local server ' | ||
@echo ' make ssh_upload upload the web site via SSH ' | ||
@echo ' make rsync_upload upload the web site via rsync+ssh ' | ||
@echo ' make dropbox_upload upload the web site via Dropbox ' | ||
@echo ' make ftp_upload upload the web site via FTP ' | ||
@echo ' make s3_upload upload the web site via S3 ' | ||
@echo ' make cf_upload upload the web site via Cloud Files' | ||
@echo ' make github upload the web site via gh-pages ' | ||
@echo ' ' | ||
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html ' | ||
@echo 'Set the RELATIVE variable to 1 to enable relative urls ' | ||
@echo ' ' | ||
|
||
html: | ||
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) | ||
|
||
clean: | ||
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR) | ||
|
||
regenerate: | ||
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) | ||
|
||
serve: | ||
ifdef PORT | ||
cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT) | ||
else | ||
cd $(OUTPUTDIR) && $(PY) -m pelican.server | ||
endif | ||
|
||
serve-global: | ||
ifdef SERVER | ||
cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 $(SERVER) | ||
else | ||
cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 0.0.0.0 | ||
endif | ||
|
||
|
||
devserver: | ||
ifdef PORT | ||
$(BASEDIR)/develop_server.sh restart $(PORT) | ||
else | ||
$(BASEDIR)/develop_server.sh restart | ||
endif | ||
|
||
stopserver: | ||
$(BASEDIR)/develop_server.sh stop | ||
@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.' | ||
|
||
publish: | ||
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS) | ||
|
||
ssh_upload: publish | ||
scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) | ||
|
||
rsync_upload: publish | ||
rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude | ||
|
||
dropbox_upload: publish | ||
cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR) | ||
|
||
ftp_upload: publish | ||
lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit" | ||
|
||
s3_upload: publish | ||
s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed --guess-mime-type | ||
|
||
cf_upload: publish | ||
cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) . | ||
|
||
github: publish | ||
ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR) | ||
git push origin $(GITHUB_PAGES_BRANCH) | ||
|
||
.PHONY: html help clean regenerate serve serve-global devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
#!/usr/bin/env bash | ||
## | ||
# This section should match your Makefile | ||
## | ||
PY=${PY:-python3} | ||
PELICAN=${PELICAN:-pelican} | ||
PELICANOPTS= | ||
|
||
BASEDIR=$(pwd) | ||
INPUTDIR=$BASEDIR/content | ||
OUTPUTDIR=$BASEDIR/output | ||
CONFFILE=$BASEDIR/pelicanconf.py | ||
|
||
### | ||
# Don't change stuff below here unless you are sure | ||
### | ||
|
||
SRV_PID=$BASEDIR/srv.pid | ||
PELICAN_PID=$BASEDIR/pelican.pid | ||
|
||
function usage(){ | ||
echo "usage: $0 (stop) (start) (restart) [port]" | ||
echo "This starts Pelican in debug and reload mode and then launches" | ||
echo "an HTTP server to help site development. It doesn't read" | ||
echo "your Pelican settings, so if you edit any paths in your Makefile" | ||
echo "you will need to edit your settings as well." | ||
exit 3 | ||
} | ||
|
||
function alive() { | ||
kill -0 $1 >/dev/null 2>&1 | ||
} | ||
|
||
function shut_down(){ | ||
PID=$(cat $SRV_PID) | ||
if [[ $? -eq 0 ]]; then | ||
if alive $PID; then | ||
echo "Stopping HTTP server" | ||
kill $PID | ||
else | ||
echo "Stale PID, deleting" | ||
fi | ||
rm $SRV_PID | ||
else | ||
echo "HTTP server PIDFile not found" | ||
fi | ||
|
||
PID=$(cat $PELICAN_PID) | ||
if [[ $? -eq 0 ]]; then | ||
if alive $PID; then | ||
echo "Killing Pelican" | ||
kill $PID | ||
else | ||
echo "Stale PID, deleting" | ||
fi | ||
rm $PELICAN_PID | ||
else | ||
echo "Pelican PIDFile not found" | ||
fi | ||
} | ||
|
||
function start_up(){ | ||
local port=$1 | ||
echo "Starting up Pelican and HTTP server" | ||
shift | ||
$PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS & | ||
pelican_pid=$! | ||
echo $pelican_pid > $PELICAN_PID | ||
cd $OUTPUTDIR | ||
$PY -m pelican.server $port & | ||
srv_pid=$! | ||
echo $srv_pid > $SRV_PID | ||
cd $BASEDIR | ||
sleep 1 | ||
if ! alive $pelican_pid ; then | ||
echo "Pelican didn't start. Is the Pelican package installed?" | ||
return 1 | ||
elif ! alive $srv_pid ; then | ||
echo "The HTTP server didn't start. Is there another service using port" $port "?" | ||
return 1 | ||
fi | ||
echo 'Pelican and HTTP server processes now running in background.' | ||
} | ||
|
||
### | ||
# MAIN | ||
### | ||
[[ ($# -eq 0) || ($# -gt 2) ]] && usage | ||
port='' | ||
[[ $# -eq 2 ]] && port=$2 | ||
|
||
if [[ $1 == "stop" ]]; then | ||
shut_down | ||
elif [[ $1 == "restart" ]]; then | ||
shut_down | ||
start_up $port | ||
elif [[ $1 == "start" ]]; then | ||
if ! start_up $port; then | ||
shut_down | ||
fi | ||
else | ||
usage | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
from fabric.api import * | ||
import fabric.contrib.project as project | ||
import os | ||
import shutil | ||
import sys | ||
import SocketServer | ||
|
||
from pelican.server import ComplexHTTPRequestHandler | ||
|
||
# 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), ComplexHTTPRequestHandler) | ||
|
||
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- # | ||
from __future__ import unicode_literals | ||
|
||
AUTHOR = 'Paweł Fertyk' | ||
SITENAME = 'pfertyk.me' | ||
SITEURL = '' | ||
|
||
PATH = 'content' | ||
|
||
TIMEZONE = 'Europe/Warsaw' | ||
|
||
DEFAULT_LANG = 'en' | ||
|
||
# Feed generation is usually not desired when developing | ||
FEED_ALL_ATOM = None | ||
CATEGORY_FEED_ATOM = None | ||
TRANSLATION_FEED_ATOM = None | ||
AUTHOR_FEED_ATOM = None | ||
AUTHOR_FEED_RSS = None | ||
|
||
# Blogroll | ||
LINKS = (('Pelican', 'http://getpelican.com/'), | ||
('Python.org', 'http://python.org/'), | ||
('Jinja2', 'http://jinja.pocoo.org/'), | ||
('You can modify those links in your config file', '#'),) | ||
|
||
# Social widget | ||
SOCIAL = (('You can add links in your config file', '#'), | ||
('Another social link', '#'),) | ||
|
||
DEFAULT_PAGINATION = 10 | ||
|
||
# Uncomment following line if you want document-relative URLs when developing | ||
#RELATIVE_URLS = True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- # | ||
from __future__ import unicode_literals | ||
|
||
# This file is only used if you use `make publish` or | ||
# explicitly specify it as your config file. | ||
|
||
import os | ||
import sys | ||
sys.path.append(os.curdir) | ||
from pelicanconf import * | ||
|
||
SITEURL = 'http://pfertyk.me' | ||
RELATIVE_URLS = False | ||
|
||
FEED_ALL_ATOM = 'feeds/all.atom.xml' | ||
CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml' | ||
|
||
DELETE_OUTPUT_DIRECTORY = True | ||
|
||
# Following items are often useful when publishing | ||
|
||
#DISQUS_SITENAME = "" | ||
#GOOGLE_ANALYTICS = "" |
Oops, something went wrong.