feat(ci): scaffold sdk config in init

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-01 19:49:09 +00:00
parent e8fa26b5d2
commit 2ea501c5bc
4 changed files with 61 additions and 1 deletions

View file

@ -157,6 +157,10 @@ func runCIReleaseInit() error {
return cli.Err("%s: %w", i18n.T("i18n.fail.get", "working directory"), err)
}
return runCIReleaseInitInDir(cwd)
}
func runCIReleaseInitInDir(cwd string) error {
cli.Print("%s %s\n\n", dimStyle.Render(i18n.Label("init")), i18n.T("cmd.ci.init.initializing"))
if release.ConfigExists(cwd) {
@ -164,7 +168,7 @@ func runCIReleaseInit() error {
return nil
}
cfg := release.DefaultConfig()
cfg := release.ScaffoldConfig()
if err := release.WriteConfig(cfg, cwd); err != nil {
return cli.Err("%s: %w", i18n.T("i18n.fail.create", "config"), err)
}

26
cmd/ci/ci_test.go Normal file
View file

@ -0,0 +1,26 @@
package ci
import (
"testing"
"dappco.re/go/core/build/internal/ax"
"dappco.re/go/core/build/pkg/release"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCI_runCIReleaseInitInDir_Good(t *testing.T) {
projectDir := t.TempDir()
err := runCIReleaseInitInDir(projectDir)
require.NoError(t, err)
configPath := release.ConfigPath(projectDir)
content, err := ax.ReadFile(configPath)
require.NoError(t, err)
assert.Contains(t, string(content), "sdk:")
assert.Contains(t, string(content), "spec: api/openapi.yaml")
assert.Contains(t, string(content), "languages:")
assert.Contains(t, string(content), "- typescript")
}

View file

@ -277,6 +277,23 @@ func DefaultConfig() *Config {
}
}
// ScaffoldConfig returns the config shape written by `core ci init`.
//
// cfg := release.ScaffoldConfig()
func ScaffoldConfig() *Config {
cfg := DefaultConfig()
cfg.SDK = &SDKConfig{
Spec: "api/openapi.yaml",
Languages: []string{"typescript", "python", "go", "php"},
Output: "sdk",
Diff: SDKDiffConfig{
Enabled: true,
FailOnBreaking: false,
},
}
return cfg
}
// applyDefaults fills in default values for any empty fields in the config.
func applyDefaults(cfg *Config) {
defaults := DefaultConfig()

View file

@ -232,6 +232,19 @@ func TestConfig_DefaultConfig_Good(t *testing.T) {
})
}
func TestConfig_ScaffoldConfig_Good(t *testing.T) {
t.Run("returns documented init scaffold", func(t *testing.T) {
cfg := ScaffoldConfig()
require.NotNil(t, cfg.SDK)
assert.Equal(t, "api/openapi.yaml", cfg.SDK.Spec)
assert.Equal(t, []string{"typescript", "python", "go", "php"}, cfg.SDK.Languages)
assert.Equal(t, "sdk", cfg.SDK.Output)
assert.True(t, cfg.SDK.Diff.Enabled)
assert.False(t, cfg.SDK.Diff.FailOnBreaking)
})
}
func TestConfig_ConfigPath_Good(t *testing.T) {
t.Run("returns correct path", func(t *testing.T) {
path := ConfigPath("/project/root")