Running Publish Social Snippets currently takes a manual gh workflow run call, an occasional local runner start, and then a separate check to see whether the job finished. The goal is to make that path a single repo-root command without changing the underlying publisher behavior.
This is phase 1. Keep the platform model aligned with scripts/publish_social.py. Do not add CSV parsing or multi-select platform handling. Keep the Pixelfed publish code parked.
Add a repo-root publish-socials.sh helper that can:
main as the workflow refpublish-socials.sh at the repository root.--platform single-valued.--platform values.scripts/publish_social.py../publish-socials.sh./publish-socials.sh --date 2026-04-21./publish-socials.sh --ref feature/my-branch./publish-socials.sh --runner github-hosted./publish-socials.sh --platform mastodon--date defaults to the current day in local time.--ref defaults to main.--runner defaults to self-hosted.--platform is optional. If omitted, the workflow publishes all platforms.Accept one platform name per invocation.
Canonical names:
mastodonbskythreadstwitternostrinstagrampixelfedlinkedinAlias handling:
bsky maps to the workflow’s Bluesky inputtwitter maps to XPixelfed stays parked. The wrapper may accept the name, but the publish path remains unchanged and does not unpark that code.
The wrapper should do three things in order:
--runner self-hosted is selected.gh workflow run, then wait for the new run and report the result.Runner handling should be deliberately simple. The script only needs to know whether the local runner process is already active. If not, it should start ~/dev/gurupanguji.github.io/actions-runner/run.sh, then wait until GitHub reports a matching run. If --runner github-hosted is selected, the wrapper must skip local runner startup entirely.
For workflow status, the wrapper should find the newest matching run for Publish Social Snippets on the requested ref, then watch it until completion. If dispatch succeeds but no run appears, the script should fail loudly and show the dispatch parameters it used.
After the run finishes, the wrapper should stop the local runner when it started one for this invocation. That shutdown should happen whether the workflow succeeds, fails, or exits in any other terminal state.
The workflow must support two execution modes:
self-hosted for the local Mac runnergithub-hosted for ubuntu-latestThe wrapper should pass the runner choice through to workflow_dispatch, and the workflow should choose the appropriate runs-on value from that input.
The workflow already accepts date and platform, so the wrapper should reuse those fields instead of inventing a second dispatch path.
./publish-socials.sh works from the repo root.--date defaults to today when omitted.--ref defaults to main when omitted.--runner self-hosted starts the local runner only if needed.--runner github-hosted skips local runner startup.--platform accepts exactly one social name and maps simple aliases.publish-socials.sh.github/workflows/publish_social.yml if runner mode needs to be dispatched explicitly