- Go 69.9%
- TypeScript 25.9%
- Dockerfile 3.9%
- JavaScript 0.2%
| cmd | ||
| dashboard | ||
| internal | ||
| pkg | ||
| third_party/linuxmatters | ||
| .dockerignore | ||
| .gitignore | ||
| config.yaml | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| README.md | ||
automation
Queue-based automation for jivetalking, jivedrop, and jivefire using libfilerunner-go.
The worker calls the vendored Go projects directly (no subprocess exec).
The default queue backend is S3. Directory backend remains available as fallback.
Queues
Each queue uses <queue_dir>/{input,in-progress,failed}:
jivetalking(file queue): one audio file per claim.jivedrop_standalone(directory queue): one audio file + one metadata file (.jsonor.yaml/.yml).jivedrop_hugo(directory queue): one audio file + one Hugo markdown file (.md).jivefire_standalone(directory queue): one audio file + one metadata file (.jsonor.yaml/.yml).
Outputs are written to each queue's configured output_dir and are not kept inside queue claims.
Run
go run ./cmd/automation --config config.yaml
Process a single polling cycle and exit:
go run ./cmd/automation --config config.yaml --once
For directory queues instead of S3, set queue_backend: directory and use each queue's queue_dir.
Metadata Contracts
jivedrop_standalone
cover must be a URL in standalone mode. The worker downloads it and passes the local temporary file into jivedrop's encoder/tagging flow.
title: "Episode Title"
num: 67
cover: "https://example.com/artwork.png"
artist: "Linux Matters"
album: "All Seasons"
date: "2026-03"
comment: "https://linuxmatters.sh/67"
stereo: false
jivefire_standalone
background_image and thumbnail_image must be URLs. The worker downloads them and passes the local temporary files into jivefire's renderer. Both fields are optional.
episode: 67
title: "Episode Title"
channels: 1
bar_color: "#A40000"
text_color: "#F8B31D"
background_image: "https://example.com/background.png"
thumbnail_image: "https://example.com/thumbnail.png"
no_preview: true
encoder: "software"
output: "episode-67.mp4"