So, in my first blog post I will describe howto use GitHub to serve a Blogofile Blog, which I have done with this blog. ### First, what is Blogofile? Blogofile is a framework for static websites. You don’t need a webserver and no database, only webspace. Blogofile provides templates, controllers and filters, almost like any other dynamic web frameworks and compiles them to a static website. Right now it is more or less a blogging engine but you can actually create any website you want. Have a look at the website for details.
You need 2 public repositories for that, the source code repository and the website repository that contains the compiled pages. My two repos are:
The later one is a special repository for user pages published with GitHub Pages.
The whole source code of your website with the Mako templates etc. will be
pushed to the source code repository. The command
blogofile build compiles the
website into the sub-folder
_site. The contents of this directory is what we
want to push to the website repository which GitHub will publish to the web. In
order to do that we need to create a git
with the command:
git submodule add http://github.com/mohlendo/mohlendo.github.com _site
That creates a new submodule
_site. Now every time the site is rebuild, you
can commit and push the changes to the website repository and github will
automatically publish them - in my case to
Every time blogofile recreates the website it completely clears the
directory and therefor also the
.git directory of the submodule. This leads to
a confusion of git and it cannot track changes on the compiled website anymore.
I wrote some small custom
post_build() hooks that moves the
.git directory to a temp folder and restores it after a successful build.
def pre_build(): if not os.path.isdir("_tmp"): os.mkdir("_tmp") else: shutil.rmtree("_tmp") os.mkdir("_tmp") if os.path.isdir(os.path.join("_site",".git")): shutil.move(os.path.join("_site",".git"),"_tmp") #Do whatever you want before the _site is built pass def post_build(): if os.path.isdir(os.path.join("_tmp",".git")): shutil.move(os.path.join("_tmp",".git"),"_site") #Do whatever you want after the _site is built
Sadly, blogofile only invokes the
post_build() hook when everything works
fine. When you have an error in your templates blogofile only invokes the
pre_build() hook. But destroying your submodule is no problem since you have
it on GitHub! Just delete the
_site folder and update the submodule with
git submodule update in the root folder of your blogofile project.
Quite cool, I think, because you don’t need any webserver or webspace and still have quite a nice blog! As a start you can also fork my two github repos.