From a322f0ed6ac1c4a7607b88d77dc9a3a21b1646b5 Mon Sep 17 00:00:00 2001 From: Feng Ruohang Date: Sun, 30 Aug 2026 15:50:39 +0800 Subject: [PATCH 1/2] ci: test the upstream package floor on a coherent module graph 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 --- .github/workflows/jobs.yaml | 8 ++++++++ CHANGELOG.md | 8 ++++++++ README.md | 7 +++++++ 3 files changed, 23 insertions(+) diff --git a/.github/workflows/jobs.yaml b/.github/workflows/jobs.yaml index 8c93a819e2..cfd8217c55 100644 --- a/.github/workflows/jobs.yaml +++ b/.github/workflows/jobs.yaml @@ -63,11 +63,19 @@ jobs: go-version: 1.27.x - name: Remove the SILO package replacement and test the advertised floor run: | + # The SILO replacements are adopted as one set. pgsty/mc is the SILO + # CLI and compiles against silo-pkg's strict policy API, so dropping + # only the shared-package replacement builds a hybrid graph that no + # consumer resolves: a build without the package replacement also has + # no CLI replacement, and gets upstream minio/mc. Drop both together + # so this job tests the floor an upstream consumer really sees. go mod edit -dropreplace=github.com/minio/pkg/v3 + go mod edit -dropreplace=github.com/minio/mc go mod edit -require=github.com/minio/pkg/v3@v3.6.1 go mod tidy test "$(go list -m -f '{{.Version}}' github.com/minio/pkg/v3)" = "v3.6.1" test -z "$(go list -m -f '{{if .Replace}}{{.Replace.Path}}{{end}}' github.com/minio/pkg/v3)" + test -z "$(go list -m -f '{{if .Replace}}{{.Replace.Path}}{{end}}' github.com/minio/mc)" go vet ./... go vet -tags=testrunmain ./... go test ./... diff --git a/CHANGELOG.md b/CHANGELOG.md index 1642316a02..33c84caf20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## Unreleased + +Dependency and compatibility gates: + +- Corrected the upstream `minio/pkg` floor job to drop the CLI replacement together with the shared-package replacement. `pgsty/mc` compiles against silo-pkg's strict policy API, so removing only the shared-package replacement produced a hybrid module graph that no consumer resolves, and the job failed for a configuration Console does not offer +- Recorded that the SILO replacements are adopted as one set: a build without the shared-package replacement also has no CLI replacement and resolves upstream `github.com/minio/mc` +- Updated the shared package replacement to the reviewed silo-pkg remote-env URL scheme repair and the CLI replacement to the reviewed pre-release MCLI source + ## Release v2.2.1 Dependency alignment: diff --git a/README.md b/README.md index 47cba6226a..8c43c773f4 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,13 @@ replace ( ) ``` +These three selections are adopted as one set. `pgsty/mc` is the SILO CLI and +compiles against the SILO package's strict policy API, so a build that keeps the +CLI replacement must keep the shared-package replacement too; a build that takes +neither resolves upstream `github.com/minio/mc` and upstream `github.com/minio/pkg/v3` +together. Mixing one fork with the other project's shared package is not a +supported configuration. + The logical requirements remain on resolvable upstream versions because those requirements are part of Console's public module graph, while the replacements select the released SILO implementations for this repository's own builds. An From 9f5ff851b26caee8f6d7d4851640e7dd60a756e1 Mon Sep 17 00:00:00 2001 From: Feng Ruohang Date: Sun, 30 Aug 2026 15:58:24 +0800 Subject: [PATCH 2/2] ci: model an embedder that inherits no SILO replacement 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 --- .github/workflows/jobs.yaml | 23 +++++++++++++---------- CHANGELOG.md | 4 ++-- README.md | 13 +++++++------ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/.github/workflows/jobs.yaml b/.github/workflows/jobs.yaml index cfd8217c55..dfe12b4dc5 100644 --- a/.github/workflows/jobs.yaml +++ b/.github/workflows/jobs.yaml @@ -61,21 +61,24 @@ jobs: uses: actions/setup-go@v6 with: go-version: 1.27.x - - name: Remove the SILO package replacement and test the advertised floor - run: | - # The SILO replacements are adopted as one set. pgsty/mc is the SILO - # CLI and compiles against silo-pkg's strict policy API, so dropping - # only the shared-package replacement builds a hybrid graph that no - # consumer resolves: a build without the package replacement also has - # no CLI replacement, and gets upstream minio/mc. Drop both together - # so this job tests the floor an upstream consumer really sees. + - name: Remove the SILO replacements and test the advertised floor + run: | + # Replacements are not inherited, so an embedder that adds none of + # them resolves every dependency upstream. Model exactly that: drop + # all three SILO replacements, not just the shared package. Dropping + # the shared package alone leaves pgsty/mc, which compiles against + # silo-pkg's strict policy API; Go resolves that graph and then fails + # to build it. That partial override is a configuration Console does + # not support, so failing on it says nothing about the floor. go mod edit -dropreplace=github.com/minio/pkg/v3 go mod edit -dropreplace=github.com/minio/mc + go mod edit -dropreplace=github.com/minio/minio-go/v7 go mod edit -require=github.com/minio/pkg/v3@v3.6.1 go mod tidy test "$(go list -m -f '{{.Version}}' github.com/minio/pkg/v3)" = "v3.6.1" - test -z "$(go list -m -f '{{if .Replace}}{{.Replace.Path}}{{end}}' github.com/minio/pkg/v3)" - test -z "$(go list -m -f '{{if .Replace}}{{.Replace.Path}}{{end}}' github.com/minio/mc)" + for module in github.com/minio/pkg/v3 github.com/minio/mc github.com/minio/minio-go/v7; do + test -z "$(go list -m -f '{{if .Replace}}{{.Replace.Path}}{{end}}' "$module")" + done go vet ./... go vet -tags=testrunmain ./... go test ./... diff --git a/CHANGELOG.md b/CHANGELOG.md index 33c84caf20..ed94c541f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,8 @@ Dependency and compatibility gates: -- Corrected the upstream `minio/pkg` floor job to drop the CLI replacement together with the shared-package replacement. `pgsty/mc` compiles against silo-pkg's strict policy API, so removing only the shared-package replacement produced a hybrid module graph that no consumer resolves, and the job failed for a configuration Console does not offer -- Recorded that the SILO replacements are adopted as one set: a build without the shared-package replacement also has no CLI replacement and resolves upstream `github.com/minio/mc` +- Corrected the upstream `minio/pkg` floor job to drop all three SILO replacements rather than the shared package alone. Replacements are not inherited, so an embedder that adds none of them resolves every dependency upstream, and that is the graph the floor describes. Removing only the shared package left `pgsty/mc`, which compiles against silo-pkg's strict policy API; the job then failed on a partial override Console does not support instead of testing the floor +- Recorded that the SILO replacements are adopted as one set: `pgsty/mc` depends on the SILO package's strict policy semantics, so a build that keeps the CLI replacement must keep the shared-package replacement too - Updated the shared package replacement to the reviewed silo-pkg remote-env URL scheme repair and the CLI replacement to the reviewed pre-release MCLI source ## Release v2.2.1 diff --git a/README.md b/README.md index 8c43c773f4..36fb871a39 100644 --- a/README.md +++ b/README.md @@ -153,12 +153,13 @@ replace ( ) ``` -These three selections are adopted as one set. `pgsty/mc` is the SILO CLI and -compiles against the SILO package's strict policy API, so a build that keeps the -CLI replacement must keep the shared-package replacement too; a build that takes -neither resolves upstream `github.com/minio/mc` and upstream `github.com/minio/pkg/v3` -together. Mixing one fork with the other project's shared package is not a -supported configuration. +Adopt these selections as one set. The CLI and the shared package are coupled: +`pgsty/mc` compiles against the SILO package's strict policy API, so a build that +keeps the CLI replacement must keep the shared-package replacement too, and a +build that takes neither resolves upstream `github.com/minio/mc` and upstream +`github.com/minio/pkg/v3` together. Go will resolve a partial override that pairs +one project's CLI with the other's shared package, but Console does not support +it and does not test it. The logical requirements remain on resolvable upstream versions because those requirements are part of Console's public module graph, while the replacements