This is a serverless function to auto publish blog posts
Branch: master
Clone or download
Latest commit 5ceceae Oct 29, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
.gitignore
README.md
config.prod.example.json update all the things Mar 6, 2017
handler.js
package-lock.json link to netlify repo Oct 30, 2017
package.json remove dep Mar 7, 2017
serverless.yml
timezones.json update all the things Mar 6, 2017

README.md

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.)

Video demo

How does it work?

  1. A github webhook fires when pull requests (aka new posts) are updated.

  2. 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.

  3. A serverless cron job runs every hour to check if a post is ready to be published

  4. 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

cloudcraft - post scheduler webhook

Cron Job Architecture Overview

cloudcraft - post scheduler cron setup

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.

  1. Clone down the repository and run npm install to instal the dependencies

  2. Duplicate config.prod.example.json into a new file called config.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 account
  • region - AWS region to deploy the functions and database in
  • TIMEZONE - Timezone the cron runs on. See timezone.json for available options
  • CRON - How often you want to check for scheduled posts? See the AWS cron docs or serverless schedule docs for more information. Default: every hour on the hour
  • GITHUB_REPO - The owner/repoName of your repository
  • GITHUB_WEBHOOK_SECRET - Any string you want. This gets plugged into your webhook settings
  • GITHUB_API_TOKEN - Personal access token. See below for additonal info
  • GITHUB_USERNAME - Your github username. Used for requests to github
  1. Deploy the service with serverless deploy. If you need to setup serverless, please see these install instructions.

  2. Take the POST endpoint returned from deploy and plug it into your repositories settings in github

image

  1. Add your github webhook listener URL into the Payload URL and choose type application/json

  2. Plugin your GITHUB_WEBHOOK_SECRET defined in your config file

  3. Select which github events will trigger your webhook

  4. Select Issue comments, these will be where you insert schedule(MM/DD/YYYY H:MM pm) comments in a given PR

  5. 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