From 46aac8122c9fdcdf2b23c95336543b1a43e5649e Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Mon, 9 Jun 2025 10:02:27 +0200 Subject: [PATCH 1/3] CLOUDP-311382: Update `foas changelog metadata` command to support `upcoming` --- tools/cli/internal/changelog/changelog.go | 10 ++++++++-- .../cli/internal/cli/changelog/metadata/create.go | 7 ++++++- .../internal/cli/changelog/metadata/create_test.go | 14 +++++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/tools/cli/internal/changelog/changelog.go b/tools/cli/internal/changelog/changelog.go index 59bd4689e1..282ca05ed3 100644 --- a/tools/cli/internal/changelog/changelog.go +++ b/tools/cli/internal/changelog/changelog.go @@ -180,8 +180,8 @@ func NewEntries(basePath, revisionPath, exceptionFilePath string) ([]*Entry, err } for _, version := range changelog.RevisionMetadata.Versions { - // Skip preview versions - if apiversion.IsPreviewStabilityLevel(version) { + // Skip preview and upcoming versions + if apiversion.IsPreviewStabilityLevel(version) || apiversion.IsUpcomingStabilityLevel(version) { continue } @@ -229,6 +229,12 @@ func NewEntriesBetweenRevisionVersions(revisionPath, exceptionFilePath string) ( if apiversion.IsPreviewStabilityLevel(fromVersion) || apiversion.IsPreviewStabilityLevel(toVersion) { continue } + + // Skip upcoming preview version. It will be included in CLOUDP-315486 + if apiversion.IsUpcomingStabilityLevel(fromVersion) || apiversion.IsUpcomingStabilityLevel(toVersion) { + continue + } + entry, err := newEntriesBetweenVersion(revisionMetadata, fromVersion, toVersion, exceptionFilePath) if err != nil { return nil, err diff --git a/tools/cli/internal/cli/changelog/metadata/create.go b/tools/cli/internal/cli/changelog/metadata/create.go index a7991d98a0..138782dd29 100644 --- a/tools/cli/internal/cli/changelog/metadata/create.go +++ b/tools/cli/internal/cli/changelog/metadata/create.go @@ -17,6 +17,7 @@ package metadata import ( "encoding/json" "fmt" + "strings" "time" "github.com/mongodb/openapi/tools/cli/internal/changelog" @@ -70,7 +71,10 @@ func (o *Opts) PreRun() error { } } + // Validate that the API version use the correct date format YYYY-MM-DD for _, version := range o.versions { + // Upcoming version has the format YYYY-MM-DD.upcoming, here we remove .upcoming to validate the date format. + version = strings.ReplaceAll(version, ".upcoming", "") if _, err := time.Parse("2006-01-02", version); err != nil { return fmt.Errorf("invalid version date: %w. Make sure to use the format YYYY-MM-DD", err) } @@ -79,7 +83,8 @@ func (o *Opts) PreRun() error { return nil } -// changelog metadata create [--run-date=2024-09-22] --sha=e624d716e86f6910757b60cefdf3aa3181582d38 versions=2023-01-01,2023-02-01. +// CreateBuilder creates the Cobra command for changelog metadata create [--run-date=2024-09-22] +// --sha=e624d716e86f6910757b60cefdf3aa3181582d38 versions=2023-01-01,2023-02-01. func CreateBuilder() *cobra.Command { opts := &Opts{ fs: afero.NewOsFs(), diff --git a/tools/cli/internal/cli/changelog/metadata/create_test.go b/tools/cli/internal/cli/changelog/metadata/create_test.go index 15d2eeccdb..5d7338361f 100644 --- a/tools/cli/internal/cli/changelog/metadata/create_test.go +++ b/tools/cli/internal/cli/changelog/metadata/create_test.go @@ -28,7 +28,7 @@ func TestCreateBuild_Run(t *testing.T) { opts := &Opts{ specRevision: "11110c256dffdb163be71a3ca70854a57fad5f6f", runDate: "2024-01-01", - versions: []string{"2024-01-01"}, + versions: []string{"2024-01-01", "2024-01-01.upcoming"}, fs: fs, } @@ -47,6 +47,18 @@ func TestCreateBuild_PreRun_InvalidVersion(t *testing.T) { require.ErrorContains(t, opts.PreRun(), "invalid version date") } +func TestCreateBuild_PreRun_UpcomingVersion(t *testing.T) { + fs := afero.NewMemMapFs() + opts := &Opts{ + specRevision: "test", + runDate: "2024-01-01", + versions: []string{"2024-01-01.upcoming", "2025-01-01"}, + fs: fs, + } + + require.NoError(t, opts.PreRun()) +} + func TestCreateBuilder(t *testing.T) { test.CmdValidator( t, From 96c9f3043ab763050c7ad278f6335dfd22576233 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Mon, 9 Jun 2025 12:17:58 +0200 Subject: [PATCH 2/3] Update changelog.go --- tools/cli/internal/changelog/changelog.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cli/internal/changelog/changelog.go b/tools/cli/internal/changelog/changelog.go index 282ca05ed3..ff143d3e54 100644 --- a/tools/cli/internal/changelog/changelog.go +++ b/tools/cli/internal/changelog/changelog.go @@ -230,7 +230,7 @@ func NewEntriesBetweenRevisionVersions(revisionPath, exceptionFilePath string) ( continue } - // Skip upcoming preview version. It will be included in CLOUDP-315486 + // Skip upcoming version. It will be included in CLOUDP-315486 if apiversion.IsUpcomingStabilityLevel(fromVersion) || apiversion.IsUpcomingStabilityLevel(toVersion) { continue } From a2cd6123efa66b62b9e32d5a1b77edbfba524909 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Mon, 9 Jun 2025 12:21:46 +0200 Subject: [PATCH 3/3] addressed PR comments --- tools/cli/internal/cli/changelog/metadata/create.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/cli/internal/cli/changelog/metadata/create.go b/tools/cli/internal/cli/changelog/metadata/create.go index 138782dd29..7d9d292899 100644 --- a/tools/cli/internal/cli/changelog/metadata/create.go +++ b/tools/cli/internal/cli/changelog/metadata/create.go @@ -17,9 +17,9 @@ package metadata import ( "encoding/json" "fmt" - "strings" "time" + "github.com/mongodb/openapi/tools/cli/internal/apiversion" "github.com/mongodb/openapi/tools/cli/internal/changelog" "github.com/mongodb/openapi/tools/cli/internal/cli/flag" "github.com/mongodb/openapi/tools/cli/internal/cli/usage" @@ -73,9 +73,7 @@ func (o *Opts) PreRun() error { // Validate that the API version use the correct date format YYYY-MM-DD for _, version := range o.versions { - // Upcoming version has the format YYYY-MM-DD.upcoming, here we remove .upcoming to validate the date format. - version = strings.ReplaceAll(version, ".upcoming", "") - if _, err := time.Parse("2006-01-02", version); err != nil { + if _, err := apiversion.New(apiversion.WithVersion(version)); err != nil { return fmt.Errorf("invalid version date: %w. Make sure to use the format YYYY-MM-DD", err) } }