Skip to content

ci: test the upstream package floor on a coherent module graph - #11

Merged
Vonng merged 2 commits into
mainfrom
fix/compat-gate-coherent-replace-set
Aug 30, 2026
Merged

ci: test the upstream package floor on a coherent module graph#11
Vonng merged 2 commits into
mainfrom
fix/compat-gate-coherent-replace-set

Conversation

@Vonng

@Vonng Vonng commented Aug 30, 2026

Copy link
Copy Markdown
Member

Problem

The Build with upstream minio/pkg v3.6.1 job fails at origin/main:

pgsty/mc@v0.0.0-20260829103737-5ed037ef4ec1/cmd/policy-validation.go:21:
    policy.Resource.IsBareARN undefined
                          :26: undefined: policy.ParseConfigStrict

Confirmed on an unmodified main (workflow_dispatch run 33301175563): that job is the only failure there.

The job dropped the shared-package replacement but kept the CLI replacement, so it built pgsty/mc against upstream github.com/minio/pkg/v3. pgsty/mc is the SILO CLI and compiles against silo-pkg's strict policy API, so that pairing cannot build. Go will resolve it — replacements are not inherited, so a downstream module can select one fork without the other — but it is an unsupported partial override, not the graph an ordinary embedder gets. An embedder that adds none of Console's replacements resolves upstream minio/mc and upstream minio/pkg/v3 together, and that graph builds.

ParseConfigStrict exists in upstream minio/pkg v3.11.0 but not v3.6.1; Resource.IsBareARN exists in no upstream version. Raising the floor would therefore not fix it.

Blast radius

This is not one red check. Permissions Tests (all 10 parts), and everything else downstream, depend on compile-binary, which depends on this job:

upstream-pkg-compat  ->  compile-binary  ->  Permissions Tests Part 1..8, A, B

On the same main run, all 10 permission-test jobs are reported skipped. So since the two deps: commits landed on 2026-08-29, the entire downstream half of Console's CI has not run at all.

It went unnoticed because this fork's workflows had only ever been started by hand: every run in the repository's history before this PR is workflow_dispatch, and the last one predates those commits.

Change

Drop all three SILO replacements rather than the shared package alone, and assert that none survives. Record the "adopted as one set" rule in the README, and add a CHANGELOG entry.

Verification

The job's script was run verbatim on this branch before pushing, and the job now passes in CI:

  • go mod tidy resolves minio/pkg/v3 v3.6.1, minio/mc v0.0.0-20251106162529-77f82e18b540, minio-go/v7 v7.3.0, all unreplaced
  • go vet ./..., go vet -tags=testrunmain ./..., go test ./... pass
  • linux/amd64 and netbsd/amd64 builds pass

Console's own source needed no change: it already honors the README promise that it avoids fork-only source APIs, and now there is a job that actually proves it.

Vonng added 2 commits August 30, 2026 15:50
The upstream minio/pkg floor job dropped the shared-package replacement but
kept the CLI replacement, so it built pgsty/mc against upstream
github.com/minio/pkg/v3. pgsty/mc is the SILO CLI and compiles against
silo-pkg's strict policy API, so that hybrid cannot build -- and no consumer
resolves it: a build without the shared-package replacement also has no CLI
replacement and gets upstream minio/mc.

Drop both replacements together and assert that neither remains, so the job
tests the graph an upstream consumer actually sees. Console's own source
already builds, vets, tests, and cross-compiles against that graph, which is
the promise this job exists to keep.

Record in the README that the SILO replacements are adopted as one set.

Signed-off-by: Feng Ruohang <rh@vonng.com>
Replacement directives are not inherited, so a module that embeds Console and
adds none of its own resolves every dependency upstream. That is the graph the
advertised floor describes, so drop all three SILO replacements rather than the
shared package alone, and assert that none of them survives.

Dropping only the shared package left pgsty/mc in the graph. pgsty/mc compiles
against the SILO package's strict policy API, so Go resolved that pairing and
then failed to build it -- the job reported a partial override Console does not
support instead of testing the floor.

Also state the coupling in the README rather than implying the pairing is
unresolvable: Go will resolve it, Console just neither supports nor tests it.

Signed-off-by: Feng Ruohang <rh@vonng.com>
@Vonng
Vonng merged commit 540461e into main Aug 30, 2026
98 of 101 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant