feat(sdk): render version templates

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-01 16:43:09 +00:00
parent 4e664e62b5
commit f7e994382c
2 changed files with 49 additions and 2 deletions

View file

@ -86,7 +86,7 @@ func New(projectDir string, config *Config) *SDK {
// s.SetVersion("v1.2.3")
func (s *SDK) SetVersion(version string) {
s.version = version
if s.config != nil {
if s.config != nil && !containsVersionTemplate(s.config.Package.Version) {
s.config.Package.Version = version
}
}
@ -148,7 +148,7 @@ func (s *SDK) GenerateLanguage(ctx context.Context, lang string) error {
SpecPath: specPath,
OutputDir: outputDir,
PackageName: s.config.Package.Name,
Version: s.config.Package.Version,
Version: s.resolvePackageVersion(),
}
core.Print(nil, "Generating %s SDK...", lang)
@ -159,3 +159,36 @@ func (s *SDK) GenerateLanguage(ctx context.Context, lang string) error {
return nil
}
// resolvePackageVersion renders the configured package version against the
// current SDK version when a template placeholder is present.
//
// resolved := s.resolvePackageVersion() // "v1.2.3" or "1.2.3-beta"
func (s *SDK) resolvePackageVersion() string {
if s == nil || s.config == nil {
return ""
}
packageVersion := s.config.Package.Version
if packageVersion == "" {
return s.version
}
if !containsVersionTemplate(packageVersion) {
return packageVersion
}
if s.version == "" {
return packageVersion
}
resolved := core.Replace(packageVersion, "{{.Version}}", s.version)
resolved = core.Replace(resolved, "{{Version}}", s.version)
return resolved
}
// containsVersionTemplate reports whether a package version uses a version
// placeholder that should be rendered at generation time.
func containsVersionTemplate(value string) bool {
return core.Contains(value, "{{.Version}}") || core.Contains(value, "{{Version}}")
}

View file

@ -31,6 +31,20 @@ func TestSDK_VersionPassedToGenerator_Good(t *testing.T) {
assert.Equal(t, "v2.0.0", s.config.Package.Version)
}
func TestSDK_VersionTemplateIsRendered_Good(t *testing.T) {
config := &Config{
Package: PackageConfig{
Name: "test-sdk",
Version: "{{.Version}}-beta",
},
}
s := New("/tmp", config)
s.SetVersion("v2.0.0")
assert.Equal(t, "{{.Version}}-beta", s.config.Package.Version)
assert.Equal(t, "v2.0.0-beta", s.resolvePackageVersion())
}
func TestSDK_DefaultConfig_Good(t *testing.T) {
cfg := DefaultConfig()
assert.Contains(t, cfg.Languages, "typescript")