From b75e0ad2203fc16978d066bff9ccc9033a0de48b Mon Sep 17 00:00:00 2001 From: Michelangelo Mori Date: Wed, 22 May 2024 12:05:19 +0200 Subject: [PATCH] Fix erroneous lookup in github webhook handler. While adding tests I erroneously changed a lookup in a package event json from ".package.package_version.container_metadata.tag.name" to ".package.package_version.tag_name", which turned out to be both (a) the wrong thing to do and (b) causing an internal server error because "tag_name" field is not available (anymore?) for package events. --- .../controlplane/handlers_githubwebhooks.go | 8 +-- .../handlers_githubwebhooks_test.go | 56 ++++++++++++++++--- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/internal/controlplane/handlers_githubwebhooks.go b/internal/controlplane/handlers_githubwebhooks.go index 864c6930a7..60cc98808c 100644 --- a/internal/controlplane/handlers_githubwebhooks.go +++ b/internal/controlplane/handlers_githubwebhooks.go @@ -712,13 +712,7 @@ func extractArtifactVersionFromPayload(ctx context.Context, payload map[string]a if err != nil { return nil, err } - // Previous lookup was done at this path - // ".package.package_version.container_metadata.tag.name", - // which is unfortunately not have available under go-github, - // as field "container_metadata" is missing form its structs. - // I suggest using the following, although it's still to be - // verified whether that's the right one. - tag, err := util.JQReadFrom[string](ctx, ".package.package_version.tag_name", payload) + tag, err := util.JQReadFrom[string](ctx, ".package.package_version.container_metadata.tag.name", payload) if err != nil { return nil, err } diff --git a/internal/controlplane/handlers_githubwebhooks_test.go b/internal/controlplane/handlers_githubwebhooks_test.go index e4ecdbfd24..63522bf540 100644 --- a/internal/controlplane/handlers_githubwebhooks_test.go +++ b/internal/controlplane/handlers_githubwebhooks_test.go @@ -507,16 +507,21 @@ func (s *UnitTestSuite) TestHandlGitHubWebHook() { // https://docs.github.com/en/webhooks/webhook-events-and-payloads#package event: "package", // https://pkg.go.dev/github.com/google/go-github/v62@v62.0.0/github#PackageEvent - payload: &github.PackageEvent{ + payload: &packageEvent{ Action: github.String("published"), - Package: &github.Package{ + Package: &pkg{ Name: github.String("package-name"), PackageType: github.String("package-type"), // .package.package_version.container_metadata.tag.name - PackageVersion: &github.PackageVersion{ + PackageVersion: &packageVersion{ ID: github.Int64(1), Version: github.String("version"), - TagName: github.String("tagname"), + ContainerMedatata: &containerMetadata{ + Tag: &tag{ + Digest: github.String("digest"), + Name: github.String("tag"), + }, + }, }, Owner: &github.User{ Login: github.String("login"), @@ -540,15 +545,21 @@ func (s *UnitTestSuite) TestHandlGitHubWebHook() { // https://docs.github.com/en/webhooks/webhook-events-and-payloads#package event: "package", // https://pkg.go.dev/github.com/google/go-github/v62@v62.0.0/github#PackageEvent - payload: &github.PackageEvent{ + payload: &packageEvent{ Action: github.String("updated"), - Package: &github.Package{ + Package: &pkg{ Name: github.String("package-name"), PackageType: github.String("package-type"), - PackageVersion: &github.PackageVersion{ + // .package.package_version.container_metadata.tag.name + PackageVersion: &packageVersion{ ID: github.Int64(1), Version: github.String("version"), - TagName: github.String("tagname"), + ContainerMedatata: &containerMetadata{ + Tag: &tag{ + Digest: github.String("digest"), + Name: github.String("tag"), + }, + }, }, Owner: &github.User{ Login: github.String("login"), @@ -1955,6 +1966,35 @@ type garbage struct { Garbage *string `json:"garbage,omitempty"` } +type packageEvent struct { + Action *string `json:"action,omitempty"` + Repo *github.Repository `json:"repository,omitempty"` + Org *github.Organization `json:"org,omitempty"` + Package *pkg `json:"package,omitempty"` +} + +type pkg struct { + Name *string `json:"name,omitempty"` + PackageType *string `json:"package_type,omitempty"` + PackageVersion *packageVersion `json:"package_version,omitempty"` + Owner *github.User `json:"owner,omitempty"` +} + +type packageVersion struct { + ID *int64 `json:"id,omitempty"` + Version *string `json:"version,omitempty"` + ContainerMedatata *containerMetadata `json:"container_metadata,omitempty"` +} + +type containerMetadata struct { + Tag *tag `json:"tag,omitempty"` +} + +type tag struct { + Digest *string `json:"digest,omitempty"` + Name *string `json:"name,omitempty"` +} + type branchProtectionConfigurationEvent struct { Action *string `json:"action,omitempty"` Repo *github.Repository `json:"repo,omitempty"`