feat: TEM-27 remove FileBrowser, patch HIGH/CRITICAL vulns, and harden build/release CI - #154
Conversation
|
Thanks, I reviewed the current head ( I still see three issues that should be addressed before merge:
Test gap: ROCm built successfully, but its functional result was Minor cleanup: the [pytorch-cluster Dockerfile](https://github.com/runpod/containers/blob/27b1d595ec59cf5633725bc1f9c59096614259b5/official-templates/pytorch-cluster/Dockerfile) still says that port 8080 and FileBrowser are inherited from the base image. That comment should be removed or corrected with this change. |
Keep the break-glass tag on the commit that built the images, honour a BREAKING CHANGE footer without letting squash-body feat/fix lines bump, and stop pull_request jobs committing into the release sticky-disk lineage. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Thanks, I rechecked the latest head. The version detection, PR cache isolation, source-run commit handling, and FileBrowser cleanup are all fixed, and the current tests completed with 39 PASS and 0 FAIL. One release-safety issue still remains. The manual release workflow accepts any semver tag, but it does not verify that the tag matches the version and images produced by the selected source run. A typo or mismatched tag could create a GitHub release for images that do not exist. Please derive or validate the expected tag from the source run and verify the corresponding image refs or manifests before creating the release. |
Summary
TEM-27. Removes the unused FileBrowser binary from
runpod/base, patches the outstanding CRITICAL/HIGH vulnerabilities across our image families, turns Grype into a hard gate on the families we've cleaned up, and hardens the build/release pipeline so a flaky build can no longer silently skip a release or mis-bump the version.FileBrowser is being archived on Sept 1st by upstream and ships with known, will-not-fix security advisories. We installed the binary in
basebut never started it (onlycomfyui-baseruns it), so it was pure attack surface with no benefit — dropped it.Changes
FileBrowser
start.sh, so no runtime behavior changes).Vulnerability fixes
Pillowfrom PyPI over the CVE-affected copytorchvisiondrags in from the PyTorch wheel index. Version is centralized asPILLOW_VERSIONindocker-bake.hcland only applied when Pillow is actually present (torch-only builds are untouched).node_exporter1.11.1 → 1.12.1 and Grafana 13.1.0 → 13.1.1 (Go stdlib / dependency CVEs in the embedded binaries).runpodctlv2.3.0 → v2.7.2 (Go stdlib / x-crypto CVEs).jupyterlab4.5.9 → 4.5.10,mistune3.2.1 → 3.3.0, addmsgpack==1.2.1, addsoupsieve==2.8.4,pillow12.2.0 → 12.3.0,aiohttp3.14.1 → 3.14.3.jupyterlab4.5.9 → 4.5.10, addmsgpack==1.2.1,pillow12.2.0 → 12.3.0.jupyterlab4.5.9 → 4.5.10.CI - vulnerability gating
fail-on-findingsinput (defaultfalse, report-only). Enabled (true) for the cleaned-up families:base,pytorch,nvidia. Other families stay report-only until their remaining findings are resolved.CI - build cache
useblacksmith/setup-docker-builderv1 → v2.0.1 and add a requiredcache-keyinput. Each image family uses a distinct BuildKit sticky-disk lineage; parallelpytorch/clusterCUDA shards each get their own per-shard key (…/pytorch-<cuda>,…/cluster-<cuda>). This also fixes ROCm "no space left on device" failures./prto the cache key so they cannot commit into the sticky-disk lineage used bymain/ release builds. Enabling Blacksmith sticky-disk Branch Protection in the dashboard is still recommended.CI - release correctness
feat/fix/perf/nonecome from the squash subject (PR title) only, so aci:/chore:squash whose body lists* feat:branch commits no longer phantom-bumps. A major bump istype!:in the title, or a git-trailerBREAKING CHANGE:/BREAKING-CHANGE:footer (own line, with a colon) in the description. Convention: mark breaking PRs with!in the title and preferably add the footer too; the footer alone is still major. Documented indocs/RELEASE.md;detect-bump.shis covered by.github/workflows/compute-version.yml.workflow_dispatchthat creates the git tag + GitHub Release for an already-built-and-pushed version, without rebuilding. Recovers the case where a flaky build leftreleasestuck inskipped. Requirestagandsource_run_id(the original Build and Release run). The tag is created on that run's commit, not on currentmain. Guards: dispatch frommainonly; the source run must berelease.yml+pushtomain; every job exceptrelease/changes/cleanupmust have succeeded and at least one family build ran; the SHA must still be onmain;compute-versionat that SHA must equal the requested tag; one canary image per family must resolve in the registry (docker buildx imagetools inspect); the git tag must not already exist. Shares the push-release concurrency lane.build-pytorch,build-autoresearch, andbuild-clusterrun only when their parent job issuccess. A skipped pytorch job (e.g. becausebuild-basefailed) no longer starts cluster against a missing or stale pytorch.Follow-up
OCI image labels (
org.opencontainers.image.version,org.opencontainers.image.revision, …) land in #147 (TEM-11). After a labeled version is in the registry, the manual-release inspect step can also assertimage.versionagainst the computed version andimage.revisionagainst the source-run SHA.Notes
pytorch-cluster(dcgm-exporter),rocm(base OpenSSL/Python), andautoresearch(pillow/urllib3via its ownuv.lock) still have findings that depend on upstream releases — those families remain report-only for now.