From 2e9692ea46bd2df973afdf72aec89b85f2a4692a Mon Sep 17 00:00:00 2001 From: regexowl Date: Tue, 7 Jan 2025 17:17:21 +0100 Subject: [PATCH] internal: Support both DateOnly and RFC3339 format for snapshot dates This adds back support for DateOnly format of snapshot dates. --- internal/v1/handler_compose_image.go | 7 +++- internal/v1/handler_post_compose_test.go | 49 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/internal/v1/handler_compose_image.go b/internal/v1/handler_compose_image.go index 46c470789..9a8a2c47e 100644 --- a/internal/v1/handler_compose_image.go +++ b/internal/v1/handler_compose_image.go @@ -218,8 +218,13 @@ func buildRepositories(arch *distribution.Architecture, imageType ImageTypes) [] func (h *Handlers) buildRepositorySnapshots(ctx echo.Context, repoURLs []string, repoIDs []string, external bool, snapshotDate string) ([]composer.Repository, []composer.CustomRepository, error) { date, err := time.Parse(time.RFC3339, snapshotDate) + + if err != nil { + date, err = time.Parse(time.DateOnly, snapshotDate) + } + if err != nil { - return nil, nil, echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Snapshot date %s is not in RFC3339 (yyyy-mm-ddThh:mm:ssZ) format", snapshotDate)) + return nil, nil, echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Snapshot date %s is not in DateOnly (yyyy-mm-dd) or RFC3339 (yyyy-mm-ddThh:mm:ssZ) format", snapshotDate)) } repoMap, err := h.server.csClient.GetRepositories(ctx.Request().Context(), repoURLs, repoIDs, external) diff --git a/internal/v1/handler_post_compose_test.go b/internal/v1/handler_post_compose_test.go index 5d8bc8e8b..418ecc403 100644 --- a/internal/v1/handler_post_compose_test.go +++ b/internal/v1/handler_post_compose_test.go @@ -819,6 +819,55 @@ func TestComposeWithSnapshots(t *testing.T) { }, }, }, + // basic with old snapshotting date format + { + imageBuilderRequest: v1.ComposeRequest{ + Distribution: "rhel-95", + ImageRequests: []v1.ImageRequest{ + { + Architecture: "x86_64", + ImageType: v1.ImageTypesGuestImage, + SnapshotDate: common.ToPtr("1999-01-30"), + UploadRequest: v1.UploadRequest{ + Type: v1.UploadTypesAwsS3, + Options: uo, + }, + }, + }, + }, + composerRequest: composer.ComposeRequest{ + Distribution: "rhel-9.5", + ImageRequest: &composer.ImageRequest{ + Architecture: "x86_64", + ImageType: composer.ImageTypesGuestImage, + Repositories: []composer.Repository{ + { + Baseurl: common.ToPtr("https://content-sources.org/snappy/baseos"), + Rhsm: common.ToPtr(false), + Gpgkey: common.ToPtr(mocks.RhelGPG), + CheckGpg: common.ToPtr(true), + IgnoreSsl: nil, + Metalink: nil, + Mirrorlist: nil, + PackageSets: nil, + }, + { + Baseurl: common.ToPtr("https://content-sources.org/snappy/appstream"), + Rhsm: common.ToPtr(false), + Gpgkey: common.ToPtr(mocks.RhelGPG), + CheckGpg: common.ToPtr(true), + IgnoreSsl: nil, + Metalink: nil, + Mirrorlist: nil, + PackageSets: nil, + }, + }, + UploadOptions: makeUploadOptions(t, composer.AWSS3UploadOptions{ + Region: "", + }), + }, + }, + }, // 1 payload 2 custom repositories { imageBuilderRequest: v1.ComposeRequest{