Merge pull request #118 from SomtochiAma/quay-webhook

Add quay webhook
This commit is contained in:
Stefan Prodan 2021-01-15 15:06:14 +02:00 committed by GitHub
commit 830e4bc91e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 3 deletions

View File

@ -27,7 +27,7 @@ import (
type ReceiverSpec struct {
// Type of webhook sender, used to determine
// the validation procedure and payload deserialization.
// +kubebuilder:validation:Enum=generic;github;gitlab;bitbucket;harbor;dockerhub
// +kubebuilder:validation:Enum=generic;github;gitlab;bitbucket;harbor;dockerhub;quay
// +required
Type string `json:"type"`
@ -69,6 +69,7 @@ const (
BitbucketReceiver string = "bitbucket"
HarborReceiver string = "harbor"
DockerHubReceiver string = "dockerhub"
QuayReceiver string = "quay"
)
func ReceiverReady(receiver Receiver, reason, message, url string) Receiver {

View File

@ -109,6 +109,7 @@ spec:
- bitbucket
- harbor
- dockerhub
- quay
type: string
required:
- resources

View File

@ -48,7 +48,7 @@ with an exponential backoff of maximum 30 seconds.
The notification controller handles webhook requests on a dedicated port.
This port can be used to create a Kubernetes LoadBalancer Service or
Ingress to expose the receiver endpoint outside the cluster
to be accessed by GitHub, GitLab, Bitbucket, Harbor, DockerHub, Jenkins, etc.
to be accessed by GitHub, GitLab, Bitbucket, Harbor, DockerHub, Jenkins, Quay, etc.
Receiver API:

View File

@ -9,7 +9,7 @@ reconciliation for a group of resources.
type ReceiverSpec struct {
// Type of webhook sender, used to determine
// the validation procedure and payload deserialization.
// +kubebuilder:validation:Enum=generic;github;gitlab;harbor;dockerhub
// +kubebuilder:validation:Enum=generic;github;gitlab;harbor;dockerhub;quay
// +required
Type string `json:"type"`
@ -44,6 +44,7 @@ const (
BitbucketReceiver string = "bitbucket"
HarborReceiver string = "harbor"
DockerHubReceiver string = "dockerhub"
QuayReceiver string = "quay"
)
```
@ -181,6 +182,23 @@ spec:
name: webapp
```
### Quay receiver
```yaml
apiVersion: notification.toolkit.fluxcd.io/v1beta1
kind: Receiver
metadata:
name: quay-receiver
namespace: default
spec:
type: quay
secretRef:
name: webhook-token
resources:
- kind: ImageRepository
name: webapp
```
### Generic receiver
```yaml

View File

@ -175,6 +175,21 @@ func (s *ReceiverServer) validate(ctx context.Context, receiver v1beta1.Receiver
s.logger.Info("handling Bitbucket server event: "+event, "receiver", receiver.Name)
return nil
case v1beta1.QuayReceiver:
type payload struct {
DockerUrl string `json:"docker_url"`
UpdatedTags []string `json:"updated_tags"`
}
var p payload
if err := json.NewDecoder(r.Body).Decode(&p); err != nil {
return fmt.Errorf("cannot decode Quay webhook payload")
}
s.logger.Info(
fmt.Sprintf("handling event from %s", p.DockerUrl),
"receiver", receiver.Name)
return nil
case v1beta1.HarborReceiver:
if r.Header.Get("Authorization") != token {
return fmt.Errorf("the Harbor Authorization header value does not match the receiver token")