From e966f0d6881f468c3e05d74d910a6d949150e79c Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Tue, 8 Apr 2025 14:52:30 +0100 Subject: [PATCH 1/3] CLOUDP-311375: Update foascli split command to support upcoming apis --- tools/cli/internal/apiversion/version.go | 7 ++++++- tools/cli/internal/openapi/filter/extension.go | 2 +- tools/cli/internal/openapi/filter/hidden_envs.go | 4 ++-- tools/cli/internal/openapi/filter/info.go | 2 +- tools/cli/internal/openapi/filter/operations.go | 2 +- tools/cli/internal/openapi/filter/tags.go | 2 +- tools/cli/internal/openapi/filter/versioning.go | 2 +- tools/cli/internal/openapi/filter/versioning_extension.go | 2 +- 8 files changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/cli/internal/apiversion/version.go b/tools/cli/internal/apiversion/version.go index 0caad6ecbb..ee57a0e858 100644 --- a/tools/cli/internal/apiversion/version.go +++ b/tools/cli/internal/apiversion/version.go @@ -65,6 +65,10 @@ func (v *APIVersion) newVersion(version string, date time.Time) { if IsPreviewStabilityLevel(version) { v.stabilityVersion = PreviewStabilityLevel } + + if IsUpcomingStabilityLevel(version) { + v.stabilityVersion = UpcomingStabilityLevel + } } // WithVersion sets the version on the APIVersion. @@ -166,7 +170,7 @@ func (v *APIVersion) StabilityLevel() string { } func (v *APIVersion) ExactMatchOnly() bool { - return v.IsPreview() + return v.IsPreview() || v.IsUpcoming() } func (v *APIVersion) IsPreview() bool { @@ -181,6 +185,7 @@ func (v *APIVersion) IsPublicPreview() bool { return v.IsPreview() && !v.IsPrivatePreview() } +func (v *APIVersion) IsUpcoming() bool { return IsUpcomingStabilityLevel(v.stabilityVersion) } func FindMatchesFromContentType(contentType string) []string { return contentPattern.FindStringSubmatch(contentType) } diff --git a/tools/cli/internal/openapi/filter/extension.go b/tools/cli/internal/openapi/filter/extension.go index c8ccb71ecf..dc8cc7c9b7 100644 --- a/tools/cli/internal/openapi/filter/extension.go +++ b/tools/cli/internal/openapi/filter/extension.go @@ -18,7 +18,7 @@ import ( "github.com/getkin/kin-openapi/openapi3" ) -// ExtensionFilter: is a filter that removes the x-xgen-IPA-exception extension from the OpenAPI spec. +// ExtensionFilter is a filter that removes the x-xgen-IPA-exception extension from the OpenAPI spec. type ExtensionFilter struct { oas *openapi3.T metadata *Metadata diff --git a/tools/cli/internal/openapi/filter/hidden_envs.go b/tools/cli/internal/openapi/filter/hidden_envs.go index 91536ae95e..ac652a7da4 100644 --- a/tools/cli/internal/openapi/filter/hidden_envs.go +++ b/tools/cli/internal/openapi/filter/hidden_envs.go @@ -26,8 +26,8 @@ const ( hiddenEnvsExtKey = "envs" ) -// HiddenEnvsFilter: is a filter that removes paths, operations, -// request/response bodies and content types that are hidden for the target environment. +// HiddenEnvsFilter removes paths, operations, request/response bodies and content types +// that are hidden for the target environment. type HiddenEnvsFilter struct { oas *openapi3.T metadata *Metadata diff --git a/tools/cli/internal/openapi/filter/info.go b/tools/cli/internal/openapi/filter/info.go index 2d512f94e7..2def0cdba1 100644 --- a/tools/cli/internal/openapi/filter/info.go +++ b/tools/cli/internal/openapi/filter/info.go @@ -21,7 +21,7 @@ import ( "github.com/mongodb/openapi/tools/cli/internal/apiversion" ) -// InfoVersioningFilter: Filter that modifies the Info object in the OpenAPI spec with the target version. +// InfoVersioningFilter modifies the Info object in the OpenAPI spec with the target version. type InfoVersioningFilter struct { oas *openapi3.T metadata *Metadata diff --git a/tools/cli/internal/openapi/filter/operations.go b/tools/cli/internal/openapi/filter/operations.go index 5d90152b0c..b094f59cf9 100644 --- a/tools/cli/internal/openapi/filter/operations.go +++ b/tools/cli/internal/openapi/filter/operations.go @@ -18,7 +18,7 @@ import ( "github.com/getkin/kin-openapi/openapi3" ) -// OperationsFilter: is a filter that removes the x-xgen-owner-team extension from operations. +// OperationsFilter is a filter that removes the x-xgen-owner-team extension from operations. type OperationsFilter struct { oas *openapi3.T } diff --git a/tools/cli/internal/openapi/filter/tags.go b/tools/cli/internal/openapi/filter/tags.go index e48d27e0e7..b62944fb19 100644 --- a/tools/cli/internal/openapi/filter/tags.go +++ b/tools/cli/internal/openapi/filter/tags.go @@ -20,7 +20,7 @@ import ( "github.com/getkin/kin-openapi/openapi3" ) -// TagsFilter: removes tags that are not used in the operations. +// TagsFilter removes tags that are not used in the operations. type TagsFilter struct { oas *openapi3.T } diff --git a/tools/cli/internal/openapi/filter/versioning.go b/tools/cli/internal/openapi/filter/versioning.go index c33232e5a6..b78b4d9a6e 100644 --- a/tools/cli/internal/openapi/filter/versioning.go +++ b/tools/cli/internal/openapi/filter/versioning.go @@ -22,7 +22,7 @@ import ( "github.com/mongodb/openapi/tools/cli/internal/apiversion" ) -// VersioningFilter: is a filter that modifies the OpenAPI spec by removing operations and responses +// VersioningFilter is a filter that modifies the OpenAPI spec by removing paths, operations and responses // that are not supported by the target version. type VersioningFilter struct { oas *openapi3.T diff --git a/tools/cli/internal/openapi/filter/versioning_extension.go b/tools/cli/internal/openapi/filter/versioning_extension.go index fcc38c2b2c..71f01a9eab 100644 --- a/tools/cli/internal/openapi/filter/versioning_extension.go +++ b/tools/cli/internal/openapi/filter/versioning_extension.go @@ -22,7 +22,7 @@ import ( "github.com/mongodb/openapi/tools/cli/internal/apiversion" ) -// VersioningExtensionFilter: is a filter that updates the x-sunset and x-xgen-version extensions to a date string +// VersioningExtensionFilter is a filter that updates the x-sunset and x-xgen-version extensions to a date string // and deletes the x-sunset extension if the latest matched version is deprecated by hidden versions // for the target environment. type VersioningExtensionFilter struct { From b4b7c306f1f5754d1bdd554505f0feb4086b2901 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Tue, 8 Apr 2025 16:32:46 +0100 Subject: [PATCH 2/3] Update split_test.go --- tools/cli/internal/cli/split/split_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tools/cli/internal/cli/split/split_test.go b/tools/cli/internal/cli/split/split_test.go index 964d14b2d7..63efbcebc2 100644 --- a/tools/cli/internal/cli/split/split_test.go +++ b/tools/cli/internal/cli/split/split_test.go @@ -78,6 +78,26 @@ func TestSplitPrivatePreviewRun(t *testing.T) { require.Contains(t, info.Spec.Paths.Map(), "/api/atlas/v2/groups") } +func TestSplitUpcomingRun(t *testing.T) { + t.Parallel() + fs := afero.NewMemMapFs() + opts := &Opts{ + basePath: "../../../test/data/openapi_with_upcoming.json", + outputPath: "foas.yaml", + fs: fs, + env: "dev", + } + + require.NoError(t, opts.Run()) + + info, err := loadRunResultOas(fs, "foas-2025-09-22.upcoming.yaml") + require.NoError(t, err) + + // check paths has only one + require.Len(t, info.Spec.Paths.Map(), 1) + require.Contains(t, info.Spec.Paths.Map(), "/api/atlas/v2/openapi/info") +} + func TestSplitMultiplePreviewsRun(t *testing.T) { t.Parallel() fs := afero.NewMemMapFs() From 82ff5dbe042f4c4d52d162ce0cf69f975087cf10 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Wed, 9 Apr 2025 16:10:35 +0100 Subject: [PATCH 3/3] fix: addresed PR comment --- tools/cli/internal/cli/split/split_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/cli/internal/cli/split/split_test.go b/tools/cli/internal/cli/split/split_test.go index 63efbcebc2..12b3239a88 100644 --- a/tools/cli/internal/cli/split/split_test.go +++ b/tools/cli/internal/cli/split/split_test.go @@ -46,6 +46,7 @@ func TestSplitPublicPreviewRun(t *testing.T) { outputPath: "foas.yaml", fs: fs, env: "dev", + format: "yaml", } require.NoError(t, opts.Run()) @@ -66,6 +67,7 @@ func TestSplitPrivatePreviewRun(t *testing.T) { outputPath: "foas.yaml", fs: fs, env: "dev", + format: "yaml", } require.NoError(t, opts.Run()) @@ -86,6 +88,7 @@ func TestSplitUpcomingRun(t *testing.T) { outputPath: "foas.yaml", fs: fs, env: "dev", + format: "yaml", } require.NoError(t, opts.Run()) @@ -106,6 +109,7 @@ func TestSplitMultiplePreviewsRun(t *testing.T) { outputPath: "foas.yaml", env: "dev", fs: fs, + format: "yaml", } require.NoError(t, opts.Run()) @@ -144,6 +148,7 @@ func TestInjectSha_Run(t *testing.T) { fs: fs, gitSha: "123456", env: "dev", + format: "yaml", } require.NoError(t, opts.Run())