diff --git a/cmd/ci/ci.go b/cmd/ci/ci.go index f1400ee..350995f 100644 --- a/cmd/ci/ci.go +++ b/cmd/ci/ci.go @@ -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) } diff --git a/cmd/ci/ci_test.go b/cmd/ci/ci_test.go new file mode 100644 index 0000000..944c1cf --- /dev/null +++ b/cmd/ci/ci_test.go @@ -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") +} diff --git a/pkg/release/config.go b/pkg/release/config.go index ee1b34c..597523a 100644 --- a/pkg/release/config.go +++ b/pkg/release/config.go @@ -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() diff --git a/pkg/release/config_test.go b/pkg/release/config_test.go index 911a0a8..4e57a0b 100644 --- a/pkg/release/config_test.go +++ b/pkg/release/config_test.go @@ -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")