Skip to content

fix(ci): smoke test accepts http:// on Pages 301 hop#506

Merged
aaddrick merged 2 commits intomainfrom
fix/smoke-test-pages-scheme
Apr 23, 2026
Merged

fix(ci): smoke test accepts http:// on Pages 301 hop#506
aaddrick merged 2 commits intomainfrom
fix/smoke-test-pages-scheme

Conversation

@aaddrick
Copy link
Copy Markdown
Owner

Summary

Third and (hopefully) last follow-up to #503 — the first rerun of update-apt-repo for v2.0.3 made it all the way through reprepro includedeb + strip + commit + push (v2.0.3 metadata is live on gh-pages now — Version: 1.3883.0-2.0.3, 0 .debs in pool, fresh InRelease). The only failure was the tail-end smoke test at hop 0:

Hop 0: 301 https://aaddrick.github.io/.../*.deb
       -> http://pkg.claude-desktop-debian.dev/.../*.deb
::error::Hop 0 mismatch: expected https://pkg..., got http://pkg...

Root cause

Pages emits http:// in its auto-301 Location because https_enforced: false on the repo's Pages config — and that can't be set to true. DNS for pkg.claude-desktop-debian.dev points at Cloudflare (custom_domain = true in wrangler.toml), so Pages can never pass its domain-verification step to provision a cert. Cloudflare/Worker happily answer both schemes for pkg.<domain>, so the scheme in Pages' 301 is cosmetic — the redirect chain still terminates correctly.

Verified manually end-to-end, all three requested schemes:

$ curl -IsL https://aaddrick.github.io/claude-desktop-debian/dists/stable/InRelease
HTTP/2 301 → Location: http://pkg.claude-desktop-debian.dev/...
HTTP/1.1 200 OK

APT side of the cutover is actually working for real users right now.

Fix

Relax hop 0's regex to https?:// in three places:

  • .github/workflows/ci.yml:538 (APT smoke test)
  • .github/workflows/ci.yml:752 (DNF smoke test)
  • .github/workflows/apt-repo-heartbeat.yml:92 (daily heartbeat)

Later hops stay https://-only — GitHub's releases/download/ and objects.githubusercontent.com redirects are always HTTPS.

Post-merge plan

Rerun failed jobs on run 24836419696:

Refs #493, #503


Generated with Claude Code
Co-Authored-By: Claude Opus 4.7 [email protected]
90% AI / 10% Human
Claude: diagnosed the scheme mismatch from the actual run log, verified gh-pages state post-push (metadata updated, pool stripped) and that the chain works end-to-end, wrote and tested the regex relaxation
Human: delegated Phase 4a-APT cutover autonomously

Phase 4a-APT's first rerun of update-apt-repo succeeded all the way
through strip + push (v2.0.3 metadata is live on gh-pages now), but
the smoke test failed at hop 0:

  Hop 0: 301 https://aaddrick.github.io/.../*.deb
         -> http://pkg.claude-desktop-debian.dev/.../*.deb
  Hop 0 mismatch: expected https://pkg..., got http://pkg...

Pages emits http:// in the Location header because https_enforced is
unsettable on the repo's Pages config: DNS for pkg.<domain> points at
Cloudflare (Worker custom_domain), so Pages can never pass domain
verification to provision its own cert. Cloudflare serves both schemes
for pkg.<domain>, so the http vs https in Pages' redirect is cosmetic
— the chain still terminates correctly.

Relax hop 0's regex in both smoke tests (update-apt-repo,
update-dnf-repo) and the heartbeat workflow to accept https?://.
Later hops stay https-only since GitHub's Release-asset redirects
are always HTTPS.

Failure was the tail-end of run 24836419696's rerun:
https://github.com/aaddrick/claude-desktop-debian/actions/runs/24836419696

Refs #493, #503
@aaddrick aaddrick merged commit eb90be3 into main Apr 23, 2026
12 checks passed
@aaddrick aaddrick deleted the fix/smoke-test-pages-scheme branch April 23, 2026 14:43
aaddrick added a commit that referenced this pull request Apr 23, 2026
v2.0.4 rerun of update-apt-repo made it past hops 0 and 1 (the smoke
test scheme fix in #506 worked — Pages' http:// redirect no longer
trips the chain walker), but failed on hop 2:

  Hop 2: 302 .../releases/download/v2.0.4+claude1.3883.0/...deb
         -> https://release-assets.githubusercontent.com/...
  ::error::Hop 2 mismatch: expected https://objects\.githubusercontent\.com/,
           got https://release-assets.githubusercontent.com/...

GitHub migrated the Release asset CDN from objects.githubusercontent.com
to release-assets.githubusercontent.com (both have been serving in the
past; release-assets is the current canonical hostname). Accept either
hostname via alternation.

Verified against the actual v2.0.4 Release:
  $ curl -Is https://github.com/aaddrick/claude-desktop-debian/releases/download/v2.0.4+claude1.3883.0/claude-desktop_1.3883.0-2.0.4_amd64.deb \
    | grep -i location
  location: https://release-assets.githubusercontent.com/github-production-release-asset/...

Same fix in three sites:
- .github/workflows/ci.yml (update-apt-repo smoke test)
- .github/workflows/ci.yml (update-dnf-repo smoke test)
- .github/workflows/apt-repo-heartbeat.yml (daily heartbeat)

docs/worker-apt-plan.md has historical references to
objects.githubusercontent.com too; those can be updated in a follow-up
docs sweep — the architectural claim (binary bytes flow direct from
GitHub CDN, never through Cloudflare) is unchanged.

Refs #493, #503
aaddrick added a commit that referenced this pull request Apr 23, 2026
The plan doc served its purpose through #494 (merge) → #498
(scaffolding) → #502 / #503 / #504 / #506 / #509 / #510 (cutover).
v2.0.5+claude1.3883.0 is the first release through the new pipeline,
verified end-to-end on five distros. #493 is closed.

Removes docs/worker-apt-plan.md and the two architecture-pointer
comments in worker/src/worker.js and worker/wrangler.toml that
referenced it. Both files now carry a short self-contained summary
of what the Worker does and why.

Also corrects worker.js's CDN-hostname reference from
objects.githubusercontent.com (the old name) to release-assets
(current, matches #509's regex fix).

Git history retains the full plan doc for anyone who needs the
design rationale; nothing is actually lost.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant