docs(openspec): archive fpagent-installer-multiarch and sync specs
Bundle selection is now architecture-aware, not just codename-aware, and the no-compatible-bundle failure names the host architecture. Merged into the fpagent-installer spec and archived the change.
This commit is contained in:
@@ -11,10 +11,13 @@ proxies the private release and serves the installer.
|
||||
### Requirement: Public installer endpoint
|
||||
|
||||
The app SHALL serve an installer script at `/fpagent/install.sh` that is
|
||||
reachable without authentication. When run, the script SHALL fetch the latest
|
||||
release metadata, choose a bundle for the host, verify the bundle's published
|
||||
sha256 checksum, extract it, and hand off to the extracted bundle's own
|
||||
installer. The script SHALL be served uncached.
|
||||
reachable without authentication. When run, the script SHALL determine the
|
||||
host's architecture, fetch the latest release metadata, choose the bundle for
|
||||
the host architecture, verify the bundle's published sha256 checksum, extract
|
||||
it, and hand off to the extracted bundle's own installer. It SHALL prefer a
|
||||
bundle built for the host's distro codename when one exists for that
|
||||
architecture, and otherwise use the generic bundle for that architecture. The
|
||||
script SHALL be served uncached.
|
||||
|
||||
#### Scenario: Installer is fetched anonymously
|
||||
|
||||
@@ -33,6 +36,19 @@ installer. The script SHALL be served uncached.
|
||||
codename
|
||||
- **THEN** the installer uses the generic bundle
|
||||
|
||||
#### Scenario: Bundle matches the host architecture
|
||||
|
||||
- **WHEN** the latest release offers a bundle for the host architecture and a
|
||||
bundle for another architecture
|
||||
- **THEN** the installer chooses the bundle for the host architecture
|
||||
- **AND** it never chooses a bundle for another architecture
|
||||
|
||||
#### Scenario: 32-bit host uses the 32-bit bundle
|
||||
|
||||
- **WHEN** the installer runs on an i386 host and the release offers only a
|
||||
generic 32-bit bundle
|
||||
- **THEN** the installer uses that generic 32-bit bundle
|
||||
|
||||
#### Scenario: Checksum is verified before extraction
|
||||
|
||||
- **WHEN** the installer downloads a bundle and its published checksum
|
||||
@@ -41,14 +57,21 @@ installer. The script SHALL be served uncached.
|
||||
|
||||
#### Scenario: Options are forwarded to the bundled installer
|
||||
|
||||
- **WHEN** the installer is invoked with options such as `--enable-service` or
|
||||
- **WHEN** the installer is invoked with options such as `--no-service` or
|
||||
`--check`
|
||||
- **THEN** it passes those options through to the extracted bundle's installer
|
||||
|
||||
#### Scenario: No compatible bundle
|
||||
|
||||
- **WHEN** the latest release contains no bundle for the host architecture
|
||||
- **THEN** the installer exits with a failure message and installs nothing
|
||||
- **THEN** the installer exits with a failure message that names the host
|
||||
architecture and installs nothing
|
||||
|
||||
#### Scenario: Unsupported architecture
|
||||
|
||||
- **WHEN** the installer runs on a machine whose architecture is neither
|
||||
x86_64 nor i386
|
||||
- **THEN** it exits with a failure message and installs nothing
|
||||
|
||||
### Requirement: Release metadata endpoint
|
||||
|
||||
@@ -175,16 +198,23 @@ tag that is not a valid release tag without contacting the forge.
|
||||
|
||||
### Requirement: Installed version is tracked and upgrades are reported
|
||||
|
||||
The installer SHALL treat the git hash in the bundle's asset name as the version.
|
||||
It SHALL hand that version to the bundle installer, which SHALL record it beside
|
||||
the installed binary and SHALL report an upgrade with the previous and new
|
||||
versions on the next run. Uninstalling SHALL remove the recorded version.
|
||||
The installer SHALL treat the git hash in the bundle's asset name as the
|
||||
version, for every architecture it can install. It SHALL hand that version to
|
||||
the bundle installer, which SHALL record it beside the installed binary and
|
||||
SHALL report an upgrade with the previous and new versions on the next run.
|
||||
Uninstalling SHALL remove the recorded version.
|
||||
|
||||
#### Scenario: Version is derived from the asset name
|
||||
|
||||
- **WHEN** the installer selects a bundle named `fpagent-<hash>-<platform>.tar.gz`
|
||||
- **THEN** it uses `<hash>` as the version
|
||||
|
||||
#### Scenario: Version is derived for a 32-bit bundle
|
||||
|
||||
- **WHEN** the installer selects a generic bundle named
|
||||
`fpagent-<hash>-linux-i386.tar.gz`
|
||||
- **THEN** it uses `<hash>` as the version
|
||||
|
||||
#### Scenario: Upgrade is reported
|
||||
|
||||
- **WHEN** the recorded version differs from the version being installed
|
||||
|
||||
Reference in New Issue
Block a user