Migration: release providers → go/forge¶
The release layer has been extracted:
| What | Now lives in |
|---|---|
Provider, Release, ReleaseAsset, the registry, ReleaseSourceConfig |
gitlab.com/phpboyscout/go/forge |
Token resolution (ResolveToken, TokenConfig, AuthConfig) |
gitlab.com/phpboyscout/go/forge |
releasetest |
gitlab.com/phpboyscout/go/forge/test |
| Published mocks | gitlab.com/phpboyscout/go/forge/mocks |
direct provider |
gitlab.com/phpboyscout/go/forge/direct |
| GitHub / GitLab / Gitea+Codeberg / Bitbucket providers | go/forge-github, -gitlab, -gitea, -bitbucket |
Auth moved with the contract deliberately: it lived in pkg/vcs while the
contract lived in pkg/vcs/release, and every real provider needs both. Shipping
them apart would force an out-of-tree provider author back onto go-tool-base.
Repoint imports¶
-import "gitlab.com/phpboyscout/go-tool-base/pkg/vcs/release"
-import "gitlab.com/phpboyscout/go-tool-base/pkg/vcs"
+import "gitlab.com/phpboyscout/go/forge"
release.Provider → forge.Provider, vcs.ResolveToken → forge.ResolveToken,
and so on. The symbols keep their names.
Mocks and the test double follow suit — alias the imports, since a bare mocks
or test collides:
-import mockRelease "gitlab.com/phpboyscout/go-tool-base/mocks/pkg/vcs/release"
-import "gitlab.com/phpboyscout/go-tool-base/pkg/vcs/release/releasetest"
+import mockRelease "gitlab.com/phpboyscout/go/forge/mocks"
+import forgetest "gitlab.com/phpboyscout/go/forge/test"
Provider imports¶
Providers now register from their own modules:
-import _ "gitlab.com/phpboyscout/go-tool-base/pkg/vcs/gitlab"
+import _ "gitlab.com/phpboyscout/go/forge-gitlab"
A tool supporting one forge can now import only that provider and shed the other vendor clients entirely — which is the point of the split.
Register returns an error¶
It no longer overwrites a duplicate source type silently:
-forge.Register("s3", factory)
+if err := forge.Register("s3", factory); err != nil {
+ panic("myforge: " + err.Error())
+}
Silent overwriting let one blank import displace another with no diagnostic, and
initialisation order decided the winner. Use forge.Unregister to replace a
provider deliberately, or forge.Registered to register conditionally.
What stayed in GTB¶
pkg/vcs.ConfigFromContainable— thego/configbridge to the narrowforge.Configseam.pkg/vcs/github— removed in a later wave. The auth and SSH-key-upload paths GTB actually used (the OAuth device-login flow, SSH key upload) moved into the forge provider capabilities consumed bypkg/setup/forge. The wider, unused client surface — pull requests, repository creation, file contents — was deleted rather than carried; giving one forge those capabilities while the others lack them is deferred to thego/forgeprovider-contract-widening spec, to be restored across every provider in lockstep in a future wave.pkg/vcs/repo— the props/config adapters forgo/repo.
Three package-level tunables were removed¶
setup.MaxChecksumsSize, setup.MaxBinaryDownloadSize and
setup.DefaultRequireChecksum were exported mutable variables. They are gone.
They raced under t.Parallel() — two tests had to run serially because of it —
and scoped a setting to the whole process rather than to the updater that needed
it.
Size bounds are now constants plus per-updater options:
-setup.MaxBinaryDownloadSize = 2 << 30
+setup.NewUpdater(ctx, props, "", false, setup.WithMaxBinaryDownloadSize(2<<30))
setup.DefaultMaxChecksumsSize and setup.DefaultMaxBinaryDownloadSize hold the
defaults. WithMaxChecksumsSize and WithMaxBinaryDownloadSize raise them.
Checksum enforcement moves to the tool-author baseline on props, beside the
other baselines like UpdatePolicy:
-func init() { setup.DefaultRequireChecksum = true }
+requireChecksum := true
+props.Tool.Signing.RequireChecksum = &requireChecksum
It is a pointer so "unset" stays distinguishable from "explicitly false". Runtime
update.require_checksum config still overrides it, and the precedence is
otherwise unchanged.
Documentation¶
- Release contract, credential chain, authoring guide: forge.go.phpboyscout.uk
- Per-provider config keys and capabilities: providers reference
- GTB wiring: VCS component page