Repository navigation
Serve Helm charts from the OCI registry only, with a chart page in the web UI - #435
Merged
Merged
Conversation
Helm charts are pushed to docker repositories (`helm push`, Helm 3.8+) and installed from there (`helm install oci://…`). Classic chart repositories (`index.yaml`, ChartMuseum uploads) are no longer a format of the server: the Helm plugin is not built in, the web UI drops its `helm repo add` snippets, and the Nexus import no longer copies Helm repositories. `plugins/helm` stays as the example plugin the format-plugin tests run, built in for the test and as a WebAssembly component; `xtask plugins` counts only the server's own dependencies as built in. An image of Helm charts gets a page of its own: the versions, newest release first by SemVer, the `helm install` and `helm pull` commands of the selected one with the `helm registry login` to run first, its Chart.yaml facts, README and default values. `GET /browse/chart` reads them from the chart's config blob and archive (`forge_oci::chart`: bounded metadata, a minimal tar reader that finds the README and values.yaml the way Helm's loader does, at most 100 MiB unpacked and 512 KiB shown per file), through groups, and from a proxy once the chart has been pulled through it. CI's oci-e2e job builds the pinned helm and drives a chart with it: registry login, push, pull, a version range, show and template, the browse API, and pulls through the proxy of the registry:2 upstream and the group, which also takes a push to its writable member. Fixes #43 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JpCggxduZYrAYTnobHTzhY
|
I have read the CLA Document and I hereby sign the CLA You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot. |
Member
Author
|
I have read the CLA Document and I hereby sign the CLA |
Conflicts in DEVELOPMENT.md (main's "every format lives in plugins/" next to this branch's example plugin) and the Edit screen's doc comment (main's retention link next to the Nexus import without Helm). Main's new Helm mentions follow this branch: fragment 422 (a classic Helm fix) is dropped, 283 and the retention UI name NuGet only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JpCggxduZYrAYTnobHTzhY
schmitch
enabled auto-merge
October 23, 2026 23:51
schmitch
pushed a commit
that referenced
this pull request
Oct 23, 2026
Brings in main via #435. The Helm plugin's files and the WebAssembly plugin tests stay deleted; main's #283 test there (a proxy of an unreachable upstream answers 503) moves to group_proxy.rs with its NuGet half. Main's new "every format lives in plugins/" text in AGENTS.md, README.md and DEVELOPMENT.md now says plugins are linked into the server. A leftover [plugins] section is now ignored, like any other unknown top-level key, rather than refused at startup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JpCggxduZYrAYTnobHTzhY
This was referenced Oct 24, 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.
Fixes #43
Helm charts are pushed to and installed from docker repositories (
helm push,helm install oci://…). Forge no longer serves classic chart repositories (index.yaml, ChartMuseum uploads). 2.0.0 is a breaking release, so no upgrade note is written for this.Classic chart repositories removed
helmis gone fromGET /admin/formats, the web UI's format badge and connect/install snippets, and the Nexus import (nugetanddockeronly).plugins/helmstays as the example plugin the format-plugin tests run, built in for the test and as a WebAssembly component.forge-serverkeeps it as a dev-dependency only.xtask pluginsnow counts only the server's[dependencies]as built in. Remove WebAssembly format plugins and Wasmtime: built-in plugins only #440 (stacked on this) removes it with WebAssembly plugins altogether.example/acmeformat. The e2e Nexus import drops its Helm scenario.OCI charts
GET /browse/chart?repo=&image=&digest=(browse_images.rs) returns the chart'sChart.yamlmetadata (from the config blob), its README and itsvalues.yaml(from the chart archive), with the same authorization as the image browse: signed in, read on the repository, content selectors, group members by priority, offline repositories.archive_stored: falseuntil the chart has been pulled through it.forge_oci::chartholds the Helm media types and keeps a bounded subset of the metadata: strings up to 4 KiB, lists up to 100 entries. A small tar reader (ustar, GNU long names, pax paths) finds the chart's top-level README andvalues.yamlthe way Helm's loader does.helm installandhelm pullfor the selected version, with thehelm registry loginto run first.docs/docker.md#helm-chartscovers the commands, proxies and groups.docs/format-plugins.md, the README,DEVELOPMENT.md,AGENTS.mdandplugins/README.mddescribeplugins/helmas the example plugin.CI
The
oci-e2ejob builds the pinned Helm v4.3.1, the samego installand cache as the kubernetes job. The script then runs:helm push, andhelm pull, checked byte for byte;~1.2version range,helm show chartandhelm template;registry:2upstream and pulls through the group;Admin screen
No admin API changes. The new endpoint is a browse API, and its screen is the image page.
Tests run locally
cargo fmt --all --check;cargo clippy --workspace --all-targets -- -D warnings;cargo clippy -p forge-e2e --features forge-e2e --tests -- -D warnings;cargo xtask plugins-check;cargo xtask changelog --checkcargo test -p forge-oci --lib chart(5 new unit tests);cargo test -p xtask;cargo test -p forge-server --libcargo test -p forge-server --test registry(32, including the newhelm_charts_are_browsablefor hosted, group and proxy before and after a pull),--test plugins(13),--test browse,--test plugin_contract,--test nexus_importpnpm run tsc,pnpm run test(399),pnpm run buildoci-e2e.sh(with the script's setup) against a liveforge-serverwith Helm v4.3.1, crane and aregistry:2upstream. The other steps of the script (conformance suite, buildx, cosign) were not run locally.forge-e2esuite, including the Nexus import against a real Nexus.🤖 Generated with Claude Code
https://claude.ai/code/session_01JpCggxduZYrAYTnobHTzhY