Feat/portal serving#302
Merged
Merged
Conversation
2 tasks
das-Abroxas
previously approved these changes
Jul 3, 2026
das-Abroxas
left a comment
Contributor
There was a problem hiding this comment.
I like the idea to give Aruna a clean way to serve an optional portal without hardwiring a frontend directly into the core application. This enables node operators to easily link their custom service to Aruna. Lgtm 👍
das-Abroxas
approved these changes
Jul 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds artifact-backed portal serving to Aruna nodes. Nodes can now expose the portal from their existing HTTP server, install/update portal release artifacts, report portal runtime status via
/api/v1/info, and support local preview/Docker workflows.Changes
api_versionandportalstatus fields toGET /api/v1/info.ServerState, including install status, artifact URL, checksum, version/source metadata, fetch timestamp, and last error.PORTAL_MODE=disabled|artifactandPORTAL_DIRconfiguration.PORTAL_ARTIFACT_URLand optionalPORTAL_ARTIFACT_SHA256pinning for artifact mode.${PORTAL_ARTIFACT_URL}.sha256from the release, verifies the tarball against that sidecar, and stores the sidecar inPORTAL_DIR.PORTAL_DIR/index.htmlalready exists, which supports embedded or preinstalled portals.index.html./usingtower_http::services::ServeDir./portal-config.jsonwith runtime API base URL for the built portal.Cache-Control: no-cachefor portal index/deep-link responses.Cache-Control: public, max-age=31536000, immutablefor/assets/*files./assets/*files as404instead of falling back to the SPA.aruna-doctor portal updateto force-refreshPORTAL_DIRfrom the configured or provided portal artifact URL.PORTAL_EMBED_DIR, with runtime defaultsPORTAL_DIR=/run/portaland configurablePORTAL_MODE.just previewandjust preview-no-oidcrecipes that run local preview clusters with--portal-dir.scripts/local_cluster_deploy.shto passPORTAL_MODE=artifact,PORTAL_DIR, and local CORS origins into preview nodes.Resolved Issues
.sha256sidecar, Docker embedding, and local preview deployment flows.Notes
PORTAL_DIST_PATH;PORTAL_DIRis the configured install/serve directory.PORTAL_DIRalready containsindex.html, startup serves it immediately and does not download.PORTAL_ARTIFACT_SHA256is optional. When set, it pins the expected checksum from the downloaded.sha256sidecar..sha256file inPORTAL_DIRis used to populate/api/v1/info.portal.checksumfor installed or embedded portals.