Static Site Post Scheduler
The post scheduler is a serverless project that gives static site owners the ability to schedule posts (or other site content).
It works with any static site setup (Jekyll, Hugo, Phenomic, Gatsby etc.)
How does it work?
-
A github webhook fires when pull requests (aka new posts) are updated.
-
If the pull request comment has a comment matching
schedule(MM/DD/YYYY H:MM pm)
and the person is a collaborator on the project, the post gets scheduled for you. -
A serverless cron job runs every hour to check if a post is ready to be published
-
When the post is ready to be published, the cron function automatically merges the branch into
master
and your site, if you have CI/CD built in, will redeploy itself.
To cancel scheduled posts, delete the scheduled comment and it will unschedule the branch.
Github Webhook Architecture Overview
Cron Job Architecture Overview
Install Instructions
You will need the serverless framework installed and an AWS account configured on your computer to deploy this for your repo.
npm install serverless -g
Then watch the scheduler setup and usage videos or follow the instructions below.
-
Clone down the repository and run
npm install
to instal the dependencies -
Duplicate
config.prod.example.json
into a new file calledconfig.prod.json
and insert your Github username, API token, and webhook secret
// config.prod.json
{
"serviceName": "blog-scheduler",
"region": "us-west-2",
"TIMEZONE": "America/Los_Angeles",
"CRON": "cron(0 * * * ? *)",
"GITHUB_REPO": "serverless/blog",
"GITHUB_WEBHOOK_SECRET": "YOUR_GITHUB_WEBHOOK_SECRET_HERE",
"GITHUB_API_TOKEN": "YOUR_GITHUB_API_TOKEN_HERE",
"GITHUB_USERNAME": "YOUR_GITHUB_USERNAME_HERE"
}
serviceName
- name of the service that will appear in your AWS accountregion
- AWS region to deploy the functions and database inTIMEZONE
- Timezone the cron runs on. Seetimezone.json
for available optionsCRON
- How often you want to check for scheduled posts? See the AWS cron docs or serverlessschedule
docs for more information. Default: every hour on the hourGITHUB_REPO
- Theowner/repoName
of your repositoryGITHUB_WEBHOOK_SECRET
- Any string you want. This gets plugged into your webhook settingsGITHUB_API_TOKEN
- Personal access token. See below for additonal infoGITHUB_USERNAME
- Your github username. Used for requests to github
-
Deploy the service with
serverless deploy
. If you need to setup serverless, please see these install instructions. -
Take the POST endpoint returned from deploy and plug it into your repositories settings in github
-
Add your github webhook listener URL into the
Payload URL
and choose typeapplication/json
-
Plugin your
GITHUB_WEBHOOK_SECRET
defined in your config file -
Select which github events will trigger your webhook
-
Select Issue comments, these will be where you insert
schedule(MM/DD/YYYY H:MM pm)
comments in a given PR -
Submit a PR and give it a go!
Contributions Welcome
Have an idea on how we can improve the static site post scheduler?
Submit a PR, post an issue or tweet @DavidWells