Preface
In all these years, I have changed this blog several times, switching between Blogger, Wordpress, Ghost and Jekyll + GitHub pages.
Each platform had its advantages, and I liked Jekyll and GitHub pages a lot, but sometimes I wanted to schedule posts, and it was difficult. All the other options I tried had post scheduling, but had other things I didn’t like.
A summary about what I loved about Jekyll/GitHub pages:
GitHub Pages | Ghost | Wordpress | Blogger | |
---|---|---|---|---|
Supports markdown | X | X | - | - |
Supports scheduling | - | X | X | X |
Free Ad-free Hosting | X | - | - | ! |
Total control | X | ! | ! | - |
Fast | X | X | - | - |
Secure | X | ! | - | X |
The other day I discovered GitHub actions and installed the beta.
Today I thought about how could I schedule posts in Jekyll using actions. And now I have the solution.
soywiz/github-action-jekyll-publish-drafts
to the rescue
I have created a new github action and published to the marketplace: https://github.com/soywiz/github-action-jekyll-publish-drafts
This plugin allows you to place a cron; for example each hour, and check in the _drafts
folder, the files with a frontmatter with a date
field that is older than the current time. Those files are moved to the _posts
folder changing the prefix to include the date, makes a commit and pushes it back to the repository, creating a new commit and thus producing a page generation.
How cool is that?
Using the plugin
This should work for both public and private repositories:
- You have to register to the GitHub actions beta.
- You have to create the file
.github/workflows/publish_drafts.yml
with this content:name: Publish Drafts on: schedule: - cron: '*/60 * * * *' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Jekyll Publish Drafts uses: soywiz/github-action-jekyll-publish-drafts@v1 with: github_token: ${ { secrets.GITHUB_TOKEN } } jekyll_path: ./ branch: master
It registers an action that happens every hour, that does the job. You can configure jekyll_path
and branch
parameters. For example:
jekyll_path: ./docs
branch: gh-pages
About the plugin
The plugin is written using TypeScript and executed via Node.JS using docker.
You can check the repository for further details.