You can follow the "initial steps" below or just remix this glitch project and continue in the next section.
Click here to reveal the initial steps
- Go to glitch.com and create a new
hello-express
app. - Open the
package.json
file and add the following packages:
node-cmd
body-parser
- Open the
server.js
file and load the following libraries:
const cmd = require('node-cmd');
const crypto = require('crypto');
const bodyParser = require('body-parser');
- Look for
app.use(express.static('public'));
and add the following line below:
app.use(bodyParser.json());
- Create a post endpoint to receive the GitHub webhook:
const onWebhook = (req, res) => {
let hmac = crypto.createHmac('sha1', process.env.SECRET);
let sig = `sha1=${hmac.update(JSON.stringify(req.body)).digest('hex')}`;
if (req.headers['x-github-event'] === 'push' && sig === req.headers['x-hub-signature']) {
cmd.run('chmod 777 ./git.sh');
cmd.get('./git.sh', (err, data) => {
if (data) {
console.log(data);
}
if (err) {
console.log(err);
}
})
cmd.run('refresh');
}
return res.sendStatus(200);
}
app.post('/git', onWebhook);
- Create a
git.sh
file adding the following lines:
#/bin/sh
# Fetch the newest code
git fetch origin master
# Hard reset
git reset --hard origin/master
# Force pull
git pull origin master --force
This file will be in charge of pulling the changes from your Github repo.
- Open the
.env
file and set a SECRET:
SECRET=cirrus-socrates-particle-decibel-hurricane-dolphin-tulip
- Open the glitch console for your project and generate a new SSH key with:
ssh-keygen
Just press <Enter>
to accept all the questions.
- Read the content of the
.ssh/id_rsa.pub
file with:
cat .ssh/id_rsa.pub
Then copy the string to your clipboard.
- Create a new GitHub repo with a
README.me
file (or any other file, it's important that the project is not empty). - Go to the
deploy keys
section of the settings page of your GitHub project. - Click on
Add deploy key
and add the SSH key you generated in the step #8; addglitch.com
in the title field. - Check the
Allow write access
box too. - Now open the
webhooks
section and add a new webhook (replacingPROJECT_NAME
with your actual project name):
Payload URL: https://PROJECT_NAME.glitch.me/git
Content type: application/json
Secret: use the SECRET you set up in your glitch project
The rest of the defaults are OK.
-
Go back to your Glitch project and export your project to GitHub (that will create a new
glitch
branch in your GitHub repo): Tools > Git, Import, and Export > Export to GitHub. -
In the Glitch console, set the remote origin to the master branch of your GitHub project:
git remote add origin git@github.com:USERNAME/PROJECT.git
git pull
git branch --set-upstream-to=origin/master master
- Clone your repo in your dev machine and merge the newly created
glitch
branch with the master branch:
git fetch
git merge master origin/glitch
- In your dev machine, create a dummy test file (like
hello.txt
) and commit it. - Push the changes with
git push
.
If everything is OK, your Glitch project should be updated, and a hello.txt
file should appear in the list of files.
If you don't see it, have a look to the log of your Glitch project.
This should be the default method of updating your project. Develop in your dev machine, commit the changes and do a git push
If you change something in Glitch, first you'll need to export your project to GitHub and then merge the glitch
branch with your master branch.
git merge glitch
git push
While I've detailed all the steps and added information on how to add a deploy key, the overall solution (including the git.sh
and webhook sync code) comes from this post by @jarvis394 on the glitch forum.