feat: releases from GitHub first, then git.kebcloud.no; releases sets others #31

Closed
keb wants to merge 0 commits from feat/github-releases into main
pull from: feat/github-releases
Owner

Releases from the GitHub mirror first, with git.kebcloud.no as the fallback.

  • internal/update: Client.Servers (repository addresses, GitHub or Gitea/Forgejo) replaces API/Repo; update.API derives each API. Latest asks each in turn (5s each); Install downloads from the first server that has the release, checked against that server's checksums.txt (a mismatch stops, it doesn't fall back). Default: GitHub, then git.kebcloud.no.
  • Config: releases: lists other servers (https:// repository addresses, validated); lazysecrets update reads the config now too.
  • install.sh: the same order and checks; LAZYSECRETS_RELEASES overrides. Pretty-printed (GitHub) and compact (Gitea) JSON both parse.
  • Release workflow: scripts/github-release.mjs (Node 20, no deps; the runner is node:20-bookworm, no jq) copies the Gitea release, notes and files, to GitHub, replacing one for the same tag, waiting for the mirror to have the commit. Without the GH_RELEASE_TOKEN secret it skips.
  • Status pane: the issues link goes to GitHub. Docs: README (install, privacy), config.md, development.md.

Tested: unit tests for fallback, all-down errors and API; live: update --check falls back from GitHub's 404 to Gitea in under a second; install.sh installs v0.1.0 via the fallback; the script reads the Gitea release and stops at GitHub's 401 with a dummy token.

Not changed yet: the README's install command still fetches install.sh from git.kebcloud.no; switch it to GitHub's raw URL once the mirror exists.

🤖 Generated with Claude Code

Releases from the GitHub mirror first, with git.kebcloud.no as the fallback. - **internal/update**: `Client.Servers` (repository addresses, GitHub or Gitea/Forgejo) replaces `API`/`Repo`; `update.API` derives each API. `Latest` asks each in turn (5s each); `Install` downloads from the first server that has the release, checked against that server's `checksums.txt` (a mismatch stops, it doesn't fall back). Default: GitHub, then git.kebcloud.no. - **Config**: `releases:` lists other servers (https:// repository addresses, validated); `lazysecrets update` reads the config now too. - **install.sh**: the same order and checks; `LAZYSECRETS_RELEASES` overrides. Pretty-printed (GitHub) and compact (Gitea) JSON both parse. - **Release workflow**: `scripts/github-release.mjs` (Node 20, no deps; the runner is node:20-bookworm, no jq) copies the Gitea release, notes and files, to GitHub, replacing one for the same tag, waiting for the mirror to have the commit. Without the `GH_RELEASE_TOKEN` secret it skips. - Status pane: the issues link goes to GitHub. Docs: README (install, privacy), config.md, development.md. Tested: unit tests for fallback, all-down errors and `API`; live: `update --check` falls back from GitHub's 404 to Gitea in under a second; install.sh installs v0.1.0 via the fallback; the script reads the Gitea release and stops at GitHub's 401 with a dummy token. Not changed yet: the README's install command still fetches install.sh from git.kebcloud.no; switch it to GitHub's raw URL once the mirror exists. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
keb added 1 commit 2026-10-12 14:01:52 +02:00
feat: releases from GitHub first, then git.kebcloud.no; releases sets others
CI / Checks (pull_request) Successful in 26s
PR title / Conventional title (pull_request) Successful in 2s
b3c1911ba5
Updates and install.sh try the GitHub mirror, then git.kebcloud.no,
each with a short timeout, and download from the first server with the
release, checked against its checksums.txt. The releases config option
(and LAZYSECRETS_RELEASES for install.sh) lists other servers. The
release workflow copies each release to GitHub when GH_RELEASE_TOKEN is
set. The status pane's issues link points to GitHub.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
keb closed this pull request 2026-10-12 14:21:35 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: keb/lazysecrets#31