feat(hub): step-by-step download/pull instructions in the OCI/Download modal (BUNYIP-358) #366

Merged
nrupard merged 1 commit from feat/BUNYIP-358-download-instructions into main 2026-07-13 20:04:18 +02:00
Owner

What

BUNYIP-358: the OCI/Download modal (download_affordance, bunyip-web/src/handlers/dashboard.rs) listed only bare copy blocks (docker login / docker pull) and one-click binary links, with no explanation. This adds on-screen, step-by-step guidance so a non-expert user can follow it top to bottom.

Changes

  • Container image section (when the product ships an OCI image): a prerequisite line ("Requires Docker installed. Pulls <reference>.") plus numbered steps - sign in to the registry (only if private), docker pull <reference>, and a generic docker run --rm <reference> starting point. Docker only, per the issue decision.
  • Binary section (per asset): the same-origin BFF-proxy Download button as step 1, then chmod +x <name> && ./<name> --help as step 2.
  • Each command keeps the existing command_block copy widget (data-copy + COPY_CMD_JS, no API data spliced into executable JS).
  • The single-binary shortcut that bypassed the dialog now also opens it, so instructions are always shown; the direct download is the first step inside.
  • Removes the now-unused DownloadOption enum + download_options / download_option_row in favour of container_instructions / binary_instructions / instruction_step.

Decisions / omissions (from the issue)

  • Docker only (podman users adapt the near-identical commands).
  • No digest-verify step: OciImage.reference is tag-pinned and the API exposes no separate digest to check against.
  • No binary checksum step: the download API exposes no per-asset checksum yet; a follow-up would add a verify step here.

Testing

just check-container for bunyip-web: cargo fmt --all clean, cargo clippy -p bunyip-web --all-targets -- -D warnings clean, cargo test -p bunyip-web --all-targets 102 passed. Render-only change; no route, API, or data-model change.

## What BUNYIP-358: the OCI/Download modal (`download_affordance`, `bunyip-web/src/handlers/dashboard.rs`) listed only bare copy blocks (`docker login` / `docker pull`) and one-click binary links, with no explanation. This adds on-screen, step-by-step guidance so a non-expert user can follow it top to bottom. ## Changes - **Container image section** (when the product ships an OCI image): a prerequisite line ("Requires Docker installed. Pulls `<reference>`.") plus numbered steps - sign in to the registry (only if private), `docker pull <reference>`, and a generic `docker run --rm <reference>` starting point. Docker only, per the issue decision. - **Binary section** (per asset): the same-origin BFF-proxy Download button as step 1, then `chmod +x <name> && ./<name> --help` as step 2. - Each command keeps the existing `command_block` copy widget (`data-copy` + `COPY_CMD_JS`, no API data spliced into executable JS). - The single-binary shortcut that bypassed the dialog now also opens it, so instructions are always shown; the direct download is the first step inside. - Removes the now-unused `DownloadOption` enum + `download_options` / `download_option_row` in favour of `container_instructions` / `binary_instructions` / `instruction_step`. ## Decisions / omissions (from the issue) - **Docker only** (podman users adapt the near-identical commands). - **No digest-verify step**: `OciImage.reference` is tag-pinned and the API exposes no separate digest to check against. - **No binary checksum step**: the download API exposes no per-asset checksum yet; a follow-up would add a verify step here. ## Testing `just check-container` for bunyip-web: `cargo fmt --all` clean, `cargo clippy -p bunyip-web --all-targets -- -D warnings` clean, `cargo test -p bunyip-web --all-targets` 102 passed. Render-only change; no route, API, or data-model change.
feat(hub): step-by-step download/pull instructions in the OCI/Download modal (BUNYIP-358)
All checks were successful
E2E / Playwright against deployment (pull_request) Successful in 46s
Check / fmt + clippy + build + tests (pull_request) Successful in 21m0s
Create release / Create release from merged PR (pull_request) Has been skipped
0f50ac3ce9
The Download/OCI dialog listed only bare copy blocks (docker login / docker pull) and one-click binary links, with no context: a non-expert user saw commands and had to know what to do with them. Replace the flat option list with guided sections. When the product ships an OCI image, a Docker "Container image" section renders a prerequisite line plus numbered steps (sign in if the registry is private, pull the pinned reference, run as a starting point). For each binary asset, a "Binary" section renders the same-origin download button then a chmod-and-run step. Each command keeps the existing copy-to-clipboard widget (command_block, data-copy, no API data in executable JS).

Docker only, per the BUNYIP-358 decision (podman users adapt the near-identical commands). No digest-verify step: reference is tag-pinned and the API exposes no separate digest. No binary checksum step: the download API exposes no per-asset checksum yet (a follow-up would add one). The single-binary shortcut that used to bypass the dialog now also opens it, so the instructions are always shown; the direct download remains the first step inside. Removes the now-unused DownloadOption enum + download_options/download_option_row in favour of container_instructions/binary_instructions/instruction_step. just check-container green for bunyip-web (fmt + clippy -D warnings + 102 tests).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
nrupard scheduled this pull request to auto merge when all checks succeed 2026-07-13 19:49:24 +02:00
nrupard deleted branch feat/BUNYIP-358-download-instructions 2026-07-13 20:04:19 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/bunyip!366
No description provided.