Shipcast v0.3.0 支援 GitHub Actions 發佈,新增多語言文章及可安裝應用程式
Shipcast v0.3.0: launch from a GitHub Action, blog in your languages, an app you can install
Shipcast v0.3.0 支援在用戶自己的 GitHub 專案中透過 GitHub Actions 執行,毋須自行託管伺服器,並可按所選語言撰寫文章。發布版本後,系統會在 launches repo 建立包含文章及各渠道帖文的草稿 pull request,合併後才會發佈。新版應用程式經重新設計,可安裝在手機或桌面,並提供 Markdown 與視覺編輯、統計、搜尋及通知功能。
Shipcast turns a GitHub release into a launch: it reads the code at the tag, drafts the article and a post for each channel, and publishes them once you approve. Version 0.3.0 lets you run it from a GitHub Action on your own repos with nothing to host, writes your blog in the languages you choose, and brings a redesigned app you can install on your phone or desktop.
If you already run Shipcast, this post covers what changed and what to do when you upgrade.
Why a GitHub Action?
Until now you needed a server to use Shipcast. That is fine for me, but it is a lot to ask of someone who only wants their next release announced. With v0.3.0 the whole flow runs in GitHub Actions: you publish a release, one drafts pull request arrives in your launches repo with the article and a post per channel, and when you merge it each channel is published once.
How do I set up the Action?
In your project's repo, with Node 24:
npx @yeyo11/shipcast init
init writes the launch workflow that uses yeyo11/shipcast-action@v1, .github/launch.yml, and, for your launches repo, brand.yml plus a publish workflow. It then prints every secret you need to set. You can pass the choices up front:
npx @yeyo11/shipcast init --launches-repo you/launches --ai openai --tone "Plain, practical, first person."
The drafts are written with your own key. --ai takes anthropic (the default) or openai, and the action's ai-base-url input points it at any OpenAI-compatible server. To check a setup without posting anything, set the repository variable SHIPCAST_DRY_RUN=true: the publish run lists what it would post.
Every link to your blog goes out with utm_source, utm_medium and utm_campaign, so your analytics show which channel each visit came from. dev.to and Hashnode keep the clean canonical URL.
What if GitHub's cron runs late?
Scheduled posts and retries run in a "round". GitHub delays or drops schedule runs, so the publish workflow has three cron lines only as a backstop and accepts workflow_dispatch. For rounds on time, dispatch it every 15 minutes from outside GitHub: a Cloudflare Worker, cron-job.org or your own server. init prints the exact call:
curl -fsS -X POST \
-H "Authorization: Bearer $SHIPCAST_DISPATCH_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/<you>/launches/actions/workflows/shipcast-publish.yml/dispatches \
-d '{"ref":"main"}'
The token is a fine-grained one for the launches repo only, with Actions read and write. A late round only delays a post; it loses none.
How do I choose my blog's languages?
List them in brand.yml with any ISO 639-1 code. The first one is the primary language:
# brand.yml
languages:
blog: [en, es]
The article, the newsletter issue and the posts follow that list, and so do the language switches in the app. dev.to and Hashnode republish the English version when there is one, otherwise the first language. Watch out when upgrading: without languages.blog, Shipcast now writes in English only.
What changed in the app?
Every screen was rebuilt. Launches wait for you and you approve them in the app. Each draft opens in an editor with Markdown and Visual modes, and its toolbar matches what the channel can format. Stats show each channel and each launch, a search palette jumps to any launch, account or page, and Sync all refreshes every account on Channels.
The app also installs. On a phone or a desktop it opens standalone, shows its own offline page when the connection drops, and offers Reload when a new version is out, so nothing reloads in the middle of an edit.
How do notifications work?
Shipcast tells your phone or desktop when a reply to a comment or a launch waits for your approval, when something fails, and when a launch is out. Turn it on per device in Settings → Notifications, with a switch for each event. On iPhone, add Shipcast to the Home Screen first. A notification never shows a comment or a draft's text. On your own server, set SHIPCAST_VAPID_PUBLIC_KEY and SHIPCAST_VAPID_PRIVATE_KEY (see docs/push.md).
How do I upgrade a self-hosted install?
git pull
pnpm install
pnpm app # database migrations run on start
Two things to check:
- claudio now starts behind its own Compose profile:
docker compose --profile claudio up -d, orCOMPOSE_PROFILES=claudioin.env. Without either,docker compose up -dstarts only Postgres. - If your blog has more than English, list its languages in
languages.blog.
Where do I go next?
The step-by-step guide for the Action is in docs/getting-started.md, and the full list of changes is in the changelog. If you don't have a blog yet, yeyo11/shipcast-blog is an Astro and Tailwind template that already reads Shipcast's articles and deploys on GitHub Pages.
If Shipcast saves you writing the same announcement ten times, a star on the repository helps other developers find it.
來源:DEV Community · dev.to
