Deploying Sculpin Sites to GitHub Pages
I wanted to be able to use Sculpin to generate GitHub pages. Here's what I did...
-
Created a super awesome Sculpin site from the Sculpin Blog Skeleton
-
Make sure everything is under version control in my
masterbranch (except things that shouldn't be. see the.gitignore) -
Updated
publish.sh:#!/bin/bash if [ $# -ne 1 ]; then echo "usage: ./publish.sh \"commit message\"" exit 1; fi sculpin generate --env=prod git stash git checkout gh-pages cp -R output_prod/* . rm -rf output_* git add * git commit -m "$1" git push origin --all git checkout master git stash pop
-
Now, when I need to publish, I simply run
./publish.sh "commit message".
publish.sh will:
- generate the site using
sculpin generate - Stash the changes to
master, if any - Checkout the
gh-pagesbranch - Move the generated site to the root of the project
git add -Ato add all the filesgit commit -m "$1"which includes whatever commit message you passed to./publish.shgit push origin --allto push changes to bothmasterandgh-pagesto GitHub- Checkout
master, and pop the stash to get any stashed changes to master back
It works pretty fantastically. You can checkout my sample project to see how it works.
Organization/User Pages
The process described above works for project sites, because project sites use a gh-pages branch for the website. Organization and user pages, however, use the master branch for the site of a repository named [organization].github.io.
In the case of my sample project, I actually use a branch called drafts to do the Sculpin work, which then "publishes" the changes to master, so that the website actually renders correctly.
The publish.sh looks like this:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "usage: ./publish.sh \"commit message\""
exit 1;
fi
sculpin generate --env=prod
git stash
git checkout master
cp -R output_prod/* .
rm -rf output_*
git add *
git commit -m "$1"
git push origin --all
git checkout drafts
git stash popSlightly different, same concept.
Thanks to @beausimensen for the --env=prod suggestion.
Does not work