Skip to content

Instantly share code, notes, and snippets.

@rahul286
Last active August 29, 2015 14:16
Show Gist options
  • Save rahul286/2ca2c2632c677f654eb0 to your computer and use it in GitHub Desktop.
Save rahul286/2ca2c2632c677f654eb0 to your computer and use it in GitHub Desktop.
git-webhook in php

Usage

You can user any of above. All are same.

Just make sure you edit $repos.

<?php
$repos  = array(
    'bad-plugin' => array (
                'branch' => 'master',
                'localpath' => '/var/www/wcmum.rtcamp.net/htdocs/wp-content/plugins/bad-plugin'
                ),
    'other-plugin' => array (
                'branch' => 'master',
                'localpath' => '/var/www/wcmum.rtcamp.net/htdocs/wp-content/plugins/other-plugin'
                )

  );
?>

TODO

  1. Add github secret support
  2. Add base-path support for wordpress projects to avoid repeating /path/to/wp-content. With absolute/relative path check on localpath.
<?php
// array - repo names and local filesystem path and branch
$repos = array(
'bad-plugin' => array (
'branch' => 'master',
'localpath' => '/var/www/example.com/htdocs/wp-content/plugins/bad-plugin'
)
);
rt_write_log("Hello at " . date("D M j G:i:s T Y") );
rt_write_log("Raw Input Dump (HTTP POST)");
rt_write_log(file_get_contents("php://input"));
$payload = json_decode(file_get_contents("php://input"));
if (!$payload) {
rt_write_log( "NULL paylod. EXIT ") ;
exit();
}
rt_write_log("Dump payload");
rt_write_log($payload);
rt_write_log("Dump Repos Array");
rt_write_log($repos);
rt_write_log("Dump macthing keys from array based on payload");
rt_write_log($repos[$payload->repository->name]);
rt_write_log($repos[$payload->repository->name]['branch']);
rt_write_log($repos[$payload->repository->name]['localpath']);
$remote_branch = end(explode('/',$payload->ref));
rt_write_log("Extract remote branch");
rt_write_log($remote_branch);
if( !isset($repos[$payload->repository->name]['branch'])
|| $repos[$payload->repository->name]['branch'] == $remote_branch ){
rt_write_log("Inside if-else block");
$command = 'cd ' . $repos[$payload->repository->name]['localpath'] . '/ && git reset --hard HEAD && git pull' ;
rt_write_log($command);
$res = shell_exec($command);
rt_write_log($res);
rt_write_log("FINISHED ". date("D M j G:i:s T Y") );
}
function rt_write_log($str){
if(is_string($str)){
file_put_contents("hook.log", "\n\n" . $str ."\n\n" , FILE_APPEND );
}elseif(is_array($str)){
rt_write_log ( var_export($str, true) ) ;
}elseif(is_object($str)){
rt_write_log ( var_export((array)$str, true) ) ;
}else{
rt_write_log("ERROR: Paramter is not string or array. Instead it's " . gettype($str) );
}
}
?>
<?php
// array - repo names and local filesystem path and branch
$repos = array(
'bad-plugin' => array (
'branch' => 'master',
'localpath' => '/var/www/wcmum.rtcamp.net/htdocs/wp-content/plugins/bad-plugin'
),
'other-plugin' => array (
'branch' => 'master',
'localpath' => '/var/www/wcmum.rtcamp.net/htdocs/wp-content/plugins/other-plugin'
)
);
$payload = json_decode(file_get_contents("php://input"));
if (!$payload) exit();
}
$remote_branch = end(explode('/',$payload->ref));
if( !isset($repos[$payload->repository->name]['branch'])
|| $repos[$payload->repository->name]['branch'] == $remote_branch ){
$command = 'cd ' . $repos[$payload->repository->name]['localpath'] . '/ && git reset --hard HEAD && git pull' ;
$res = shell_exec($command);
}
?>
<?php
// array - repo names and local filesystem path and branch
$repos = array(
'bad-plugin' => array (
'branch' => 'master',
'localpath' => '/var/www/wcmum.rtcamp.net/htdocs/wp-content/plugins/bad-plugin'
)
);
$payload = json_decode(file_get_contents("php://input"));
if (!$payload) exit();
}
$remote_branch = end(explode('/',$payload->ref));
if( !isset($repos[$payload->repository->name]['branch'])
|| $repos[$payload->repository->name]['branch'] == $remote_branch ){
$command = 'cd ' . $repos[$payload->repository->name]['localpath'] . '/ && git reset --hard HEAD && git pull' ;
$res = shell_exec($command);
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment