mirror of
https://github.com/jbowdre/capsule.git
synced 2024-11-24 22:02:18 +00:00
107 lines
4.1 KiB
Text
107 lines
4.1 KiB
Text
I've been active on omg.lol ("the best internet address that you’ve ever had") for several months now, and have really been enjoying my stay. omg.lol provides a number of delightfully-simple services, and it ties them together with a friendly API.
|
||
|
||
=> https://home.omg.lol/ omg.lol homepage
|
||
=> https://api.omg.lol/ omg.lol API documentation
|
||
|
||
Last month, I made use of the Pastebin API to power near-realtime weather information on my omg.lol profile page:
|
||
|
||
=> /gemlog/2024-02-08-weather-profile-lol.gmi (Near) Realtime Weather on profile.lol
|
||
|
||
Last night, I crafted some quick GitHub Actions workflows to talk to the Now Page and Web endpoints and make updates to those pages with simple git commits.
|
||
|
||
## Benefits
|
||
This brings a few benefits:
|
||
* I can make changes without having to log in to the omg.lol dashboard
|
||
* I can write updates with an editor like VS Code instead of a tiny frame in a web page
|
||
* I'll preserve version-controlled histories of each page in case I break stuff
|
||
* And it opens the doors to additional automation capabilities down the road
|
||
|
||
## Process
|
||
I wound up with a pair of actions for each page.
|
||
|
||
### Fetch Now Page
|
||
The first periodically fetches the latest version of the page from the API and commits it to the repo (in case it gets modified outside of git):
|
||
```fetch-now.yml
|
||
name: Fetch Now Page
|
||
on:
|
||
schedule:
|
||
- cron: "* */4 * * *"
|
||
|
||
jobs:
|
||
fetch-now-page:
|
||
runs-on: ubuntu-latest
|
||
permissions:
|
||
contents: write
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v2
|
||
- name: Fetch Now Page
|
||
run: |
|
||
curl --location --header "Authorization: Bearer ${{ secrets.OMG_TOKEN }}" \
|
||
"https://api.omg.lol/address/${{ secrets.OMG_ADDR }}/now" | \
|
||
jq -r .response.now.content > now.md
|
||
- name: Commit Now Page
|
||
uses: stefanzweifel/git-auto-commit-action@v4
|
||
with:
|
||
commit_message: 'fetch /now page'
|
||
file_pattern: 'now.md'
|
||
```
|
||
This will run every four hours, and uses `git-auto-commit-action` to commit new versions of `now.md` as needed.
|
||
|
||
=> https://github.com/marketplace/actions/git-auto-commit Git Auto Commit on GitHub Marketplace
|
||
|
||
### Update Now Page
|
||
And the second workflow is used for sending a modified now page back to omg.lol:
|
||
```update-now.yml
|
||
name: Update Now Page
|
||
on:
|
||
push:
|
||
paths:
|
||
- 'now.md'
|
||
|
||
jobs:
|
||
update-now-page:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v2
|
||
- name: Update Now Page
|
||
run: |
|
||
request_body='{"listed": "1", "content": '"$(jq -Rsa . now.md)"'}'
|
||
curl --location --request POST --header "Authorization: Bearer ${{ secrets.OMG_TOKEN }}" \
|
||
"https://api.omg.lol/address/${{ secrets.OMG_ADDR }}/now" \
|
||
--data "$request_body"
|
||
```
|
||
This one is triggered by any `git push` with a commit which modifies the `now.md` file.
|
||
|
||
## Web Updates
|
||
I'm handling the web page updates in basically the same way, with the minor adjustment of needing to manage the web content, css, and custom head independently:
|
||
|
||
```fetch-web.yaml excerpt
|
||
- name: Fetch Web Page
|
||
run: |
|
||
response=$(curl --location --header "Authorization: Bearer ${{ secrets.OMG_TOKEN }}" \
|
||
"https://api.omg.lol/address/${{ secrets.OMG_ADDR }}/web" | \
|
||
jq -r .response)
|
||
jq -r .content <<< $response > web.md
|
||
jq -r .css <<< $response > web.css
|
||
jq -r .head <<< $response > web_head.html
|
||
```
|
||
|
||
```update-web.yml excerpt
|
||
- name: Update Web Page
|
||
run: |
|
||
request_body='{"publish": true, "content": '"$(jq -Rsa . web.md)"', "css": '"$(jq -Rsa . web.css)"', "head": '"$(jq -Rsa . web_head.html)"'}'
|
||
curl --location --request POST --header "Authorization: Bearer ${{ secrets.OMG_TOKEN }}" \
|
||
"https://api.omg.lol/address/${{ secrets.OMG_ADDR }}/web" \
|
||
--data "$request_body"
|
||
```
|
||
|
||
The full code (as well as my weather hijinks) are in my lolz repo. Feel free to steal and improve upon it!
|
||
|
||
=> https://github.com/jbowdre/lolz John's lolz on GitHub
|
||
|
||
And to see the fruits of my labors, check out:
|
||
|
||
=> https://jbowdre.lol @jbowdre on omg.lol
|
||
=> https://jbowdre.lol/now @jbowdre's /now page
|