Files

1.4 KiB

Tasks

  • 1. Server: GITEA_URL/FPAGENT_REPO constants, the installer key read from GITEA_RELEASE_INSTALL_KEY, and two public proxy routes registered before the session middleware: GET /fpagent/releases/latest (trimmed {tag, assets:[{name,url}]}, same-origin URLs, unsafe names dropped) and GET /fpagent/releases/download/:tag/:name (validated names, streamed with the key, 404/502 mapping, 503 when unconfigured).
  • 2. Installer script tools/public/fpagent/install.sh: fetch metadata, prefer the host-codename offline bundle over the generic one, download and verify sha256, extract, and forward all options to the bundle's install.sh. Served uncached at /fpagent/install.sh.
  • 3. Tests (tools/test/fpagent-install.test.js): latest proxy shape and token non-disclosure, asset streaming with upstream auth, invalid-name rejection, missing-asset 404, unconfigured 503, public script serving, and bash -n on the script.
  • 4. Docs/config: GITEA_RELEASE_INSTALL_KEY in .env.example, installer and configuration notes in README.md.
  • 5. Verified: 55 tests pass (48 existing + 7 new); routes exercised live against the forge (latest release v1.0.0, proxied checksum matches the publisher's, invalid name refused); the installer run end to end against a fake release base — codename bundle chosen, checksum pass and fail, options forwarded to the extracted bundle installer.