PSA/ee/docs/extension-system/e2e-minio-walkthrough.md
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

5.3 KiB
Raw Permalink Blame History

MinIO E2E Walkthrough: Upload → Finalize → List

This document provides a concrete, step-by-step manual validation flow for uploading an extension bundle to S3-compatible storage (MinIO), finalizing the bundle, and verifying visibility in the Extensions list using the Install page UI. Preferred path is the server-side streaming upload proxy (no direct browser→S3 PUTs) with a 200MiB cap and staging keys.

Prerequisites

  • MinIO is running and accessible.
  • The following environment variables are configured for the server:
    • STORAGE_* variables for S3/MinIO connectivity (endpoint, bucket, access key, secret, region, path-style).
    • EXT_BUNDLES_ALLOW_INSECURE=true for local RBAC bypass during manual validation, or alternatively set header x-alga-admin: true on requests.
  • RUNNER_* variables are NOT required for this walkthrough.

Step 1 — Prepare a sample bundle.tar.zst and manifest.json

  • Create a minimal manifest.json. Example: { "extension": "example.ext", "version": "1.0.0", "entry": { "wasm": "entry.wasm" }, "ui": { "basePath": "/", "assets": [] } }
  • Prepare a bundle.tar.zst file that includes at least the files your manifest references, e.g. entry.wasm (can be a placeholder for this validation) and any UI assets. The file name must be bundle.tar.zst.

Step 2 — Use the Install Page UI

  • Navigate to /msp/settings/extensions/install.
  • Fill the fields:
    • File: Select your bundle.tar.zst.
    • declaredHash (optional): Provide a known sha256 of your bundle.tar.zst if you have precomputed it.
    • contentType: application/octet-stream.
    • cache-control (optional): e.g. public, max-age=31536000 (or leave empty).
    • Manifest JSON: Paste the minimal manifest from Step 1.

Step 3 — Upload (Proxy)

  • Click upload. The server streams your file to S3 via the uploadproxy API (no direct presigned PUT). Max size: 200MiB. A staging key is returned on success.

Step 4 — Verify Upload

  • Confirm the UI shows upload completion with a returned staging key.

Step 5 — Finalize

  • Click finalize in the UI.
  • Verify the success payload includes:
    • extension: The extension identifier (e.g., example.ext).
    • version: The version from manifest.json (e.g., 1.0.0).
    • contentHash: The canonical sha256 hash computed by the server.
    • canonical key/path in S3 (see below).

Step 6 — Verify S3 Object in Canonical Location

  • In MinIO UI or using an S3 client, verify the bundle is present at: sha256//bundle.tar.zst
  • If path-style addressing is required, ensure your client is configured accordingly.

Step 7 — Verify Manifest Copy

  • Confirm manifest.json is duplicated at the canonical path alongside the bundle: sha256//manifest.json

Step 8 — Verify in Extensions List

  • Navigate to /msp/settings/extensions.
  • Confirm the newly uploaded extension and version are visible in the list.

Step 9 — Abort Flow (Optional)

  • To validate abort behavior, initiate an upload but do not finalize. Instead, trigger abort (either via UI if exposed, or via the API).
  • Verify the staging path/object (non-canonical) is cleaned up or marked aborted per implementation, and that the canonical path is not created.

Troubleshooting