Skip to content

Commit 0007867

Browse files
authored
fix: add optional --run-date flag for deterministic changelog tests (#957)
1 parent 6b1ccc4 commit 0007867

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

tools/cli/internal/changelog/changelog.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ type Change struct {
108108
// The returned entries includes all the changes between the base and revision specs included the one
109109
// marked as hidden.
110110
func NewEntries(basePath, revisionPath, exceptionFilePath string) ([]*Entry, error) {
111+
return NewEntriesWithRunDate(basePath, revisionPath, exceptionFilePath, time.Now().Format("2006-01-02"))
112+
}
113+
114+
// NewEntriesWithRunDate generates the changelog entries with a specific run date.
115+
func NewEntriesWithRunDate(basePath, revisionPath, exceptionFilePath, runDate string) ([]*Entry, error) {
111116
baseMetadata, err := newMetadataFromFile(basePath)
112117
if err != nil {
113118
return nil, err
@@ -120,7 +125,7 @@ func NewEntries(basePath, revisionPath, exceptionFilePath string) ([]*Entry, err
120125
}
121126
log.Printf("Revision Metadata: %s", newStringFromStruct(revisionMetadata))
122127

123-
revisionMetadata.RunDate = time.Now().Format("2006-01-02")
128+
revisionMetadata.RunDate = runDate
124129

125130
baseActiveVersionOnPreviousRunDate, err := latestVersionActiveOnDate(baseMetadata.RunDate, baseMetadata.Versions)
126131
if err != nil {
@@ -208,7 +213,12 @@ func NewEntries(basePath, revisionPath, exceptionFilePath string) ([]*Entry, err
208213
// The returned entries includes the changes between the base and revision specs that are not
209214
// marked as hidden.
210215
func NewEntriesWithoutHidden(basePath, revisionPath, exceptionFilePath string) ([]*Entry, error) {
211-
entries, err := NewEntries(basePath, revisionPath, exceptionFilePath)
216+
return NewEntriesWithoutHiddenWithRunDate(basePath, revisionPath, exceptionFilePath, time.Now().Format("2006-01-02"))
217+
}
218+
219+
// NewEntriesWithoutHiddenWithRunDate generates the changelog entries with a specific run date.
220+
func NewEntriesWithoutHiddenWithRunDate(basePath, revisionPath, exceptionFilePath, runDate string) ([]*Entry, error) {
221+
entries, err := NewEntriesWithRunDate(basePath, revisionPath, exceptionFilePath, runDate)
212222
if err != nil {
213223
return nil, err
214224
}
@@ -218,6 +228,11 @@ func NewEntriesWithoutHidden(basePath, revisionPath, exceptionFilePath string) (
218228

219229
// NewEntriesBetweenRevisionVersions generates the changelog entries between the revision versions.
220230
func NewEntriesBetweenRevisionVersions(revisionPath, exceptionFilePath string) ([]*Entry, error) {
231+
return NewEntriesBetweenRevisionVersionsWithRunDate(revisionPath, exceptionFilePath, time.Now().Format("2006-01-02"))
232+
}
233+
234+
// NewEntriesBetweenRevisionVersionsWithRunDate generates the changelog entries between the revision versions with a specific run date.
235+
func NewEntriesBetweenRevisionVersionsWithRunDate(revisionPath, exceptionFilePath, runDate string) ([]*Entry, error) {
221236
revisionMetadata, err := newMetadataFromFile(revisionPath)
222237
if err != nil {
223238
return nil, err
@@ -231,7 +246,7 @@ func NewEntriesBetweenRevisionVersions(revisionPath, exceptionFilePath string) (
231246
continue
232247
}
233248

234-
entry, err := newEntriesBetweenVersion(revisionMetadata, fromVersion, toVersion, exceptionFilePath)
249+
entry, err := newEntriesBetweenVersionWithRunDate(revisionMetadata, fromVersion, toVersion, exceptionFilePath, runDate)
235250
if err != nil {
236251
return nil, err
237252
}
@@ -242,19 +257,19 @@ func NewEntriesBetweenRevisionVersions(revisionPath, exceptionFilePath string) (
242257
return newVersionEntries(entries), nil
243258
}
244259

245-
func newEntriesBetweenVersion(metadata *Metadata, fromVersion, toVersion, exceptionFilePath string) (*Entry, error) {
260+
func newEntriesBetweenVersionWithRunDate(metadata *Metadata, fromVersion, toVersion, exceptionFilePath, runDate string) (*Entry, error) {
246261
baseMetadata := &Metadata{
247262
Path: metadata.Path,
248263
ActiveVersion: fromVersion,
249-
RunDate: time.Now().Format("2006-01-02"),
264+
RunDate: runDate,
250265
SpecRevision: metadata.SpecRevision,
251266
Versions: metadata.Versions,
252267
}
253268

254269
revisionMetadata := &Metadata{
255270
Path: metadata.Path,
256271
ActiveVersion: toVersion,
257-
RunDate: time.Now().Format("2006-01-02"),
272+
RunDate: runDate,
258273
SpecRevision: metadata.SpecRevision,
259274
Versions: metadata.Versions,
260275
}

tools/cli/internal/cli/changelog/create.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package changelog
1717
import (
1818
"fmt"
1919
"log"
20+
"time"
2021

2122
"github.com/mongodb/openapi/tools/cli/internal/changelog"
2223
"github.com/mongodb/openapi/tools/cli/internal/cli/flag"
@@ -41,10 +42,20 @@ type Opts struct {
4142
exceptionsPaths string
4243
outputPath string
4344
dryRun bool
45+
runDate string
4446
}
4547

4648
func (o *Opts) Run() error {
47-
entries, err := changelog.NewEntries(o.basePath, o.revisionPath, o.exceptionsPaths)
49+
runDate := time.Now().Format("2006-01-02")
50+
if o.runDate != "" {
51+
// Validate the provided run date format
52+
if _, err := time.Parse("2006-01-02", o.runDate); err != nil {
53+
return fmt.Errorf("invalid run date format: %w. Use YYYY-MM-DD format", err)
54+
}
55+
runDate = o.runDate
56+
}
57+
58+
entries, err := changelog.NewEntriesWithRunDate(o.basePath, o.revisionPath, o.exceptionsPaths, runDate)
4859
if err != nil {
4960
return err
5061
}
@@ -54,7 +65,7 @@ func (o *Opts) Run() error {
5465
return err
5566
}
5667

57-
versionedEntries, err := changelog.NewEntriesBetweenRevisionVersions(o.revisionPath, o.exceptionsPaths)
68+
versionedEntries, err := changelog.NewEntriesBetweenRevisionVersionsWithRunDate(o.revisionPath, o.exceptionsPaths, runDate)
5869
if err != nil {
5970
return err
6071
}
@@ -141,6 +152,7 @@ func CreateBuilder() *cobra.Command {
141152
cmd.Flags().StringVarP(&opts.exceptionsPaths, flag.ExemptionFilePath, flag.ExemptionFilePathShort, "", usage.ExemptionFilePath)
142153
cmd.Flags().BoolVarP(&opts.dryRun, flag.DryRun, flag.DryRunShort, false, usage.DryRun)
143154
cmd.Flags().StringVarP(&opts.outputPath, flag.Output, flag.OutputShort, "", usage.Output)
155+
cmd.Flags().StringVar(&opts.runDate, "run-date", "", "Fixed run date for testing (YYYY-MM-DD format)")
144156

145157
_ = cmd.MarkFlagRequired(flag.Base)
146158
_ = cmd.MarkFlagRequired(flag.Revision)

tools/cli/test/e2e/cli/changelog_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ func TestChangelog(t *testing.T) {
140140
exemptions,
141141
"-o",
142142
commandOut,
143+
"--run-date",
144+
"2025-06-15", // Fixed date after base run date but before sunset date
143145
)
144146

145147
var o, e bytes.Buffer

0 commit comments

Comments
 (0)