Skip to content

Commit 59dbd65

Browse files
committed
ci(pages): self-managed Actions deploy on Node 24; drop built-in builder
Switch Pages source to GitHub Actions with a deploy workflow we control, using current (Node-24) actions — removes the Node-20 deprecation warning from the built-in builder and the intermittent deploy timeout. Fetches the signed appcast from the latest release at deploy time (no commit), replacing the sync workflow.
1 parent c049065 commit 59dbd65

4 files changed

Lines changed: 62 additions & 56 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Deploy Pages
2+
3+
# Self-managed GitHub Pages deploy (Pages source = "GitHub Actions"). We control the action
4+
# versions — all on Node 24 — so there's no Node-20 deprecation warning from the built-in
5+
# builder, and we own the deploy step (which the managed one intermittently timed out on).
6+
#
7+
# It also publishes the Sparkle appcast: the signed appcast.xml is fetched from the latest
8+
# Capsule release at deploy time and shipped with the site (no git commit needed). The schedule
9+
# keeps the feed fresh even without a push; every push redeploys immediately.
10+
on:
11+
push:
12+
branches: [main]
13+
schedule:
14+
- cron: "*/15 * * * *"
15+
workflow_dispatch:
16+
17+
permissions:
18+
contents: read
19+
pages: write
20+
id-token: write
21+
22+
# Never cancel an in-progress deploy; let each finish so the site is always consistent.
23+
concurrency:
24+
group: pages
25+
cancel-in-progress: false
26+
27+
jobs:
28+
deploy:
29+
runs-on: ubuntu-latest
30+
environment:
31+
name: github-pages
32+
url: ${{ steps.deployment.outputs.page_url }}
33+
steps:
34+
- uses: actions/checkout@v7
35+
36+
- name: Pull latest signed appcast from the Capsule release
37+
run: |
38+
url="https://github.com/capsule-native/capsule/releases/latest/download/appcast.xml"
39+
if curl -fsSL "$url" -o appcast.xml; then
40+
echo "appcast.xml updated from the latest release."
41+
else
42+
echo "No published appcast on the latest release yet — shipping the placeholder."
43+
fi
44+
45+
- uses: actions/configure-pages@v6
46+
47+
- uses: actions/upload-pages-artifact@v5
48+
with:
49+
path: .
50+
51+
- id: deployment
52+
uses: actions/deploy-pages@v5

.github/workflows/sync-appcast.yml

Lines changed: 0 additions & 51 deletions
This file was deleted.

.nojekyll

Whitespace-only changes.

README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ hosts the landing page and the **Sparkle appcast** the app polls for auto-update
66
- **Appcast feed:** <https://capsule-native.github.io/appcast.xml> — this is the app's `SUFeedURL`.
77
- `appcast.xml` is generated and **EdDSA-signed** by the release pipeline in
88
[`capsule-native/capsule`](https://github.com/capsule-native/capsule) and attached to each
9-
GitHub Release. The [**Sync appcast**](.github/workflows/sync-appcast.yml) workflow here pulls
10-
the latest release's `appcast.xml` and commits it, which republishes the feed via Pages.
9+
GitHub Release. The [**Deploy Pages**](.github/workflows/deploy.yml) workflow here fetches that
10+
signed `appcast.xml` from the latest release **at deploy time** and ships it with the site — no
11+
commit — then publishes via GitHub Pages.
1112

12-
> Do not edit `appcast.xml` by hand — the sync workflow overwrites it. To publish immediately
13-
> after cutting a release, run the **Sync appcast** workflow (Actions ▸ Sync appcast ▸ Run
14-
> workflow); otherwise it syncs automatically within ~15 minutes.
13+
The site is deployed by our own GitHub Actions workflow (Pages source = **GitHub Actions**), not
14+
the built-in Jekyll builder, so we control the action versions and the deploy step. It runs on
15+
every push to `main`, on a ~15-minute schedule (to pick up new releases), and on demand.
16+
17+
> The committed `appcast.xml` is only a placeholder — the deploy overwrites it with the latest
18+
> release's signed feed. To publish immediately after cutting a release, run **Deploy Pages**
19+
> (Actions ▸ Deploy Pages ▸ Run workflow); otherwise the schedule refreshes it within ~15 minutes.

0 commit comments

Comments
 (0)