From 6c72a8b8e343f95b23a68adbf80c403785ab8cd3 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 17 Jun 2019 11:48:59 +0200 Subject: [PATCH] Add livereload, fix static path and update README --- README.md | 41 +++++++++++++++++++++++++++-------------- pelicanconf.py | 4 ++-- tasks.py | 36 ++++++++++++++++++++---------------- 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index c5b553e..9b038a4 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,22 @@ # nooo-hbsc -Revamped homebrewserver.club website. +The new homebrewserver.club website. + +> https://homebrewserver.club/ ## Build the site locally -### Preparing your system +### System requirements -Install the prerequisites: +Install the system requirements: ```bash -$ apt install -y python3 python-3 python3-venv +$ apt install -y python3 python3-dev python3-venv ``` -### Installing the Python requirements +### Python requirements -Then create a virtual environment and activate it with: +Then create a virtual environment and activate it: ```bash $ python3 -m venv .venv @@ -24,13 +26,13 @@ $ source .venv/bin/activate Then install the requirements: ```bash -$ pip install pelican markdown +$ pip install -r requirements.txt ``` -Then generate the content and run the server: - ### Generating the site +Generate the content and run the server: + ```bash $ pelican content $ pelican --listen @@ -40,13 +42,24 @@ Then the site is available at the following URL: > http://localhost:8000 -### Working on the site +## Working with the site -Run the following: +* Website articles and content is in [content](./content) +* The website structure is in [themes/homebrewtheme](./themes/homebrewserver) + +While working on the site, you can run the following: ```bash -$ pelican --autoreload --listen +$ invoke livereload ``` -And then you can edit the files and the site will regenerate each time -automatically. It is faster this way to review what you are working on. +And then the Pelican development server will automatically reload +when you make changes. + +## Deploying the site + +Just run the usual: + +``` +$ git push origin master +``` diff --git a/pelicanconf.py b/pelicanconf.py index ee5c8c6..f3a3d1f 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -22,6 +22,6 @@ DEFAULT_PAGINATION = False THEME = 'themes/homebrewtheme' -STATIC_PATHS = ['static'] +STATIC_PATHS = ['staticfiles'] -DISPLAY_CATEGORIES_ON_MENU = True \ No newline at end of file +DISPLAY_CATEGORIES_ON_MENU = True diff --git a/tasks.py b/tasks.py index 2e388bc..f6f9ff9 100644 --- a/tasks.py +++ b/tasks.py @@ -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'])