Using custom software with Github Actions to deploy a site
By default, GitHub uses Jekyll for their site generator which is fine, but it has some issues and the complexity is not really worth it for me.
You could argue that Jekyll is simple, which it is to some degree, but it can become complicated quite quickly if you start adding your own spin on things.
A while ago I wrote a simple static site generator called "jbmafp - Just Build Me A Fucking Page" which was a protest against Hugo. Hugo is fine but again, if you try doing something that conflicts with the dogma they prescribe you are in trouble.
I also moved this blog from self-hosted virtual machine to just GitHub
Pages. I didn't want to bother myself managing that server anymore. And
this presented a slight problem because I didn't want to use the default
_docs
folder GitHub wants you to use, and I also didn't want to upload
public
folder that gets generated to GitHub.
Thankfully, there is a way to use custom software to generate your site
like jbmafp
.
To achieve this you need to create a file .github/workflows/deploy.yaml
in the root of your repository.
name: Build and Deploy to Pages
on:
push:
branches: ["master"]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Run a multi-line script
run: |
wget https://github.com/mitjafelicijan/jbmafp/releases/download/v0.1/jbmafp.zip
unzip jbmafp.zip
chmod +x jbmafp
./jbmafp -b
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: './public'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
This is an example for jbmafp
. When I execute ./jbmafp -b
the program
creates public
folder and puts all content there. And the directive
with: path: './public'
tells actions/deploy-pages@v2
to look for
public
folder instead of docs
folder.
This can be used with anything, actually. Hugo, Gatsby, Astro, you name it.
Other posts
- Simple Server-Sent Events based PubSub Server
- Trying out Helix code editor as my main editor
- My love and hate relationship with Node.js
- Golang profiling simplified
- Fix bind warning in .profile on login in Ubuntu
- Encoding binary data into DNA sequence
- Replacing Dropbox in favor of DigitalOcean spaces
- Bringing all of my projects together under one umbrella
- Simple world clock with eInk display and Raspberry Pi Zero
- Debian based riced up distribution for Developers and DevOps folks
- LED technology might not be as eco-friendly as you think
- The strange case of Elasticsearch allocation failure
- Re-Inventing Task Runner That I Actually Used Daily
- Disable mouse wake from suspend with systemd service