Middleman Github Pages
Middleman makes creating static sites a joy, Github Pages hosts static sites for free, Middleman Github Pages brings the two together. Middleman Github Pages is just a few rake tasks that automate the process of deploying a Middleman site to Github Pages.
Installation
Add this line to your Gemfile:
gem 'middleman-gh-pages'
You'll also need to require the gem in your Rakefile:
require 'middleman-gh-pages'
Usage
Middleman Github Pages provides the following rake tasks:
rake build # Compile all files into the build directory
rake publish # Build and publish to Github Pages
The only assumption is that you are deploying to a gh-pages branch in the same
remote as the source. rake publish
will create this branch for you if it
doesn't exist.
Environment Variable Options
ALLOW_DIRTY
You cannot deploy your site if you have uncommitted changes, but you can
override this (default: nil
):
bundle exec rake publish ALLOW_DIRTY=true
COMMIT_MESSAGE_SUFFIX
You can append a custom suffix to commit messages on the build branch
(default: nil
):
bundle exec rake publish COMMIT_MESSAGE_SUFFIX="[skip-ci]"
REMOTE_NAME
You can change the remote that you deploy to (default: origin
):
bundle exec rake publish REMOTE_NAME=upstream
BRANCH_NAME
If you're publishing a personal or organization page, you may want to use the
branch master
instead of gh-pages
(default: gh-pages
):
bundle exec rake publish BRANCH_NAME=master
PROJECT_ROOT
If your middleman project isn't at the root of your repository, you will likely need to change this (default: root of git repository):
bundle exec rake publish PROJECT_ROOT=/Users/me/projects/repo/www
BUILD_DIR
If you override the default middlemant :build_dir
setting, you will likely
also need to set this variable (default: <PROJECT_ROOT>/build
):
bundle exec rake publish BUILD_DIR=/some/custom/path/to/public
Setting ENV variables from your Rakefile
Of course, for more permanent settings, you can always set these environment
variables directly in your Rakefile
instead of from the command line.
require "middleman-gh-pages"
# Ensure builds are skipped when publishing to the gh-pages branch
ENV["COMMIT_MESSAGE_SUFFIX"] = "[skip ci]"
# Ignore errors about dirty builds (not recommended)
ENV["ALLOW_DIRTY"] = "true"
Custom Domain
To set up a custom domain, you can follow the GitHub help page.
NOTE You will need to put your CNAME file in the source
directory of your middleman project, NOT in its root directory. This will result in the CNAME file being in the root of the generated static site in your gh-pages branch.
Project Page Path Issues
Since project pages deploy to a subdirectory, assets and page paths are relative to the organization or user that owns the repo. If you're treating the project pages as a standalone site, you can tell Middleman to generate relative paths for assets and links with these settings in the build configuration in config.rb
activate :relative_assets
set :relative_links, true
NOTE This only affects sites being accessed at the username.github.io/projectname
URL, not when accessed at a custom CNAME.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request