PHP Jekyll Post Receive Hook
A post commit hook for Jekyll, created in PHP. This hook supports multiple sites being
built using Jekyll and managed through GitHub repositories and is perfect for those using
a VPS or server to host Jekyll sites.
Dependencies
This Post Receive Hook requires the following to be installed on the server to work:
- Apache httpd
- PHP5
- Jekyll
- GIT
Setup
To setup and use this Post Receive Hook:
- Setup a virtual host in Apache for the Post Receive Hook
- Clone this repository:
git clone https://github.com/klcodanr/PHP-Jekyll-Post-Recieve-Hook [my-vhost-name]
into the virtual host directory
- Copy the sample-config.json to config.json and update the settings for your environment
- Configure the permissions on your server so the web server user has permissions to
write to a project and output folder
- Update your GitHub Repository to add the webook
http://[your-virtual-host]/hook.php
Logging
The hook will log every request received to the error log configured in Apache. If you
are unsure if your hook is working, this file should provide detailed logs for you to
analyze.
Settings
The config.json file is used to configure the PHP Jekyll Post Receive Hook. The format of
the file is as follows:
{
"env": {
"rvm_path": "/usr/local/rvm",
},
"git_path": "git",
"jekyll_path": "/usr/local/bin/jekyll",
"projects_root": "/var/scratch",
"sites": {
"https://github.com/user/repo":{
"id": "repo",
"jekyll_args": "build -d /var/www/html",
"project_dir": "/var/somewhereelse/project",
"additional_commands": [
"pwd",
"ps -ef | grep ruby"
]
}
},
"time_limit": 0
}
These settings mean:
- env - Environment variables to pass when calling the system commands
- git_path - The path to the git executable, generally should be in the path
- jekyll_path - The path to the Jekyll executable, often
/usr/local/bin/jekyll
- projects_root - The root path for the projects folder. If a site does not have a
path set, the path for the project for that site will be {projects_root}/{site.id}
- sites - Holds all of the sites configurations, each site configuration is keyed by
site's GitHub repository URL
- time_limit - The limit for the PHP script to run, generally 0 or a very large number
Each site can have the following settings:
- id - required, an id for the site, generally probably the same as the repository name
- jekyll_args - Arguments passed into the jekyll command, if not specified, build will
be used
- project_dir - The project directory for the site, will be used instead of concatenating
the
projects_root and site id
- additional_commands - each of these commands will be executed after the Jekyll build
is complete