Skip to content

feat: add built-in ipfs update command#11203

Draft
lidel wants to merge 1 commit intomasterfrom
feat/builtin-update-command
Draft

feat: add built-in ipfs update command#11203
lidel wants to merge 1 commit intomasterfrom
feat/builtin-update-command

Conversation

@lidel
Copy link
Copy Markdown
Member

@lidel lidel commented Feb 16, 2026

Warning

Not finished yet, parking here until we work on 0.41

adds ipfs update command tree that downloads pre-built Kubo binaries from GitHub Releases, verifies SHA-512 checksums, and replaces the running binary in place.

subcommands:

  • ipfs update check -- query GitHub for newer versions
  • ipfs update versions -- list available releases
  • ipfs update install [version] -- download, verify, backup, and atomically replace the current binary
  • ipfs update revert -- restore the previously backed up binary from $IPFS_PATH/old-bin/

read-only subcommands (check, versions) work while the daemon is running. install and revert require the daemon to be stopped first.

design decisions:

  • uses GitHub Releases API instead of dist.ipfs.tech because GitHub is harder to censor in regions that block IPFS infrastructure
  • honors GITHUB_TOKEN/GH_TOKEN to avoid unauthenticated rate limits
  • backs up the current binary before replacing, with permission-error fallback that saves to a temp dir with manual sudo mv instructions
  • KUBO_UPDATE_GITHUB_URL env var redirects API calls for integration testing; IPFS_VERSION_FAKE overrides the reported version
  • unit tests use mock HTTP servers and the var override; CLI tests use the env vars with a temp binary copy so the real build is never touched

adds `ipfs update` command tree that downloads pre-built Kubo binaries
from GitHub Releases, verifies SHA-512 checksums, and replaces the
running binary in place.

subcommands:

- `ipfs update check` -- query GitHub for newer versions
- `ipfs update versions` -- list available releases
- `ipfs update install [version]` -- download, verify, backup, and
  atomically replace the current binary
- `ipfs update revert` -- restore the previously backed up binary
  from `$IPFS_PATH/old-bin/`

read-only subcommands (check, versions) work while the daemon is
running. install and revert require the daemon to be stopped first.

design decisions:

- uses GitHub Releases API instead of dist.ipfs.tech because GitHub
  is harder to censor in regions that block IPFS infrastructure
- honors GITHUB_TOKEN/GH_TOKEN to avoid unauthenticated rate limits
- backs up the current binary before replacing, with permission-error
  fallback that saves to a temp dir with manual `sudo mv` instructions
- `KUBO_UPDATE_GITHUB_URL` env var redirects API calls for integration
  testing; `IPFS_VERSION_FAKE` overrides the reported version
- unit tests use mock HTTP servers and the var override; CLI tests use
  the env vars with a temp binary copy so the real build is never
  touched

resolves #10937
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.

ipfs update: add built-in command, sunset ipfs-update

1 participant