Last active
October 17, 2024 17:17
-
-
Save marcelosomers/8305065 to your computer and use it in GitHub Desktop.
A basic webhook for deploying updates to repos on Github to your local server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* This script is for easily deploying updates to Github repos to your local server. It will automatically git clone or | |
* git pull in your repo directory every time an update is pushed to your $BRANCH (configured below). | |
* | |
* Read more about how to use this script at http://behindcompanies.com/2014/01/a-simple-script-for-deploying-code-with-githubs-webhooks/ | |
* | |
* INSTRUCTIONS: | |
* 1. Edit the variables below | |
* 2. Upload this script to your server somewhere it can be publicly accessed | |
* 3. Make sure the apache user owns this script (e.g., sudo chown www-data:www-data webhook.php) | |
* 4. (optional) If the repo already exists on the server, make sure the same apache user from step 3 also owns that | |
* directory (i.e., sudo chown -R www-data:www-data) | |
* 5. Go into your Github Repo > Settings > Service Hooks > WebHook URLs and add the public URL | |
* (e.g., http://example.com/webhook.php) | |
* | |
**/ | |
// Set Variables | |
$LOCAL_ROOT = "/path/to/repo/parent/directory"; | |
$LOCAL_REPO_NAME = "REPO_NAME"; | |
$LOCAL_REPO = "{$LOCAL_ROOT}/{$LOCAL_REPO_NAME}"; | |
$REMOTE_REPO = "[email protected]:username/reponame.git"; | |
$BRANCH = "master"; | |
if ( $_POST['payload'] ) { | |
// Only respond to POST requests from Github | |
if( file_exists($LOCAL_REPO) ) { | |
// If there is already a repo, just run a git pull to grab the latest changes | |
shell_exec("cd {$LOCAL_REPO} && git pull"); | |
die("done " . mktime()); | |
} else { | |
// If the repo does not exist, then clone it into the parent directory | |
shell_exec("cd {$LOCAL_ROOT} && git clone {$REMOTE_REPO}"); | |
die("done " . mktime()); | |
} | |
} | |
?> |
git pull
is simple but easy to break. This is better:
git fetch -q github main
git reset --hard github/main
git clean -d -x
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If you want to see examples with
$BRANCH
used, check out the forks. Some users have made some useful improvements to this script. You can see this script with$BRANCH
included on my fork as an example.