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.
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)
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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Releases from the GitHub mirror first, with git.kebcloud.no as the fallback.
Client.Servers(repository addresses, GitHub or Gitea/Forgejo) replacesAPI/Repo;update.APIderives each API.Latestasks each in turn (5s each);Installdownloads from the first server that has the release, checked against that server'schecksums.txt(a mismatch stops, it doesn't fall back). Default: GitHub, then git.kebcloud.no.releases:lists other servers (https:// repository addresses, validated);lazysecrets updatereads the config now too.LAZYSECRETS_RELEASESoverrides. Pretty-printed (GitHub) and compact (Gitea) JSON both parse.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 theGH_RELEASE_TOKENsecret it skips.Tested: unit tests for fallback, all-down errors and
API; live:update --checkfalls 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
releasessets othersPull request closed